Daj Się Poznać 2017: wyjaśnienie

W związku z ostatnią ciszą na blogu, szczególnie w kontekście zapowiadanego udziału w konkursie DSP 2017, czuję się zobowiązany do przedstawienia małych wyjaśnień. Choć blog wskazuje dosyć jasno, że mój udział w zabawie nie dobiegł do szczęśliwego końca, chciałem o tym z tego miejsca poinformować oficjalnie. Niestety - sprawy prywatne, a przede wszystkim nieszczególnie rozsądna organizacja czasu, nie pozwoliły mi na dokończenie wymaganej ilości wpisów i tym samym zrealizowania moich (początkowo całkiem ambitnych planów).

Zawiedzonych przepraszam, trzymającym kciuki dziękuję, a niepocieszonych pocieszam Brak udziału w konkursie Maćka Aniserowicza absolutnie nie oznacza końca aktywności na blogu. Mimo, że sam nie jestem zadowolony z tego potknięcia, wiem że niekiedy się one zdarzają i zazwyczaj nie przekreślają dalszych przedsięwzięć. Po udziale w DSP pozostało wszkaże sporo dobrej energii, parę niezłych szkiców, a nade wszystko lista pomysłów na wpisy, która w dalszym ciągu będzie sukcesywnie aktualizowana.

Do przeczytania wkrótce!

„Daj Się Poznać”? Czemu nie?

W ostatnich dniach dwójka znajomych, Comandeer i Soanvig, namówiła mnie do czegoś, od czego uparcie stroniłem przez ostatnie lata. Być może nie brzmi to zbyt przełomowo, ale postanowiłem wziąć udział w konkursie programistycznym.

"Daj Się Poznać" to konkurs organizowany przez Macieja Aniserowicza z blogu devstyle.pl. Popularny, a przy tym bardzo prosty w założeniach - przez 10 tygodni rozwijamy projekt i piszemy o nim na blogu. Na tyle proste, konkretne i sensowne, że przekonało mnie do małego otwarcia się na świat. Dlaczego?

Uwaga. Ostrzegam uczciwie, że co bardziej wyczuleni mogą zwęszyć znamiona wpisu sponsorowanego. Nieszczególnie mi to przeszkadza, bo przeświadczonych o tym fakcie i tak już pewnie nie przekonam. Mogę tylko poinformować że z typowego wpisu sponsorowanego brakuje elementu sponsorstwa. Jest natomiast sporo zadowolenia, z tego jak organizator podszedł do pewnych kwestii.

Po pierwsze, duża dowolność. Brak narzuconej tematyki oraz technologii. Co jeszcze fajniejsze, w konkursie mogą brać udział projekty rozwijane już wcześniej, nie muszą powstawać od początku na jego potrzeby. Nie mamy tu więc do czynienia z żadnym hackathonem, gdzie głównym elementem jest wyścig z czasem, a zwyczajnym konkursem na projekty programistyczne. Widać skupienie się na samym programowaniu (i pisaniu o tym), co mi osobiście bardzo odpowiada.

Kolejna rzecz, nie mam pewności czy zamierzona, ale bardzo udana w efektach. Ze względu na swoje założenia, konkurs jest atrakcyjny także dla tych, którzy nie osiągną w nim wysokich miejsc. Ja sam podchodzę do tego bardziej jak do zewnętrznego motywatora z nutką dobrej zabawy. Może nie wypada pisać takich rzeczy na samym początku, ale prawdę mówiąc nie liczę na zdobycie którejś z nagród. Widząc na
liście nazwiska moich starszych (przynajmniej doświadczeniem) kolegów, czy osób takich jak Piotr Nalepa (którego przerobiony skrypt dumnie nazywałem lata temu swoim pierwszym "projektem w PHP") nie łudzę się odniesieniem sukcesu. I szczerze? Absolutnie mi to nie przeszkadza! Rzucenie wyzwania swojej prokrastynacji jest dla mnie wystarczająco atrakcyjnym celem.

