nablaone.net: blog | zdjęcia | nasi-fachowcy.net

Cooluary v2 - Gdańsk

2009-06-29, common-lisp, hack, lifehack

Byłem na Cooluarach i było fajnie :-).

Nie pisałem na tym blogu o sprawach około-pracowych. Czas na zmiany. Być może trzeba będzie zmienić podtytuł bloga, na “mało intymny” :-)

Jakoś tak się stało, że unikam konferencji technologicznych. Nie widzę sensu słuchać prezentacji o kolejnej srebrnej kuli, która to uczyni klienta szczęśliwym, a mnie bogatym. Nie wiem, czy wszystkie konferencje tak wyglądają, ale z tego co się zdążyłem zorientować (patrząc na agendy) to większość tak wygląda. Ot współczesna forma sprzedaży wszystko-leczącego oleju z węży dla ludzi z dużym IQ. Poza tym zawsze miałem wrażenie, że taka forma na praktykowanie społecznego dowodu słuszności. Grupa myśli jak ja, wiec to musi być prawda.

Sceptycyzm swój czasem trzeba weryfikować. Trzeba sprawdzać przesłanki. Się natrafiła okazja. Dyrekcja postanowiła wysłać mnie na Cooluary. Tak konferencja która nie jest konferencją, a raczej zjazdem developerów. Jako, że było to w Gdańsku, a i czasem trzeba wyskoczyć ze “strefy komfortowej” nie oponowałem.

Formuła imprezy była intrygująca. Zamiast wykładów, (jeden się stresuje, reszta ziewa, albo czeka na obiad), były grupy dyskusyjne z moderatorem, czy raczej inicjatorem. Czyli bardziej bezpośrednia “horyzontalna” forma komunikacji. Tematy dyskusji były dowolne, (pomijając dwa narzucone przez sponsora). Uczestnicy mogli zgłaszać swoje tematy, które następnie były grupowane i przypisywane do konkretnego pokoju i godziny. Dyskusje odbywały się w 4 pokojach równocześnie w pięciu sesjach.

Zaproponowałem dwa tematy “Clojure - Lisp dla mas”, i “Java - współczesny Cobol“. Dodatkowo miałem pociągnąć jeden z tematów sponsorskich, trochę to ograniczyło moją możliwość uczestnictwa w innych sesjach, a szkoda, bo było parę ciekawych.

Krótki przegląd sesji:

  1. Git - czyli o rozproszonych systemach wersji. Powiem tyle, widać ruch w korporacjach. Lud zaczyna używać i przy następnych awansach programatorów git ma szansę stać się standardem korporacyjnym. Oczywiście jeśli nie wyprzedzi go w tym Mercurial.
  2. Clojure - widać, że jest zainteresowanie. Nie wiem czy wynika to z bieżącego hype’u na języki dynamiczne. Być może. Lispowców tam nie spotkałem, także o common-lisp/scheme vs clojure nie można było podyskutować. Miło było poznać java-sceptyków.
  3. Przeglądy kodu - ciekawa dyskusja, wcześniej nie przykładałem do tego tematu większej roli. Z pomocą nowego narzędzia Atlasiania, można wspomóc proces przeglądu kodu i to nie tylko w tym krytykanckim-audytorskim aspekcie, ale również jako metodą przekazywania wiedzy. Rzecz ciekawa.
  4. Obsługa sytuacje wyjątkowych - nic ciekawego, zdradziłem kto zabił w ciągu 5 minut. Widać było (po frekwencji), że dyskusja o wydajności była ciekawsza, notabene sam chciałem się tam ewakuować, bo temat ciekawszy, bardziej dynamiczny i wieloaspektowy :-)
  5. “Java - współczesny Cobol” połączone z tematem o śmierci Javy. Zebrali się głównie weterani, sądząc po zmarszczkach :-). Wniosek był pocieszający, nie widać konkurencyjnej rewolucyjnej nowej technologii która miała by się rozlać na biznes.

