TAKI NIBY BLOG

Krótka historia programu Słownik Krzyżówkowicza

Urodziłem się ...
Nie, to by było za długo ...

Około roku 1986 komputery typu PC pojawiły się u nas w większej ilości. Najlepsze z nich miały kartę grafiki EGA. Potem pojawiła się karta VGA, w której można było zaprogramować generator znaków i w ten sposób mieć na ekranie polskie litery.
Mój kolega chwalił się najlepszą kartą firmy "Synklaps". Dopiero po pewnym czasie dotarło do mnie, że mówi on o karcie "Tseng Labs".

A potem wraz z kartą dostałem do ręki najlepszą dokumentację do programowania tej karty. Zacząłem eksperymentować i umiałem już z Turbo Paskala zaprogramować na niej polskie litery. W swojej pysze postanowiłem pochwalić się tą wiedzą na łamach czasopisma "PC Kurier" w dziale "Dla praktyków".

Sądzę, że wielu programistów amatorów (i być może zawodowców) skorzystało z opublikowanego listingu w swoich programach. (PC Kurier nr 24/92)

Po pewnym czasie napisał do mnie pan Adam Dzierżanowski z prośbą o pozwolenie wykorzystania mojego modułu w swoim programie, który będzie dołączony do Słownika do rozwiązywania krzyżówek. Zgodziłem się pod warunkiem, że gdzieś tam w dalszej części czołówki umieści informację skąd się wzięły polskie litery w jego programie i że przyśle mi wynik końcowy tzn. program i książkę.
Po pewnym czasie dostałem przesyłkę tzn. gotowy program i książkę.
Program rzeczywiście ułatwiał znajdywanie haseł ale żeby go uruchomić trzeba było za każdym razem zajrzeć do książki i stamtąd wpisać jakieś słowo - za każdym razem inne - dość uciążliwe - prawda?
Więc w swoim hakerskim zapędzie znalazłem w programie odwołanie do generatora liczb losowych i go wyłączyłem. Teraz program przy starcie pytał zawsze o to samo słowo :) Bodajże rok później na giełdzie komputerowej znalazłem następną zhakowaną wersję tego programu, która już o nic nie pytała.

Hakerski zapęd mnie nie opuścił i w wolnej chwili postanowiłem przeanalizować budowę samego słownika. Trochę mi to zajęło, ale doszedłem jaka jest metoda grupowania wyrazów i kompresji całości. Ponieważ wygląd programu oryginalnego niezbyt mi się podobał (napisany w TP7) więc postanowiłem napisać własną wersję. Jak się okazało moja wersja działała dużo szybciej, co się okazywało szczególnie na wolniejszych komputerach np. z zegarem 4.77 MHz (tak, tak były takie maszynki) oraz była wygodniejsza w użyciu (czyż nie każdy autora tak twierdzi :). Moja wersja była niestety niedokończona - nie miała możliwości wydruku oraz nie sortowała alfabetycznie znalezionych wyrazów. Z tego powodu nigdy nie ukazała się na rynku i nie zagroziła Imperium Billa Gatesa :)

Ach, jakże wiele dzieł z powodu skromności autora nie wzbogaciło naszej cywilizacji.

Krótko mówiąc programik przetrwał w letargu kilka lat. Dopiero zainteresowanie autora internetem, studiowanie języka HTML i JavaScript zaowocowało przeniesieniem programu Wieże Hanoi z Basica na JavaScript. Niechęć do niedopracowanych nowości firmy z Redmond spowodowało, że autor nadal używa starych Windows 3.11 (pisane w 2002r), jest odporny na wirusy oraz od dawna używał Opery do surfowania po Internecie. W starych wersjach Opera miała dość słaby interpreter JavaScript i autor musiał korzystać tylko z podstawowych możliwości tego języka. Miało to taki pozytywny skutek, że napisane programy, po lekkim doszlifowaniu, "chodziły" praktycznie w każdej wersji przeglądarki obsługującej JavaScript - nawet WebTV.

Dobry algorytm, dobra grafika i intuicyjna obsługa spowodowała, że program "Towers of Hanoi" znajduje się na czołowym miejscu zestawień dotyczących tej logicznej układanki.

