Użytkownik:Ostrzyciel/blog techniczny
Miejsce do zbierania różnych przemyśleń i apdejtów technicznych serwera. Nic ciekawego, chyba że jesteś kompletnym świrem.
Po części to kontynuacja protobloga zaczętego w tym forum.
14 stycznia 2020 – SMW i Parsoid/PHP[edytuj • edytuj kod]
Semantic mimo że jest wspierany przez różne firmy, to jego kolejne wersje wydawane są dość… ociężale. Wersja SMW oficjalnie wspierająca nową wersję MW wychodzi zwykle kilka miesięcy po premierze tej drugiej. Rzecz jasna można próbować odpalić starszą wersję SMW na nowym MediaWiki, ale to nie jest wspierane i może wybuchnąć. Po drodze też można trafić na wersję rozwojową i ją zainstalować na serwerze, tak zrobiliśmy w przypadku 1.33. Przy apgrejdzie do 1.34 szybko przetestowałem czy poprzednie SMW działa, działało, to wrzuciłem na serwer i bangla. Nooo i kilka dni później okazało się, że właściwości kategorii nie są poprawnie aktualizowanie i żeby się zapisały, trzeba wykonać dodatkowego null edita. Dość szybko ktoś zgłosił problem, a i devowie SMW się zainteresowali, więc jest szansa że to naprawią w skończonym czasie. Wniosek: następne aktualizacje będziemy odkładać pewnie o co najmniej miesiąc, żeby ominąć najgorsze bugi.
Parsoid to ciekawy przypadek. To jest zewnętrzny parser MediaWiki napisany przez Wikimedię w javascripcie (tak, oni to serio uznali za dobry pomysł), który ma kilka dodatkowych bajerów, które sprawiają, że może być wykorzystywany w VisualEditorze. Mieliśmy nawet Parsoida przez jakiś czas na serwerze do obsługi wczesnej wersji zaawansowanych linkujących, ale ten złom okazał się być zbyt mało dokładny, upierdliwy i ramożerny. Z tego też powodu nadal nie mamy VisualEditora na Nonsensopedii, po prostu nie ma na to RAM-u. Wikimedia po kilku latach się zreflektowała, że doklejanie kodu w JS do MediaWiki to idiotyzm i postanowiła przepisać to na PHP i wcielić w MediaWiki, a nawet zastąpić Parsoidem obecny parser. To będzie… rozpiździel, delikatnie mówiąc. Przy okazji zostanie całkowicie przeprojektowany sposób w jaki MediaWiki parsuje rzeczy i pozmieniane zostaną wszystkie hooki, z których korzystają rozszerzenia. Ogólnie: nie będzie dostępu do wnętrza parsera i wszystko będzie musiało być bezkontekstowe. Oznacza to, że zaawansowane linkujące będą musiały zostać przepisane (a przynajmniej część odpowiedzialna za znajdowanie linków), na ten moment też średnio wiadomo czy w ogóle będą one możliwe do wykonania. Szansa jest w tym, że ludzie od SMW chcą hooka, który by odpowiadał za ogarnianie składni [[ ]]
, więc może tu będzie dało się wpiąć. Kwestia tego jakie konkretnie hooki zostaną zaimplementowane jest otwarta, będę śledzić temat i spróbuję przeforsować kilka zmian jeśli będzie trzeba. Czytanka dla chętnych: https://lists.wikimedia.org/pipermail/wikitech-l/2020-January/092941.html
Ostrzyciel | Dyskusja 12:59, 14 sty 2020 (CET)
- Wygląda na to, że Parsoid/PHP może zostać wcielony w MW z wersją 1.35: https://lists.wikimedia.org/pipermail/wikitech-l/2019-December/092888.html Ostrzyciel | Dyskusja 23:10, 20 sty 2020 (CET)
19 stycznia 2020 – nie bądź sierotą![edytuj • edytuj kod]
Nie będę się powtarzać, w tym diffie jest wyjaśnione. Śmiszna rzecz, okazało się że koliduje z mw:Extension:Disambiguator trochę, wrzuciłem patcha i mam nadzieję, że to w skończonym czasie zatwierdzą. Póki co mamy na serwerze połataną wersję. Aha, no i wczoraj jeszcze parę bugów w AdvancedBacklinks pokleiłem, wyszło przez alergię na redlinki kilka dziwności. Takie unit testy dla ubogich.
Przy okazji wywaliłem Nonsensopedia:Przygarnięcie porzuconych, nie wiem co myśleli jak to pisali, ale raczej myśleli niewiele.
Ostrzyciel | Dyskusja 12:06, 19 sty 2020 (CET)
22 stycznia 2020 – tryb zaawansowany Minervy[edytuj • edytuj kod]
WMF wreszcie się wziął i nieco poprawił Minervę żeby dało się z niej jakkolwiek korzystać w kwestiach edytorsko-administracyjnych. Oczywiście jak zwykle było więcej pierdzielenia niż faktycznej roboty, ale coś zrobili. Zachęcam do do wejścia na skórce mobilnej w pasek boczny > Ustawienia i zaznaczenie opcji Tryb zaawansowany. Modyfikuje to nieco menusy, dodaje więcej przycisków i ogólnie dodaje miodku do życia. Ostrzyciel | Dyskusja 10:18, 22 sty 2020 (CET)
26 stycznia 2020 – kto to napisał? i SMW[edytuj • edytuj kod]
Przypadkiem nadziałem się na ciekawą rzecz, narzędzie Who Wrote That?, które na kilku Wikipediach potrafi zwizualizować kto napisał jakie fragmenty artykułu. Sprawdziłem, to naprawdę działa. Niezaprzeczalnie fajny bajer i mógłby się przydać przy następnym Gwoździu, ale obawiam się, że zainstalowanie tego nie będzie proste i nie wiem czy mamy na to zasoby. Cóż, zobaczy się, warto zanotować, że takie coś istnieje.
A co do Semantica to hurra, naprawili ten bug z 14 stycznia, nową wersję SMW już wgrałem na serwer i śmiga jak należy.
Ostrzyciel | Dyskusja 15:21, 26 sty 2020 (CET)
28 stycznia 2020 – UW i galerie[edytuj • edytuj kod]
Ostatnio trochę bugów połatałem, między innymi w UploadWizardzie który teraz już powienien poprawnie pokazywać dostępne licencje w preferencjach (tak, jest taka lista tam) i je respektować. Można też wybrać licencję praca własna – cc-by-sa-3.0, bo licencyjne świry tak lubią. Do tego wreszcie udało mi się ustawić poprawnie keszowanie obrazków i fontów po stronie klienta. Chyba.
Ciekawsze były galerie, ostatnio z Grzesiem stwierdziliśmy, że ładniej będzie jak w artykułach galerie tworzone znacznikiem <gallery>
będą bez ramek, szczególnie na mobilnej. No i faktycznie wygląda to lepiej, przy okazji mogliśmy nieco te obrazki powiększyć. Problem w tym, że później okazało się, że z tego samego kodu generującego galerie korzystają strony specjalne i kategorie i tam też się tak zrobiło, co rozwaliło kompletnie nasze kochane rozszerzenie MarkImages od kolorowych ramek w zależności od licencji. Trochę pogrzebałem i wyszło mi że nie ma rady, trzeba spaczować core MediaWiki. Task jest, odpowiedni kod też, teraz tylko pytanie czy to przejdzie. Póki co u nas wgrałem patcha i działa.
Ostrzyciel | Dyskusja 16:47, 28 sty 2020 (CET)
13 lutego 2020 – linki w Słowniku i InstantCommons[edytuj • edytuj kod]
Wreszcie się zabrałem za lekki przegląd linków w Słowniku (co za mną chodzi już od… roku ponad chyba). Jak kiedyś z Grzesiem ustaliliśmy, hasła słownikowe generalnie powinny linkować tylko do siebie wzajemnie, poza kilkoma uzasadnionymi przypadkami (np. link sam w sobie tworzy jakiś żart).
Linków w Słowniku (zanim zacząłem) nie było jakoś szczególnie dużo, ledwo 1723 linki bezpośrednie, z czego 890 wewnątrz Słownika, pozostałe 833 poza Słownik (głównie do przestrzeni głównej). Zrobiłem sobie listę linków wychodzących poza Słownik, wyrzuciłem z tego słowniki językowe i inne różne dziwne rzeczy, po czym przejrzałem to ręcznie. Została mi lista linków do wywalenia (konkretnie 377 sztuk), co też poczyniłem botem.
Oprócz tego napisałem dość prostego bota do znajdowania potencjalnych linków wewnątrz Słownika. Niestety nie umie on w piękną gramatykę języka polskiego, czyli jest w stanie ogarnąć tylko nieodmienione formy wyrazów, ale i tak całkiem sporo nowych linków pododawał. Bilans na koniec mikroakcji dwudniowej: 456 linków poza Słownik (głównie z artykułów, które nie są hasłami) i 1285 linków wewnątrz Słownika. Na razie to tyle, ale może kiedyś się pokuszę o podpięcie do tego sensownego lematyzera i zrobienie tego z magicznym rozumieniem gramatyki. Czary.
No a poza tym ostatnio sporo grzebałem w dokumentacji kodzie związanym z podłączeniem Nonsy do Commons, który to jest główną przyczyną wolnego otwierania się stron i czasowych wyłączeń Nonsy. Serio, to jest beznadziejnie napisane i muli strasznie. Swoją drogą nasz problem jest dość mało znany na innych wiki, bo niewiele jest projektów korzystających w tak dużym stopniu z Commons. Rzecz jasna jest Wikipedia i inne wiki WMF-u, ale one są na tym samym klastrze co Commons i dzięki temu korzystają z zupełnie innego, dużo szybszego rozwiązania. Co z tego grzebania wyjdzie – zobaczymy, na razie spisuję sobie rzeczy. Jak coś się uda to się pochwalę.
Ostrzyciel | Dyskusja 19:12, 13 lut 2020 (CET)
17 lutego 2020 – rewert z powodem[edytuj • edytuj kod]
Trochę dzisiaj przewaliłem gadżet od rewertu z powodem. Ma teraz nowy interfejs oparty o wikimediowe OOUI (zamiast jQuery UI, które zostanie kiedyś wyrzucone z MW), wspiera wersję mobilną (jakoś, muszę to jeszcze potestować) i oznacza teraz wszystkie rewerty znacznikiem rewert. Ostrzyciel | Dyskusja 13:07, 17 lut 2020 (CET)
25 lutego 2020 – różne drobne[edytuj • edytuj kod]
Różne drobne rzeczy popoprawiałem w rozszerzeniach i core MediaWiki. Skrypt migracyjny AJAXPolla wreszcie działa, kiedyś jak go porządnie przetestuję to i u nas uruchomię, na razie trochę temu nie wierzę do końca. Pewnie zrobię to przy okazji 1.35, w lecie.
Był też drobny bug, że galerie w podglądzie artykułu miały niepoprawny typ (tradycyjny, a nie nolines), ale tylko jeśli korzystało się z javascriptowego podglądu, to też poprawiłem.
Zmieniłem też collation Semantica i teraz hasła słownikowe i inne cuda powinny się poprawnie sortować. Niestety z tego co widzę nie naprawiło to tego przeklętego buga z „Ł” w Nondanych, z tym się męczę już dłuższy czas i nadal nie mam na to pomysłu. Dobra wiadomość jest taka, że ktoś planuje przepisać PageForms na OOUI w wakacje, co by wyeliminowało problem całkowicie, no i wreszcie bym jakkolwiek rozumiał kod tego kochanego rozszerzenia. Przy okazji zmieniłem też nasze collation na takie wspierające sortowanie po wartościach liczb, a nie tylko alfabetycznie, to jest dostępne od MW 1.28 jako opcja. Wyszło wtedy też, że skrypt do aktualizowania klucza sortującego w bazie nie działa w ogóle, poszedł patch do core w tej sprawie i nawet to przyjęli i zbackportowali do 1.34, także powinno się to pojawić razem z 1.34.1 dla ogółu. U nas już jest i śmiga jak należy :)
Aha, wziąłem się też za przepisywanie konkursów w rozszerzeniu RatePage, będą teraz konfigurowalne coś na wzór filtrów nadużyć. Jak ktoś ciekawy doczytać co tam kombinuję, to zapraszam na morenkę.
Ostrzyciel | Dyskusja 21:09, 25 lut 2020 (CET)
28 lutego 2020 – konkursy RatePage[edytuj • edytuj kod]
Nooo, wyklepałem. Konkursy gwiazdkowe mają teraz nowy interfejs do zarządzania nimi (dostępny na Specjalna:RatePageContests). Lista konkursów jest widoczna publicznie, szczegóły już tylko dla adminów. Dla ciekawskich: skrin interfejsu. Można dowolnie konfigurować kto może głosować i oglądać wyniki. Jest też tabelka do szybkiego robienia zestawień z wynikami (do tej pory takie coś musiałem ręcznie generować przez SQL). Aha, w liście konkursów się Gwóźdź 2019 rozmnożył, to wynika ze sposobu w jaki go przeprowadziliśmy, potem postaram się to uprzątnąć nieco.
No, także będzie snadniej organizować konkursy i przy tym można ograniczyć wyświetlanie wyników podczas trwania konkursu, dzięki czemu wyeliminujemy sugerowanie się cudzymi głosami. Jeszcze będę dorzucał ficzery do tego co jakiś czas, ale na razie wystarczy.
Ostrzyciel | Dyskusja 16:04, 28 lut 2020 (CET)
8 marca 2020 – semantyczne pliki vol. 1[edytuj • edytuj kod]
Od… dawna, bardzo dawna nosiłem się z zamiarem przebudowania systemu szablonów plików, tak żeby miały ręce i nogi, jakiś sens i, co najważniejsze, były czytelne maszynowo. Chodzi głównie o przystosowanie tego do tych szumnie od dawna zapowiadanych galerii, które by miały pobierać informacje o podpisie, autorze i licencji bezpośrednio ze strony pliku. Dałoby to też zupełnie nowe możliwości wyszukiwania, np. wg licencji składowych, autora (również zewnętrznego), czy źródła. Oprócz tego uprościłoby to część opisywania plików, np. przez automatyczne pobieranie i opisywanie składowych pliku (o tym więcej innym razem).
W pierwszy etapie całkowicie przebudowałem to, w jaki sposób jest interpretowany parametr author=
, teraz jego zawartość jest przepuszczana przez moduł Lua, który wyciąga z tego poszczególnych autorów i zapisuje ich jako własności semantyczne. Oprócz tego generowane są też ostrzeżenia, które można znaleźć przez wyszukiwanie semantyczne, dla szybkiego namierzania źle opisanych plików. Trochę o formatowaniu autorstwa rozpisałem się tutaj.
Oprócz tego doszły atrybuty opisu, podpisu i potwierdzenia licencji, te się jeszcze aktualizują, do rana powinny być wypieczone. Kolejne atrybuty będę dodawać sukcesywnie, w kolejce są inne wersje, data utworzenia (to trudniejsze niż brzmi), źródła, licencje i składowe. Jest co robić.
Ostrzyciel | Dyskusja 22:13, 8 mar 2020 (CET)
- Aha, uporządkowałem też wyniki Gwoździa 2019 żeby nie straszył w formularzu spamem. Działa. Ostrzyciel | Dyskusja
21 marca 2020 – automatyczny preload[edytuj • edytuj kod]
Kilka razy już spotkałem się z użytkownikami, którzy tworząc newsa nie przez formularz na SG NonNewsów robili koślawe nagłówki, bo zapominali o tym i owym. Oczywiście gdyby skorzystali z odpowiedniego przycisku, problemu by nie było. Trzeba jednak przyznać, że nie jest to rozwiązanie idealne i odpowiednie nagłówki powinny pojawiać się każdemu, nieważne w jaki sposób tworzy nową stronę. To samo tyczy się Słownika i wstawiania kategorii w Grze. Takoż powstało rozszerzenie NamespacePreload, banalnie proste, ma chyba 10 linijek w PHP, działa nawet z antycznym MediaWiki i pewnie jeszcze długo podziała. Wczytuje toto zadany szablon dla danej przestrzeni w okno edycji, opisane to jest tutaj.
Ostrzyciel | Dyskusja 20:07, 21 mar 2020 (CET)
24 marca 2020 – kreator linków![edytuj • edytuj kod]
Wreszcie, po ponad pół roku od rozpoczęcia działa kombajn linkowy, jakoś. Opis jak to działa jest tutaj.
Zajęło to trochę i nieco zmieniła mi się koncepcja po drodze (m.in. uprościłem nieco samą edycję stron, pierwotnie tam był planowany dużo bardziej złożony interfejs), ale założenie pozostało takie samo. Najwięcej czasu zajęło mi kopanie się z zawiłościami języka polskiego (większość kodu ogarniającego to jest w oddzielnym programie upisanym w C++, istna męka, Sieradz Męka) i z interfejsem w JavaScripcie, tego języka jak nienawidziłem tak nienawidzę.
Miłej zabawy! Ostrzyciel | Dyskusja 20:31, 24 mar 2020 (CET)
2 kwietnia 2020 – więcej kreatora i RatePage[edytuj • edytuj kod]
Trochę poprawiłem rzeczy w kreatorze linków, dzięki wszystkim za udział w pseudobecie! :) Przede wszystkim zmienił się moment kiedy wykonywana jest operacja wstawiania linków do tekstu. Pierwotnie działo się to leniwie, dopiero po otworzeniu karty z edytorem, co sprawiało dodatkowe kłopoty, bo mogło się okazać, że linku z jakiegoś powodu jednak nie da się dodać. Wybrałem to podejście bo bałem się znacznego obciążenia procesora serwera gdyby wybrać podejście z przetwarzaniem tego przed wyświetleniem wyników, ale po kilku testach okazało się, że nie jest źle i tak można żyć. Zmienił się też sposób keszowania wyników wyszukiwania, teraz kluczem jest para (ID strony docelowej, ID rewizji edytowanej strony), a pierwotnie było to ID użytkownika i przechowywane były tylko parametry wyszukiwania. Swoją drogą takie podejście wywiera też dużo większe parcie na object cache, który jak się okazuje jest skończony i ma domyślnie tylko 32 mega. Podbiłem go do 64 i przeniosłem też parser cache do bazy danych, co rozwiązało przypadkiem zagadkę kiepsko keszujących się stron – one się po prostu nie mieściły. Aha, no i doszedł bajer do wyrzucania niechcianych linków z poziomu diffa, calutki wyhakowany w JS. Działa. Trochę się tego boję, ale działa. No i problem jest taki, że to jest uzależnione od interfejsu, więc jakby ktoś np. korzystał z diffa edytora 2017, to to nie przejdzie, nie mówiąc o diffie wizualnym. Noo, ale tym to się będziemy martwić jak VE wdrożymy.
Co do RatePage to jak się okazuje wrzucenie 40 widżetów do głosowania na jedną stronę i odpytywanie z nich serwera przez AJAX w 40 oddzielnych zapytaniach to słaby pomysł, szczególnie jak się samemu na tym serwerze ustawiło odpowiednie limity częstości zapytań. Załadowanie całej strony (a konkretniej to widżetów) zajmuje wtedy 8–10 sekund, czyli jest silnie ujowo. No to żem przerobił całe API tego pięknego rozszerzenia, dorzuciłem propa do action=query i śmiga jak szalone. Do tego parę drobnych poprawek weszło.
Jak mnie nic nie trafi, to w ciągu tygodnia chcę dorobić jeszcze jedną rzecz do RatePage, która mi już od dawna chodzi po głowie: powiązanie z SMW. RP by ustawiało odpowiedniego propa na stronie dla oceny ogólnej artykułu, a w przypadku konkursów może robić podobiekty. No ale to się jeszcze okaże czy uda mi się w czas strukturę SMW rozkminić, fajnie by było bo by oszczędziło pracy przy konkursach.
Ostrzyciel | Dyskusja 21:13, 2 kwi 2020 (CEST)
Aaaa, kompletnie zapomniałem. Trafiłem przypadkiem na office hours search teamu Wikimedii, to się wbiłem i parę śmiesznych pytań dot. kreatora zadałem. Pytanie pierwotnie było o to dlaczego limit długości zapytań w Cirrusie jest taki a nie inny (jak się okazuje: bo tak), ale temat troszkę się rozwinął. Co do limitu to okazało się że on jest jednak konfigurowalny, tylko kompletnie nieudokumentowany (co poprawię jak znajdę chwilę). Przy okazji zasugerowali też podejście do wyszukiwania z użyciem stemmera zamiast obecnej tabelki deklinacji. Po pierwsze: nie miałem pojęcia, że do Cirrusa da się dołączyć stemmer. Po drugie: da się, WMF to zrobił, po czym się okazało, że ten stemmer (Stempel) jest silnie, silnie ujowy i musieli go hakować żeby do czegoś się nadawał. Trochę popróbowałem i yyy, no, działa, przy czym dokładność nadal pozostawia wiele do życzenia i nie jestem pewien czy opieranie się na tym w kreatorze jest najlepszym pomysłem. Niestety stemmery dla polskiego dzielą się na niezbyt przydatne akademickie z dupy i ciulowe skomercjalizowane, które jadą na technologii sprzed n lat. Może kiedyś w tym coś jeszcze pogrzebię, na razie kreator zostaje jak jest, a pewnie niedługo wdrożę stemmer w szukajce, ale to głównie dla czytelników.
Ostrzyciel | Dyskusja 21:21, 2 kwi 2020 (CEST)
13 kwietnia 2020 – bajery w JavaScripto[edytuj • edytuj kod]
Naprawdę przepraszam za chińskie bajki, musiałem.
Doszły różne nowe rzeczy w JS, po części wymyślone na spotkaniu, a trochę mojej inwencji. O tych spotkaniowych będzie więcej na najbliższym spotkaniu, także tutaj tylko krótko napiszę.
- Dymek pokazujący ipkom przycisk edycji, działa. Na razie tylko na skórkach desktopowych, mobilna… nad nią się później zastanowię.
- Na skórce mobilnej w stopce strony jest teraz przycisk Edytuj tę stronę, sporawy.
- Jeśli macie włączony MultimediaViewer (te wyskakujące obrazki na pełen ekran po kliknięciu w nie, domyślnie włączone), to teraz po przewinięciu w dół kółkiem myszy oprócz opisu grafiki znajduje się też oceniałka pozwalająca ocenić obrazek.
To ostatnie nie było… trywialne do zaimplementowania, plus tego jest taki, że przy okazji przepisałem sporo kodu w RatePage i zaczyna to mieć ręce i nogi.
Z rzeczy nad którymi pracuję:
- Narzędzie do pracy na grafach linków (już mamy codzienne zrzuty bazy linków). Będzie wyliczać różne metryki i mówić mądre rzeczy. To się przyda w późniejszym etapie walki z nielinkozą.
- Rozszerzenie funkcjonalności AdvancedBacklinks o śledzenie sekcji, w której znajduje się link. To będzie cokolwiek śmieszne w implementacji (już nawet zacząłem) i najbardziej mnie ciekawi czy zarżnie to kompletnie wydajność. Powinno być generalnie znośnie, ale wielkość tych indeksów w bazie zaczyna mnie powoli przerażać, zobaczymy.
- API wewnętrzne Semantica to niedziałająca kupa śmieci, tej funkcjonalności od konkursów nie udało mi się dodać przed końcem Odsłownie. Może zdążę przed Fotołowcą xd
Z innych: ten pojawiający się od czasu do czasu czerwony pypeć Semantica w prawym górnym rogu jest denerwujący i kompletnie nieprzydatny. Nie da się go wyłączyć. Sprawa zgłoszona do devów SMW, jest szansa, że to w skończonym czasie naprawią.
Ostrzyciel | Dyskusja 14:09, 13 kwi 2020 (CEST)
27 kwietnia 2020 – wolne strony Gry i inni[edytuj • edytuj kod]
Gadżet od wolnych stron Gry to była masakra, zarówno pod względem wydajności, bo mieliło się niemożliwie długo, jak i w ogóle możliwości edytowania tego, jako że Szewek miłościwie przepuścił to przez jakąś piękną maszynkę zmieniającą kod w nieczytelne gówno. Stwierdziłem walić to i przepisałem od zera w PHP, Specjalna:Wolne strony Gry, działa. Nawet tak ze 100x szybciej.
Oprócz tego połatałem w tym czasie parę bugów, a z rzeczy nad którymi pracowałem… Cóż, chyba się poddam ze śledzeniem nagłówków w AdvancedBacklinks. Im dłużej się w to bawię, tym bardziej się zastanawiam czy to ma jakikolwiek sens, szczególnie od strony koniecznego nakładu pracy. Inną sprawą jest to, że ten kod i tak już trzymał się na taśmie, a po tych usprawnieniach to by chyba się trzymał na ślinę, wtykanie w parser kolejnych ficzerów jest jak gra w Jengę po pijaku.
Grafów linków i Semantica w RatePage na razie nie ruszałem, ale dziabnę to w najbliższej przyszłości. Zacząłem też grzebać takie coś, ale to raczej ma niski priorytet i se będzie powoli rosło.
Ostrzyciel | Dyskusja 20:14, 27 kwi 2020 (CEST)
17 maja 2020 – nowe linkujące, grafy linków, moderacja[edytuj • edytuj kod]
Interfejs linkujących jest 2/10 powiedziałbym. Nie działa na mobilce za dobrze (wszystko się rozłazi), jest nieczytelny, te filtry są w ogóle od czapy trochę zrobione i ogólnie ech. WMF miał to przerobić na OOUI, nie wyjszło jak zwykle, ale uznałem, że przerobię nasze niezależnie i przy okazji trochę ich durnych pomysłów wywalę. Jest, jakoś działa, pewnie jeszcze parę bugów tam jest, więc z merdżowaniem poczekam.
Z zabaw grafem linkujących powoli coś wychodzi, na przykład to. Dalej chyba raczej będę szedł w metody algebraiczne, bo jak odpaliłem Floyda-Warshalla na tym to zdechło kompletnie. W każdym razie graf jest i można się bawić.
Rozszerzenie od moderacji powoli się skleja, na Nonsie jest już pierwszy ficzer usuwający patrolmarki na usuniętych plikach. Kolejne będzie pewnie patrolowanie, rewerty muszą poczekać na patch w core MW.
Aha, no i oprócz tego masa drobnych łatek i usprawnień, również w kreatorze linków.
Ostrzyciel | Dyskusja 22:14, 17 maj 2020 (CEST)
29 maja 2020 – mobilny Timeless, geolokalizacja wioch i inne[edytuj • edytuj kod]
Już od dłuższego czasu (znacznie dłużej niż to forum :P) myślę nad wprowadzeniem Timelessa jako skórki mobilnej. Daje on nam pełną funkcjonalność skórki desktopowej jednocześnie świetnie działając na telefonach. Są z tym jednak różne różniste problemy, które z pomocą Stima i Polskacafe ostatnio rozkminiam.
- MobileFrontend to ścierwo, robi straszny bałagan we wszystkim. Myślałem nawet nad napisaniem lżejszej alternatywy, ale uznałem że mi się nie chce i będziemy grzebać w tym co jest. Teoretycznie MF powinien działać tak samo z każdą skórką, niestety to fikcja i poprawnie działa tylko z Minervą. Taki MultimediaViewer wymagał sporej ilości hacków żeby się w ogóle poprawnie wyświetlił na Timelessie w trybie mobilnym. Do tego jest cała masa innych wkurzliwych pierdół, o których nie chce mi się rozpisywać.
- Style, style, style. Wiele elementów interfejsu musi dostosować się do realiów mobilnych, dlatego kod CSS Timelessa (rozbity na te dwa pliki) już dobija do 7 kB. Niemniej efekty już widać i zaczyna to wyglądać nawet estetycznie.
- Tagi mobileonly i nomobile w naszej wersji to srogi hack, który nie dość że polega na pewnym bugu w MediaWiki, to jeszcze sprawdza tylko nazwę skórki, a więc przestałby działać po przejściu na Timelessa. Od dłuższego czasu głowię się jak to rozwiązać, przewaliłem kilka najróżniejszych podejść do tematu i wydaje mi się, że mam wreszcie coś, co będzie działać. Zostaje zaimplementowanie tego, na razie nie mam za bardzo na to czasu, ale w skończonym czasie na pewno do tego siądę.
- Kreator przesyłania. Wikimedia niby taka progresywna, taka nowoczesna, ale jak zwykle wszystko od dupy strony robią. Kreator przesyłania po prostu rozłaził się na mobilce koszmarnie (możecie sprawdzić jak to wygląda na Commons, tam dalej się rozwala), więc siadłem, wymodziłem trochę CSS-a na kolanie i nagle magicznie da się na to patrzeć. Niesamowite. Podejrzewam, że WMF nigdy tego nie zrobił, bo zamiast tego rozwija swoją kochaną apkę od Commons na Androida, mnożąc sobie robotę, jak już wspomniałem, dla mnie to podejście kompletnie od rzyci strony.
Z rzeczy koniecznych do zrobienia przed wjazdem mobilnego Timelessa na pełnej zostały: stopka, tagi mobileonly/nomobile, ostrzeżenie o ciasteczkach, wygląd ozetów, optymalizacja wydajności i trochę drobnicy. Prawdopodobnie w czerwcu się z tym wyrobimy :3
Stim też bardzo chciał coś zrobić, więc dostał większy projekt do ogarnięcia: system pozwalający na sugerowanie lub automatyczne generowanie zobaczteżów w artykułach o miejscowościach. Działałoby to mniej-więcej tak, że znajdowałoby na mapie najbliższe wiochy i zwracało listę kilku z nich. Brzmi dość prosto, ale wymaga trochę rzeźbienia w szablonach i botach. Na razie Stim jest na etapie implementowania bota, który byłby w stanie znajdywać lokalizację danego artykułu na mapie. Idzie to mu naprawdę nieźle, jestem nawet pod wrażeniem. Widać trochę brak doświadczenia, ale też chęć do uczenia się i duże zdolności. Będzie mąka z tego chleba, czy coś.
Z innych rzeczy to z Expertem dalej rzeźbimy rozszerzenie do moderacji, JS od patrolowania jest już praktycznie skończony, w PHP zostało jeszcze kilka poprawek. Zajmę się scalaniem tego za tydzień-dwa pewnie, także w czerwcu powinniśmy już mieć stabilniejsze patrolowanie rozszerzone o nowe bajery. Poza tym jak zwykle wleciało trochę losowych bugfixów, a na ND pojawił się nowy ficzer wykrywający pętle linków między artykułami. Z zaimplementowaniem tego było sporo dziabania mocno zagmatwanego wikitekstu, no ale jakoś to działa. Przy okazji odkryłem dlaczego ludziom czasem kasowały się z szablonu Gra parametry dodane przez bota, dzieje się tak po kliknięciu opcji pokaż zmiany. Wyłączyłem ją całkowicie, powinno wystarczyć.
Ostrzyciel | Dyskusja 13:37, 29 maj 2020 (CEST)
21 czerwca 2020 – umarła Minerva, niech żyje Timeless[edytuj • edytuj kod]
Jak zapowiedziałem, tak zrobiłem, ustawiłem Timelessa jako domyślną skórkę mobilną Nonsensopedii. Nie spotkałem jeszcze kogoś, komu by się ta zmiana nie podobała, więc zakładam że jest gituwa.
- Minervę wyłączę całkowicie pewnie dzisiaj albo jutro. Nie jest nam potrzebna, a tylko dokłada roboty z konserwacją kodu i ogarnianiem tego wszystkiego.
- Tagi nomobile i mobileonly przepisałem w dość ciekawy sposób, są zmieniane na specjalne znaczniki podczas parsowania i gdy wyciągamy treść strony z cache robimy na tym dodatkową transformację. Polega ona na zbudowaniu drzewa tagów mobilnych i po prostu rekursywnego spłaszczenia go. Kod jest, jeśli ktoś ciekawy. Myślę, że w takiej formie to powinno być w stanie działać dość długo i raczej nawet wytrzyma zmianę parsera na Parsoid.
- Trochę zabawy było ze stopką, bo Timeless takowej za bardzo nie posiada, u nas to trochę hack css-owy. Niemniej wygląda raczej nieźle.
- Znalazłem po drodze sporo bugów we współpracy Timelessa z MobileFrontendem. Niby ktoś kiedyś to ogarniał, ale domyślnie nie działają takie rzeczy jak rozwijane menusy czy ozety.
Poza tym trochę bugfixów no i pchnąłem nieco rozszerzenie od moderacji do przodu. Niedługo powinniśmy mieć gotową część od patrolowania.
Ostrzyciel | Dyskusja 11:03, 21 cze 2020 (CEST)
8 lipca 2020 – linkujące, geozobaczteże, informationozzza[edytuj • edytuj kod]
- Zaawansowane linkujące doczekały się dwóch nowych magicznych słówek na podstawie uwag i obserwacyj poczynionych przez różnych ludzi (w tym Runab i Stim, dzięki!).
__TRANSKLUZJATONIEADOPCJA__
które sprawia, że samo transkludowanie (wstawianie jak szablon) strony nie sprawia, że strona ta automatycznie się odsieraca. Przykład gdzie takie zachowanie odsieracające to chociażby Gra, gdzie bywają strony zawarte na innych stronach i ta treść faktycznie jest używana. Z drugiej strony mamy Słownik:A–Ż które transkludują masę stron, a te hasła są w praktyce nielinkowane. Także spodziewajcie się dużo większej ilości osieroconych słowników :P__ALERGIANAREDLINKIPRZEZ__
które powoduje, że szablony sprawdzają, czy zawarte w nich linki nie są czerwone. Po ludzku – teraz możemy znajdować redlinki w szablonach siostrzanych, będą się one pokazywać na Specjalna:Niepożądane redlinki. Przy okazji poprawiłem parę drobnych bugów.- Good news: AdvancedBacklinks działa już na 1.35, utrzymując nawet kompatybilność z 1.34, także z pół roku spokoju mamy. Bad news: z tym będą problemy później i tak. Na razie jednak Wikimedia wyraża się o swoich planach co do parsera dość niejasno.
- Bot Stima od geolokalizacji miejscowości powoli kończy pracę, już mamy prawie wszystkie współrzędne wbite. Jest też gadżet do generowania zobaczteżów na podstawie lokalizacji, na razie w wersji testowej. Nie nadaje się to raczej jeszcze do szerszego użytku, musimy się najpierw upewnić czy dobrze działa.
- Eksekk dalej pracuje nad przerobieniem systemu szablonów licencji, powoli to zaczynać nabierać formy. Jak to skończymy, to projekt przebudowy systemu opisywania plików będzie na ukończeniu, zostanie tylko trochę drobnicy. No, przynajmniej względem takich kloców jak przepisanie
{{Information}}
> - Poza tym raczej mało czasu na dłubanie miałem przez pracę. Rozszerzenie od moderacji stoi, głównie dlatego że tam jest masa kodu w JS do przepisania, a mi się tego naprawdę nie chce robić.
- Aha, za tydzień jest chyba branch cut 1.35, a więc wydanie będzie koło sierpnia. Niestety ilość burdelu jaka się zadziała w kodzie w tej wersji jest wręcz kosmiczna (ba, sam przyłożyłem do tego rękę tym razem xd), więc rozszerzeniom dostosowanie się raczej zajmie trochę czasu. Upgrade planuję wstępnie na wrzesień.
Ostrzyciel | Dyskusja 11:44, 8 lip 2020 (CEST)
19 lipca 2020 – patrolowanie i semantyczne konkursy[edytuj • edytuj kod]
Jest i zapowiadane niemal miesiąc temu przebudowane patrolowanie zmian! :) Dużo pracy przy tym wykonał Eksekk, chałwa mu za to. Rzecz powinna mniej się wieszać i ogólnie działać dużo bardziej przewidywalnie. Następne w kolejce są rzeczy związane z rewertami, ale one będą wymagać nowego hooka w core MediaWiki, którego dalej nie przepchnąłem. Spatchuję to pewnie lokalnie, ale postaram się też pomęczyć kogoś, żeby to przeszło wreszcie.
Jest też rzecz, którą zacząłem w kwietniu, czyli semantyczne zapisywanie wyników konkursów. Jak to działa jest opisane w dokumentacji rozszerzenia, a zysk z tego podstawowy jest taki, że oszczędzi to nam w przyszłości pracy z przeklepywaniem wyników konkursów. Oczywiście będzie trzeba przerobić odpowiednie szablony konkursów, od FotoŁowcy 2020 zaczynając :)
Aha, zbliża się powolutku 1.35, na razie to jest alpha. Bardzo pocieszający jest fakt, że SMW już działa na tej alphie, no, tylko wali całą masę warningów. Może nie będzie aż tak źle z apgrejdem.
Ostrzyciel | Dyskusja 22:44, 19 lip 2020 (CEST)
29 lipca 2020 – mniej podskakiwania mobilek[edytuj • edytuj kod]
Zerkam co jakiś czas w raporty wypluwane przez Google'a związane z używalnością witryny na urządzeniach mobilnych. No niby durne, niby pierdoła, a od takich rzeczy jak czas ładowania strony czy rozmiar klikalnych przycisków zależy pozycjonowanie. The more you know. W każdym razie ostatnio zaczęliśmy wybijać limit na metryce CLS, czyli Cumulative Layout Shift, co oznacza mniej-więcej jak bardzo strona „skacze” po załadowaniu. Wiadomo – podskakująca strona to nic dobrego, użytkownik dostaje epilepsji i oczopląsu. Zbadałem sprawę i są za to odpowiedzialne dwie rzeczy:
- Ostrzeżenie o ciastkach które na mobilnym Timelessie było domyślnie po prostu zepsute. Poprawiłem je żeby wyświetlało się jakkolwiek sensownie, ale odpowiedni kod CSS ładował się asynchronicznie, przez co układ strony radośnie se podskakiwał. Naprawiłem to wydzielając kod CSS do oddzielnego gadżetu, który jest ładowany „na górze”, tj. ładuje się synchronicznie blokując renderowanie dalszych części DOM. I jest spoko.
- Sitenotice. Może was to zdziwi, ale domyślnie sitenotice nie jest ukrywalne, do ukrywania służy specjalne rozszerzenie. Noooo i to rozszerzenie jest z czasów króla Świeczka, więc działa jak działa. Rozważałem przeniesienie decyzji o tym czy wyświetlić sitenotice do kodu po stronie serwera, ale psułoby to keszowanie HTML (które kiedyś może naprawię i wprowadzę z powrotem) i ogólnie by było meh. Zrobiłem inline'owany skrypt JS który ukrywa/pokazuje sitenotice w taki sposób, że strona nigdy nie skacze. Nie jest to piękne, ale działa. Aha, no i to jest kolejne sforkowane rozszerzenie na Nonsie. Problemów z nim nie przewiduję, bo jest bardzo proste i ogarnia wszystko od 1.29 do 1.35 bez problemu.
A poza tym to mam mało czasu na dziubanie w Nonsę niestety i ten stan się pewnie utrzyma do końca sierpnia. Z innych niusów: zdaje się że ludzie interesują się naszym rozszerzeniem od oceniania stron. Może skłoni mnie to do ogarnięcia tego ulepu w nieco mniejszy ulep.
Ostrzyciel | Dyskusja 00:50, 29 lip 2020 (CEST)
20 sierpnia 2020 – dużo drobnicy[edytuj • edytuj kod]
Poogarniałem trochę drobnych rzeczy, sporo z nich dość zaległych.
- Google narzeka na niektóre strony że się źle na mobilkach wyświetlają. Głównie nonsens wizualny i strony z długimi formułami matematycznymi (bo te się nie łamią automatycznie niestety). Powoli się przez to przekopuję.
- Z pozycjonowania też inną pierdołę ogarnąłem: w guglu przekierowania do stron specjalnych wywalają błędy, bo rediry są indeksowalne, a same strony specjalne nie. Rozwiązaniem jest słówko __NOINDEX__, niestety ono wypluwa tylko odpowiednie zastrzeżenia w HTML-u strony, nie zmieniając samej sitemapy. Zrobiłem odpowiedni patch w MediaWiki który to naprawia, pewnie wejdzie koło 1.36. Mamy na razie połataną wersję.
- Oceniałka stron nie będzie się pokazywać już na stronach ujednoznacznień. Chyba zgodzicie się, że nie miało to sensu.
- W zaawansowanych linkujących poprawiłem śmiesznego buga który powodował złe oznaczanie linków przez szablony takie jak
{{programowanie}}
. Nudne i długo by tłumaczyć. - Kilka z naszych rozszerzeń od niedawna ładuje CSS nie asynchronicznie, a razem z HTML-em. Dzięki temu układ strony powinien nieco mniej skakać przy ładowaniu.
- Wikimedia zrobiła tech talk o wsparciu dla rozszerzeń w Parsoidzie, który ma zastąpić obecny parser za jakieś dwa lata pewnie. W skrócie: będzie burdel, do tego prawdopodobnie zepsują składnię [[coś::xd]] używaną w Semanticu. Będzie śmiesznie, stay tuned.
- Jak przy Wikimedii jesteśmy, to kontynuuje ona też uparcie projekt przerabiania Vectora na jeszcze większe gówno niż to już jest. Działa to już domyślnie na fhransuskiej wikhiphedii, jest tragedia. Prawdopodobnie wprowadzą to jako default na wszystkich wikipediach w przyszłym roku, będzie to też dobra okazja do zastanowienia się nad przyszłością skórki na Nonsie. No ale to nie dzisiaj, na razie obserwujmy bacznie sytuację.
Ostrzyciel | Dyskusja 19:16, 20 sie 2020 (CEST)
21 września 2020[edytuj • edytuj kod]
- Mamy nowe śmiszne narzędzie – w przypadku napotkania konfliktu edycji zostanie pokazane specjalne okienko do łatwego scalania wersji, jak ktoś kiedyś korzystał z gitowego scalania, to właśnie mniej-więcej tak to wygląda. Rzecz zrobiła Wikimedia Deutschland (jak wszystkie przydatne rzeczy w Wikimedii) i działa ślicznie. Z tego też powodu wyłączyłem domyślnie włączone powiadomienie o konflikcie edycji, jak ktoś chce, to proszę sobie włączyć w preferencjach.
- Zacząłem grubiej grzebać w UploadWizardzie, w sensie w głównej jego wersji, wikimediowej. Obecnie u nas mamy forka tego narzędzia, co jest spoko (bo możemy robić co chcemy), ale co wersję MediaWiki musimy scalać zmiany nasze z tymi wikimediowymi, co jest… dość męczące. Idzie to jak krew z nosa, nikt tam za bardzo nie jest zainteresowany zajmowaniem się tym rozszerzeniem, a w ogóle to weź daj nam spokój. Także no, to może trochę zająć.
- Wziąłem się za narzędzie do śledzenia zobaczteżów, będzie to raczej rozszerzenie w PHP zapisujące odpowiednie dane w Semanticu. Nie chce mi się pisać botów i do tego bot ogarniający kilkanaście tysięcy stron jednocześnie byłby dość zmulisty, więc stwierdziłem że wepnę się prosto w MediaWiki i elo. Przy okazji eksperymentuję trochę z nowymi sposobami pisania rozszerzeń w MW, więc może mi to troszkę dłużej zejść.
- MediaWiki 1.35 powinno wyjść jeszcze w tym miesiącu. Jako że opublikowanie tej wersji zajęło wieki, to większość rozszerzeń już zdążyła się dostosować i sprawnie działa na 1.35. Upgrade może w październiku zrobimy…? Zobaczy się. 1.36 powinna niby wyjść w lutym, ale to zobaczymy co im z tego wyjdzie.
- On a side note: kończy się letni dołek odwiedzin, znowu rośnie ruch czytelników na Nonsie. Ma to też wpływ na wydajność serwera, który całkiem możliwe że będzie wymagał apgrejdu w tym roku. Stay tuned, będę o tym jeszcze informował.
- Wrzesień miałem nieco luźniejszy, ale od teraz aż do… nie wiem czasu będę miał coraz mniej.
Ostrzyciel | Dyskusja 10:12, 21 wrz 2020 (CEST)
17 października 2020[edytuj • edytuj kod]
Jak wcześniej pisałem, mamy nowy, większy serwer. Przy okazji zrobiłem też apgrejd do MediaWiki 1.35 i wleciało nam sporo nowości.
- Większy serwer to więcej RAM-u, a więcej RAM-u to wesoły SQL i wesołe MediaWiki. Zwiększyłem pool InnoDB (dzięki czemu baza powinna szybciej zasuwać) i PHP-FPM (co pozwoli obsłużyć więcej użytkowników jednocześnie). Oprócz tego zainstalowałem Redisa i przeniosłem do niego keszowanie większości rzeczy. Oczywiście Redis jest in-memory, więc musiałem ograniczyć jego wielkość, na razie do 300 mega i to zdaje się starczać. Widać znaczący wpływ tego na wydajność, możemy keszować znacznie więcej rzeczy niż uprzednio w APCu no i mogliśmy się pozbyć w większości keszowania w SQL, które jest po prostu bardzo wolne.
- Większy serwer to więcej CPU, a więcej CPU, to możliwość przekonfigurowania jobrunnera na bardziej agresywne podejście do wykonywania zadań. Zadania w tle takie jak aktualizacja kategorii, linków, szukajki no i treści stron po zmianie szablonów powinny chodzić znacznie szybciej.
- Pracuję też ciągle nad kolejnymi optymalizacjami. Najwięcej do zrobienia jest niestety na frontendzie, będę starał się zmniejszać ilość niepotrzebnie ładowanego JS-a i CSS-a, by nie obciążać ludziom przeglądarek. To jednak będzie wymagało sporo pracy i patchów w różnych rozszerzeniach, więc trochę to zajmie.
- W 1.35 też nieco uproszczono instalację VisualEditora, teraz teoretycznie wystarczy dodać jedną linijkę w configu i bangla. To prawda, bangla, ale wtedy mielibyśmy problemy z brudnymi diffami w niektórych specyficznych sytuacjach. Ci, co pamiętają VE na Wikii, pewnie kojarzą burdel w kodzie jaki był robiony przez edytor wizualny. Właśnie tego chcę uniknąć, żebyście mnie na widłach nie ponieśli, dlatego nasz VE korzysta z dodatkowego bajeru który nazywa się RESTBase i pośredniczy między edytorem i parserem. Mniejsza jak to dokładnie działa, w każdym razie zainstalowanie tego to ból w dupie, ale się udało.
- Pracuję ze Stimem nad doprowadzeniem VE do stanu używalnego dla ogółu. Dużo testowania i poprawek przed nami, ale już da się jakoś edytować – ten wpis na blogu napisałem właśnie przy użyciu VE :) Temat wprowadzenia VE zostanie pewnie podniesiony za jakiś czas na spotkaniu, gdzie przedstawię też jakie mamy opcje wdrożenia.
- Razem z VE wpadł bajer do przeglądania diffów wizualnych. W widoku diffa wystarczy kliknąć w prawym górnym rogu na przycisk wizualnie. Rzecz jest nadal troszkę eksperymentalna, więc nie działa idealnie, ale jak najbardziej można korzystać.
- Przy apdejcie zrobiłem też trochę drobnych różnistych poprawek w naszych rozszerzeniach. Nic powalającego.
Kurde, podpis w VE nie działa. No nic, jest co poprawiać xd Ostrzyciel | Dyskusja 12:56, 17 paź 2020 (CEST)