Dzień drugi był bardziej tradycyjny, wykład + warsztaty. Wykład był o pracy jaką znam, bo prowadził go dyrektor działu w którym pracuje. Nie wiem czy do wszystkich trafi pragmatyczne podejście. Nie wiem na ile ludzie umieją się odciąć od profesjonalnie wyglądających produktów architektów astronautów.

Po wykładzie odbywały się warsztaty. Nie było to warsztaty sensu stricte. Raczej pokaz na żywo pewnych możliwości języków. Mówię języków gdyż na takie wykłady poszedłem. Pokazy narzędzi mniej mnie interesują. Było o zupełnie innych dwóch językach.

Na początku o Groovy’m, który to kiedyś mi się nie spodobał, gdyż pochodzi ze stajni przeinżynierowanych projektów. Obiektywnie patrząc, jest to rozsądne narzędzie dla osób nie Unixowych, które chcą pisać krótkie często jednorazowe skrypty rozwiązujące nie-cierpiące zwłoki zadania.

Potem było o Scali. Dziwny ten język. Takie wymieszanie Javy z językami funkcyjnymi. Nie przypadł mi do gustu. Może dla tego, że nie jestem fanem statycznego typowania.

Reasumując było ciekawie. Dyskusje ogólniejsze (procesowe) wydały mi się ciekawsze. Być może dlatego, że o konkretach (języki, produkty) ciężko się dyskutuje, bez wiedzy. Ciekaw jestem kiedy pojawią pomysł zaproszenia do dyskusji interdyscyplinarnych. Przykładowo “Bauhaus vs Wabi-Sabi w architekturze systemów” mógłby być tematem ciekawym. Myślę, że architekci, developerzy i filozofowie znaleźli by spólny język. Pojęcia piękna, prawdy i dobra występują we wymienionych dziedzinach.

Nowe Ubuntu, nowy błąd

2008-06-12, common-lisp, hack

Czasem koduję wieczorami w Common Lispie. Od jakiegoś czasu zauważyłem spadek sprawności używania Emacs’a. A, to jakaś funkcja się nie uruchomiła, albo uruchomiło się coś innego. Myślę, może zmęczenie, albo starość :-). Okazało się, że jest zwykły błąd w Ubuntu 8.4.

W miejsce Capslocka mam Control. Jest to bardzo wygodnie. CapsLocka prawie nie używam, a Control pod Emacsem to podstawowy klawisz skrótu. Konfiguracji tej używam od jakiegoś czasu, pewnie od paru lat.

Po aktualizacji systemu wykryłem, że naciśniecie CapsLocka działa czasem jak kombinacja CapsLock + Control. Czasem, to znaczy jedynie pod Emacsem. Innym programom widać jest to obojętne.

Rozwiązanie jest prymitywne. Dodajemy następujące linie do skryptu uruchamianego podczas logowanie się:

xmodmap -e "remove Lock = Caps_Lock"
xmodmap -e "add control = Caps_Lock"

Spotkanie Lispowe w Warszawie

2008-05-07, common-lisp

Rysiek Szopa organizuje spotkanie lispowców w Warszawie. Mam zamiar wziąć udział. Będzie ciekawie. Ciekawe czy przerodzi się to w cykliczną imprezę.

W odpowiedzi anons na grupie comp.lang.lisp, odpowiedział niejaki A.L., znany “troll” amerykanista z grupy pl.regionalne.warszawa. Świat jest mały :-). A wydawało by się, że Lisp to mniejszość mniejszości.

BTW.
Nadal próbuje zrobić swój własny framework/środowisko do tworzenie webaplikacji. Demonstracyjne aplikacje są/będą dostępne pod adresem nablaone.net/wdk/, a źródła wdk. Instrukcji instalacji i uruchomienia brak.

SLIME - konsola do aplikacji produkcyjnej

2008-02-19, common-lisp, hack