Ale wróćmy do naszych krzyżówek. Autor założył sobie serwer Linuxowy i może robić na nim co chce. Ma do dyspozycji kilkanaście języków programowania. Oczywiście program można napisać w Javie (po stronie odbiorcy), ale oznaczałoby to konieczność transmitowania całego słownika do komputera użytkownika - 400 KB - raczej odpada. Można by program napisać w Perlu - ale autor jakoś się nie przemógł by się tego pożytecznego języka nauczyć. Wzrastająca popularność języka PHP i plotki o jego łatwości podsunęło autorowi myśl przetłumaczenia programu do rozwiązywania krzyżówek właśnie na ten język. Zakup książki "PHP3 Internetowe aplikacje bazodanowe" okazał się niezbyt dobrą inwestycją (sporo braków w opisie podstaw języka), ale przełamało pierwsze lody. Kawałek po kawałku przerobiło się źródło w paskalu na PHP. Duże fragmenty (obsługa ekranu i skrolowania) się uprościły. Procedur do wydruku nie trzeba było wogóle robić.
Sortowanie polskich wyrazów okazało się pewnym problemem. Czytanie polskiej listy dyskusyjnej użytkowników PHP prawie nic nie dało.
Jak zwykle na polskiej liście jest kilku mądrali, którzy potrafią tylko napisać RTFM, tyle, że dłużej i mniej kulturalnie.
Ale po namyśle okazało się, że sposób kodowania słownika ułatwia późniejsze sortowania. Zamiast dekodowania, wyszukania i sortowania należy zrobić wyszukanie, sortowanie i dekodowanie.

W trakcie używania Słownika okazało się, że nie ma w nim sporo wyrazów; np. logo, łodzianin czy łodzianka, warszawiak itd. nie mówiąc o braku nazwy zespołu "Ich Troje" :-)
Tak więc następną zmianą było napisanie procedur do dopisywania nowych wyrazów do słownika - oczywiście przez Internet.
Po miesiącu do bazy haseł dopisano kilkaset pozycji.

W czasie gdy program zaczął prawidłowo pracować dowiedziałem się, że w Onecie uruchomiono podobny słownik firmy TIP. Z ciekawości zacząłem porównywać wyniki wyszukiwania i stwierdziłem, że oba słowniki znacznie się różnią zasobem haseł - w obu są oczywiście braki. W słowniku TIP brak jest nazw własnych, nazw geograficznych itp. W zamian dużo jest form żeńskich nazw zawodów (bohemistka chełmianka chlewiarka cywilistka czołgistka doliniarka), są liczne zdrobnienia (amboneczka goloneczka idioteczka).
Jako ciekawostkę mogę podać że jest tabakiera ale brak tabakierki. Jest bardzo dużo nazw czynności (przekimanie przekopanie przekuwanie przykrzenie przykucanie przykuwanie przekazanie).
Z powodu tych różnic postanowiłem uzupełnić swój program o sprawdzanie w słowniku TiP. Hasła znalezione w słowniku TIP ukazują się na ekranie w osobnej ramce. Odpytywanie słownika TIP ma tę wadę, że spowalnia działanie mojego programu o kilka sekund (zależy od pory dnia i stanu łącz internetowych). Teraz się zastanawiam czy by nie sprawdzać TIP gdy będzie wybrana w wyszukiwarce odpowiednia opcja. Istotne jest czy dotychczasowa szybkość działania wyszukiwarki jest akceptowalna. Serwerowi to zajmuje drobne ułamki sekund, ale druciki TPSA są dość zapchane i w dalekiej Polsce łączny czas oczekiwania na odpowiedź może być znaczny.

W roku 2005 'zaabsorbowałem' do swojego słownika zawartość kilku słowników tematycznych znalezionych w polskim internecie. Poza tym stwierdziłem, że można program trochę przyspieszyć przez rezygnację z zakodowanego oryginalnego słownika - dekodowanie zabiera trochę czasu, a słownik dodatkowy stał się na tyle duży, że warto go podzielić na osobne pliki zawierające słowa o tej samej długości. Połączenie zdekodowanego oryginalnego słownika z dodatkowym słownikiem i podział na wiele plików skróciło wyszukiwanie o ok. 50%. Sam program też się oczywiście skrócił.

