Sobak’s Blog 2014

Drodzy czytelnicy!

Witam Was serdecznie w roku 2014. To pierwszy wpis, ale jak widzą moi stali odwiedzający, nie tylko to się zmieniło. Po ponad 4 latach praktycznie niezmiennego wyglądu bloga doczekał się on porządnej renowacji. Co ciekawe, po ponad roku niezliczonych podejść do "super-nowej-strony", zmianach planów i akcji nudnej jak w operze mydlanej, całą przebudowę zrealizowałem w ciągu jednego dnia. Z drugiej strony zajęło mi to 18 godzin praktycznie ciągłej pracy.

Rzeczy, które zmieniłem jest tak wiele, że nawet nie będę starał się wymienić wszystkich. Na pierwszy rzut oka widać, że zmienił się wygląd strony. Jest to motyw Sorbet od firmy Automattic i mam nadzieję, że przystaje on bardziej do roku 2014 niż dobry, ale wysłużony Mystique. Motyw przerabiałem i tłumaczyłem samodzielnie, dlatego proszę o wybaczenie ewentualnych usterek i zgłoszenie ich do mnie, będę poprawiać.

Dodany został dział portfolio, który odświeża poprzednio znane projekty. Skrypty o zerowym poziomie zostały wyrzucone raz na zawsze, a te, które nadal planuję rozwijać zostały zmigrowane na GitHuba. Wtyczka do portfolio również została spolonizowana przeze mnie, poprawiłem również generowany kod HTML i dostosowałem ją do reszty bloga (m.in. walcząc z przyjaznymi adresami URL).

Jak widać został dodany widget do Twittera (tak, jego też tłumaczyłem). Zdecydowałem się mocno postawić na tę społecznościówkę, gdyż od pewnego czasu szukałem metody tworzenia krótkich wiadomości na blogu, czego oznaką były między innymi wpisy tagowane jako "mini". Dzięki Twitterowi będę mógł wrzucać mniej istotne informacje na bieżąco bez obawy o zapchanie Wam czytników RSS. Jeżeli ktoś z Was używa Twittera, to zapraszam do śledzenia mnie. Poruszane tematy będą w większości pokrywać się z tym, o czym pisuję na blogu. Można również polubić nowopowstały fanpage na Facebooku. Wszystkie odnośniki do społecznościówek można znaleźć po kliknięciu na zieloną ikonę z sercem na górze strony.

Ponownie namieszałem też z adresami URL, mam nadzieję, że teraz zostawię je w spokoju na długo, bo solidnie to przemyślałem. Według mojej wiedzy 100% poprzednich adresów posiada stosowne przekierowania, tak więc żaden link nie powinien ucierpieć, ale wiadomo, jak to wygląda w praktyce, tak więc jeżeli coś nie działa, bardzo proszę o kontakt.

Mam nadzieję, że wprowadzone zmiany przypadną Wam do gustu i spowodują, że będziecie odwiedzać moją stronę z przyjemnością. Planuję teraz zdecydowanie bardziej skupić się na treści i nie kombinować co miesiąc z technicznymi poprawkami na blogu. Content is a king, jak mawiali średniowieczni SEO-wcy. Niezależnie od tego czy chcecie wyrazić swoje zadowolenie, czy wygłosić krytykę, bardzo proszę o komentowanie. Wszelki feedback pozwala mi zorientować się w kierunku oczekiwanych zmian i daje motywację do pracy :)

Lista easter eggów na PHP.net

Witajcie,
ostrzegam od razu, że wpis zawiera spoilery.

Dziś przeglądając repozytorium git dla strony PHP.net natknąłem się na interesujący commit z dosyć oczywistym opisem easter eggs. Polecam sobie zajrzeć i sprawdzić, chyba, że ktoś nie lubi sobie psuć niespodzianek ;)

Jakby dla kogoś nie było jasne, to wystarczy po wejściu na stronę na klawiaturze wpisać (nie trzeba celować w żadne pole, strona cała przechwytuje naciśnięcia klawiszy) podane napisy, oczywiście wyrazy takie jak space czy enter zastępując naciśnięciami odpowiednich klawiszy.

