Sobakowy Blog 2018

Witaj, 2018 roku!

Nie planowałem co prawda rozpoczynać sezonu blogowego w połowie sierpnia, ale szczęśliwie mogę tym razem odezwać się z czymś więcej niż zwyczajowym "No hej, nie było mnie rok, teraz chyba będę, wpisy nadchodzą — kiedyś…". Udało mi się nareszcie skończyć punkt pierwszy, sam szczyt moich list todo od niemal roku. Z lekką dumą informuję, że znajdujesz się teraz na nowej, odświeżonej wersji mojej strony.

Prawdopodobnie… nie zauważyłeś różnicy. I nie są to problemy z cache przeglądarki, a zupełnie zamierzony zabieg. Uznałem, że obecna, czteroletnia forma strony jest w dalszym ciągu adekwatna i (szczególnie przy moich marnych umiejętnościach graficznych) nie ma się co silić na rewolucję. Zrobiłem więc ewolucję, która na drugi rzut oka manifestuje się w najróżniejsze sposoby.

Żegnaj, WordPressie!

Po pierwsze, po ponad ośmiu latach i po raz pierwszy od tchnięcia życia w sobak.pl pożegnałem się z WordPressem. Wspaniałe to było osiem lat, nie zapomnę ich nigdy. Poważnie mówiąc, nie było źle. Nie potrafię wskazać jednego momentu przełomowego, przelania się czary goryczy, które spowodowałoby że rozżalony powiedziałbym dość. Co więc zadecydowało? Suma trzech czynników:

  • Dawka zdrowej ambicji. Nie wypada szewcowi chodzić w najtańśzych butach z sieciówki i nie wypada programiście technologii webowych tworzyć swojej wizytówki na pierwszym lepszym darmowym systemie.

  • Obawy odnośnie bezpieczeństwa. Nie zamierzam tu powielać szeroko rozpowszechnionych mitów. Rdzeń WordPressa jest bezpieczny, pomimo kilku istotnych wtop z zakresu procedowania luk bezpieczeństwa, WordPress w swojej bazowej formie skutechnie opiera się większości ataków.

    To, co można powiedzieć o samym gołym produkcie, nie do końca jest jednak prawdą w wypadku niezliczonych wtyczek. Tak więc w obliczu migracji na VPS-a (o której słów kika za chwilę) poszukiwałem czegoś, co nie wprowadzi mnie na pole minowe.

  • Potrzeba customizacji. Raz jeszcze przyznać trzeba, że WordPress generalnie rozszerzalny jest. Twierdzenie inaczej byłoby zanegowaniem faktu istnienia tak wielu wtyczek i motywów do niego.

    Nie oznacza to jednak, że owe rozszerzanie należy w roku 2018 do przyjemnych. Mimo, że sam jestem autorem kilku z funkcjonalności integrujących się dosyć mocno w poprzednią wersję witryny, to tworzenie tychże można porównać do szambonurkowania. Wraz z rosnącą ilością zmian, które chciałem i chciałbym wreszcie wprowadzić na swojej stronie potrzebowałem czegoś, w czym czułbym się absolutnie swobodnie.

Dlatego też zdecydowałem się na stworzenie własnego backendu w oparciu o framework Laravel, roboczo określonego nazwą kodową Perception (podziękowania dla winka, jak zawsze niezastąpionego w spontanicznym wymyślaniu nazw). Teoretycznie jest to prosta aplikacja CRUD-owa, więc nie będę za wiele rozpisywał się na temat szczegółów implementacyjnych. Chcę jedynie wspomnieć o jednej ważnej decyzji powiązanej ze wspomnianym wyżej poszukiwaniem bezpieczeństwa. Z tego powodu, a także chęci uproszczenia sobie życia — zarówno w momencie developowania jak i korzystania z platformy — zdecydowałem się na zupełny brak panelu administracyjnego.