Następnym etapem, o którym myślę to wprowadzenie opisów haseł przy ich wprowadzaniu. Może to trochę zabezpieczyć przed wpisywaniem bzdur lub haseł z błędami ortograficznymi - wersja 1.7 już to uwzględnia. Gdyby wszystkie hasła miały opisy tak jak w niektórych leksykonach krzyżówkowych, to można by dobudować logikę do wyszukiwania hasła po znaczeniu. Ale to sporo roboty :-(

na tym historia się urywa - co dalej będzie - niewiadomo

Jesień 2007 - w planach absorbcja Słownika Alternatywnego - na nim oparty jest słownik ortograficzny użyty w Mozilli. W starszej wersji były tam "alternatywne" pisownie wielu trudnych od strony ortograficznej wyrazów. W nowszym wydaniu z jesieni 2007 pozbyto się chyba większości błędów ortograficznych, ale brak tam także wielu wyrazów, które podobno są zakazane w grach słownych np. ZOMO. Żeby nie straszyć dzieci, czy co?

Zima 2007/2008 - na prośbę osób z Ameryki, które nie mają polskiej klawiatury dorobiłem do formularza guziki do wprowadzania polskich liter. Na początku była tylko możliwość wstawiania litery na końcu już wpisanego ciągu znaków - bardzo proste w Javascrypcie, acz niezbyt uniwersalne. Więc zapuściłem żurawia do internetu i znalazłem funkcję do wstawiania znaku w miejscu kursora - jest dość krótka i piękna - sam bym jej nie napisał, bo różnie działa dla Internet Explorera i dla Firefoksa/Mozilli. Boję się sprawdzać w Operze :)

Zima 2008 - dołożyłem jeszcze jedną opcje wyszukiwania w innym słowniku Marcina Szajdy Adiasz. Zasób słów chyba pochodzi ze słownika scrablowego bo zawiera różne formy gramatyczne słów. Aby internauta szybko zauważył czym się różni zbiór odpowiedzi słownika Adiasza od mojego zbioru hasła inne niż z mojego zaznaczane są na czerwono.

Marzec 2008 - zmieniłem sposób zapisu logów programu. Poprzednio się dopisywały do tego samego pliku, który po kilku miesiącach dochodził do kilku megabajtów. Teraz logi są zapisywane tylko dla danego dnia tygodnia i po tygodniu kasowane. W związku z tym można było dodać (kwiecień 2008) proste wykresy aktywności krzyżówkowiczów w ciągu dnia - patrz strona pk-stat2.
Gwałtowny skok użycia Słownika o godz 8.00 oraz znacząco większe używanie w poniedziałek i mniejsze używanie w soboty i w niedziele wskazuje ile osób rozwiązuje krzyżówki w pracy :). Po południu widać kiedy krzyżówkowicze jadą do domu i wieczorem kiedy jest nudny film.
Średnie używanie 12 haseł na jednego wizytującego wskazuje, że klientami Słownika są mniej zaawansowani krzyżówkowicze.

Wrzesień 2008 - Napisałem wersję, którą nazwałem “Samopomoc Krzyżówkowicza”, a potem kilka wersji podobnych.
Są one połączeniem czatu internetowego ze Słownikiem.
W skrócie pozwala na wpisywanie znanych liter, znaczenia hasła i oczekiwanie na pomoc innych bardziej bystrych krzyżówkowiczów.
Wiele razy sam Słownik nie może znaleźć hasła gdyż krzyżówkowicz pomylił wpisywane literki z innych krzyżujących się haseł i praktycznie bez znalezienia własnych błędów nie ma szans na zgadnięcie hasła. I tu przydaje się pomoc kogoś innego kto tę samą krzyżówkę rozwiązał i może naprostować pomylone drogi biedaka. Zresztą mogą pomóc osoby mające głębszą wiedzę w jakiejś bardzo specjalistycznej dziedzinie.

Ostatecznie są cztery wersje pk20d, pk20e, pk20f, pk20g, dwie ostatnie są odczepione od Słownika.