Myślę, że numer całkiem udany, po I hate PHP widać, że chłopaki mają dystans do siebie.

[Mini] Kohana framework – ciekawostka

Robiłem dziś mały przegląd frameworków dla potrzeb własnych. Którymś z kolei, na który spojrzałem była Kohana. Odkładałem ją w zasadzie na koniec badania, bo nie obiła mi się o uszy żadna większa aktualizacja, odkąd zgłębiałem ją po raz ostatni.

Dla pewności wszedłem jednak na stronę, a po przejściu na listę wydań frameworka zobaczyłem taką oto notkę. Zwróćcie uwagę na koniec wsparcia:

Kohana support

Tak więc mamy w świecie PHP framework, w dodatku naprawdę znaczący (choć widać, że z oczywistych względów zainteresowanie słabnie), którego stabilna wersja nie jest wspierana :D Cytując klasyka: Wow, such support.

Minifikowanie kodu JS i CSS

Bardzo możliwe, że podczas swoich doświadczeń z tworzeniem stron WWW zetknąłeś się kiedyś z pojęciem minifikacji kodu. Mimo wszystko poczynię krótki wstęp dla osób, które nie mają pojęcia o co chodzi.

Minifikowanie lub minifikacja to proces zmniejszania objętości kodu źródłowego przy zachowaniu jego dotychczasowego działania. Jest to więc jedna z odmian kompresji. Wystarczy spojrzeć na dowolny plik CSS, JavaScript czy HTML, aby zobaczyć, że można stosunkowo łatwo zmniejszyć jego objętość, np. przez usunięcie przełamań linii, komentarzy, wcięć i tak dalej. O ile przy kodzie HTML wspomniany proces nie jest taki łatwy, bo nie możemy przecież pozbawić spacji i enterów tekstu znajdującego się pomiędzy znacznikami, to w wypadku CSS i JS zadanie jest dosyć proste.

Powstało sporo narzędzi do realizacji tego zadania, a taka forma optymalizacji stron WWW jest wysoce zalecana. Wiadomo, że lepiej wysyłać użytkownikowi jak najmniej zbędnych danych (a nasze komentarze w plikach CSS są raczej zbędne ;)).

Jednym z najlepszych narzędzi realizującym zarówno kompresje JS, jak i CSS jest YUI Compressor. Jest to program autorstwa Yahoo! napisany w Javie. Ze względu na dobre wyniki kompresji powstało wiele portów do innych języków, np. PHP. Porcja linków dla wszystkich zainteresowanych:

[PHP] Liczba PI

Skoro znalazłeś się tutaj, to prawdopodobnie dobrze wiesz czym jest liczba PI i do czego może przydać Ci się jej (przybliżona oczywiście) wartość. Dlatego pominę ten aspekt i skupię się od razu na obsłudze PI w PHP.

W PHP istnieją dwa równoznaczne sposoby pobrania liczby PI:

  • Funkcja pi() - nie przyjmuje żadnych argumentów, a dane zwraca w postaci float
  • Stała M_PI

Jak już wspomniałem oba sposoby są równoznaczne - otrzymamy ten sam wynik.
Długość rozwinięcia jest zależna od dyrektywy precision w php.ini. Domyślną wartością jest 14, co oznacza, że dokładnie tyle miejsc po przecinku będzie miała liczba PI wyświetlona którymś z podanych wyżej sposobów. Dyrektywa precision wpływa oczywiście na długość rozwinięcia wszystkich liczb zmiennoprzecinkowych (float), a nie tylko na PI. Jej maksymalna wartość zależy od środowiska, w tym między innymi od architektury procesora.

W PHP mamy także kilka innych predefiniowanych stałych zawierających liczbę PI poddaną różnym prostym operacjom. Podsumuję wszystkie dostępne możliwości listingiem kodu:

<?php
// domyślna wartość precision = 14

echo pi(); // 3.1415926535898
echo M_PI; // 3.1415926535898
// wyniki są identyczne

// Dodatkowe stałe (dodane w PHP4)
M_PI_2 = 1.57079632679489661923 // PI/2
M_PI_4 = 0.78539816339744830962 // PI/4
M_1_PI = 0.31830988618379067154 // 1/PI
M_2_PI = 0.63661977236758134308 // 2/PI
M_SQRTPI = 1.77245385090551602729 // Pierwiastek kwadratowy z PI
M_2_SQRTPI = 1.12837916709551257390 // 2/pierwiastek kwadratowy z PI (2/sqrt(pi))

Nie muszę chyba tłumaczyć, że wszystko bazuje na przybliżeniach :)

Jak z YouTube zrobiono jedno wielkie G… oogle+

Witajcie,
o zmianach na YT raz już pisałem na swoim blogu, wtedy pozytywnie. Tym razem nie będzie tak miło i przyjemnie, bo same zmiany nie są dla mnie przyjemne.

Próba siłowej integracji YouTube z serwisem Google+ trwała od dawna. Pamiętam, że na samym początku nie mogłem zrozumieć skąd wśród ludzi tak wielka moda na podpisywanie się swoim imieniem i nazwiskiem w tym serwisie - kojarzyło mi się to z planami chińskiej władzy ludowej, która chciała wprowadzić coś takiego obligatoryjnie w całej ichniej parodii internetu. Nie wiedziałem po prostu, że ludzie są zachęcani do takiej zmiany systemowo. W końcu i ja zostałem zapytany o to czy chcę posługiwać się nickiem wybranym przy tworzeniu konta na YT, czy imieniem i nazwiskiem z Konta Google, do którego potem przypisano mojego użytkownika. Wybierałem oczywiście opcję pierwszą, bo w tym czasie i tak nie występowałem prawie w internecie pod swoim imieniem i nazwiskiem, więc chodziło o zwykłe zachowanie konsekwencji.

Pytania/prośby o wybór tożsamości pojawiały się co jakiś czas - twardo wybierałem pozostanie przy nicku - mam dziwne przeczucie, że nie spotkałbym więcej tego popupa, gdybym wybrał nazwisko. Tak czy inaczej, w ostatnim czasie zostałem przez Google zmuszony do "zintegrowania" swojego kanału z usługą Google+ (w której nigdy konta nie zakładałem). Proces nie był zbyt dopracowany, gdyż od razu zauważyłem zniknięcie mojego ukochanego diabła. Postanowiłem rozejrzeć się po nowych możliwościach oferowanych przez stronę na Google+ (bo w takiej postaci zarządzało się od tego momentu kanałem) po czym poddałem się. Pewnie dało by się to ogarnąć, ale wiedziony siłą przyzwyczajenia, po 20 minutach poszukiwań, udało mi się odnaleźć w zakamarkach ustawień opcję pozwalającą na powrót do tradycyjnej postaci kanału. Jak za dotknięciem czarodziejskiej różdżki powrócił stary interfejs i avatar. Nie, nie emocjonujcie się - to było dawno, dziś takiej możliwości już nie ma.

Około tygodnia temu, nie pamiętam dokładnie, zmiana nastąpiła ponownie. Bez pytania o zgodę, tym razem obligatoryjnie. OK, pomyślałem, może dopracowali szczegóły i postanowili wdrożyć rozwiązanie dla wszystkich użytkowników. Według mnie jednak nie zmieniło się wiele, a przynajmniej nie na plus. Znów musiałem pożegnać się z avatarem (krótkie pytanie: dlaczego do cholery google+ oczekuje że avatar będzie okrągły? nie znam innego takiego serwisu).

