IronCMS 2 - raport taktyczny

Zgodnie z zapowiedzią, dzisiejszy wpis będzie nakreślał aktualny stan prac nad IronCMS-em 2. Nie chciałbym, aby projekt sprawiał wrażenie porzuconego, bo tak zdecydowanie nie jest.

W wyniku kilku dyskusji i przemyśleń postanowiłem zmienić drastycznie jeden z aspektów skryptu – aktualnie jestem na etapie wdrażania prostego systemu szablonów na potrzeby CMS-a. Przyjął on formę znaną z wielu frameworków webowych (nie tylko PHP) i obecnych tam widoków. Mówiąc krótko i zwięźle – pliki szablonów są pisane z użyciem PHP (i w przyszłości kilku rozsądnych helperów ułatwiających pracę). Powodów, dla których odrzuciłem koncepcję użycia rozbudowanego systemu szablonów z dedykowaną składnią (np. Smarty, Twig) jest kilka, ale to może przedstawię przy innej okazji.

Co jeszcze zmieniło się w CMS-ie od ostatniego wpisu o nim? Przede wszystkim zostały ukończone kolejne kluczowe elementy – system komentarzy jest gotowy niemalże w połowie, funkcja bloga na której chciałem się skupić została już prawie ukończona. Skończone zostało dodatkowe kilka podstron, widocznych zarówno dla odwiedzającego stronę jak i dla administratorów. Gotowy jest praktycznie cały panel administracyjny.

Panel administracyjny IronCMS

Powyższy screenshot pokazuje z grubsza jego wygląd i układ. Wspomniany wcześniej system szablonów obejmie także panel administracyjny, tak więc nic nie będzie stało na przeszkodzie, aby przygotować alternatywne wersje panelu administracyjnego – np. wersję lite czy mobilną.

Aktualnie kluczowymi elementami do ukończenia są: system komentarzy,poprawki do parsera BBCode oraz wspomniany system zmiany szablonów. Po wykonaniu tej pracy ukaże się wersja beta, przeznaczona do skatowania przez grono zażartych testerów. Dopiero po tym rozpocznie się faza wdrażania mojego potworka na sobak.pl :)

Korzystając z okazji chciałbym pozdrowić Thelleo, który intensywnie rozwija swój system zarządzania treścią - LunaCMS.

A może tak… IronCMS 2?

Ostatnio znów zrobiło się ciszej z nowymi wpisami - tym razem powodem jednak nie było lenistwo, a przynajmniej nie w czystej postaci ;) Od dłuższego czasu pracuję nad nowym skryptem - tak tak, tytuł to nie żart - ci z Was, którzy pamiętają mój projekt o nazwie [IronCMS][portfolio-ironcms] mogą być lekko zaskoczeni, ale to prawda - aktualnie tworzę drugą wersję tego skryptu o jakże odkrywczej nazwie - IronCMS 2.

Różnic w odniesieniu do poprzedniej gałęzi będzie sporo - całkowicie napisany od nowa kod źródłowy, ale także kilka zmian w podejściu. Pierwsza i zasadnicza - skrypt nie będzie dostępny publicznie… przynajmniej na razie :) Przed ewentualnym wydaniem zostanie na pewno dobrze przetestowany i poddany próbie bojowej (już wkrótce więcej o tym). Do ewentualnego wydania na światło dzienne kod zachowam dla siebie, jednak będę się starał Was informować o ważniejszych zmianach w nim - to będzie także sposób na motywację dla mnie.

Wstępna data premiery wersji 2.0 jest już wyznaczona, jednak nie chcę jej jeszcze podawać, aby nie czuć się zobligowany żadnymi terminami. Przed premierą na pewno odbędzie się minimum 10 dni zamkniętych betatestów, w których poprawię najważniejsz znalezione błędy. Po premierze zaś, zbiorę wnioski wynikające po używaniu CMS-a w praktyce i niedługo po niej prawdopodobnie zacznę przygotowywać kolejną wersję z adekwatnymi poprawkami.

Jeśli chodzi o zastosowane rozwiązania, to od wydania ostatniej wersji IronCMS-a minęło prawie półtora roku (27.06.2011 - [wersja 1.2.1][ironcms-121]). Sądzę, że przez ten czas zebrałem jednak trochę nowych doświadczeń, z których będę mógł skorzystać przy swojej pracy.

Myślę, że dziś to będzie na tyle - nie chcę przeciągać tego wpisu bez potrzeby. Przed premierą powinien się ukazać jeszcze minimum jeden wpis o IronCMS-ie w wersji 2.0  - prezentacja screenów czy coś - zwyczajna marketingowa papka :D