Marzec 2009 - dołożyłem wykres uśrednionych aktywności w ciągu tygodnia — patrz pk-stat2. Obserwacje aktywności wskazują, że przed świętami zmniejsza się liczba odwiedzin - kobiety mają dużo roboty w domu. W wigilię o godzinie 17 jest minimum odwiedzin. W pierwszy dzień świąt jest nadzwyczaj duży ruch.

2010 - obserwacje aktywności tygodniowej wskazywały, że najwięcej odwiedzających Słownik jest w czwartek. Ale po pewnym czasie tendencja się zmieniła i maksimum wypada we wtorek. Jak się domyślamy wtedy pojawia się w kioskach pewne czasopismo krzyżówkowe.

2012 - maksimum odwiedzin przesunęło się z wtorku na poniedziałek. Podobno chodzi o Przekrój.

2009 grudzień - wprowadziłem system rejestracji użytkowników. Zasadniczym celem było skrócenie logów - zamiast długiego adresu zapisują się dane jakie chce internauta, które go odróżniają od innych np. ksywa, numer kodu, NIP, wiek albo cokolwiek innego. Dane są zapisywane na jego komputerze za pomocą ciasteczka (cookie).
Zarejestrowani mają większe uprawnienia i korzystaniu mogą zobaczyć więcej haseł pasujących do podanej maski. Poprzdnio Słownik pokazywał wszystkim maksymalnie 35 podpowiedzi. Po rejestracji jest rozróżnianie - niezerejestrowani dostają tylko 10 podpowiedzi, a zarejestrowani 50.

2010 lipiec - zmieniłem system rejestracji na bardziej złośliwy.
W ogóle niezarejestrowani dostają 10 podpowiedzi pasujących do maski, zarejestrowani tylko ksywą dostają 25 podpowiedzi, a zarejestrowani którzy podali dokładniejsze dane dostają do 63 podpowiedzi. Te dokladniejsze dane to seria numeru dowodu osobistego (trzy literki np. AKN) i data wydania. Zbieram te dane do mojego małego projektu wewryfikacji danych internetowych.
Ponieważ nie pozwala to na identyfikację konkretnej osoby to nie narusza to ustawy o ochronie danych osobowych.

Są pewne problemy:
System rejestracji opiera się na ciasteczkach zapisywanych w komputerze wizytującej osoby. Jeżeli ciasteczka się usunie to przy kolejnej wizycie Słownik nie wie że dana osoba się rejestrowała. Dane rejestracyjne są zapisywane na serwerze w celach archiwalnych, ale nie są weryfikowane przy kolejnej wizycie bo wymagałoby to przy każdej wizycie pytania o hasło. Metoda owszem bezpieczna ale wymaga od internauty dodatkowej czynności. Zamiast tego wybrałem żeby hasło zapisywało się w ciasteczku w komputerze osoby wizytującej. Ma to swoje dobre i złe strony. Dobra jest taka, że nie trzeba się wielokrotnie rejestrować. Chyba, że ciasteczko zniknie.

A teraz problem dlaczego ciasteczka znikają?

  • Jeżeli zmienimy komputer lub system operacyjny albo przeglądarkę to ciasteczka same się nie pojawią w nowym komputerze.
  • Jeżeli w przeglądarce jest włączony 'tryb prywatny' to ciasteczka się nie zapisują i nie mogą byc odczytane. Internauta traktowany jest jako osoba niezarejestrowana ze wszystkimi ograniczeniami.
  • Także programy 'antywirusowe' usuwają ciasteczka. Po takim 'czyszczeniu' internauta traci rejestrację.
  • Kasowanie ciasteczek może robić przeglądarka jeżeli się w niej ustawi odpowiednią opcję. Np. osobie bardzo zależy żeby nie było śladu po odwiedzinach na jakimś szczególnym miejscu np. strona brzydkimi rzeczami.

Także jeżeli w przeglądarce jest wyłączony Javascript, to też ciasteczka mogą się nie zapisywać.

 

Grudzień 2012

W dniu 2012-12-25 17:02, rogal pisze:
> Witam
> chciałem dowiedzieć się w jakim celu jest stworzonych tyle 
> wersji słownika. oraz forum. Ja się gubię w tym i nie wiem 
> gdzie man sięgać. Która wersja ma najwiecej rekordów.
> Może lepiej zrobić jedną o bardzo dużej bazie rekordów i 
> repozytorium aby nie uciekały napisane hasła jeżeli kilka 
> osób wpisze dużo haseł