Obecna implementacja czerpie mocno z konceptu generatorów stron statycznych. Źródłem jej danych są bowiem statyczne pliki tekstowe. W przeciwieństwie jednak do wcześniej wymienionych generatorów nie są z nich tworzone gotowe pliki HTML, a jedynie przejściowa, tymczasowa baza danych, która pozwala na wprowadzenie dowolnej ilości dynamiki i w zasadzie klayczny rozwój aplikacji WWW. Jak wspomniałem jest to też wygodniejsze dla mnie jako użytkownika, bo oznacza że nie muszę walczyć z dowolnym skryptem, próbując do niego dodać wsparcie Markdowna czy używać desktopowego edytora tylko po to, aby później wkleić wynik swojej pracy do formularza na stronie.

Harder, Better, Faster, Stronger

Dużo uwagi poświęciłem poprawie wydajności działania strony. Począwszy od przeniesienia się na szybszy serwer, przez optymalizację backendu, aż po upewnienie się, że wynik jego pracy może zostać szybko pobrany i obsłużony przez przeglądarkę. Zacząłem od podstaw, czyli zmniejszenia ilości i rozmiaru tekstu wysyłanego do klienta, wagi obrazków, zapytań do innych zasobów et ceterra. Wynik całej tej operacji przedstawia skrótowo poniższa galeria.

Pimp my website

Mimo iż nie zdecydowałem się na całościową wymianę szablonu strony, znalazłem dziesiątki, jeśli nie setki pomniejszych rzeczy zasługujących na poprawę w obecnym. Poczynając od rzeczy ogólnych jak zwiększenie kontrastu tekstu, o które prosiliście niedługo po premierze poprzedniej wersji (4 lata, polecam się), przez poprawę typografii, marginesów, kolorów, spójności i podrasowanie pojedynczych podstron, jak portfolio. Więcej szczegółów we wmiaręwykazie zmian na dole wpisu.

Content is an old, impotent king

Wydaje mi się, że blog z założenia jest formą treści, która po czasie zaczyna stanowić pewną historię, więc nie ingerowałem za bardzo w samo sedno byłych wpisów. Nie da się jednak ukryć że przez ponad osiem lat wiele z nich zaczęło odstawać od reszty strony, nie tylko stylistycznie lecz nawet w tak jaskrawe sposoby jak użycie już dawno nieużywanej wtyczki do podświetlania kodu. Poprawiłem też mnóstwo znalezionych po drodze literówek, niedziałających już dawno linków, a czasem nawet skrajnie nieaktualnych lub błędnych informacji (to ostatnie jednak robiłem w drodze wyjątku).

W kontekście treści warto też wspomnieć o porzuceniu możliwości komentowania na mojej stronie. Nad trudnościami technicznymi przeważyły problemy z moderowaniem takiej ilości tekstu i późniejszym utrzymaniu go w ryzach. Wierzę że komentujący mi wybaczą i z formularza na dole wpisów zapraszam do kontaktu w dowolnym miejscu wykazanym w zielonym menu (ikona serduszka na prawo od nagłówka).

Projekty stare i nowe

Sporo aktualizacji otrzymało portfolio. Poza poprawkami stylów, drobnymi korektami wielu z miniaturek, skupiłem się także na aktualizacji zawartej tam treści. Rozbudowałem opisy wielu z projetków, te które doczekały się nowych wersji zyskały często osobne podstrony w portfolio, aby oddzielić je od historycznych już tworów. Wreszcie, opisałem także kilka nowych dzieł.

Pastebin, czyli nowe miejsce do dzielenia się fragmentami kodu źródłowego, które w obecnej formie powstało kilka nocy temu.

Blackoutopus magnum spierdolenia szczyt projektów bezsensownych, nieuzasadnionych i z góry skazanych na porażkę, czyli moje starcie z opisywaną już bestią, bossem projektów legacy — xNovą.

Codice, które od ostatniej aktualizacji pozycji w portfolio stało się zupełnie nowym, otwartoźródłowym projektem. Dawniejsza wersja i delikatny rys historyczny poprzednich podejść został przeniesiony na osobną podstronę.

I wreszcie zupełnie nowa odsłona sobak.pl w portfolio. Podobnie jak wyżej, dawna treść została zachowana w osobnym, podlinkowanym miejscu.

Co dalej?

