niedziela, 17 maja 2009

Mniej niż Zero...

Sława!

Dziś trochę tak marudząco ponarzekam na niesprawiedliwość świata. Niesprawiedliwość tego świata oczywiście i jak zwykle, dotyczy tego, że, biedactwo, nie posiadam tego jedynego talentu który decyduje, czy powinno się co najwyżej dziękować Losowi, że pozwolił rowy kopać chociaż, czy, że jednak można próbować zdobywać Wykształcenie i wszelkie profity z tym związane. (No, chyba, że się miało szczęście urodzić w Jedynie Słusznych Krajach ;))

"A cóż to za talent?" spytałby kto. I dlaczego mnie naszło na wywnętrznianie się. Talent ten to oczywiście talent do języków ludzkich wszelakich, a naszło mnie, bo ostatnio namieszanie sieje jeden wpis na zagramanicznym blogu. I efekty tego namieszania utwierdzają mnie w przekonaniu, że gdzieś "po drodze" moja własna przekora wywiodła mnie na manowce (prawdopodobnie przy końcu podstawówki), nie tylko w kwestiach zawodowo-przyszłościowych ale i moralnych.

Otóż, trzeba sobie otwarcie to przyznać, mam jakąś cholerną dyslingulię, czyli kompletny brak zdolności językowych, co oznacza, że oprócz braków w języku ojczystym, właściwie kompletnie nie znam języka angielskiego (nie licząc paru cytatów z Plutonu). Do tego, debil, wymarzyłem sobie, że się wpakuję w informatykę (i co gorsza marzenie to zrealizowałem!). Teraz, po lekturze choćby tego wpisu, chyba czas zapakować się do zoo czy innego cyrku, jako dziwactwo i wybryk Natury.

Czemuż to czemuż? Bo stwierdzenie i pytanie padło takie:

"Trudno mi sobie wobraźć pracę w moim zawodzie bez znajomości tego języka choćby w czytaniu. Niedawno odbyta konferencja GeeCON2009 w Krakowie (za którą nota bene wielkie brawa dla organizatorów) uświadomiła mi, że tak naprawdę polscy programiści, znają język angielski bardzo dobrze. Jaki jest więc sens pisania po polsku?"

Za pytaniem takim staje Widmo, zagląda w oczy i się śmieje zdradziecko prosto w twarz. "Mam Cię". Im więcej ludzi z Wiedzą odpowie na nie "żaden", tym gorzej dla mnie. Mając bardzo ograniczone zdolności rozumienia tekstów niepolskich (słowniki trochę pomagają, ale to idzie się pociąć...), każda taka odpowiedź redukuje kolejną gałąź w wodociągu Wiedzy. Aż koniec końców źródełko wyschnie, i klops. Chyba, że jakimś cudem, uda mi się zdobyć jakąś bardzo niszową i wysokopłatną zdolność, która pozwoli dotrwać do emerytury...

Cóż, czas przyzwyczajać się do zmywaka, bo tylko przy nim kariera możliwa...

P.S. Co do moralności. To cóż, trzeba jakoś braki ukrywać. A ukrywa się kłamiąc, oszukując, myląc tropy i całą gamą innych nieczystych zagrań...

piątek, 1 maja 2009

Czarną wstęgą mknąc za horyzont w swym Gran Torino

Sława!

Zdarzyło mi się celowo zbłądzić do najstarszego kina na świecie, aby zapoznać się z najnowszym filmem mojego ulubionego aktora, czyli z Gran Torino Clinta Eastwooda.

I powiem krótko - warto było. Tu i ówdzie słychać co prawda głosy, że film banalny, nic nowego i w ogóle do bani, ale można je spokojnie puścić mimo uszu. Dlaczego? Bo kino to kino, i basta. Ma służyć Opowieści, Treści, a nie li tylko formowym eksperymentom. A Opowieść snuta przez Eastwooda bardzo do mnie przemówiła, na emocjach wszelkich zagrała, i łezkę na końcu wydusiła. A że jednocześnie snuta bardzo, ale to bardzo sprawnie, tym zadowolenie z seansu większe.