Pozdrawiam.

[ironcms-121] [portfolio-ironcms]: https://sobak.pl/projects/iron-cms/

Blackout - podliczanie punktów i CRON

W pierwszym wpisie o Blackoucie – silniku gier strategiczno-ekonomicznych via WWW przedstawiłem zaledwie szkic moich notatek. Dlatego też, zgodnie z obietnicą postaram się przybliżyć bardziej jeden z aspektów.

Ostatnio wziąłem na warsztat kwestię w xNovie dość kluczową, podliczanie punktów graczy. Podliczanie w xNovie punktów jest czynnością wykonywaną z panelu administracyjnego, która w założeniu raz dziennie ma policzyć punkty dla każdego gracza i sojuszu w grze, aby potem zapisać je w bazie i przedstawiać np. w zakładce „Statystyki”. Pierwszą sprawą jaka powinna zaintrygować każdego jest pytanie o to, dlaczego taka sprawa nie jest wykonywana automatycznie za pomocą CRON-a. Szczerze mówiąc nie wiem :D Wiem za to, że w xNovie cały skrypt odpowiedzialny za to jest wepchnięty jako zakładka panelu administracyjnego, dlatego nie za bardzo jest możliwość podpięcia tego do CRON-a. Trzeba by to wydłubać do osobnego pliku.

Dlatego też w Blackoucie podliczanie punktów służących do tworzenia statystyk zostało po prostu umieszczone w funkcji BuildStats() (konwencja nazewnictwa zgodna z resztą funkcji w xNovie, żeby nie robić bałaganu większego niż już jest). W tym momencie miejsce wywołania tej operacji (panel administracyjny/CRON) nie ma żadnego znaczenia. Całe podliczenie statystyk sprowadza się do wywołania jednej funkcji.

Budowanie statystyk zostało w xNovie rozbite na dwa pliki: admin/statbuilder.php i admin/statfunctions.php. Cztery funkcje znajdujące się w drugim pliku uprościłem lekko (bo standardowo, jak to w xNovie, generowały trochę nigdzie nie używanych danych) i jako, że są używane tylko przy podliczaniu punktów, przerzuciłem je do pliku z funkcją BuildStats()

Jeśli chodzi o objętość kodu. W xNovie: plik statbuilder.php – 308 linijek, statfunctions.php – 87. Razem daje to 395 linii kodu. U mnie plik spełniający funkcje dwóch powyższych, czyli BuildStats.php zajmuje 232 linijki.

Jedną z kilku przyczyn takiej różnicy w długości kodu jest to, co znalazłem na końcu statbuilder.php – otóż na koniec pliku do podliczania punktów doklejono na chama (nie zgadza się nawet poziom wcięć, choć to w xNovie norma) kod do usuwania nieaktywnych użytkowników. Najlepsze jest to, że w xNovie istnieje już funkcja do usuwania użytkownika razem ze wszystkimi potrzebnymi do tego rzeczami (usuwanie planet, flot, sojuszy itd. itd.)

Wprowadziłem też kilka usprawnień w tabeli która przechowuje statystyki graczy i sojuszów. Zacząłem przede wszystkim od skasowania zbędnych pól - ich liczba zmniejszyła się 25 z do 19, spadł więc też rozmiar trzymanych danych. Najlepszym dowodem na brak myślenia jest fakt, że data podliczenia statystyk, która jest jednakowa w całej tabeli jest przechowywana przy każdym jej rekordzie. A ich może być sporo - po jednym na każdego gracza i na każdy sojusz w grze.

Jeśli chodzi o drugą część wpisu, czyli CRON-a. W oryginalnej xNovie było wiele czynności, które można by wykonywać z jego pomocą - na czele oczywiście podliczanie punktów. Wstępnie w Blackoucie zdecydowałem się aby skrypt odpalany CRON-em realizował następujące zadania: podliczanie punktów, usuwanie graczy, którym minął czas na aktywację konta, w przyszłości także podliczanie rekordów (będą cache'owane i generowane raz na dobę) i wykonywanie innych cyklicznych czynności związanych z przewidywanymi nowymi możliwościami w grze. Oczywiście każda czynność wydzielona do funkcji, tak aby problemem nie było na przykład wywołanie jej z panelu admina.

I to na tyle w tym wpisie, siadam do kodu :)

Blackout - przedstawienie projektu