W chwili gdy to piszę, z mojego osobistego todo znika najbardziej rozbudowany i pożądany punkt od niemal roku. Mogąc się teraz zabrać za inne rzeczy, bez jednoczesnego wywoływania wyrzutów sumienia, planuję okazać trochę miłości starym, zakurzonym projektom, jak i zająć się rozwojem kilku nowszych. Stay tuned!

…ach, nie spodziewajcie się jednak w najbliższym czasie nowych tworów wielkoformatowych pokroju Codice czy codziennych aktualizacji o postępie prac. Stety-niestety gimnazjum mam już za sobą, a programowanie zawodowe skutecznie ogranicza ilość sił i zwyczajną ochotę na dalsze zagłębianie się w kod w czasie wolnym. Postaram się jednak aby każdy miesiąc przyniósł jakąś nową informację o mnie i tym nad czym pracuję.

W-miarę-wykaz zmian

  • znacząco poprawiłem czas ładowania strony (porównanie wyżej)
  • wdrożyłem certyfikat SSL dla sobak.pl i wszystkich subdomen
  • gorsza wiadomość: ze względu na ograniczony czas wycofałem możliwość komentowania wpisów
  • oparłem podświetlanie bloków kodu źródłowego o Keylightera
  • przerobiłem podgląd wpisów z Twittera, które teraz w większości wypadków ładują się natychmiastowo
  • zamieniłem strzałki do paginacji miejscami (następna strona po prawej)
  • zmodyfikowałem listę linków w sidebarze tak aby ich kolejność była losowa
  • poprawiłem wyszukiwarkę tak aby poprawnie obsługiwała przycisk Czytaj dalej dla wpisów, które go posiadają
  • poprawiłem wyszukiwarkę tak aby pokazywała także normalną paginację, a nie tylko strzałki po bokach ekranu
  • dodałem link do profilu na LinkedIn do menu serwisów społecznościowych
  • otwarcie menu wyszukiwania ustawia teraz kursor w polu formularza
  • poprawiłem podświetlanie aktywnego elementu menu na wielu podstronach
  • formularz kontaktowych korzysta teraz z ReCAPTCHA
  • przywróciłem do życia overdocs.net
  • zmiany wizualne:
    • zwiększyłem kontrast tekstu
    • poprawiłem style portfolio (w tym responsywność)
    • poprawiłem style formularza kontaktowego
    • poprawiłem wyświetlanie menu na urządzeniach mobilnych
    • poprawiłem typografię tekstu
    • poprawiłem style nagłówków
    • poprawiłem style cytatów
    • poprawiłem style dla wielu wariantów wyświetlania list
    • poprawiłem wyświetlanie miniaturek w portfolio
    • dodałem style dla boxów z informacją/ostrzeżeniem
    • zmniejszyłem wagę fonta dla pogrubionego tekstu
    • zmniejszyłem delikatnie marginesy dla akapitów
    • dodałem zawijanie bloków kodu po 450px wysokości na urządzeniach mobilnych
    • wiele mniejszych lub zapomnianych poprawek
  • zmiany w treści (lista niepełna):
    • poprawiłem kilkadziesiąt literówek i miejsc z błędnym formatowaniem tekstu
    • poprawiłem wiele niedziałąjacych i przestarzałych linków
    • zoptymalizowałem wagę niemal wszystkich obrazków wyświetlanych na stronie
    • połączyłem podobne tagi dla wpisów
    • portfolio
      • dodałem opis projektu Pastebin
      • dodałem opis projektu Blackout
      • zaktualizowałem opis projektu Codice (opis starej wersji został wydzielony do osobnej podstrony)
      • zaktualizowałem opis projektu dla sobak.pl (opis starych wersji, opartych o WordPressa został wydzielony do osobnej podstrony)
      • zaktualizowałem opis projektu WordPress Cleaner
    • wiele pomniejszych poprawek
  • stats.sobak.pl
    • dodałem podstawowe statystyki z GitHuba
    • kliknięcie w nazwę serwisu kieruje teraz bezpośrednio do mojego profilu

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.

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.

MobsControl - okiełznaj endermany, creepery i zombie w Minecraftcie

Dzisiaj chciałbym Wam zaprezentować kolejną moją "produkcję", która znalazła się na stronie w dziale portfolio.

