Dzisiejszy dzień nie jest zwyczajny – ale tylko dlatego, że kiedyś tak postanowiono. Z bliżej nieokreślonych przyczyn Nowy Rok świętujemy wtedy, gdy za oknami jest szaro, buro i ponuro (względnie biało i zimno). Oczywiście wszystko zależy od punktu widzenia, a ten od punktu siedzenia – lub raczej zamieszkania tudzież klimatu – ale można sobie wyobrazić lepiej dobrany termin…
W ogóle należy stwierdzić, że używany przez nas kalendarz jest wybitne nielogiczny :) Wprawdzie na pewne występujące w nim liczby (zwłaszcza 365 jako najczęstsza liczbę dni w roku) nie da się nic poradzić, ale inne – jak 12, 24, 60, itp. – nie mają specjalnego uzasadnienia ani też żadnej logiki w sobie. Może więc dałoby się jakoś ten system usprawnić? Proponuję “subtelne” przerobienie go na modłę koderską, aby kluczową rolę odgrywały w nim… potęgi dwójki :) Kalendarz ten mógłby wyglądać następująco:
Nietrudno zauważyć, że możliwe są jeszcze trzy inne warianty tego kalendarza, zależne od liczby godzin w dobie i miesięcy w roku (które to w normalnym kalendarzu są niefortunnie ‘pośrodku’). Dwa skrajne produkowałyby jednak rok bardzo różniący długością od obecnego. Trzeci – z 16-godzinnym dniem i 512-dniowym rokiem – miałby z kolei zbyt dużo dni w roku: liczbie 365 (lub 366) jest bowiem nieco bliżej do 256.
Najciekawsze jest to, że w kalendarzu opisanym powyżej rok byłby tylko o 6,33% dłuższy od obecnego. Jeśli więc wystartowalibyśmy koderski rok dzisiaj o północy, to jego koniec przypadłby nad ranem 23 stycznia 2009 roku. Myślę jednak, że istnieją o wiele lepsze punkty startowe, wśród których od razu nasuwa się początek epoki uniksowej, czyli północ 1 stycznia 1970 roku w UTC.
Oczywiście ta wielce pożądana reforma kalendarza napotyka pewne problemy praktyczne. Inna długość doby zapewne byłaby jednym z nich, chociaż oznaczałaby jedynie, że nowa data pojawia się na zmianę albo w środku nocy, albo w środku dnia. Niestety nawet ta prawidłowość dość szybko przestałaby obowiązywać, a w dalszej perspektywie te 6,33% różnicy w długości roku też zaczęłoby być widoczne. I w ten sposób ten genialny w swej prostocie (czy raczej głupocie ;]) pomysł należałoby niestety odrzucić. Po prostu astronomia nie chce z nami współpracować ;P
Ale jest i pewna dobra strona. Otóż napisanie prostego zegarka, wyświetlającego czas w tym systemie “koderiańskim” to zajęcie nieskomplikowane i mało pracochłonne – idealne jako odpoczynek po sylwestrze :)
Nowy rok powinien być oczywiście mlekiem i kodem płynący, ale poza programowaniem gier wypadałoby czasami w rzeczone gry również grać :) Dlatego warto przyjrzeć się produkcjom, które mają szansę pojawić na rynku w przyszłym roku. Wśród nich moja osobista i zupełnie subiektywna lista najciekawszych (w której kolejność pozycji jest jak najbardziej istotna) przedstawia się następująco:
Do tej listy chciałoby się dopisać jeszcze jedną pozycję: chociaż jedną przyzwoitą, ukończoną grę własnego autorstwa. Może taka chęć to jeszcze za mało na oficjalne noworoczne postanowienie, ale zawsze to dobry początek. Zwłaszcza, że – jak widać powyżej – potencjalne wzorce są coraz bardziej imponujące :)
Co można powiedzieć o typach wyliczeniowych (enums)? Choćby to, że przydają się tam, gdzie mamy do czynienia ze stanami lub atrybutami, które należą do jakiegoś skończonego zbiory. Z technicznego punktu widzenia to kilka(naście/dziesiąt/set) liczb nazwanych stałymi identyfikatorami. I zazwyczaj języki programowania nie oferują wiele ponad to.
Lecz Java musiała się tu wyróżnić :) Z wierzchu jej enum
y wyglądają niby zwyczajnie:
ale w środku kryją bardzo szerokie i pewnie trochę udziwnione możliwości…
Zacznijmy od tego, że takie stałe wyliczeniowe są bezpieczne pod względem typowania – nie można więc jawnie rzutować ich na zwykłe liczby typu int
. Słowo kluczowe enum
tworzy też – podobnie jak w C# – przestrzeń nazw, więc do stałych odwołujemy się nazwami kwalifikowanymi (Answer.YES
) i nie trzeba stosować żadnych przedrostków.
Ale to są wręcz oczywistości. Kolejnym punktem programu jest możliwość dostępu do zbioru zadeklarowanych stałych oraz ich wypisywania w postaci tekstowych nazw:
Takie nazwy mogą być jednak brzydkie. Żaden problem, bowiem w Javie z każdą stałą może być związany dowolny zestaw danych:
które – jak widać – deklarujemy podobnie jak składniki klas. A poszczególne “stałe” typu wyliczeniowego nie są już na pewno tylko liczbami: to pelnoprawne obiekty:
Widzimy, że metody są również dozwolone. Żeby było śmieszniej, mogą być one nawet “wirtualne”. Możemy bowiem zapewnić, aby inne ich wersje były wywoływane dla różnych stałych. Robi wrażenie, prawda?…
Cóż, pewnie niekoniecznie – zwłaszcza, że nietrudno osiągnąć podobną funkcjonalność przez instrukcję wyboru. Zgoda, będzie ona bardziej podatna i trudniejsza w konserwacji. Lecz jeśli alternatywą jest przeładowanie języka dziwnymi i nie do końca oczywistymi mechanizmami, to stary dobry switch
niekoniecznie musi być rozwiązaniem złym.
Co oczywiście nie zabrania nam być pod wrażeniem pomysłowości twórców języka Java :-)
Jako że rok zbliża się ku końcowi, w modzie są wszelkiego rodzaju podsumowania i retrospekcje. Wszędzie możemy więc przeczytać, co w mijającym roku było najważniejsze, najbardziej znaczące, najlepsze, najgorsze, najbardziej przykuwające uwagę, najnudniejsze i – przede wszystkim – najpopularniejsze. Trendy, jak wiadomo, zmieniają się błyskawicznie, lecz okazuje się, że można za nimi podążać przy pomocy… naszej ulubionej wyszukiwarki internetowej.
Istnieje bowiem coś takiego jak Google Trends. Ta mało wyeksponowana część Google pozwala nam na dostęp do historycznych danych na temat częstości występowania różnych zapytań, kierowanych do wyszukiwarki.
Historia ta sięga początku 2004 roku; jest więc dość obszerna i jej przeglądanie daje interesujące i często zaskakujące wyniki. Jest tak zwłaszcza wtedy, gdy wybierzemy kilka wyrażeń i wyświetlimy zmiany ich popularności na jednym wykresie. Oto garść przykładów:
Lecz zanim zechcemy pod ich wpływem zmienić używane przez siebie narzędzia, warto wiedzieć, że pierwsza dziesiątka najczęściej wpisywanych do Google fraz (według Zeitgeist 2007) to:
1. iphone
2. badoo
3. facebook
4. dailymotion
5. webkinz
6. youtube
7. ebuddy
8. second life
9. hi5
10. club penguin
Brakuje chyba tylko Paris Hilton, eh? ;P Widać w każdym razie, że nie powinno się traktować wyszukiwarkowych trendów jako wyroczni w żadnej sprawie :)
W święta podobno się nie programuje, więc wziąłem się chwilowo za coś innego :) Postanowiłem więc zrealizować pomysł na artykuł, który przyszedł mi do głowy kilka dni temu – głównie pod wpływem kilku pytań o podobnej tematyce, jakie przewinęły się na forum Warsztatu.
Tak powstał tekst o nieco tajemniczym tytule Pętla czasu rzeczywistego, który w rzeczywistości jest prostym omówieniem prawidłowego sposobu konstrukcji głównej pętli gry i uaktualniania jej stanu zależnie od czasu – tak, by gra działała tak samo niezależnie od wydajności sprzętu. Sprawy to dość proste, ale ważne i najwyraźniej zbyt często pomijane. Myślę więc, że taki artykuł ma niezerową szansę, żeby komuś się przydać :)
Koniec grudnia to taki czas w roku, kiedy wszyscy składają sobie życzenia pomyślności i szczęścia. Nie będę gorszy :) Życzę więc wszystkim wesołych świąt i szczęśliwego nowego roku!
Na forum Warsztatu pojawił się pomysł stworzenia “firmowej” tapety serwisu i społeczności. Z dwóch propozycji forumowiczom przypadł do gustu bardziej projekt rAuma, który to wykorzystuje znany i lubiany motyw zębatki :) Do tego mamy w tle kod mitycznego i ciągle niedokończonego engine’u, jak również obowiązkową nazwę serwisu.
Oto trzy wersje kolorystyczne tej tapety w rozdzielczości 1280×800:
Kolorystykę można zresztą łatwo dopasować przy pomocy ustawień odcienia (hue) i nasycenia (saturation) każdego programu graficznego, który jest choć trochę bardziej zaawansowany od Painta :) Po inne rozmiary odsyłam zaś do oryginalnego wątku na forum.