Już sporo czasu upłynęło od ostatniego wpisu na moim blogu, tak więc stwierdziłem, że nadszedł czas na podzielenie się częścią informacji o tym nad czym właśnie pracuję.

Być może pamiętacie poprzedni wpis  „recenzujący” skrypt xNova służący do tworzenia własnych klonów gry przeglądarkowej Ogame. Postanowiłem przepisać go po swojemu i uzyskać z niego w miarę uniwersalny silnik gier MMORPG via WWW. Zależy mi na tym, aby nie był ściśle ukierunkowany na grę dziejącą się w kosmosie, żeby po dokonaniu zmian w szablonach, plikach językowych i ewentualnie lekkich zmianach mechaniki móc na nim postawić dowolną inną grę strategiczno-ekonomiczną. Skrypt zdecydowałem się ochrzcić Blackout (nazwę, tak jak zazwyczaj wymyślił Rhino, chwała mu za to). Może nie jest to nazwa super oryginalna, ale bardzo chciałem uniknąć kolejnego potworka o nazwie "Super Game Uber-pro Elo Melo Maka-Faka Engine".

Jak wskazują daty modyfikacji niektórych plików – przepisywanie skryptów zacząłem dziesiątego lutego tego roku. Tak więc całkiem przypadkiem dziś mija miesiąc – sądzę, że to niezły pretekst do opisana tego co udało mi się zrobić i tego co mnie jeszcze czeka.

Tak więc: zacząłem od przygotowania najbardziej potrzebnych elementów do rozpoczęcia pisania. Poprawiona klasa baz danych, wzorowana lekko na tej użytej jeszcze w Iron CMS-ie, bardzo prosty logger błędów i króciutki system obsługi szablonów (nie ma chyba nawet 60 linijek).

Zacząłem rzecz jasna od napisania plików dołączanych do każdej strony – mamy więc znany z oryginalnej xNovy plik common.php – w przebudowanej formie, ale spełnia identyczne w założeniu zadanie – wykonuje czynności potrzebne przy wczytaniu każdej strony (np. sprawdzenie czy gracz nie jest zbanowany). W moim silniku pozostały jeszcze resztki ze sławetnego pliku todofleetcontrol.php (możecie o nim przeczytać w tym wpisie, punkt 10). Na razie okroiłem go tylko i przemianowałem na pure_evil.php – sądzę, że to bardziej adekwatna nazwa :D. Potem zostanie usunięty, a każda podstrona będzie ładować tylko to, czego faktycznie potrzebuje.

Jeśli chodzi o zakładki, które dla użytkownika są najważniejsze to:’

  • Podgląd – gotowy w 80%, nie gotowe opuszczanie kolonii i zmienianie nazwy planety
  • Budynki, laboratorium, stocznia, obrona – odtworzone działanie i wygląd z oryginalnej xNovy, mocna przebudowa planowana na następną wersję
  • Oficerowie – gotowe w 100%, jeśli nie liczyć części niedokończonych tłumaczeń
  • Handlarz – gotowy w 20%
  • Sojusz – na początku próbowałem wzorować się na oryginalnym alliance.php jednak po 4 godzinach stwierdziłem, że nie ma to żadnego sensu. Aktualna koncepcja jest rozrysowana na kartce i czeka na realizację
  • Flota – działa sama czynność wysyłania flot, w większości działa misja walki
  • Wiadomości – napisane całkowicie od nowa – jest tam kilka rzeczy do dorobienia i poprawki, ale ogólnie mówiąc plik jest prawie gotowy
  • Galaktyka – ciekawa historia: przerażony ilością zapytań jakie generuje ta zakładka (średnio 50 na odsłonę, przy 1 planecie w pokazywanym systemie) i ilością funkcji jakich używa tylko ta zakładka (17 plików – 1200 linijek) postanowiłem napisać go od zera. Zapytania w pętli zastąpione jednym podwójnym JOIN-em, wszystko ładnie umieszczone w jednym pliku – sądzę, że w wersji ostatecznej plik nie przekroczy 300 linijek
  • Imperium, Surowce, Technologia – gotowe
  • Rekordy – nawet nie zaczęte
  • Statystyki – prawdopodobnie działają, lecz to się okaże dopiero po zrobieniu skryptu do przeliczania punktów
  • Szukaj – gotowe
  • Zbanowani – gotowe, przebudowana tabela trzymająca bany, użyto relacji
  • Chat – gotowy, tylko trzeba go ujednolicić w jeden plik i ogarnąć system BBCode – jeden dla całej gry
  • Kontakt – działa
  • Opcje – mocno odchudzone, nie działa jeszcze urlop i usuwanie konta
  • Panel administracyjny – grubsza sprawa, temat na osobny wpis