MobsControl jest bardzo prostą wtyczką przeznaczoną dla serwera Bukkit, który umożliwia grę multiplayer w Minecrafta. Wtyczka blokuje kilka z zachowań mobów (potworów), są to:

  • Creepery eksplodują zadając normalne obrażenia, ale nie niszczą żadnych bloków. W ten sposób unikniesz strat na mapie w ich wyniku.
  • Endermany nie mogą podnosić żadnych bloków. Skutecznie blokuje dewastację mapy, endermany będą nadal występować i atakować gracza, po prostu nie będą nic podnosić.
  • Zombie nie mogą wyłamywać drzwi. Uwaga: zombie będą nadal podążać w kierunku drzwi i uderzać w nie. Plugin blokuje jedynie możliwość ich wyłamania. Wynika to z faktu, że w obecnej wersji API nie ma możliwości wyłączenia ataków na drzwi, wymaga to przekompilowania Bukkita.

Ostatnia wersja na jakiej testowałem wtyczkę, to Bukkit 1.2.5, jednak powinna spokojnie działać z nowszymi :) Wtyczki można bezproblemowo używać na serwerach Tekkit.

Więcej informacji i download wtyczki tutaj.

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.

Wstępna zapowiedź IronCMS-a 2.0

Od dość dawna nic nie pisałem na blogu. Przede wszystkim od bardzo dawna nie pisałem nic o IronCMS-ie. A mam w stosunku do niego pewne plany.

Ostatnią wydaną wersją był Iron z numerkiem 1.2.1. Od tamtego czasu nie raz miałem okazję patrzeć na jego kod i zmieniać go. Za każdym razem myślałem o tym samym – „czas na nową wersję z większymi zmianami. Trzeba to w końcu ogarnąć”.

A teraz bez zbędnego gadania przedstawię kilka rzeczy, które chciałbym zmienić w wersji 2.0 skryptu.

Czytaj dalej →

Dwa nowe skrypty w Dev Center

Żeby moje nowe Dev Center (opublikowane wczoraj) nie świeciło pustkami toteż napisałem dwa nowe skrypty, które w dniu dzisiejszym dochodzą do jego skromnych zasobów.

Postanowiłem odpicować dwie z klas, których używanych przeze mnie w IronCMS-ie. Upiekłem przy tym dwie pieczenie na jednym ogniu. Po pierwsze: zyskałem nowe skrypty do kolekcji, a po drugie uzyskałem mocno poprawione klasy do użytku w kolejnych wersjach CMS-a (a te się powoli budują…).

Nie ma sensu się rozpisywać. Po prostu prezentuję:

Klasa do obsługi MySQL oraz powiązana z nią klasa loggera zdarzeń.

Wszelkie komentarze mile widziane ;)

Sobak's Dev Center po remoncie…

Już prawie rok minął odkąd utworzyłem swoje Dev Center. Jednak od tamtego czasu poziom mojej wiedzy wzrósł dość mocno i około dwóch tygodni temu stwierdziłem, że czas, aby Dev Center odzyskało jako taki poziom. Zabrałem się do pracy. Jej efekty nie są oszałamiające, lecz zawsze to jakiś postęp.

Jednocześnie informuję, że wszystkie moje projekty, które znajdowały się na blogu zostają przeniesione do Dev Center.

Zmiany

  • możliwość komentowania projektów
  • wygodny panel admina
  • SEO URL-e
  • nowe logo (jeśli to stare można było nazwać logiem)

Cóż, nie ma co się rozpisywać i robić double content. Wszystkie informacje o nowym Dev Center znajdziecie… w nim samym Aktualizacja: DevCenter obecnie nie istnieje.

Przed zakończeniem chciałbym jeszcze zamieścić (lekko spóźnione) podziękowania dla CapaciousCore'a, który pomógł mi z rozwiązaniem jednej dość problematycznej kwestii przy tworzeniu strony :).

Wszystkie opinie, jeśli takowe macie, możecie śmiało zamieszczać w komentarzach. Konstruktywna krytyka również mile widziana.

Jednocześnie jeśli ktoś znajdzie jakiś błąd na wspomnianej stronie, to bardzo bym prosił o kontakt ;)

Premiera Iron CMS-a!