Trzecia rzecz, na którą zwróciłem uwagę to regulamin. Moją uwagę opis konkursu przykuł bardzo szybko, do ostatniej chwili odkładałem jednak zajrzenie na podstronę z zasadami. Byłem mentalnie przygotowany na zderzenie z długą listą reguł, wymogów i analizowanie czy na pewno spełnię wszystkie z nich i czy gdzieś nie czyhają kruczki, którymi wolałbym się nie wiązać. Nie ma co się rozwodzić, zainteresowanych odsyłam tutaj. Krótko i na temat!

Tyle słowem wstępu. Przedstawienie projektu, którym będę zajmował się do 31 maja, już jutro.

Liczby nie kłamią

Od samego początku miałem założenie, że strona sobak.pl ma być moją wizytówką w sieci - całkiem logiczne i szczwane, nieprawdaż? ;) Aby jednak tak się stało, przydało by się prezentowała ona trochę danych o mojej osobie i była punktem wyjścia do dalszej eksploracji. Dlatego w dniu wczorajszym do Sobakowego Bloga dołączyła strona stats.sobak.pl. Jest to agregator kilku mniej lub bardziej interesujących statystyk związanych z moją działalnością w sieci. W chwili pisania tego skryptu pobiera i prezentuje w jednolity sposób dane pochodzące z tego bloga, a także serwisów Forumweb.pl, Wikipedia, PHP.net i Twitter.

Skrypt ma budowę modułową, aby w przyszłości łatwo móc rozszerzać go o integrację z większą ilością witryn. Cały kod źródłowy jest dostępny publicznie na Githubie. Sugestie poprawek lub pull requesty są mile widziane.

Co do samej treści serwisu - statystyki może niezbyt piękne, w paru miejscach wręcz żenujące (ah, ta aktywność na Twitterze...), jednak jednemu zaprzeczyć się nie da... liczby nie kłamią ;)

Wpis w portfolio dla tego projektu znajduje się w tym miejscu.

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 :)

