Trochę Javowych myśli

[niedługo typowy programista piszący w Javie nie będzie mógł się swobodnie przyznać do swojej profesji – zaraz oblecą go/ją hordy nastek/nastków piszczących „naprawdę!?! piszesz te gierki na komórki?!?!” – powiedzmy, że to jedna z myśli ;)]

Przeglądam sobie wersję „Thinking In Java 4”, która została mi udostępniona ze względu na rzekomą „ekspertowatość” w genericsach i nachodzą mnie różne myśli. Bruce Eckel jest, jak może niektórym wiadomo, wielkim miłośnikiem tzw. wzorców projektowych i wciska je wszędzie gdzie popadnie (wytykając przy okazji „O! To jest taki a taki wzorzec!”). Jeden z nich mnie szczególnie zaintrygował, z tego względu, że chyba ostatnio stał się moim ulubionym, chociaż nie pamiętałem świadomie o jego istnieniu ;) Chodzi o wzorzec flyweight („wagi muszej”? ;)) polegający na tym, że tworzy się obiekt, który przechowuje jak najmniej danych, a kiedy się od niego zażąda czegoś, tworzy to na bieżąco, lub odwołuje się do jakiegoś innego źródła. Tak, nachodzi to nieco na adapter, ale jak twierdzą Głosiciele Prawdy, chodzi o cel zastosowania, a nie sam wzorzec ;)

Od dawien dawna (no dobra, od wersji 1.2) w Javie istnieją kolekcje. Całe API jest proste i przejrzyste, poza podejrzanie pachnącymi „opcjonalnymi operacjami”. Nigdy mi się one nie podobały. Bruce Eckel broni tego pomysłu twierdząc, że bez nich diabli by wzięli prostotę i przejrzystość. Chyba ma rację – kiedy co jakiś czas najdzie mnie ochota na rozpamiętywanie jak bym ja to zrobił (oczywiście lepiej), to w końcu poddaję się w obliczu złożoności problemu ;) Pewnie się da to zrobić porządnie, ale trzeba się nad tym poważnie zastanowić i na pewno nie wyjdzie z tego nic specjalnie prostego. Tak czy owak, opcjonalne operacje pozostaną specyficznym ewenementem tej części biblioteki. I nigdy nie będą mi się podobać ;) Ale z drugiej strony, zawsze kiedy zwracam jakąś kolekcję, której nie pozwalam modyfikować, robiąc to rzecz jasna poprzez Collections.unmodifiableCollection(col) i jej siostry, zawsze w takich przypadkach nie mogę się powstrzymać przed uczuciem złośliwej satysfakcji w rodzaju „spróbuj tylko tknąć, a dostaniesz wyjątkiem, ty draniu!” ;)

Coś jest na rzeczy w świecie C++

Lista propozycji dla następcy C++ czyli tzw. C++0x (jak to się u diabła wymawia?!) jest godna pochwały, ale też nagany, że niektóre tak ważne i oczywiste rzeczy nie weszły do podstawowej wersji (no dobra, niektóre są oczywiste tylko dla kogoś, kto programował w Javie ;)) Zadziwiający jest fakt, że język tak napakowany ficzerami, tyloma rzeczyami koniecznymi do zrozumienia by cokolwiek w nim napisać, tak złożony i tak długo wydany na pastwę komitetu, stał się najpopularniejszym językiem programowania [to się da zrozumieć, w sumie, ale to i tak interesujące]. A lista ta ma dodatkowo wzmocnić większość z wymienionych czynników ;) Współczuję młodym programostom, którzy będą musieli się tego nauczyć. Współczuję również młodym programistom, którzy chcą poznać w miarę dogłębnie bogactwo bibliotek Javy ;) [i dziwadła genericsów – ale to z zastrzeżeniem, że się wie jak mogły one wyglądać, gdyby nie kompatybilność wsteczna [chyba się powtarzam]]

Ten tydzień