Z nieukrywaną dumą informuję, że skrypt który zacząłem tworzyć dokładnie 114 dni temu (20.12.10) został w końcu doprowadzony do stanu używalności. Dziś, o godzinie 14:40 nadszedł czas zaprezentować go światu.

Premiera odbyła by się chwilę wcześniej, gdyby nie to, że nie mogłem się dostać do phpMyAdmina na sobak.pl i tym samym zdebugować pewnego zapytania (na localhoście działało, tu nie). Przez około 5 godzin męczyłem się z instalatorem. Dodatkowo ponad godzinę straciłem, czekając aż panel administracyjny 1&1 raczy się załadować., ale, tak, udało się! :) Iron CMS 1.0 jest gotowy!

O tym, że jego przepisywanie od nowa zbliża się do końca informowałem tutaj. Zajęło mi to dokładnie 20 dni (z małymi przerwami). Podczas tego "procesu" skupiłem się głównie na poprawie logiki, wydajności i błędów ze starszych wydań (były 4 wydania prezentowane tylko znajomym).

  • poprawiłem dziesiątki nieoptymalnych miejsc. Trzykrotne łączenie się z bazą w jednym pliku, czy pobieranie tej samej wartości kilkanaście razy pod rząd? Takie rzeczy tylko w starych wersjach Irona (tak, ochrzciłem CMS-a mianem żelazka :D (joke)) :)
  • poprawiłem stare funkcjonalności. Np. f-cja kosza dostępna od wersji 0.3 została rozszerzona o możliwość wyrzucania artykułów. Wcześniej były to tylko podstrony.
  • nowa wersja starego szablonu. Jak już napisałem w zapowiedzi skryptu, użyłem gotowego szablonu. Podczas przepisywania CMS-a na nowo, znalazłem jego nowszą wersję. Został mocno poprawiony HTML i CSS i doszło m. in. górne menu. Dodatkowo dorzuciłem lekką modyfikację szablonu od siebie.
  • możliwość ustawienia oddzielnego theme'u dla panelu administracyjnego
  • zalążek rang użytkowników
  • znaczna poprawa bezpieczeństwa
  • dodany instalator
  • poprawa przejrzystości panelu administracyjnego
  • zmiana wielu rozwiązań pod względem logistycznym
  • setki, naprawdę setki rzeczy o których zapomniałem bądź pisać nie warto…

Skrypt został napisany z użyciem możliwości z PHP5 (wersja czwarta musi odejść do lamusa…) i bazy danych MySQL.

Trochę statystyki

Wielkość skryptu (zdekompresowane)

  • 0.1 - 26.4 kB
  • 0.2 - 2.87 MB
  • 0.3 - 1.48 MB
  • 0.4 - 2.32 MB
  • 1.0 - 344 KB

Skąd tak duża różnica? Od wersji 0.2 w skład skryptu wszedł JS-owy edytor WYSIWYG - TinyMCE. W 0.3 go "lekko" odchudziliśmy (z m4tx'em) - stąd taki spadek rozmiaru. W 0.4 doszło troszkę nowych rzeczy, a IronCMS 1.0 został pozbawiony edytora WYSIWYG, zastąpiono go BBCodem. Jego rozmiar jest podwójnym sukcesem, bo poprzez rozbicie theme'u na theme dla strony i oddzielny dla panelu, ilość obrazków de facto nam się podwoiła.

Dlaczego nie WYSIWYG lecz BBCode? Otóż stwierdziłem, że skryptów idiotoodpornych powstało już mnóstwo. Zdaję sobie sprawę, że to może zawęzić ilość użytkowników Irona (ale spójrzmy obiektywnie - ile ludzi tak czy siak będzie go używać? :P). Poza tym - znajomość BBCode, to nie jest jakaś magiczna sztuka.

Linie kodu (kliknij aby powiększyć)
Statystyki linii w IronCMS

Podziękowania

  • dla Rhina za rozwiązanie niezliczonej ilości moich błędów i przeoczeń
  • dla Pawła1503 i m4tx'a za betatesty
  • dla CapaciousCore'a, za naprawdę fachowe porady dotyczące skryptu.

DOWNLOAD IRON CMS 1.0