Ostatnio często czytam stwierdzenia, że dostęp do kodu źródłowy nie jest przydatny zwykłym użytkownikom, którzy nie mają zielonego pojęcia o programowaniu. Krew mnie powoli zalewa, gdy o tym słyszę, więc powiem tak: otwarty kod źródłowy wolnego oprogramowania umożliwia innym programistom (niezależnym od autorów oprogramowania) analizować dany program, wykrywać i naprawiać jego błędy oraz tworzyć rozszerzenia i inne dodatki, dzięki czemu wszyscy użytkownicy (cała społeczność) ZYSKUJĄ (uff… długie zdanie).
Załóżmy, że jakiegoś programu używa 200000 osób, jedna na tysiąc programuje, więc daje nam 200 programistów, zdolnych przejrzeć i poprawić nasz program. Korzystają wszyscy, nie tylko informatycy. Na tym to polega. Jasne? Mam nadzieję, że cześć osób zrozumie.
Bo to pierwszy dzień roku – można odpowiedzieć. Ale dlaczego akurat w tym czasie, tzn. około dwa tygodnie po przesileniu zimowym? Nie jest to jakaś “ładna data” z żadnego punktu widzenia.
Nasz kalendarz gregoriański bazuje na kalendarzu juliańskim, stworzonym na rozkaz Juliusz Cezara w 46 roku p. n. e. To wie każdy. Wikipedia o kalendarzu juliańskim mówi nam:
Powodem reformy kalendarza było to, że wcześniej stosowany księżycowy kalendarz rzymski rozregulował się, w wyniku czego w 46 p.n.e. kalendarzowy grudzień wypadał we wrześniu. Dlatego, żeby ponownie zsynchronizować kalendarz z porami roku, rok 46 p.n.e. wydłużono o 90 dni.
Kalendarz rzymski zaczynał się idami marcowymi, jednak:
Pierwotnie pierwszym miesiącem roku był marzec, a 15 marca (Idy marcowe) rozpoczynali urzędowanie konsulowie. W 155 r. p.n.e. termin ten przesunięto o dwa i pół miesiąca wstecz, na 1 stycznia, gdyż w przeciwnym razie konsulowie desygnowani na ten rok nie zdążyliby na początek sezonu działań wojennych do Hiszpanii (gdzie aktualnie toczono wojnę). Ustaliło to początek cyklu pracy administracji państwowej (rzymscy urzędnicy byli wybierani na roczną kadencję) na pierwszego stycznia. I tak już zostało do tej pory.
Czyli wszystkiemu winna jest wojna w Hiszpanii jakieś 2162 lat temu, kiedy rzymscy urzędnicy musieli przesunąć początek roku administracyjnego na 1 stycznia. Bowiem kadencja urzędników trwała rok i co roku nowe osoby obejmowały urząd. Aby zdążyć na wojnę, trzeba było przesunąć to rozpoczęcie na 1 stycznia. Kalendarz ten był tylko administracyjnym. W religijnym nadal obowiązywał marzec jako początek roku. Nie udało mi się dociec, dlaczego i kiedy zmieniono też religijny.
Zwolennicy wolnego oprogramowania mają zwykle problem z jego nazwą. Po angielsku “free” może znaczyć również darmowy, dlatego zaznacza się, że “free as in freedom”, a nie “free as in free beer”. Po polsku “wolny” to także przeciwieństwo “szybkiego”. Dzisiaj w nocy wymyśliłem fajne tłumaczenie: “wolny jak ptak” i “wolny jak żółw”. Fajne, prawda? Programy wolne jak ptak. ;)
Do baru wchodzi nieskończona liczba matematyków. Pierwszy zamawia jeden kufel piwa, drugi pół kufla, trzeci jedną czwartą i tak dalej. Barman kręci głową z dezaprobatą i nalewa im dwa kufle.
Jabberowej reklamy ciąg dalszy: poczta Mailu-mailu.
Some of you may have my email address or JabberID. Here are my three official mails/JIDs:
- ponton616 at gmail com
- ponton at jabster pl (I created this cause I don’t like my gmail login ;))
- tomasz.maciejewski at jabster pl (I wish it to be alias, but it’s impossible)
I check other accounts, but I don’t promise I won’t remove them.
All right. I said I’ll show my jzwi source and here it is: http://www.srednikpe.org/src/jzwi/
It is almost ended. It doesn’t only check local variable if they have unique names. I’m too lazy to do that. But after all it works fine and quite fast (compared to other interpreters written by my colleagues).
To run jzwi program just run “jzwi program.jzw argument1 argument2 …”.
It’s all licensed on GPL (any version). There is no guarantee that it’ll work. ;)
Uff… I have nearly finished my jzwi interpreter, just few minor fixes I will make in a week…
JZWI means “Język z wykładu improved” (“Language from lecture improved”). On our programming language theory subject we defined syntax using BNF notation and then we define formal semantic of this language (which is quite simmilar to Pascal/ALGOL).
It was our lab project to write a parser, converter to xHTML/LaTeX, an interpreter or full compiler in Haskell. It wasn’t as difficult as I thought, but I had to rewrite many parts of the code, ’cause firstly I wrote only simply parser, then simply converter and then I decided to try interpreter.
It costed me few nights and days, but I am very happy, when I see how beautifully it runs insertion sort. ;) Full source will be uploaded within few days. I have to lay off from vim and ghc. ;)
Uff… maybe I’ll check insertion sort once more. :>
Recent Comments