[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.

It’s alive!

Tak tak, nadal żyję, choć patrząc na to jak długo się tutaj nic nie działo, można było pomyśleć inaczej. Niestety, tak łatwo się świat Sobaka nie pozbędzie, więc po prawie czterech miesiącach (sic!) bez wpisu, czas na mały-wielki powrót. Zdaję sobie sprawę, że pewnie część z Was wyrzuciła mnie już z czytników RSS (o ile kiedyś w jakimś byłem :D), ale mam nadzieję, że mimo tego wszystkiego ktoś będzie chciał czytać moje wypociny.

Jak widać, każdemu, nawet mi, może znudzić się nic nie robienie. W związku z tym doszedłem do wniosku, że czas trochę odkurzyć na moim blogu. Standardowo, przy takim „powrocie” (wolę nie liczyć ile ich już było) poprawiłem kilka zalegających rzeczy.

Zabrałem się za poprawienie różnych rzeczy powiązanych z theme strony. Zależało mi głównie na poprawie generowanego kodu HTML i to się częściowo udało. Nie jest jeszcze dobrze, bo pewne rzeczy są trudne w modyfikacji ze względu na to jak generuje je WordPress, na kilka innych nie miałem pomysłu lub wiedzy jak je rozwiązać (bardzo możliwe, że dało by się to zrobić optymalniej i np. pozbyć się jeszcze kilku divów). Mimo wszystko udało się pozbyć naprawdę sporej części zbędnego kodu HTML i CSS (rozmiar tego [wliczając minifikację] zmniejszył się o połowę) oraz poprawić semantykę. Użycie HTML5 zostało rozszerzone poza samo doctype, które było w theme od początku (między innymi poprzez użycie atrybutu placeholder zamiast JS-owych zamienników).

Przy okazji poprawiania wyżej wspomnianych rzeczy okazało się jednak, że kod PHP szablonu dał mi okazję do poprawienia wielu rzeczy. Theme Mystique został oparty na frameworku przeznaczonym do tworzenia właśnie szablonów pod WordPressa - Atom. Jedną rzecz mogę o tym skrypcie powiedzieć na pewno - niesamowita kobyła. Okazało się, że sama konstrukcja wspomnianego frameworka miała duży wpływ na wydajność strony. Wystarczy chyba wspomnieć, że po w miarę drobnych modyfikacjach, w niektórych miejscach udało mi się zmniejszyć ilość zapytań SQL o 50%. Świadomie pozbyłem się bardzo wielu możliwości theme, z których nie planuję korzystać, tak aby poprawić katastrofalną (serio katastrofalną) wydajność mojej instalacji WordPressa.

Przy okazji pozbyłem się też nieużywanej już wtyczki do śledzenia błędów 404.  Wtyczka nie widziała problemu w zostawieniu swoich tabel w bazie po odinstalowaniu. W jednej leżało 14 tysięcy rekordów, w drugiej 9 tysięcy – i kto to teraz posprząta? Doliczmy do tego 23 tysiące rekordów od kolejnej wtyczki, która zapomniała zabrać swoje zabawki z piaskownicy przy odinstalowywaniu i mamy już całkiem pokaźną (oczywiście jak na moją skalę) część bazy danych.

Może jest to mało zauważalne, ale istotnego odświeżenia doczekała się organizacja treści na blogu. Ponownie otagowałem i skategoryzowałem wszystkie wpisy. Kategorie nie powinny być już aż tak ogólne, z kolei ilość tagów została ograniczona ponad dwukrotnie, tak, aby faktycznie grupowały one podobne treści (zmiany widać zresztą nawet wizualnie na samej chmurze tagów).

W związku z przeprowadzonymi sporymi porządkami zwracam się z prośbą do czytelników mojego bloga (o ile jeszcze ktoś taki pozostał po tej czteromiesięcznej niezapowiedzianej przerwie). Jeżeli ktoś z Was widzi coś, co powinno zostać poprawione, to będę wdzięczny za zgłoszenie, czy to w komentarzu do tego wpisu, czy też przez kontakt. Starałem się poprawić to, o czym przypominaliście mi od dawna, ale mam świadomość, że mogłem o czymś zapomnieć.

Przepraszam za tak długą nieplanowaną przerwę i liczę na to, że ktoś jeszcze zamierza czytać przyszłe wpisy :)

Informacja – status projektów

W związku z kolejną długą przerwą od wpisów, myślę, że tym z Was, którzy czytują mnie jakoś w miarę regularnie (są tacy? :P) należy się kilka wyjaśnień. Przyczyn takiego stanu rzeczy jest kilka, jedną na pewno jest fakt, że ostatnio ciężej jest mi się zmotywować i opisać jakiś temat na blogu - tak zwana prokrastynacja. Ponadto od kilku tygodni pracuję z kolegą nad kolejnym projektem - mam nadzieję pochwalić się nim już niedługo.
Chciałem jednak jednoznacznie przedstawić, jak wygląda sprawa kilku moich wcześniejszych "projektów", ponieważ już kilka osób się mnie o to pytało.

Sobak's Blog
Blog jak najbardziej jest kontynuowany. Nie planuję go zamykać czy coś w tym stylu. Obecny deficyt nowych wpisów, mam nadzieję, będzie tymczasowy. Co więcej, z blogiem (a raczej ogólnie stroną) łącze pewne przyszłe plany, które siłą rzeczy wiążą się z kolejnym projektem...

IronCMS 2
Przestój prac rzeczywiście występuje, publiczne informacje o postępie zatrzymały się na drugiej becie. Mimo tego, jest on dla mnie ważnym projektem i cały czas planuję go dokończyć. Aktualnie po prostu wskoczył na drugie miejsce w kolejce - za projekt, o którym wspomniałem na początku notki.