Liczba wersji ma kilka powodów.

  1. zwykły słownik jest oczywisty - mamy litery - szukamy słowa
  2. wersja dla emigrantów, którzy nie mają polskiej klawiatury i nie mogą wprowadzać polskich liter - korzysta z tej samej bazy haseł/słów
  3. wersja pośrednia między Forum wymiany definicji a Słownikiem. Wprowadza się opis hasła i znane litery a Słownik podpowiada. Jednocześnie opis i maska wprowadzana jest na listę widoczną po prawej. Tam inna osoba może wpisać rozwiązanie. Czasami niemożność domyślenia się hasła wynika z błędnie rozwiązanych innych haseł w krzyżówce. "Samopomoc" stara się głowami i rękami innych wyprowadzić biedaka z błędu. Zgodnie z tą zasadą działąją wersje pk20d.php i pk20e.php
  4. wersja oderwana od Słownika opiera się tylko na samopomocy. Są dwie wersje działające tak samo, ale o różnym "targecie". Wersja pk20f.php jest dla jolek i podobnych, a wersja pk20g.php jest dla bardzo trudnych haseł np. geograficznych lub z bardzo specjalistycznych dziedzin. Pomagać mogą userzy o głowach jak encyklopedia.

Przyczyna dublowania Samopomocy jest taka, że gdyby wszyscy userzy wpadli na tę samą listę - a czasami jest jednocześnie kilkadziesiąt osób - to sobie wzajemnie przeszkadzają wpisując w tym samym momencie swoje rozwiązania. Program nie potrafi rozstrzygnąć, które jest słuszne, a które błędne. Najnowsze poprawki starały się zlikwidować błąd zjadania już wpisanych rozwiązań, gdy jedna osoba poprawiała hasło w 1-szej linii, a inna np. w 5-tej linii.
Kolejny problem to jeśli jakaś osoba zamiast pomyśleć i sprawdzić w "Słowniku" od razu wali hasło na "Samopomocy" i robi to kilka razy oraz kilka innych osób robi to samo, to nawet przy długości listy 40 wierszy z listy spadają hasła bez rozwiązania.

Ostatnio dopracowuję wersję, która połączy trzy metody pomocy. "Słownik", "Samopomoc", "Szukanie w archiwum". W tej wersji http://zylla.wipos.p.lodz.pl/pk/pk20beta.php umieszczenie opisu i liter na liście samopomocy wymaga dwóch kroków. W pierwszym kroku maska jest wysyłana do Słownika i pokazuje się lista możliwych rozwiązań. Jednocześnie sprawdzane jest archiwum "Samopomocy" zawierające opisy i rozwiązania z mniej więcej ostatniego tygodnia. Jeżeli user nie zobaczy właściwego rozwiązania to dopiero decyduje o wysłaniu swojego zapytania na listę. To spowoduje, mam nadzieję, mniejsze obciążenie serwera powtarzającymi się pytaniami od osób, które się wzięły za krzyżówkę z "Przekroju" w czwartek, a nie jak większość w poniedziałek. Jeżeli skutek będzie tak widoczny jak się spodziewam to "Archiwum" będzie obejmowało więcej niż tydzień.

pozdrawiam i proszę o następne pytania.
Np. "czy można zrobić wersję wygodną do używania na tablecie?"

--
Romek

Do wszystkich krytyków i pomocników

  • Staram się na bieżąco śledzić błędy w Słowniku i je na bieżąco poprawiać.
  • Całe szczęście mamy mało hooliganów i nie trzeba tego robić zbyt często.
  • Słownik będzie taki jacy będą 'userzy'.
  • Uwagi na temat poprawy funkcjonalności Słownika zawsze mile widziane.
  • Ograniczenia co do maksymalnej liczby pokazywanych haseł będą niewzruszone.
  • Jak ktoś mnie trochę nauczy jak napisać Słownik na komórki, iPady, iFony itp. Androny :) to wypuszczę wersję uniezależnioną od sieci.
Romek


link to pk20.php


Valid HTML 4.01 Transitional wizyt od 26 kwietnia 2002
mail to me - Romek