21.11.2015, 21:38
Choć w świecie IT widać od jakiegoś czasu trend na coraz krótsze cykle wydawnicze i obecnie przeskok z wersji 7.0 na 8.0 nie jest już tak wielkim wydarzeniem, jak kiedyś, twórcy MyBB zdają się zupełnie odporni na tę modę. Pierwsza publiczna wersja MyBB (RC1) została wydana w grudniu 2003 r., a na wydanie 1.0 przyszło nam poczekać jeszcze dwa lata, ale minęła już cała dekada, a skrypt wciąż nie wyszedł z gałęzi 1.x. Ekipa przyjęła, że większe aktualizacje oficjalnie będą oznaczane parzystymi numerami (nieparzyste były zarezerwowane dla wersji zastrzeżonych dla developerów) i dlatego na przestrzeni lat otrzymaliśmy MyBB 1.2, 1.4, 1.6 i 1.8. Wyjątkiem od tej reguły jest jedynie wersja 1.1. Wraz z wykorzystaniem wszystkich parzystych cyfr zbliża się czas na odejście od "jedynki".
Pierwsze konkretniejsze wzmianki o MyBB 2.0 pojawiły się już w czerwcu 2011 r., choć była to w sumie tylko krótka informacja o tym, że taka wersja jest tworzona. MyBB 2.0 miało przynieść całkowicie nowy design – od instalatora po zakamarki panelu użytkownika czy administratora. Prywatne wiadomości miały bardziej przypominać wątki: wiadomości nie były już osobnymi bytami w skrzynce odbiorczej i, ogólnie mówiąc, przestały przypominać maile. MyBB 2.0 było wówczas pisane z wykorzystaniem frameworka Yii (z ang. Yes It Is!) i silnika szablonów Twig.
Przejdźmy jednak do 2.0. Przez most. Bo wydanie 1.8 było właśnie nazywane "mostem" (pomiędzy 1.x a 2.0), który wprowadził głównie zmiany w wyglądzie. Pozbyto się domyślnego motywu (od 2008 nie przeszedł on większych zmian) i zastąpiono go popularnym stylem Apart, który jest notabene dziełem Justina S., obecnie głównego projektanta MyBB. Przy okazji wprowadzono możliwość łatwego zmieniania kolorów w motywach. Jak już zdążyłem wspomnieć, ekipa zdecydowała się również wprowadzić nowe logo i maskotkę, ale największą nowością było wprowadzenie jQuery. We wcześniejszych wersjach takie elementy jak animacje były tworzone z wykorzystaniem Prototype, ale to jQuery ostatecznie wygrało wyścig o bycie najpopularniejszą biblioteką i przejście na nią było po prostu głosem rozsądku. Oprócz tego w 1.8 pojawił się również nowy motyw panelu administratora i instalatora (choć ich układ pozostał bez zmian), pozbyto się galerii awatarów, wprowadzono możliwość stworzenia forumowego kosza, przyciski CSS i ulepszone narzędzia antyspamowe. MyBB 1.8 wydano 1 września 2014 r., twórcom więc zajęło to ponad 2 lata. Pierwsze wpisy o 1.8 pojawiły się bowiem w kwietniu – ten z pierwszego kwietnia potraktowano jako żart, ale już dwa dni później pojawiły się konkretne informacje.
Z pierwszego z tych wpisów dowiadujemy się, że ekipa MyBB porzuciła Yii na rzecz Laravela 5. Laravel w ciągu ostatnich miesięcy zaczął szybko zyskiwać na popularności, co z pewnością przyczyniło się do decyzji o zmianie frameworka. Silnik szablonów nie zmienił się: nadal jest to Twig. Na temat bardziej widocznych zmian w MyBB w wersji 2.0 nie dowiedzieliśmy się zbyt wiele. Oprócz nawiązania do opublikowanych m.in. na Twitterze zrzutów ekranów i filmów, które pokazywały nowy domyślny styl na urządzeniach mobilnych, pokazano nam nowy wygląd tematu, adresy URL przyjazne wyszukiwarkom (obecnie osiągnięcie tego wymaga skorzystania z pluginu Google SEO) i przyciski stworzone w SVG. Z jednej strony niewiele, z drugiej strony był to dopiero pierwszy wpis z tej serii.
Po przeczytaniu drugiego z wpisów dowiadujemy się, że kod MyBB jest tworzony z zachowaniem standardów PSR-2 i PSR-4. Są to wytyczne, które określają zasady formatowania kodu, nazywania zmiennych, funkcji itp. (PSR-2) i strukturę klas, która ma wspomagać ich automatyczne ładowanie (PSR-4). Co więcej, zależnościami w kodzie zarządza teraz Composer, co powinno ułatwić utrzymywanie skryptu, a wiele podstawowych funkcji (np. parser BBCode) wydzielono z kodu głównego. Oznacza to, że każdy będzie mógł w swoim projekcie skorzystać z komponentów stworzonych przez autorów MyBB. Jeśli zaś chodzi o zmiany widoczne przez zwykłego użytkownika: wprowadzono nowy wygląd listy użytkowników (wizytówki zamiast tabeli), widok tematów został uproszczony i dodano do niego awatar autora ostatniego posta (istnieje plugin, który dodaję tę funkcję do wersji 1.8), a system reputacji został rozbudowany o możliwość rozdawania tzw. polubień. Sam mechanizm oceniania wpisów jest oparty na punktach reputacji i przy aktualizacji do 2.0 ma przenieść wszystkie wspomniane punkty na tzw. "lajki". Co ciekawe, system ten nie jest ograniczony tylko do postów na forum: dodanie takiej możliwości do pluginu to kwestia kilku linijek kodu.
W trzecim wpisie autorzy dość dokładnie opisali proces tworzenia MyBB 2.0 od strony stricte technicznej, skupiając się na arkuszach CSS i skryptach JavaScript. Twórcy poszli z duchem czasu i przy tworzeniu nowego domyślnego motywu zdecydowali się na wykorzystanie preprocesora CSS. Zastosowanie takiego rozwiązania pozwala na wykorzystywanie zmiennych, zagnieżdżanie styli, dołączanie arkuszy i wykonywanie w nich działań matematycznych, co nie jest możliwe w zwykłej odmianie CSS. Arkusze są potem kompilowane do "czystego" CSS, dzięki czemu nie wymagają dodatkowych skryptów do działania. Wybór padł tutaj na Sass, jedno z najbardziej znanych narzędzi tego typu, używane w takich projektach jak Bootstrap, Foundation i wielu innych. Rozważane jest również wprowadzenie możliwości korzystania z preprocesorów w motywach użytkowników.
Warto też wspomnieć, że autorzy postanowili nazywać klasy zgodnie ze standardem BEM (z ang. block-element-modifier, czyli blok-element-atrybut). Wszystko to powinno sprawić, że kod CSS będzie znacznie łatwiejszy w utrzymaniu. Jeśli chodzi o skrypty, nie ma w nich zbyt wielu zmian. Nie zdecydowano się na przejście z JavaScriptu na CoffeeScript, TypeScript czy inny język, który później jest kompilowany do JS-u. Komponenty są teraz tworzone jako moduły, które należą do przestrzeni nazw "MyBB" i to chyba największa ze zmian.
Skoro mowa już o JavaScripcie, warto wspomnieć o gulp.js, kolejnym rozwiązaniu, które wspomaga prace nad MyBB 2.0. To system automatyzacji zadań, bardzo podobny do Grunta, który pozwala na wykonywanie wielu czynności automatycznie. Za pomocą gulpa możemy np. po wykryciu zmian w danym pliku .sass skompilować pliki Sassa do CSS, połączyć je w jeden arkusz, a potem go zminifkować. Znacząco przyspiesza to pracę i pozwala na zmniejszenie rozmiaru strony, co się przekłada na szybsze wczytywanie jej.
Choć w trzecim wpisie twórcy skupili się głównie na aspektach technicznych, pojawiło się również trochę informacji o rzeczach, które są bardziej widoczne dla przeciętnego użytkownika. Sporą rewolucję przeszedł wspomniany na początku tego wpisu system prywatnych wiadomości, który obecnie przypomina ten z IPB 3: poszczególne wiadomości są grupowane w wątki, a w jednej rozmowie może uczestniczyć wielu użytkowników. Panel użytkownika również został przeprojektowany, a główną zmianą jest wprowadzenie sekcji "Profil", gdzie znajdują się wszystkie ustawienia związane z kontem użytkownika (tzn. avatar, adres e-mail, hasło, pola w profilu itd.).
Z czwartego z wpisów możemy się dowiedzieć m.in. o wprowadzeniu do procesu tworzenia testów jednostkowych, za które odpowiedzialny jest framework PHPUnit. Testy takie polegają na sprawdzeniu, czy dany fragment kodu przy odpowiednich danych zachowuje się zgodnie z oczekiwaniami, np. czy po próbie rejestracji bez podania adresu e-mail pojawi się komunikat o błędzie. Takie testy zostaną stworzone np. dla nowego parsera postów, który oprócz MyCode ma też obsługiwać formatowanie z użyciem Markdown. Autorzy MyBB poszli jednak o krok dalej i zdecydowali się na skorzystanie z usługi CircleCI, która zapewnia automatyczne wykonywanie wspomnianych testów. Po raz kolejny widać, że twórcom skryptu bardzo zależy na szybkim, dynamicznym rozwoju.
Jeśli zaś chodzi o samo działanie MyBB: własne pola profilu w wersji 2.0 będzie można grupować, a same pola będą generować kod semantyczny i zgodny z HTML5. Interfejs tworzenia wspomnianych pól również został przeprojektowany, ale twórcy podkreślają, że przedstawiony design nie jest ostateczny i może ulec zmianie. Co ciekawe, twórcy zdecydowali się na wprowadzenie do skryptu możliwości cytowania selektywnego, znanej pewnie wielu użytkownikom tego forum za sprawą pluginu autorstwa naszego administratora, Łukasza. Plugin ten jest dość popularny, więc dodanie tej funkcji z pewnością ucieszy wiele osób.
Ostatni z wpisów poświęcony jest głównie zmianom w samym działaniu i wyglądzie skryptu. Z technikaliów mowa jedynie o wytycznych PSR-4 i PSR-2 (o których wspominano już w drugim wpisie). Jedyną zmianą jest robienie wcięć za pomocą tabulatorów, a nie 4 spacji, jak zaleca specyfikacja PSR-2, ale jest to dość gorący temat w środowisku programistów i nie ma co się rozpisywać. Jones stworzył zestaw zasad, które można wykorzystać w CodeSnifferze – narzędziu pilnującym, czy kod jest sformatowany zgodnie z przyjętymi założeniami. Wszystko to jest zintegrowane w CircleCI, o którym wspominano w czwartym wpisie.
Wróćmy jednak do funkcji samego skryptu. W wersji 2.0 dodano możliwość zwijania postów, znaną chociażby z reddita. Sporo zmian czekało system moderacji. System ten pozwala na dodawanie w pluginach nowych opcji i można go stosować również poza wątkami (np. w galerii zdjęć czy dziale pobierania). Miłym dodatkiem jest "przyklejenie" paska z narzędziami moderatorskimi do dolnej krawędzi okna, dzięki czemu jest on zawsze pod ręką. MyBB 2.0 potrafi też przycinać awatary w przeglądarce, co powinno być dużym ułatwieniem dla wielu osób. Wystarczy upuścić obrazek na nasz obecny awatar, a pojawi się interfejs kadrowania. To mała zmiana, ale zdecydowanie przydatna.
Podsumowując, twórcy MyBB szykują coś całkowicie nowego. Na dobrą sprawę ciężko tu pisać o zmianach, bo każdy element został napisany od nowa. Ciężko kwestionować dążenie ekipy do usprawnienia procesu tworzenia, ale pojawia się jedno, ważne pytanie: jak te decyzje wpłyną na społeczność? Twórcy stylów będą musieli nauczyć się korzystania z Twiga, a autorów pluginów czeka zgłębianie nowej struktury skryptu, wytycznych dot. kodowania czy przyjętych standardów. Nie będą oni zmuszeni do ich przestrzegania, ale z pewnością im to ułatwi pracę. Czas pokaże, co czeka MyBB po rewolucji, jaką bezsprzecznie jest wersja 2.0.
Pierwsze konkretniejsze wzmianki o MyBB 2.0 pojawiły się już w czerwcu 2011 r., choć była to w sumie tylko krótka informacja o tym, że taka wersja jest tworzona. MyBB 2.0 miało przynieść całkowicie nowy design – od instalatora po zakamarki panelu użytkownika czy administratora. Prywatne wiadomości miały bardziej przypominać wątki: wiadomości nie były już osobnymi bytami w skrzynce odbiorczej i, ogólnie mówiąc, przestały przypominać maile. MyBB 2.0 było wówczas pisane z wykorzystaniem frameworka Yii (z ang. Yes It Is!) i silnika szablonów Twig.
I po tym wpisie przyszedł czas na "długo, długo nic". O wersji 2.0 wspomniano po raz kolejny dopiero w styczniu 2012 r., przy okazji ogłoszenia nowego logo i maskotki MyBB, ale dowiedzieliśmy się wtedy tylko tego, że zarówno logo, jak i maskotka wejdą w użycie wraz z premierą 2.0. Słowa słowami, nowe logo pojawiło się w wersji 1.8 i już teraz zdobi stronę główną skryptu.
Przejdźmy jednak do 2.0. Przez most. Bo wydanie 1.8 było właśnie nazywane "mostem" (pomiędzy 1.x a 2.0), który wprowadził głównie zmiany w wyglądzie. Pozbyto się domyślnego motywu (od 2008 nie przeszedł on większych zmian) i zastąpiono go popularnym stylem Apart, który jest notabene dziełem Justina S., obecnie głównego projektanta MyBB. Przy okazji wprowadzono możliwość łatwego zmieniania kolorów w motywach. Jak już zdążyłem wspomnieć, ekipa zdecydowała się również wprowadzić nowe logo i maskotkę, ale największą nowością było wprowadzenie jQuery. We wcześniejszych wersjach takie elementy jak animacje były tworzone z wykorzystaniem Prototype, ale to jQuery ostatecznie wygrało wyścig o bycie najpopularniejszą biblioteką i przejście na nią było po prostu głosem rozsądku. Oprócz tego w 1.8 pojawił się również nowy motyw panelu administratora i instalatora (choć ich układ pozostał bez zmian), pozbyto się galerii awatarów, wprowadzono możliwość stworzenia forumowego kosza, przyciski CSS i ulepszone narzędzia antyspamowe. MyBB 1.8 wydano 1 września 2014 r., twórcom więc zajęło to ponad 2 lata. Pierwsze wpisy o 1.8 pojawiły się bowiem w kwietniu – ten z pierwszego kwietnia potraktowano jako żart, ale już dwa dni później pojawiły się konkretne informacje.
Zostawmy jednak MyBB 1.8 i wróćmy do clou całego wpisu, czyli wersji 2.0. 9 marca pojawił się wpis wyjaśniający włamanie na konto MyBB na Twitterze i rzekomy "wyciek" kodu tej wersji. Tak naprawdę haker miał dostęp tylko do bardzo wczesnej wersji kodu (już napisanego z użyciem frameworka Laravel), którą na dobrą sprawę ciężko było nawet nazwać MyBB. Tego samego dnia pojawił się też pierwszy z tzw. "dev postów", które opisują zmiany w 2.0.
Z pierwszego z tych wpisów dowiadujemy się, że ekipa MyBB porzuciła Yii na rzecz Laravela 5. Laravel w ciągu ostatnich miesięcy zaczął szybko zyskiwać na popularności, co z pewnością przyczyniło się do decyzji o zmianie frameworka. Silnik szablonów nie zmienił się: nadal jest to Twig. Na temat bardziej widocznych zmian w MyBB w wersji 2.0 nie dowiedzieliśmy się zbyt wiele. Oprócz nawiązania do opublikowanych m.in. na Twitterze zrzutów ekranów i filmów, które pokazywały nowy domyślny styl na urządzeniach mobilnych, pokazano nam nowy wygląd tematu, adresy URL przyjazne wyszukiwarkom (obecnie osiągnięcie tego wymaga skorzystania z pluginu Google SEO) i przyciski stworzone w SVG. Z jednej strony niewiele, z drugiej strony był to dopiero pierwszy wpis z tej serii.
Po przeczytaniu drugiego z wpisów dowiadujemy się, że kod MyBB jest tworzony z zachowaniem standardów PSR-2 i PSR-4. Są to wytyczne, które określają zasady formatowania kodu, nazywania zmiennych, funkcji itp. (PSR-2) i strukturę klas, która ma wspomagać ich automatyczne ładowanie (PSR-4). Co więcej, zależnościami w kodzie zarządza teraz Composer, co powinno ułatwić utrzymywanie skryptu, a wiele podstawowych funkcji (np. parser BBCode) wydzielono z kodu głównego. Oznacza to, że każdy będzie mógł w swoim projekcie skorzystać z komponentów stworzonych przez autorów MyBB. Jeśli zaś chodzi o zmiany widoczne przez zwykłego użytkownika: wprowadzono nowy wygląd listy użytkowników (wizytówki zamiast tabeli), widok tematów został uproszczony i dodano do niego awatar autora ostatniego posta (istnieje plugin, który dodaję tę funkcję do wersji 1.8), a system reputacji został rozbudowany o możliwość rozdawania tzw. polubień. Sam mechanizm oceniania wpisów jest oparty na punktach reputacji i przy aktualizacji do 2.0 ma przenieść wszystkie wspomniane punkty na tzw. "lajki". Co ciekawe, system ten nie jest ograniczony tylko do postów na forum: dodanie takiej możliwości do pluginu to kwestia kilku linijek kodu.
W trzecim wpisie autorzy dość dokładnie opisali proces tworzenia MyBB 2.0 od strony stricte technicznej, skupiając się na arkuszach CSS i skryptach JavaScript. Twórcy poszli z duchem czasu i przy tworzeniu nowego domyślnego motywu zdecydowali się na wykorzystanie preprocesora CSS. Zastosowanie takiego rozwiązania pozwala na wykorzystywanie zmiennych, zagnieżdżanie styli, dołączanie arkuszy i wykonywanie w nich działań matematycznych, co nie jest możliwe w zwykłej odmianie CSS. Arkusze są potem kompilowane do "czystego" CSS, dzięki czemu nie wymagają dodatkowych skryptów do działania. Wybór padł tutaj na Sass, jedno z najbardziej znanych narzędzi tego typu, używane w takich projektach jak Bootstrap, Foundation i wielu innych. Rozważane jest również wprowadzenie możliwości korzystania z preprocesorów w motywach użytkowników.
Warto też wspomnieć, że autorzy postanowili nazywać klasy zgodnie ze standardem BEM (z ang. block-element-modifier, czyli blok-element-atrybut). Wszystko to powinno sprawić, że kod CSS będzie znacznie łatwiejszy w utrzymaniu. Jeśli chodzi o skrypty, nie ma w nich zbyt wielu zmian. Nie zdecydowano się na przejście z JavaScriptu na CoffeeScript, TypeScript czy inny język, który później jest kompilowany do JS-u. Komponenty są teraz tworzone jako moduły, które należą do przestrzeni nazw "MyBB" i to chyba największa ze zmian.
Skoro mowa już o JavaScripcie, warto wspomnieć o gulp.js, kolejnym rozwiązaniu, które wspomaga prace nad MyBB 2.0. To system automatyzacji zadań, bardzo podobny do Grunta, który pozwala na wykonywanie wielu czynności automatycznie. Za pomocą gulpa możemy np. po wykryciu zmian w danym pliku .sass skompilować pliki Sassa do CSS, połączyć je w jeden arkusz, a potem go zminifkować. Znacząco przyspiesza to pracę i pozwala na zmniejszenie rozmiaru strony, co się przekłada na szybsze wczytywanie jej.
Choć w trzecim wpisie twórcy skupili się głównie na aspektach technicznych, pojawiło się również trochę informacji o rzeczach, które są bardziej widoczne dla przeciętnego użytkownika. Sporą rewolucję przeszedł wspomniany na początku tego wpisu system prywatnych wiadomości, który obecnie przypomina ten z IPB 3: poszczególne wiadomości są grupowane w wątki, a w jednej rozmowie może uczestniczyć wielu użytkowników. Panel użytkownika również został przeprojektowany, a główną zmianą jest wprowadzenie sekcji "Profil", gdzie znajdują się wszystkie ustawienia związane z kontem użytkownika (tzn. avatar, adres e-mail, hasło, pola w profilu itd.).
Z czwartego z wpisów możemy się dowiedzieć m.in. o wprowadzeniu do procesu tworzenia testów jednostkowych, za które odpowiedzialny jest framework PHPUnit. Testy takie polegają na sprawdzeniu, czy dany fragment kodu przy odpowiednich danych zachowuje się zgodnie z oczekiwaniami, np. czy po próbie rejestracji bez podania adresu e-mail pojawi się komunikat o błędzie. Takie testy zostaną stworzone np. dla nowego parsera postów, który oprócz MyCode ma też obsługiwać formatowanie z użyciem Markdown. Autorzy MyBB poszli jednak o krok dalej i zdecydowali się na skorzystanie z usługi CircleCI, która zapewnia automatyczne wykonywanie wspomnianych testów. Po raz kolejny widać, że twórcom skryptu bardzo zależy na szybkim, dynamicznym rozwoju.
Jeśli zaś chodzi o samo działanie MyBB: własne pola profilu w wersji 2.0 będzie można grupować, a same pola będą generować kod semantyczny i zgodny z HTML5. Interfejs tworzenia wspomnianych pól również został przeprojektowany, ale twórcy podkreślają, że przedstawiony design nie jest ostateczny i może ulec zmianie. Co ciekawe, twórcy zdecydowali się na wprowadzenie do skryptu możliwości cytowania selektywnego, znanej pewnie wielu użytkownikom tego forum za sprawą pluginu autorstwa naszego administratora, Łukasza. Plugin ten jest dość popularny, więc dodanie tej funkcji z pewnością ucieszy wiele osób.
Ostatni z wpisów poświęcony jest głównie zmianom w samym działaniu i wyglądzie skryptu. Z technikaliów mowa jedynie o wytycznych PSR-4 i PSR-2 (o których wspominano już w drugim wpisie). Jedyną zmianą jest robienie wcięć za pomocą tabulatorów, a nie 4 spacji, jak zaleca specyfikacja PSR-2, ale jest to dość gorący temat w środowisku programistów i nie ma co się rozpisywać. Jones stworzył zestaw zasad, które można wykorzystać w CodeSnifferze – narzędziu pilnującym, czy kod jest sformatowany zgodnie z przyjętymi założeniami. Wszystko to jest zintegrowane w CircleCI, o którym wspominano w czwartym wpisie.
Wróćmy jednak do funkcji samego skryptu. W wersji 2.0 dodano możliwość zwijania postów, znaną chociażby z reddita. Sporo zmian czekało system moderacji. System ten pozwala na dodawanie w pluginach nowych opcji i można go stosować również poza wątkami (np. w galerii zdjęć czy dziale pobierania). Miłym dodatkiem jest "przyklejenie" paska z narzędziami moderatorskimi do dolnej krawędzi okna, dzięki czemu jest on zawsze pod ręką. MyBB 2.0 potrafi też przycinać awatary w przeglądarce, co powinno być dużym ułatwieniem dla wielu osób. Wystarczy upuścić obrazek na nasz obecny awatar, a pojawi się interfejs kadrowania. To mała zmiana, ale zdecydowanie przydatna.
Podsumowując, twórcy MyBB szykują coś całkowicie nowego. Na dobrą sprawę ciężko tu pisać o zmianach, bo każdy element został napisany od nowa. Ciężko kwestionować dążenie ekipy do usprawnienia procesu tworzenia, ale pojawia się jedno, ważne pytanie: jak te decyzje wpłyną na społeczność? Twórcy stylów będą musieli nauczyć się korzystania z Twiga, a autorów pluginów czeka zgłębianie nowej struktury skryptu, wytycznych dot. kodowania czy przyjętych standardów. Nie będą oni zmuszeni do ich przestrzegania, ale z pewnością im to ułatwi pracę. Czas pokaże, co czeka MyBB po rewolucji, jaką bezsprzecznie jest wersja 2.0.