Od strony osoby zalogowanej ta fuzja stała się prawdziwym koszmarem, nastąpiło bowiem chaotyczne rozbicie usługi na dwa serwisy. Część zarządzania kontem i kanałem mamy z poziomu YouTube, a część z poziomu G+. Tak samo powiadomienia, większość z nich widoczna jest teraz jako notyfikacje na Google+, ale część nadal wędruje do skrzynki odbiorczej. Dlaczego aby włączyć przesyłanie dłuższych filmów muszę wejść w ustawienia na YouTube, a żeby zmienić nazwę kanału, muszę skorzystać z Google+? Fakt, że oba te serwisy mają całkiem niespójne designy nie ułatwia sprawy, bo nie da się przeoczyć momentu, w którym wychodzimy z jednej usługi na drugą.

Teraz temat, który jest na tyle istotny zjebany, że trzeba mu poświęcić osobny akapit. Mianowicie komentarze. Tu też Google postanowiło na siłę wepchnąć ludziom swój serwis społecznościowy i zrobiło to w sposób maksymalnie nieprzemyślany. Wygląda na to, że od teraz część komentarzy jest widoczna jako te dodawane z poziomu Google+, a reszta z poziomu samego YT. Zniknęły łapki. Wielka tragedia, możecie powiedzieć, pewnie wielu wkurzały. Problem jednak w tym, że zniknęły nie wszędzie. Na początku myślałem, że po prostu inżynierowie Google byli zbyt leniwi i wszystkie stare komentarze zostały pozbawione ocen. To jednak kwestia szersza i bardziej skomplikowana - część nowych komentarzy można oceniać łapkami, reszty nie. Dodatkowo komentarze domyślnie są sortowane właśnie wg. ocen, co w połączeniu z tym, że większość komentarzy została pozbawiona widocznego licznika daje totalny chaos. Widać bowiem, że komentarze nie są sortowane chronologicznie, ale nie ma jednocześnie możliwości ich oceny - gdzie tu logika? Sprawa kolejna i bardzo prosta, wczytywanie "nowych super komentarzy" działających w oparciu o Google+ trwa długo. Trzeba odczekać chwilkę zanim wczyta się ta część strony - nie jest to komfortowe, tym bardziej że preloadera brak, w pierwszej chwili miejsce na komentarze jest po prostu puste. Google chwali się też wprowadzeniem poprawionych odpowiedzi na komentarze. Przecież coś takiego już było i mimo pewnych bugów jako tako działało. Teraz część komentarzy ma dopiski w starym stylu: "Ten komentarz jest odpowiedzią na komentarz użytkownika XXX", a część jest przedstawiana jako wcięty wątek dyskusji - podejrzewam, że odnosi się to do komentarzy umieszczanych z poziomu Google+. W dodatku odpowiedzi na komentarze są teraz zwijane przez co nie da się płynnie czytać dyskusji, bo co chwilę trzeba gdzieś klikać.

Cały proces zmian wygląda jak plan wymyślony wyłącznie przez dział marketingu. Strategia "Google+ idzie nam słabo więc wepchnijmy je ja siłę do YouTube, tam jest dużo więcej ludzi". Wygląda to tak jakby do realizacji nie przyłożyła ręki ani jedna osoba techniczna ani tester.

I ostatni krótki akapit, który zapobiegawczo kieruję do ludzi, którzy chcieli by mi napisać, że mamy wolny rynek, który rządzi się prawami popytu i podaży i jak mi się nie podoba YT, to mogę nie korzystać, bo to własność Google i może z tym robić co się podoba. Owszem, ale nie zmienia to faktu, że w mojej opinii sprawę zjebali, więc opisuję to na blogu, którego można nie czytać ;) A wolnego rynku nie mamy.

Pozdrawiam tych, którzy wytrwali do końca!

[PHP] Kohana_Exception: A valid cookie salt is required. Please set Cookie::$salt.

Ten komunikat znany jest pewnie wszystkim, którzy w Kohanie stworzyli choć jedną aplikację. Mimo iż jego naprawa jest trywialna, może napsuć krwi początkującym, którzy po pomyślnej "instalacji" frameworka spodziewali się ujrzeć napis "Hello World" a nie błąd na powitanie.