Tak, wiem, w większości zrobiłem sobie z tego wpisu kolejne wcielenie notatek odnośnie skryptu, mam jednak nadzieję, że umieszczenie tego publicznie pomoże mi się zmotywować do dalszej pracy.

Jak widać, wiele jeszcze przede mną, myśląc o kilku plikach robi mi się słabo :D, ale jakoś to będzie… Więcej konkretów, mniej suchych notatek obiecuję już w przyszłym wpisie.

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 →

Zapowiedź CMS-a i porządki na stronie

Około dwudziestego grudnia 2010 postanowiłem zacząć wcielać w życie pomysł, który przechodził mi przez myśl co jakiś czas. Miałem zamiar w końcu odrestaurować stronę sobak.pl. Był to czas, gdy blog stał się rozwiązaniem tymczasowym, w zamian za starą wersję mojej strony (kilka skryptów na krzyż). Postanowiłem napisać taki zalążek CMS-a do jej zarządzania.

Dosłownie dzień później stwierdziłem jednak, że mój przyszły skrypt można by uczynić jeszcze bardziej uniwersalnym i stworzyć niego "takiego pełnoprawnego CMS-a". I zacząłem pisać… szło mi to dość opornie. Dla przyspieszenia prac postanowiłem, że skorzystam z ogólnodostępnego szablonu (za co niektórzy chętnie by mnie zabili), aby jak najszybciej móc skupić się na pisaniu "kodu właściwego".

Pierwsza zmiana nastąpiła siódmego lutego 2011. Wtedy to do udziału w projekcie udało mi się namówić m4tx'a. W tym momencie zmieniłem też nazwę skryptu z samozwańczego SobakCMS na IronCMS (wiem, pachnie ironią…). Jeśli by kogoś interesowało pochodzenie nazwy (w co wątpię ;)), to po w poszukiwaniu nazwy przeglądałem iTunes'a i leciałem właśnie po dłuugiej liście utworów Iron Maiden.

Podczas tego już ponad czteromiesięcznego procesu tworzenia naklepałem tyle kodu i tyle razy go poprawiałem, że wydałem sobie cztery wewnętrzne, niepublikowane wersje dla utrzymania porządku. 25.03 postanowiłem zakończyć tworzenie ówczesnej wersji 0.4 i cały kod uzyskany do tej pory… napisać od nowa.

W ten sposób miałem okazję przyjrzeć się jak bardzo partyzanckie i nieoptymalne rozwiązania tam stosowałem (przykład jednego z nich już przedstawiałem). Poprawiłem naprawdę dużo kodu i w dniu dzisiejszym mogę powiedzieć z radością, że prace zmierzają ku końcowi. Premiera zapowiadanego skryptu powinna się odbyć najpóźniej za tydzień (oby nie było tak jak z Fx4). Uprzedzam tylko uczciwie: proszę nie spodziewać się fajerwerków. Nie jestem zawodowym programistą PHP i jest to mój pierwszy CMS. Nie znaczy to z drugiej strony, że będzie tam masa register_globals, magic quotes ect. Starałem się korzystać z nowoczesnych rozwiązań.

I teraz druga część dzisiejszego wpisu. Przeprowadziłem właśnie (kolejne już) porządki na stronie. Podjęte działania:

  • skasowanie starej wersji bloga - niektórzy może pamiętają, że kiedyś blog mój znajdował się pod adresem sobak.pl/blog. Instalacja Wordpressa leżała tam aż do dziś
  • odinstalowałem wtyczki All in one SEO Pack i Syntax Highlighter Evoled, z którymi miałem małe problemy. Pytanie na marginesie: zna ktoś z Was dobrą wtyczkę do podświetlania kodu w WP
  • odinstalowałem wtyczkę Google Analytics for WordPress zastępując ją zwykłym wklejeniem kodu do szablonu. Naprawdę niepotrzebny mi skrypt PHP na 3000 linii do wygenerowania ośmiu linii JavaScriptu.
  • kilka mniejszych optymalizacji
  • wycofałem wsparcie dla IE6. Przy udziale tej przeglądarki w Polsce na poziomie 2% uznałem, że mogę z czystym sumieniem usunąć hacki na tą przeglądarkę

Ogłoszenia parafialne zakończone. O tym, czy Mojżesz uratował się z potopu dowiecie się w następnym odcinku ;)