BrzydkiKod
Planowałem większą rewolucję wraz z uruchomieniem nowej wersji strony, ale ostatnio natknąłem się na projekt nospora - pr0.nospor.pl, który całkowicie wyczerpuje formułę pomysłu, który zacząłem realizować. W związku z tym, myślę że nie ma obecnie szans na kontynuację tej inicjatywy - jeśli już, to po prostu podeślę ze zbiorów coś do "konkurencji".

XNova/Blackout
Ktoś to jeszcze pamięta? ;) Ja praktycznie zapomniałem, ale pewna osoba mi przypomniała, więc warto rzecz wyjaśnić. Sprawa obecnie wygląda tak: projekt tego typu może zostać zrealizowany, jednak nie będzie to na pewno przeróbka XNovy, tylko coś pisanego od zera (bardzo możliwe, że z wykorzystaniem części rozwiązań z dostępnych silników). Trzeba jednak pamiętać że to co mam w kolejce spokojnie wystarczy mi na długi czas.

Zakładka projekty
Projekty jako zbiór doczekały się już kilku przeprowadzek. Swego czasu istniał dla nich osobny skrypt, potem zostały zwykłymi podstronami w WordPressie. Na nowej stronie moduł projektów będzie integralną częścią systemu, jednak będzie cechował się specyficznymi możliwościami, innymi od zwykłych podstron i dostosowanymi do wymagań. Krótko mówiąc: staram się połączyć zalety obu rozwiązań.

Jeśli chodzi o zawartość zakładki to część ze skryptów zostanie zakończona na obecnym etapie. Inne natomiast (główne klasy PHP) będą stale aktualizowane, bo zdaję sobie sprawę, że kurz już na nich osiadł no i jakość kodu nie jest najlepsza, dużo się w nim od tamtego czasu pozmieniało.

Jeśli ktoś z Was chce, abym wyjaśnił jeszcze jakąś kwestię o której zapomniałem to piszcie w komentarzach :)

Brzydki kod efektem chwili

Być może część z Was zauważyła już, że w górnym (a w zasadzie aktualnie jedynym) menu strony pojawiła się nowa zakładka. Jej nazwa, to nic nikomu niemówiący BrzydkiKod. Cóż to znowu za poroniony pomysł zrodził się w Sobaczym umyśle?

Otóż, przeglądając ForumWeb natknąłem się na post osoby, która szukała pomocy z niedziałającym kodem. Sytuacja stara jak świat, kod też nie należy wcale do najgorszych jakie widziałem. Tym razem jednak wpadłem na pomysł. Postanowiłem zachować sobie ten kod na pamiątkę (na zasadzie: "Nie, Sobak, tak tego nie rób"). Jednak stwierdziłem, że skoro już i tak zachowuję kod na pamiątkę, to czemu nie podzielić się nią z innymi?

Właśnie w ten sposób powstała ta podstrona. Jako składnica kodów, które w jakiś sposób mnie zaintrygowały i w pewnym sensie nauczka dla potencjalnych następców. Zaznaczam też, że nie zamierzam tam publikować ocen większych skryptów, to ma być coś na wzór spinnetów... tylko, że zrobionych nie tak jak trzeba.

Jeszcze krótki disclaimer: strona nie powstała, aby ośmieszyć lub oczernić kogokolwiek. Bazuje ona na materiałach, do których uzyskałem legalny dostęp. Żeby nie było, że zamierzam się dowartościowywać czyimiś błędami, to na wspomnianej liście znajdą się także moje genialne wymysły ;)

Amen.

Walka z falą błędów 404

Witajcie,

jak może część z Was pamięta, przy ostatniej migracji zmieniłem lekko format linków prowadzących do wpisów. Uważałem, że pozbycie się ID notek z adresów będzie dobrym posunięciem, bo wtedy linki staną się zwyczajnie prostsze. Założenie dobre, a wyszło... jak zwykle ;)