Aby naprawić ten problem należy otworzyć plik kohana/application/bootstrap.php gdzie przez kohana rozumie się folder, w którym wypakowano frameworka. Na końcu pliku doklejamy następującą linię:

Cookie::$salt = 'twojawartosc';

I po sprawie, po odświeżeniu powinien zostać wykonany domyślny kontroler. Z oczywistych względów bezpieczeństwa zalecam, aby w miejsce twojawartosc naprawdę wpisać coś własnego :P

Markdown, czyli wygodne formatowanie tekstu

Przez moment szukałem w głowie odpowiedniego przymiotnika, którym chciałbym opisać bohatera dzisiejszego krótkiego wpisu. Myślę, że wygodny będzie całkiem dobrym określeniem ponieważ Markdown jest zarówno wydajny jak i intuicyjny.

Czym w ogóle jest Markdown? Jest to język znaczników, służący do formatowania tekstu, wymyślony przez Johna Grubera i Aarona Schwartza w roku 2004. Jak już wcześniej wspomniałem, od innych dostępnych rozwiązań takich jak BBCode czy czysty kod HTML odróżniają go między innymi szybkość użycia i intuicyjność. Składnia Markdown zaprojektowana jest w taki sposób, że nawet patrząc na jeszcze nieprzetworzony kod widzimy przeznaczenie każdego znacznika. Już podaję przykład:

Nagłówek pierwszego stopnia
===========================

Podrozdział
-----------

Poszczególne akapity są od siebie oddzielone pustą linią, tak więc
w obrębie jednego paragrafu swobodnie możemy korzystać z
klawisza enter.

Równie intuicyjne jest też wyróżnianie tekstu: czy to poprzez *emfazę*,
czy **pogrubienie**.

Lista nienumerowana

- kurczaki
- ziemniaki
- psychotropy

Oraz lista ponumerowana:

1 kurczaki
2 ziemniaki
3 psychotropy

Taki kod Markdown zostanie sparsowany (parsery dostępne są dla większości języków) do następującego kodu HTML:

<h1>Nagłówek pierwszego stopnia</h1>

<h2>Podrozdział</h2>

<p>Poszczególne akapity są od siebie oddzielone pustą linią, tak więc
w obrębie jednego paragrafu swobodnie możemy korzystać z
klawisza enter.</p>

<p>Równie intuicyjne jest też wyróżnianie tekstu: czy to poprzez <em>emfazę</em>.
czy <strong>pogrubienie</strong>.</p>

<p>Lista nienumerowana</p>
<ul>
<li>kurczaki</li>
<li>ziemniaki</li>
<li>psychotropy</li>
</u>

<p>Oraz lista ponumerowana:</p>
<ol>
<li>kurczaki</li>
<li>ziemniaki</li>
<li>psychotropy</li>
</ol>

Jest to oczywiście pokaz tylko części możliwości Markdown. Chodziło m raczej o zademonstrowanie samej koncepcji i przejrzystości składni. Jak widać, dzięki użytej budowie, artykuły można spokojnie pisać w dowolnym edytorze tekstowym i nadal pozostaje to czytelne.

Poza to, co pokazano wyżej, składnia Markdown oferuje jeszcze między innymi: odnośniki, obrazki, przełamania linii wewnątrz akapitów, umieszczanie bloków kodu, czy cytaty. Istnieje też alternatywna składnia dla kilku z pokazanych już zastosowań - w standardzie dostarczono m.in. dwa sposoby oznaczania nagłówków, emfaz i pogrubień, które można stosować wymiennie w obrębie jednego dokumentu. Nic nie stoi też na przeszkodzie aby np. umieścić element listy składający się z kilku akapitów -nie chciałem po prostu opisywać tutaj całej składni, bo to już dobrze zrobił sam autor.