Utrzymuję na serwerze mała aplikację dino-demo. Wchodzi ona w skład dino, trudno to nazwać frameworkiem, raczej jest zlepkiem różnych bibliotek. Ma to służyć mi do robienia aplikacji w Common Lispie :-). Może zrobię stronę i instrukcję instalacji.

Od czasu do czasu aplikacja się psuje. Ot taka spontaniczna korozja. Spontaniczna, bo wpływu użytkowników nie widać :-). Jak się okazuje, pozostawienie w miarę skomplikowanego sprzętu (sbcl + hunchentoot + swank) samego sobie może spowodować jego degradację. Hmmm.

Dziś popsuła się pula połączeń. Popsuła się w następujący sposób: popsute połączenie nie zostało usunięte z puli. Być może jest błąd w bibliotece Postmodern, być może błędne jest moje użycie. Nie wiem. W każdym bądź razie postanowiłem to naprawić i to nie przez restart lispa.

Do zabawy z Common Lispem używam Emacs’a z SLIME’em. SLIME ma taką miłą cechę, że gada do uruchomionego lispa przy pomocy TCP/IP :-). Zatem mając działającego swanka (lispowa część SLIME’a) na serwerze można się połączym Emacsem do aplikacji produkcyjnej. I to nie przez sendmaila jak to w filmie było, a przez tunel SSH:

ssh -L 4005:localhost4005 nasz.serwer.pl

Następnie w Emacsie łączymy się poprzez

M-x slime-connect

I naprawiamy szkodę:

; SLIME 2008-02-17
CL-USER> (postmodern:clear-connection-pool)
; Evaluation aborted.
CL-USER> postmodern::*connection-pools*
#<HASH-TABLE :TEST EQUAL :COUNT 1 {9444241}>
CL-USER> (setf  postmodern::*connection-pools* (make-hash-table :test 'equal))
#<HASH-TABLE :TEST EQUAL :COUNT 0 {C2B04F9}>
CL-USER> 

Dostępna jest introspekcja, debugger, modyfikacja danych jak i kodu. Słowem hacking online. Zróbcie to w Javie :-)

badip - pomysł antyspamowy

2008-01-03, common-lisp, hack

Jakoś ostatnio, tematyka wolnościowa zawładnęła tym blogiem. Co niektórzy mają mi za złe :-). Czas wrócić do geekowskich rozważań i zmniejszyć liczbę czytaczy ;-)

Przeczytałem kiedyś na Code Kata o filtrze Blooma. W skrócie to taka sprytna struktura danych pozwalająca zaimplementować słownik ortograficzny mając do dyspozycji dosłownie kilkadziesiąt kilobajtów pamięci. Postanowiłem, zaimplementować taki filtr i użyć go do składowania listy złych adresów IP (badip). W założeniu plik zawierający złe adresy byłby dostępny publicznie, każdy mógłby go sobie pobrać i zachować na swoim serwerze. Dzięki temu weryfikacja adresu byłaby odporna na problemy sieciowe z moim hostingiem. Nie mówiąc o tym, że dużo szybsza :-). Złe adresy IP byłyby pobierane z różnych źródeł, np. denyhosts.net, listy anonimowych serwerów proxy etc.

Zaimplementowałem filtr Blooma, używając jako funkcji hashujących wyniku funkcji skrótu MD5. Założyłem ustaloną liczbę kluczy (7). Poziom błędu fałszywych pozytywów można regulować tylko za pomocą wielkości wektora bitów.Im mniej stopni swobody tym lepiej. Implementacja jest dostępna md5bloom.