To były cztery bardzo krótkie dni [w poniedziałek się byczyłem, a potem się okazało, że to było święto i czar prysł…]. Przeleciały nadzwyczaj szybko, co jest wielce niewskazane podczas wakacji. Spędziłem je w biurze i – o dziwo! – przez większość czasu pracowałem ;) Niestety nie mogłem się zbytnio skupić na nowym projekcie (który mi się nie podoba, więc może powinno być „na szczęście” – gdyby nie zbliżający się termin zakończenia) bo wykańczałem wdrożenie superbajeranckiej bazy danych osobowych opartej o webservisy (to na to właśnie tak niedawno zrzędziłem) i była kupa roboty. Sam nie wiem gdzie ten czas się podział. Bez przerwy coś z tym robiłem [od błędu do błędu] i nagle się okazało, że minął cały dzionek. A potem pewien dosyć upierdliwy koleś bardzo się starał, żebym przypadkiem nie miał ani chwili wolnej. On, zdaje się, jest zbyt przyzwyczajony do zarządzania programistami na etacie ;)

Pozytywny aspekt jest taki, że będę mógł w końcu przestać zamęczać biednego autora tego webservisu zgłoszeniami o błędach ;)

O palantach

[w nawiązaniu do pewnej dzisiejszej rozmowy]

Teza: ktoś, kto zachowuje się jak palat, jest palantem.

Dowód: [nie-wprost] Załóżmy, że ktoś, kto zachowuje się jak palant, nie jest palantem. Oznacza to, że udaje palanta. I tak w prosty i oczywisty sposób dochodzimy do sprzeczności: udawanie palanta to dopiero palanteria!

Quod erat demonstrandum

BTW: ;)

Windows Update

W robocie pracuję na Windows XP. Smutna ta konieczność pociąga za sobą korzystanie z Windows Update (adminom się nie chce oblatywać każdego komputera i wcale im się nie dziwię). Ostatnio pojawiło się specjalne narzędzie do sprawdzania oryginalności Windowsów. W firmie zadziałało, zapewne poprawnie ;) Ech, ta żądza pieniądza. Po udanym sprawdzeniu moją uwagę zwrócił niepozorny link o nazwie „How to Tell”. A konkretnie, że to wspaniała gra półsłówek.

Tow to Hell.

Dylemat programowy

Na zaliczenie przedostatniego semestru napisałem program. Program miał służyć do rysowania prostych obrazków wektorowych (coś jak Inkscape albo parszywy imperialistyczno-kapitalistyczny Corel DRAW! ;)) Czas mija a ja sobie myślę i myślę, że chyba należało by podzielić się ze światem tym swoim wynalazkiem… Szkoda, żeby się zmarnowało i te sprawy… Od tamtej pory trochę w nim dłubnąłem, ale nic specjalnego – przerobienie na Javę 1.5 (ot, żeby się pobawić nowymi ficzerami), trochę rzeczy się poprawiło…

Tak więc zwalczyłem niedzielne rozleniwienie i zrobiłem webstartowalne demo [leży na stronie mojego projektu na sourceforge, bo Jogger nie ma odpowiednio ustawionych typów MIME] [warto przy tym zauważyć, że .jar ma całe 150 KB :)] Można też ściągnąć rusynek nieoficjalnego logo (dla osób o bardzo mocnych nerwach) ;]

Nieśmiało liczę na to, że może ktoś poradzi czy warto kontynuować ten projekcik :)

Co z tymi ogonkami…

Niedawno parę razy napomknąłem, że mi się skopały pliterki [jak widać, są już w porządku ;)] Często bywa tak, że dopóki coś nie zalezie za skórę, to można nawet dość długo wytrzymywać niewygody. Ale w końcu się wkurzyłem.

dpkg-reconfigure xserver-xorg

Kupa żmudnego przedzierania się przez pytania. Coś mi zaświtało przy wybieraniu zestawu reguł xkb. Domyślnie jest „xorg”, ale opis sugeruje, że są jakieś inne. Zajrzałem więc do /etc/X11/xkb/rules. Nie ma plików dla xorg, są dla xfree86. AHA! Podmieniłem Option "XkbRules" "xorg" na Option "XkbRules" "xfree86" – po restarcie X-ów pliterki zadziałały. Zacząłem się skłaniać ku wysłaniu raportu o błędzie, ale przypomniałem sobie, że w tym samym opisie było napisane „…if xlibs were unpacked…”.

apt-cache policy xlibs

No tak, xlibs jest jeszcze z xfree86.

apt-get -t unstable install xlibs

Pomieliło trochę i w /etc/X11/xkb/rules pojawiły się pliki xorg, a xfree86 jako symlinki do nich. Działa.

Tak to jest jak się miesza testing i unstable :P