strona główna

Archive for December, 2005

Na całej połaci śnieg

Saturday, December 31st, 2005

W przeróżnej postaci śnieg.  Ponad połacią zresztą też, w dużej ilości, opada z pewnością siebie wyraźnie sugerującą że wszystko co teraz widać to drobiazg, a tam na górze jest go znacznie więcej i czeka tylko na pretekst żeby naprawdę pokazać co potrafi.  Do zimy dotarło, że przesilenie już za nami i najwyższy czas sypnąć.

W tym roku po raz pierwszy od kilku lat trafiło mi się pracować w biurze w okresie sylwestrowo-urlopowym i, podziwiając ciszę, spokój i prawie całkowity brak jakichkolwiek przerwań, znalazłem niezawodny sposób na zwiększenie produktywności firm programistycznych o połowę, lekko i ostrożnie licząc: rotacja świąt.  A przynajmniej urlopów.  W trzech grupach, tak, żeby w każdym momencie w firmie przebywało mniej więcej 2/3 pracowników.  Ci, którzy akurat nie mają wolnego, mają znacznie lepsze warunki do pracy, mogą się skoncentrować, a na dodatek są wypoczęci – w końcu właśnie wrócili na miesiąc pracy po dwutygodniowym urlopie.  Jednocześnie dzięki nakładaniu się okresów pracy ludzie z każdej grupy mają i tak dużo okazji żeby zobaczyć się i porozmawiać z osobami z obu pozostałych.

Efekt: powstaje nieco mniej tekstu/kodu/dzieł/niepotrzebne skreślić, za to znacznie lepszej jakości, z wykorzystaniem dużej ilości nowych pomysłów i przyniesionego w płucach świeżego powietrza :)

Wszystkiego najlepszego w nowym roku, oby był jeszcze lepszy niż poprzedni.

Dokumentacja prototype, ciąg dalszy

Thursday, December 22nd, 2005

Na szybko: przetłumaczyłem kolejne 30% tekstu "Używanie prototype.js". Brakuje już tylko obsługi formularzy.

Opis prototype.js

Sunday, December 18th, 2005

Prototype.js to świetna biblioteka do szybkiego tworzenia dynamicznych stron WWW – znacznie upraszcza kod JS pozwalający na komunikację z serwerem, w sposób w dużej mierze niezależny od przeglądarki.

Problemem jest dokumentacja. W ramach promowania udanych rozwiązań zabrałem sie za tłumaczenie nieoficjalnej dokumentacji, której autorem jest Sergio Pereira: "Using prototype.js". Wersja przetłumaczona (obecnie jest to 40% oryginału) jest tu: "Używanie prototype.js".

GUI w Javascript

Monday, December 12th, 2005

Jestem wielkim fanem gotowych rozwiązań: jeśli jakiś fragment programu, nad którym pracuję, wygląda jakby się prosił o ogólne rozwiązanie i zapakowanie w bibliotekę, to istnieje szansa że ktoś już to zrobił i wynik swojej pracy udostępnił. Z jednej strony oznacza to spędzanie bardzo dużej ilości czasu na poszukiwania i porównania istniejących rozwiązań, z drugiej – prawie zawsze okazuje się, że jest to czas bardzo dobrze zainwestowany: jeśli nawet nie uda mi się znaleźć gotowej i używalnej biblioteki i okaże się, ze jednak muszę napisać ten fragment programu własnoręcznie, to proces poszukiwań pomaga przemyśleć problem i zakres potrzebnej funkcjonalności.

Tym razem się udało. Szukając czegoś, co pomagałoby tworzyć i obsługiwać dość złożone, jak na Javascript, GUI, znalazłem qooxdoo, bibliotekę do tworzenia tradycyjnie wyglądającego interfejsu użytkownika. Programy demonstracyjne robią wrażenie, fakt że można już osiągnąć coś takiego w sposób w dużym stopniu niezależny od przeglądarki (IE >= 6, Gecko >= 1.3, Opera >= 8, prawdopodobnie Safari) oznacza że może w końcu JS zaczyna osiągać pewną dojrzałość.

SOAP i C++

Thursday, December 8th, 2005

Problem
–––-

Jest sobie spory System zbierający i udostępniający dane, napisany
prawie wyłącznie w C i C++. Istnieje do niego interfejs
programistyczny, również w postaci bibliotek C++, co jest bardzo fajne
ale mocno ogranicza możliwe zastosowania. Potrzebny jest interfejs
wykorzystujący protokół SOAP,
co pozwoli na wykorzystanie danych z Systemu w
programach napisanych w wielu innych językach programowania.

Założenia dodatkowe: rozwiązanie ma być jak najprostsze z punktu
widzenia użytkownika (programisty korzystającego z tego interfejsu),
administratora oraz samego autora. Oczywiście ważne są też pieniądze,
im mniej trzeba wydać na potrzebne do rozwiązania problemu biblioteki
tym lepiej.

Możliwości
–––––

Nasuwają się, z grubsza, trzy metody:

1. samodzielny serwer: napisać w C++ serwer udostępniający istniejący
interfejs za pośrednictwem
SOAP.

Podstawową zaletą jest prostota z punktu widzenia administratora:
nie jest potrzebne żadne dodatkowe oprogramowanie, a niezbędną
konfigurację można ograniczyć do podania portu, na którym serwer ma
działać.