Zacząłem robić infrastrukturę do pobierania list IPików i generowanie w/w pliku badip.bin. Się okazało, że implementacja filtra w PHP nie działa poprawnie, bo operacje matematyczne są wrażliwe na typ numeryczny (w tym przypadku zakresy liczb). Baterie mi wysiadły. Moje przyzwyczajenia z Common Lispa znów okazały się szkodliwe, tam się typy same zmieniają stosownie do potrzeb. Ehhh, człowiek do luksusu działania szybko się przyzwyczaja :-). Teraz rozumiem dlaczego ludzie eksperymentują z algorytmami w językach lispowatych (CL, Scheme), a później piszą translator na docelowy język przemysłowy (vide implementacja GC w C#).

Aha. Usługa będzie dostępna pod adresem http://nablaone.net/badip/. Na początek zrobię prosty plugin do “czegokolwiek” w PHP, oraz dedykowany do Wordpressa. Nie ukrywam, chęci poznania trzewi tego popularnego produktu blogowego.

BTW.
Minął rok jak używam GTD . Dla mnie działa. następna akcja -> poprawić implementacje w PHP :-)

Bombardowanie Lispem

2007-09-20, common-lisp

Przyłączam się akcji. Bomba: Common Lisp tutorial

dino - zestaw do robienia aplikacji w lispie - wersja alfa

2007-08-28, common-lisp, hack

Mam wersję alfa zestawu do robienia aplikacji w common-lispie. Nazywa się to ‘dino’. Jest takim “kodem klejem” łączącym następujące elementy w całość:

Dino można pobrać na następujące sposoby:

  • same dino (bez bibliotek i lispa) + proste aplikacje (dla obeznanych z lispem )
    hg clone http://nablaone.net/repo/hg/dino
    
  • dino wraz ze wszystkimi zależnościami, w tym implementacją lisp (dla nowych i/lub leniwych)
    wget http://nablaone.net/repo/dist/dino-2007-08-27.tar.bz2
    tar jxf dino-2007-08-27.tar.bz2
    

Aby przystąpić do hackowania/oglądania wykonujemy następujące kroki:

  1. Przygotowujemy dino do działania (tworzy katalogi, pobiera zależności, kompiluje, etc)
    cd dino
    ./dino prepare
    
  2. Uruchamiamy:
    ./start.sh
    
  3. Przeglądarkę kierujemy na adres http://localhost:4242/. I obserwujemy stronkę domyślnej aplikacji.
  4. Emacsem podłączamy się slimem M-x slime-connect i możemy hackować!

Ludzie mówią, że lisp to taki skomplikowany i trudny jest. A tu proszę 3 kroki i możemy działać. ;-)

A teraz niespodzianka. W zestawie jest również aplikacja demo, taki klon plotkuj.net :-). Aplikacja ta używa bazy danych. Instalacja jest trochę bardziej skomplikowana i jej tu nie zamieszam. Jakby komuś zależało na niej to proszę dać znać.

dino - zestaw do robienia aplikacji w lispie

2007-08-21, common-lisp, hack, web

Od jakiegoś czasu poszukuję i testuję różne biblioteki dla Common Lispa, które to mogły by posłużyć do zrobienia czegoś w rodzaju frameworku webowego. Nie chcę robić nowego frameworku opartego na jakimś tam wydumanym paradygmacie, chcę mieć prosty zestaw narzędzi do robienia mikro i makro aplikacji. Na stronie wiki dino jest lista bibliotek-kandydatów. Selekcja trwa.

Dziś napisałem pierwszą prymitywną aplikacyjkę dino-demo. Taki klon plotkuj.net ;-)

Powiem tak, developowanie w CL (SBCL+SLIME) mam obcykane, szybko, sprawnie mi idzie. Problemem okazał się deployment w szczególności kwestie około konfiugracyjne (połączenie do bazy danych i konfiguracja serwera HTTP). To musi być jakoś sprytnie zrobione.

Ha. Teraz się zastanawiam, czy by tak nie udokumentować procesu developmentu i deploymentu aplikacji ? Taki mini-tutorial.

Mój pierwszy klient blipa

2007-06-25, common-lisp, hack, web