O czym zaś Opowieść ta? A nic wielkiego, ot o Godności, Miłości (w pewien zakamuflowany sposób), i o odwadze Starania Się. Starania się, aby być Dobrym Człowiekiem i Prawdziwym Mężczyzną, dochowywać wierności Wartościom. O tym jakie trudne to wszystko może być w dzisiejszym, idącym wiecznie na łatwiznę świecie. Opowieść stanowiącą swoiste domknięcie eastwoodowego etosu Brudnego Harrego, niczym Bez Przebaczenia domykające Trylogię o Bezimiennym.

Urodzinowe arią wyśpiewane sto lat!

Sława!

Zdarzeń codziennych natłok, praca wre, pot, łzy i krew wylewane w walce o byt i pełen portfel ;), a tu niespodzianie jakże miła siurpryza i ku świętowaniu okazja. Moja Ulubiona Przeglądarka Internetowa skończyła właśnie 15 lat! Wszystkiego najlepszego!

niedziela, 5 kwietnia 2009

Konferowanie, konferowanie i po konferowaniu...

Sława!

W minioną sobotę miałem niewątpliwą przyjemność uczestniczenia w naszej, kochanej, lokalnej konferencji Java4People (wiadomo, darmowy obiad ;)). Zaczęło się miło, bo ochrzanem od Leszka za spóźnianie się (oj, ledwie ze trzy minutki ;)), na szczęście potem było lepiej. O naprawdę wysokim poziomie prelegentów niech świadczy fakt, że takiemu "byłemu" programiście Javy, co to szybko się nudzi i mało rozumie, jak ja, ani razu się nie ziewnęło ;) Ale może po kolei.

Na pierwszy ogień poszedł Paweł Szulc z prezentacją na temat testowania EJB. To co mnie ucieszyło w niej szczególnie, to przede wszystkim pokazanie, że testowanie własnego kodu nie gryzie, i nawet w "takim" EJB da się to prosto zrobić. A dlaczego mnie to ucieszyło? Bo może dzięki temu będę ja, lub ktoś mi podobny mniej roboty ;) Wbrew ogólnej opinii robienie reopen na zadaniach w jirze mnie nie jara szczególnie ;)

Drugim rzutem, przyatakował Waldek Kot o kometach i miasteczkach w Normandii, coś nowego, interesująco się zapowiadającego i wraz z upowszechnianiem się technologii "odwrotnego ajaksu" czuję nosem kolejne wyzwania (no, może wyzwanka) przy testach funkcjonalnych aplikacji sieciowych.

Po nim chwila wytchnienia, zużyta na relaksujący spacerek do cukierni, aby coś przekąsić (ha! nie lubię pizzy i wolę Pepsi, nic dziwnego, że już nie pracuję jako programista ;)), a po przerwie kolejna fala prelegentów.

Zaczął ją Andrzej Śliwa rzucając parę słów o gitach. Ciekawe, ciekawe, w święta chyba sobie popróbuję trochę, bo możliwości to to ma fajnych parę.

Następnie Jacek Laskowski jak zwykle dał popis, z niezwykłym polotem prezentując atrakcyjne szynki. Aż szkoda, że sieć to Zło ;), bo korci rzucić wszystko i zostać fanboyem Grailsów, tymbardziej, że, jak pokazał Szanowny Prowadzący, niespodziewane wyjątki, błędy i wypaczenia nie są czymś strasznym... ;)

Ostatnim próbującym uśpić więcej niż jednego prelegenta (tak, tak, trudno w to uwierzyć, ale Jackowi L. się jednego uśpić, i obudzić, udało ;)) odważnym był Maciek Majewski, tym razem nietypowo, bo... o aplikacjach sieciowych. Konkretniej o wiosennych pływach, a wiadomo, że wiosną wszystko pływa żwawiej.