Ponadto, dla PHP (oryginalny preprocesor został napisany w Perlu) istnieje parser Markdown w wersji Extra, który oferuje nam takie rzeczy jak listy definicji, przypisy, tabele, czy poprawiony sposób umieszczania kodów źródłowych w tekście. Tutaj należy wspomnieć o jednym założeniu poczynionym na samym początku przez Grubera - Markdown nie ma stać się składnią alternatywną dla HTML. Ma być jedynie wygodną warstwą abstrakcji, która faktycznie ułatwi nam najczęściej stosowane formatowania tekstu.

Jako potwierdzenie powyższych zalet wystarczy zobaczyć jak wiele języków obecnie dostarcza biblioteki do obsługi tej składni i jak wiele oprogramowania pozwala z niej korzystać, czy to jako natywny sposób formatowania, czy jako rozmaite modyfikacje. Znajdziemy więc między innymi rozszerzenie do Thunderbirda, które pozwala nam pisać maile w ten sposób, a potem konwertuje je do HTML-a, a także wtyczkę do WordPressa (przyznaję, że sam chętnie przerzuciłbym się właśnie na Markdowna, gdyby nie duża ilość treści do przekonwertowania).

Markdown jest też jednym ze sposobów formatowania treści dostarczanym natywnie przez takie usługi jak Github, BitBucket, Jekyll, a także rozmaite systemy CMS.

Tak więc Markdown kryje pod swoją nazwą dwie rzeczy: standard opisu informacji, czyli zaprezentowany i opisany wyżej język znaczników, a także pierwotny parser napisany przez Grubera w Perlu. Niezależnie od czy tworzycie jakąś nową aplikację w języku, który ma bibliotekę do parsowania Markdowna albo pracujecie z programem, który umożliwia jego użycie , jeżeli przewidujecie dużą ilość pracy z prostym tekstem, polecam spróbować tego rozwiązania - praca po chwili staje się naprawdę przyjemna i szybka.

Na sam koniec dwa konkretne linki dla osób, które zainteresował temat. <a href="oryginalna">http://daringfireball.net/projects/markdown/syntax">oryginalna strona projetu gdzie w pełni opisano dostępną w standardzie składnię oraz stronę klasy <a href="Markdown.php">http://michelf.ca/projects/php-markdown/">Markdown.php.

[Mini] Bug iTunes/iPod

Miałem już dziś nie spamować więcej, ale w sumie dlaczego nie? Już nie wiem który raz widzę tego typu bug iTunes i mojego iPoda Nano. Jakby ktoś miał wątpliwości to obie widoczne pozycje są w rzeczywistości dwoma osobnymi plikami (widać po liczbie odtworzeń choćby), tylko oprogramowanie od Apple ma ciekawe kryterium tego, jaki utwór jest obecnie odtwarzany.

Bug iTunes

PS: Wpisy nie będą się codziennie pojawiać z taką częstotliwością, bo wiadomo jak wygląda sprawa z moją motywacją, ale niewątpliwie będzie ich więcej niż obecnie. Nie przeszkadza Wam taka ilość małych wpisów? Może chcecie aby w jakiś sposób oddzielić takie małe pierdółki od reszty bloga (choćby przez osobny kanał RSS)?

PS2: Tak, to kryptoreklama Tima Minchina, polecam :D

[Mini] Kolejna reorganizacja na blogu

Będzie tym razem krótko, bo i tak już połowa tego bloga to pisanie o nim samym (metablogowanie?). Sprawa pierwsza: kategorie "Komputery" i "Internet" zostały zamienione na jedną kategorię o nazwie "Technologia", bo moim zdaniem poprzedni podział był sztuczny i niewygodny dla mnie. Oczywiście nadal zostają kategorie takie jak PHP/SQL/HTML&CSS - kategoria "Technologia" to po prostu miejsce na inne techniczne rzeczy.

Sprawa druga: w związku z małą ilością treści na blogu, zmieniam troszkę podejście. Będzie pojawiać się więcej wpisów krótkich, dotyczących prostych porad lub pojedynczych wizji w mojej chorej głowie. Będą one poprzedzone prefixem [Mini] tak jak ten.

Pozdrawiam.