Czekając na wieści od weta, się ważyło czy zwierz będzie 3 czy 4 kopytny, postanowiłem utworzyć prostego klienta blipa. Takiego aby można było dodawać opis. Pierwsze podejście leniwe bash+openssl+nc nie powiodło się z nieznanego mi powodu?? Nie da sie blipa oglądać telnetem/netcatem. Jak tak można ;-). Chyba jakieś zabezpieczenie mają, albo lewą konfigurację. Nie wiem.

Drugie podejście miej leniwe: lisp + drakma. Przeżyłem ręczne pobieranie zależności. Już wiem, o co dodam w następnym kroku do clget’a :-). To podejście się udało. Kod znajduje się tu: blip.lisp.

Teraz mogę dodawać statusy maszynowo, tylko nie wiem o jakiej treści i po co :-). Może ma ktoś pomysł.

A zwierz, pozostanie 4-kopytny :-).

Pożytki ze zrzucenia własnego rdzenia

2007-06-16, common-lisp, hack

Uwaga, wpis bardzo ezoteryczny. Proszę się nie popadać w samodeprecjacje :-)

Jakiś czas temu, jak przymierzałem się do zakupu VPS z ograniczoną jak na współczesne warunki pamięcią operacyjna 128MB, testowałem zajętość pamięci różnych rzeczy. Tak aby zobaczyć, ile kosztuje MB przyjemności :-). Pamiętam, że SBCL + zajmował jakieś 20MB RSS/ 90MB VSZ. Wartość ta była akceptowalna.

Wczoraj skopiowałem tajny projekt dino na mojego VPSa. Uruchamiam i patrze a tu 50MB zjedzone. Co jest? Czyżbym się znów pomylił, jak to było z kursem dolara kanadyjskiego? Otóż nie. Do testów użyłem dino, co operowało na zrzuconym rdzeniu (ang: core dump). A wczoraj ładował biblioteki przy starcie do standardowego rdzenia. Zatem mogę polecić uruchamianie common-lispa z własnego rdzenia. Dwie zalety:

  1. obiekty które są ładowane z rdzenia, są w przestrzeni read-only, po której to garbaty (ang. garbage collector) nie biega, przez co oszczędza sobie pracy
  2. strony rdzenia ładowane są tylko w przypadku gdy są używane, zatem nieużywane fragmenty bibliotek nie zalegają w stercie (ang heap) ani w przestrzeni wymiany (ang. swap)

A teraz krótka instrukcja jak zrzucić rdzeń i potem go użyć.

  1. Tworzymy plik dump-core.lisp z listą ulubionych bibliotek
    (require :asdf)
    (require :sb-posix)
    
    (asdf:oos 'asdf:load-op :swank)
    (asdf:oos 'asdf:load-op :clark) ;; to też tajny projekt ;-)
    (asdf:oos 'asdf:load-op :hunchentoot)
    
    (sb-ext:save-lisp-and-die "my-core.core")
     
  2. Zrzucamy rdzeń:
    sbcl --disable-debugger --noprint --no-userinit --load dump-core.lisp
    
  3. Tworzymy plik startowy start.lisp:
    (clark::start-server)
    (swank:create-server :port 4005 :dont-close t :external-format :utf-8-unix)
    (hunchentoot:start-server :port 4242)
    
  4. Teraz uruchamiany nasz rdzeń z włączonym Hunchentootem i Slimem gotowym do hackowania kolejnego killer-app’a:
    sbcl --core my-core.core --disable-debugger --noprint --no-userinit --load start.lisp
    
  5. Przeglądarkę kierujemy na adres localhost:4242 a w Emacsie
    uruchamiamy M-x slime-connect.
  6. Hack, hack, hack
  7. Zysk :-)

Wyżej wymieniona instrukcja stanie się niepotrzebna, gdy w końcu zrobię wydanie dino. Na razie jeden z komponentów jest już wersji alfa clget :-).

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2010 nablaone.net | powered by WordPress with Barecity