Potem losowanie nagród, chwilka sprzątania, i można było wpaść na integrację (pozdrawiamy Lublin, Warszawę, Wrocław i kogo tam jeszcze przywiało), napić, najeść się, lulków napalić, karczmy ledwo nie rozwalić... Oby za rok, było co najmniej równie fajnie (czyli, Leszku, wreszcie coś wygram, zgoda? ;)).

P.S. Jak widać po pierwszych komentarzach temu Panu i temu też się podobało, więc chyba coś być na rzeczy musi... ;)

czwartek, 2 kwietnia 2009

NSIS - obsługa różnych typów plików konfiguracyjnych

Sława!

Czasami zdarza się, że robiąc instalator do swojej aplikacji, chcemy jednocześnie zawrzeć w nim podstawową konfigurację swojego produktu tak, aby po procesie instalacji nadawał się on w większości przypadków już do użycia. Jeżeli dla tego produktu konfiguracja taka sprowadza się do wypełnienia dwóch, trzech pól i zapisania ich wartości w docelowym pliku, nie nastręcza to zbytnich trudności. Ot, wystarczy zrobić plik *.ini strony, skrobnąć funkcję obsługi i voila. Pikuś, morda, gitara gra. :)

Problemik (ale przecież, jak zawsze w naszym wypadku, tyci, tyciunki ;)) może się zacząć robić wtedy, kiedy tych produktów zaczyna być więcej, albo tych pól do konfiguracji zaczyna się mnożyć ponad jedną stronę, albo...

Wtedy przydałoby się oczywiście jakoś sobie pracę usprawnić. Jednym z możliwych rozwiązań, jest wykorzystanie do tego celu plików... *.ini. Otóż okazuje się, że każdy z elementów strony, jak i strona jako całość może mieć również właściwości niestandardowe, które można wykorzystać do przechowywania informacji potrzebnych dla naszych uniwersalnych funkcji/makr obsługujących konfigurację.

Załóżmy, że plik konfiguracyjny jest plikiem XML, wtedy do pól dodawać możemy informację o XPath skąd i gdzie potrzebujemy pobrać i zapisać wartości. W naszym pliku ini znaleźć się może więc coś takiego.

[Settings]
NumFields=3
TargetFile=config.xml

[Field 3]
Type=GroupBox
Left=3
Top=4
Right=145
Bottom=135
Text=Configuration

[Field 1]
Type=Label
Left=9
Top=15
Right=110
Bottom=24
Text=SMTP server:

[Field 2]
Type=Text
Left=9
Top=26
Right=141
Bottom=36
State=smtp.host
MinLen=1
Flags=
XPath=/mail-module/mail-sender/smtp-host

Natomiast kod odpowiedzialny za inicjalizowanie wyświetlania strony miałby postać mniej więcej taką:

${xml::LoadFile} '$TARGETDIR\$TARGETFILE' $0
${If} $0 == 0
   ReadIniStr $NUMFIELDS $INIFILE "Settings" "NumFields"

   ${For} $R9 1 $NUMFIELDS
      ${xml::RootElement} $0 $1
      ReadIniStr $XP  $INIFILE 'Field $R9' 'XPath'

      ${If} $XP != ""
         ${xml::XPathNode} $XP $0

         ${If} $0 == 0
            ${xml::GetText} $1 $0
         ${EndIf}

         ${If} $0 == 0
            WriteINIStr $INIFILE 'Field $R9' 'State' '$1'
         ${Else}
            MessageBox MB_OK|MB_ICONEXCLAMATION 'Error during reading:$\r$\nFile: $TARGETDIR\$TARGETFILE$\r$\nXpath: $XP'
         ${EndIf}
      ${EndIf}
   ${Next}

   InstallOptions::initDialog /NOUNLOAD $INIFILE
   Pop $HWND

   InstallOptions::show /NOUNLOAD
${Else}
   MessageBox MB_OK "Can't find file: $TARGETDIR\$TARGETFILE"
   Abort
${EndIf}