Można mi się dziwić czemu nie zadbałem o przekierowania ze starych adresów na nowe - po prostu sądziłem, że Google znacznie szybciej zreindeksuje strony. Tak czy siak problem narastał, zainstalowałem wtyczkę 404 redirected by Weberz. Za jej pomocą ustawiłem kilkadziesiąt ręcznych przekierowań 301 na nowe adresy, sama wtyczka utworzyła ich ponad 800. Mimo wszystko Centrum dla Webmasterów od Google nadal informowało o rosnącej liczbie błędów 404 na mojej stronie. Czymś co najbardziej mnie martwiło, jest to, że liczba błędów 404 wykazywanych przez Google z każdym dniem rośnie (aktualnie koło 480).

W pewnym momencie nowe przekierowania dodawane w wyżej wspomnianej wtyczce po prostu przestały mi działać. Dlatego poszukałem innych rozwiązań - dodatkowo doinstalowałem  (starej nie usuwałem, ze względu na te ponad 800 już ustawionych redirectów)  wtyczkę Redirection.

W końcu stwierdziłem, że ręczne dodawanie kolejnych przekierowań mija się z celem i postanowiłem zautomatyzować proces. Napisałem na tą okoliczność mały skrypcik, który przedstawiam poniżej.

<?php
$mysqli = new mysqli('serwer', 'user', 'haselko', 'baza');

$result = $mysqli -> query("SELECT ID, post_name FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post'");

$i = 1;
while ($row = $result -> fetch_array()) {
    $mysqli -> query("INSERT INTO wp_redirection_items SET url = '/".$row['ID']."/".$row['post_name']."/', action_data = '/".$row['post_name']."/', regex = 0, position = $i, group_id = 1, status = 'enabled', action_type = 'url', action_code = 301, match_type = 'url';");
    $mysqli -> query("INSERT INTO wp_redirection_items SET url = '/".$row['ID']."/".$row['post_name']."', action_data = '/".$row['post_name']."/', regex = 0, position = $i, group_id = 1, status = 'enabled', action_type = 'url', action_code = 301, match_type = 'url';");
    $mysqli -> query("INSERT INTO wp_redirection_items SET url = '/".$row['ID']."/', action_data = '/".$row['post_name']."/', regex = 0, position = $i, group_id = 1, status = 'enabled', action_type = 'url', action_code = 301, match_type = 'url';");
    $mysqli -> query("INSERT INTO wp_redirection_items SET url = '/".$row['ID']."', action_data = '/".$row['post_name']."/', regex = 0, position = $i, group_id = 1, status = 'enabled', action_type = 'url', action_code = 301, match_type = 'url';");
    ++$i;
}

Skrypt dodaje rekordy do tabeli wyżej wspomnianego pluginu - we wszystkich formatach, w jakich mogą być spotykane w na moim blogu lub indeksach Google. W ten sposób z automatu dodałem 456 przekierowań (liczba wpisów * 4 możliwe warianty).

Mam nadzieję, że to rozwiąże problem i liczba stron z błędami 404 zacznie spadać. W najbliższym czasie podzielę się wynikami.

WordPress Cleaner – kilka słów o skrypcie

Na bloga powrócił skrypt WordPress Cleaner. Część z Was może go jeszcze pamiętać ze starej wersji bloga. Po ostatnich zmianach postanowiłem go nie wrzucać, do momentu napisania lepszej wersji. I oto jest!

Skrypt służy do usuwania rewizji wpisów z bazy danych WordPressa. Rewizje to kopie zapisywane automatycznie przez edytor wpisów, są tworzone co jakiś czas, głównie po to, aby nie utracić wpisu po nieoczekiwanym zamknięciu strony edycji (np. poprzez brak zasilania i wyłączenie komputera lub po prostu przypadkowe wyłączenie przeglądarki).

W nowszej wersji uprościłem skrypt (wydaje mi się, że tak bardzo jak to możliwe) i poprawiłem kilka rzeczy.

Więcej informacji tutaj.