Wada: sensowne biblioteki dla C++, zwłaszcza komunikacyjne,
pojawiają się rzadko i z dużym opóźnieniem, przy czym duża część z
nich jest albo droga, albo na
GPL.
A implementacja protokołu
SOAP na potrzeby
jednego projektu znacznie podnosi koszty.

2. moduł Apache (lub innego serwera www):
SOAP
do przesyłania
informacji wykorzystuje zwykle
HTTP,
więc logiczne wydaje się zrzucenie części
pracy na programy, które właśnie obsługą
HTTP
się zajmują.

Zaleta: możliwość skorzystania z dobrze przetestowanej platformy.

Wady: takie rozwiązanie jest zależne od dużego oprogramowania.
Instalacja i odpowiednia konfiguracja wszystkich potrzebnych
dodatków może być bardzo czasochłonna i pomyłkogenna. Serio:
[tak wygląda instalacja oprogramowania z Axis C++][axis_winstall],
pakietem do tworzenia WS
w oparciu o serwer Apache.

3. biblioteka dla PHP, Pythona lub Javy: w jak najprostszy sposób
udostępnić istniejące API do Systemu, najlepiej przy pomocy
SWIG,
jakiemuś językowi programowania z
wieloletnim i sprawdzonym wsparciem dla
WS.
Napisać faktyczny serwis już wykorzystując ten język.

Zaleta: dużą część pracy jest przeniesiona na język, w którym pisze
się (mi) znacznie łatwiej i szybciej. Można skorzystać z
istniejących, łatwo dostępnych bibliotek. Dodatkowo w wybranym
języku możnaby korzystać z danych zgromadzonych w Systemie nawet
bez korzystania z
SOAP
i powolnego przesyłania danych za
pośrednictwem sieci.

Wady: podobne z wadami rozwiązania #2 – wysoka złożoność oraz
zależności od dodatkowego oprogramowania.

Zdecydowanie najlepiej prezentuje się wariant pierwszy, pod warunkiem
znalezienia odpowiedniej biblioteki.

Rozwiązanie
–––––-

Wybór, zgodnie z przewidywaniami, wcale nie jest duży:

1. Axis C++

Wspomniana już biblioteka, niestety wymaga użycia serwera
Apache.

2. EasySoap

Zniechęca napis "NEW: Version 0.6 was released 12-april-2002" na
pierwszej stronie. W liście "easysoap-checkins" pojawiają się
informacje o nieco późniejszych zmianach, ale w śladowych
ilościach.

3. gSOAP

Zdecydowanie najlepsza biblioteka z całej listy. Jest aktywnie
rozwijana, [szybka][gsoap_perf] i ma dużą grupę użytkowników.

Licencja pozwala na bezpłatne korzystanie z większości
funkcjonalności w komercyjnych, zamkniętych programach.

4. SQLData SOAP Server

Niestety tylko pod Windows. Ta informacja z mojego punktu widzenia
całkowicie dyskwalifikuje bibliotekę.

5. [Systinet Server for C++][systinet]

Komercyjny. Płatny, na dodatek "our flexible licensing terms are
tailored to meet the deployment needs of your business model. [...]
To purchase our products or services, please contact us", co
tłumaczy się dość dosłownie na "pobieramy opłaty precyzyjnie dobrane
do naszej opinii na temat tego, jak wiele pieniędzy będziemy w
stanie wyciągnąć z Waszej firmy". Ta informacja z kolei przenosi
bibliotekę na szary koniec listy adresów do dokładniejszego
sprawdzenia.

6. White Mesa SOAP Service

Znowu tylko pod Windows. Czemu ludzie to robią?

7. XSoap

Projekt nie jest już rozwijany.

Tę listę zebrałem jakieś dwa tygodnie temu. Od tego czasu tworzę
serwis wykorzystując gSOAP, co okazało się świetnym rozwiązaniem.
Biblioteka jest wygodna, szybka i pozwala na maksymalne uproszczenie
instalacji: wynikiem mojej pracy jest pojedynczy plik wykonywalny.
Jedynym parametrem, poza opcjami potrzebnymi do korzystania z zasobów
wspomnianego na początku tekstu Systemu, jest numer portu na którym
serwis ma działać.

Ale to wystarczy na jeden wpis. Szczegóły w opisie drugiego etapu :)

[axis_winstall]: http://ws.apache.org/axis/cpp/wininstall-guide.html
[systinet]: http://www.systinet.com/products/ssc/overview
[soap]: http://www.w3.org/TR/soap/
[gsoap]: http://www.cs.fsu.edu/~engelen/soap.html
[gsoap_perf]: http://www.extreme.indiana.edu/xgws/papers/soap_perf_char_grid2004.pdf
[swig]: http://www.swig.org/

Wyjście z poślizgu

Tuesday, December 6th, 2005

Po prawie trzymiesięcznej przerwie wracam do pisania. Do zapamiętania: kupowanie używanego samochodu pochłania olbrzymie ilości czasu (wszystkie etapy: porównywania modeli, szukania właściwego egzemplarza oraz testowania nabytku), a w połączeniu z innymi czasochłonnymi sprawami – pilnym projektem, listopadowym firmowym szałem zakupowym i kilkoma wyjazdami poza Warszawę – potrafi bardzo skutecznie wytrącić z wcześniejszego rytmu pracy.

Ale już się uspokaja, można wrócić do sensownego rozkładania czasu.