Na analogicznej zasadzie konstruujemy funkcje zapisujące do pliku XML, używając mniej więcej czegoś takiego:

ReadIniStr $NUMFIELDS $INIFILE "Settings" "NumFields"

${For} $R9 1 $NUMFIELDS
   ReadIniStr $XP  $INIFILE 'Field $R9' 'XPath'

   ${If} $XP != ''
      ReadIniStr $0 $INIFILE "Field $R9" "State"
                  
      ${xml::RootElement} $1 $1
      ${xml::XPathNode} $XP $1
      ${xml::SetText} $0 $1
      ${xml::SaveFile} '$TARGETDIR\$TARGETFILE' $1
   ${EndIf}
${Next}

Dzięki temu tworzenie kolejnych konfiguracji sprowadzi się jedynie do ustawienie odpowiednich wartości w plikach *.ini. Jeżeli jeszcze wydzielimy sobie wieloużywalny kod do plików nagłówkowych, tworzenie instalatorów na pęczki będzie niczym bułka z masłem na śniadanko. :)

niedziela, 22 marca 2009

Berlin smutkiem zniebieściały...

Sława!

Łykend nietypowo jak na mnie zaczął się od tzw. Wydarzenia Kulturalnego, mianowicie miałem niekłamaną przyjemność posłuchać na żywo jednego z najlepszych gitarzystów nieklasycznych naszych czasów, czyli Garego Moore'a.

Koncert, w ramach trasy promującej najnowszy album Bad for You Baby, odbył się w całkiem przyjemnej berlińskiej sali Tempodrom. Zgodnie z oczekiwaniami moimi, mediana wieku przybyłych była bliżej wieku moich rodziców niż mojego, ale trzeba przyznać, że były też persony mocno średnią wieku zaniżające :) Natomiast niezgodnie z oczekiwaniami, okazało się, że nie tylko polscy (szczecińscy) akustycy są... głusi. Na szczęście ciut zbyt głośne ustawienie ogólne i rezonująco-skrzekliwe ustawienie wysokich tonów nie zdołały zepsuć mocno wrażenia. Ale minusik zostaje.

Na rozgrzewkę zaserwowany został Alvin Youngblood Hart z  zespołem, który dał czterdziestominutową dawkę fajnego, gitarowego bluesrocka (z naciskiem bardziej na rocka). Na ile się zorientowałem, zaprezentował materiał ze swojego, zdaje się ostatniego, albumu Motivational Speaker. Muzyczka fajna, z przytupem a nawet wykrokiem :)

A potem oczywiście Gwiazda Wieczoru, Gary. W swoim dwugodzinnym występie zagrał zarówno utwory z najnowszej płyty (m.in. tytułowe Bad For You Baby, Mojo Boogie, WalkinThru the Park czy I Love you more than youll ever know, jak i trochę starszych kawałków, chociażby Oh, Pretty Woman, Too Tired,czy All Your Love) udowadniając, że na gitarze "wymiata" jak niewielu.

I mimo dwóch bisów - The Blues Is Alright i Parisienne Walkways jakoś tak szybko się skończyło. Na tyle, że, chyba najbardziej powszechnie znany jego utwór musiałem sobie dograć we własnym zakresie...

czwartek, 19 marca 2009

Radio w foobar2000

Sława!

Dziś o słuchaniu radia za pomocą znanego i lubianego foobara. Jeżeli chodzi o tzw. internetowe, nie ma problemu. Standardowo odtwarzacz ten obsługuje strumienie Shoutcast, ot wystarczy użyć opcji Add location. Żeby móc skorzystać ze strumieni "microsoftowych" należy użyć dodatkowego komponentu - foo_input_mslive. Obsługa Last.Fm też jest zapewniana przez komponent - foo_lastfm_radio. Obsługa obu jest też dość banalna, że nie ma się co rozpisywać :)

Natomiast jeżeli chodzi o obsługę radia eterycznego, czyli za pomocą karty FM (TV), to nie udało mi się znaleźć odpowiedniego komponentu, a szkoda...