Zaloguj się

Jog Jajcusia

xmpp:jajcus@jajcus.net

Odświeżenie bloga

Postanowiłem trochę odświeżyć mojego bloga. Najpierw zmieniłem moje skrypty do generowania joggerowych szablonów – generowanie z XMLa i automatyczne walidowanie wyniku było fajne w założeniach, ale w praktyce chyba zbyt skomplikowane. Przesiadłem się na M4 i jest fajnie. :-)

Później postanowiłem dodać trzecią kolumnę do layoutu. Archiwum i kategorie chciałem przenieść na lewą stronę, a po prawej dać linkownie. Szablon przerobiłem, ale efekt mi się nie podobał. Do tego, gdy przyszedł czas na dodanie linków, stwierdziłem, że nie umiem się zdecydować co tam wrzucić – wszystko co przeglądam, to za chwilę połowa byłaby nieaktualne, a jeśli miałbym wybierać te najważniejsze, to niby jak? W końcu zmiany w szablonie zachowałem sobie gdzieś na boku w postaci łatki i wróciłem do starych, dobrych dwóch kolumn.

Czyli wizualnie byłem w punkcie wyjścia. A przecież chciałem coś pozmieniać. Najbardziej mnie wkurzało archiwum – ciągnące się jak papier toaletowy. Wczoraj, odrobiną magii w JavaScripcie, dodałem do niego hierarchię, a dzisiaj zwijanie niepotrzebnych lat. Z efektu jestem bardzo zadowolony – chyba całkiem nie źle, jak na kogoś, kto nie zna JavaScriptu. :-)

Poza tym, dołożyłem linki do następnej/poprzedniej strony w szablonie wpisów i do następnego/poprzedniego wpisu w szablonie komentarzy. A na końcu dorzuciłem reklamy AdSense. Miałem tego na bloga nie dawać, ale na stronach moich projektów niewiele te reklamy dawały – nic się tam nie dzieje, to nikt nie zagląda. A na Joggerze kolejne osoby dodają sobie reklamy na bloga i nikt na nich nie krzyczy, więc może i mnie czytelnicy wybaczą. ;-)

7 komentarzy do wpisu „ Odświeżenie bloga”


Praca dla pythonowców

Podobno mogą mnie czytać jacyś miłośnicy Pythona, więc kolega mnie poprosił o podlinkowanie ogłoszenia. Proszę bardzo, może rzeczywiście komuś się przyda:

Praca Python Django Warszawa - praca stała

Sam bym się zainteresował tą ofertą, gdyby nie ta Warszawa...

2 komentarze do wpisu „ Praca dla pythonowców”


Rewolucja w kompie

Niedawno pojawiło się nowe XFCE: 4.4. Najpierw chciałem to w pracy sobie zainstalować, ale okazało się, że ani tego nie ma w PLD Ac, ani nie da się w tym Ac zainstalować. Instalacji Th wolałem nie ryzykować na maszynie która służy mi do pracy... co innego w domu, tam ostatnio używam jedynie CJC i Firefoksa. Uznałem, że dwie aplikacje jakoś do działania doprowadzę.

Upgrade nie był prosty. Masy rzeczy w repo Th brakuje. Wiele zależności jest zepsutych. Cała masa pakietów zbudowanych w Ac wymaga X11-*, albo XFree86-*, których w Th już nie ma (wystarczyłyby zależności od libX*, które pociągnęłyby odpowiednie pakiety xorg-*). Dodatkowo, żeby nie było za prosto, mam u siebie pomieszane pakiety 32- i 64-bitowe. Ale jakoś się udało...

Pierwsze co chciałem odpalić, to Xy. W końcu dla nowego XFCE jest ta cała szopka... Poprzednio używałem 64-bitowego X-serwera i zamkniętych sterowników ATI. Otwarte nie dawały akceleracji, a zamknięte nie działały, gdy X-serwer był 32-bitowy (generalnie większość systemu mam 32-bitowe), a kernel 64-bitowy (bo tylko taki pozwala mi odpalać binarki i 32- i 64-bitowe). Teraz chciałem spróbować z serwerem 32-bitowym i sterownikami Open Source, w końcu między X.org 7.0, a 7.2 coś mogło się zmienić...

Jedno się nie zmieniło – sterownik z X.org wciąż nie rozpoznaje mojej karty (ATI Technologies Inc RV370 secondary [Sapphire X550 Silent]) i obsługuję ją dopiero po dodaniu do xorg.conf: ChipId 0x5b60. Akceleracja 3D też nie ruszyła, chociaż sterownik DRM w kernelu się załadował i kartę poprawnie wykrył... logi sugerowały, że znowu może być coś z tymi bitami... Zainstalowałem więc 64-bitowy X-serwer z 64-bitowymi sterownikami. DRI ruszyło. Rozszerzenie "Composite" też. Mogłem podziwiać piękną przezroczystość w XFCE. Najpierw działało to strasznie wolno, ale po poprawieniu paru opcji da się tego używać. Jednak z OpenGL coś wciąż było nie tak... mimo że glxinfo pokazywało, że wszystko jest OK i nawet Direct rendering: yes. To glxgears nie działało. Znaczy się działało, ale nic nie wyświetlało. Podobnie wszystkie inne aplikacje 3D...

Spróbowałem więc zamkniętych sterowników... musiałem przebudować, bo w Th były stare, niekompatybilne z nowymi Xami. Nowe się zbudowały, nawet działały, ale bez akceleracji 3D. Linker dynamiczny nie mógł znaleźć jakiegoś symbolu od DRI w modułach X-serwera... pewnie te zamknięte binarki nie są zgodne z naszym buildem X.org... no cóż, tym razem lepiej wypadły sterowniki otwarte.

Wróciłem do otwartych sterowników i spróbowałem jeszcze czegoś: zainstalowałem 64-bitowe glxgears... i ruszyło. Czyli tym razem, pod 64-bitowym kernelem, nie tylko X-serwer musi być 64-bitowy, ale i wszystkie aplikacje OpenGL. Przykre... ale chwilowo mogę z tym żyć. Ostatnio i tak wiele takich aplikacji nie używam. Właściwie, to tylko StepManię.

Dzisiaj więc postanowiłem sobie skompilować StepManię na 64-bity. Środowisko do budowania zrobiłem sobie w chroocie z czystym 64-bitowym Th. Zainstalowałem co StepMania potrzebowała i zacząłem budowanie. Od razu się wykrzaczyło... SM jest w C++, a C++ ma to do siebie, że kod napisany dla starszego kompilatora często nie da się skompilować nowszym. W PLD Th mamy GCC 4.2 i to GCC kodu StepManii nie polubiło. Jednak potrzebnych poprawek nie było dużo i większość z nich była nawet dla mnie (nie znającego i nie lubiącego C++) oczywista. W końcu się skompilowało. I nawet dało się uruchomić.

Skompilowana przez mnie StepMania działała, ale tak jakby nie do końca. Nie dało się wejść do ustawień gry, a rozpoczętej gry nie dało się wygrać. Jak się poprawnie przeszło którąś piosenkę, to maszyna puszczała ją od początku. Można by się było zajechać ;-). Podczas kompilacji widziałem warningi dotyczące, między innymi, strict aliasing rules, więc postanowiłem spróbować kompilacji z innymi opcjami. Okazało się, że skrypt configure StepManii na sztywno ma wpisane -O3. To już mogło sprawiać problemy. Zmieniłem na -O2 i dodałem -fno-strict-aliasing i całość skompilowałem od nowa. Podczas kompilacji ćwiczyłem sobie na tej niedorobionej binarce – ciekawie się gra, gdy komputer się czasem zagapi i nie zauważy, że się strzałkę wcisnęło na czas. ;-)

Po kilkunastu minutach miałem nową 64-bitową binarkę gotową. I tym razem działa dobrze. To sobie jeszcze kiedyś poskaczę. :-)

W kolejce czeka zbudowanie GComprisa dla Krysi, bo stare wyleciało razem z Ac (w Th tego brak).

9 komentarzy do wpisu „ Rewolucja w kompie”


Jak homofobi zniszczyli geniusza

Dziwię się, że tej historii nie znałem wcześniej. O samym Alanie Turingu trudno było nie słyszeć – maszyna Turinga i test Turinga, to terminy znane każdemu informatykowi. Biografią tego naukowca nigdy się specjalnie nie interesowałem, aż do dzisiaj, gdy przeczytałem wzmiankę o nim w artykule o badaniach naukowych dotyczących seksualności owiec.

Odkrycie zaskoczyło mnie na tyle, że od razu zajrzałem na Wikipedię, czy tam ta historia też jest odnotowana. Jest.

Alan Turing, jeden z największych (jeśli nie największy) geniuszy w historii Informatyki, był gejem. W tamtych czasach było to uznawane za przestępstwo. Naukowca osądzono, skazano i postawiono przed wyborem: albo podda się terapii, albo wyląduje w więzieniu. Niezależnie od tego, jako skazany wyrokiem sądu, nie mógł już pracować jako kryptolog w rządowej agencji.

Turing wybrał terapię. Polegała ona na przyjmowaniu estrogenów w celu zmniejszenia libido. Nie trudno się domyślić działania estrogenów na organizm mężczyzny: został impotentem i rozwinęły mu sie piersi. Niedługo później zmarł zatruty cyjankiem – najprawdopodobniej popełnił samobójstwo, gdyż nie mógł sobie poradzić z życiem po wyroku. Geniusz, który bardzo przyczynił się do rozwoju Informatyki, został poniżony i popełnił samobójstwo przez głupie uprzedzenia... W dwudziestym wieku... A ja myślałem, że palenie czarownic na stosie to taka odległa historia...

13 komentarzy do wpisu „ Jak homofobi zniszczyli geniusza”


Committed revision 666.

Mam dosyć sztywnego trzymania się niektórych zasad dobrego stylu programowania. Pisząc CJC starałem się w ogóle nie używać zmiennych globalnych, bo przecież każdy wie, że tak trzeba. No i dało się, jednak z tak zrobionego kodu nie byłem zadowolony. Mam tam takie trzy obiekty, właściwie singletony, do których dostęp potrzebny był w bardzo wielu miejscach. No i dostęp ten odbywał się właściwie na dwa sposoby: albo referencja do takiego obiektu była przekazywana w konstruktorze i potem zapisywana w atrybucie obiektu który tego potrzebował, albo dostęp odbywał się przez inne obiekty (np.: self.plugin.app.screen) – jedno i drugie nie wyglądały najlepiej. Standardowym, Javowe, rozwiązanie, w postaci statycznej metody zwracającej instancję singletona, niespecjalnie mi pasowało – to takie niepythonowe odwoływać się do klasy, gdy tylko jej instancja jest potrzebna. Do tego to więcej pisania by było, a przecież miałem API uprościć.

W końcu zdecydowałem się na rozwiązanie proste i skuteczne – zrobiłem moduł cjc_globals z trzema zmiennymi globalnymi. I wszystko byłoby dobrze, gdyby nie komunikat przy commicie, wyraźnie sugerujący, że za moją decyzją stoi Zło: Committed revision 666. ;-)

6 komentarzy do wpisu „ Committed revision 666.


Taki drobny "WTF?"

Dotychczas takie rzeczy spotykałem właściwie tylko na The Daily WTF, jako fajne ciekawostki. Sam raczej unikałem grzebania w cudzym kodzie, najwyżej zastanawiałem się jakie WTF przeżywają ci co przejmują lub kiedyś przejmą mój kod. ;-)

W obecnej robocie robię pewien system, w którym jako interfejs użytkownika służy aplikacja webowa w Javie zbudowana na Strutsie. Do niedawna nawet mnie specjalnie nie interesowało w jakiej to technologii i co to ten Struts. Ważne, że byłem w stanie to uruchomić w swoim systemie i robiło to co trzeba – tworzyło różne pliki i uruchamiało różne skrypty. Jednak ostatnio wyszło parę drobiazgów, które należałby jak najszybciej naprawić.

Niestety Javowiec zajmujący się tą częścią kodu jest niedysponowany (zdaje się, że się żeni) i nie dał rady tego zrobić, ani w najbliższym czasie nie zrobi. Sprawa zrobiła się pilna, więc sam się za to zabrałem – w sumie dobrze wiedzieć co w systemie siedzi. Najpierw poczytałem co to ten Struts i gdzie mam szukać odpowiedniego kodu, potem zabrałem się za poprawki...

Pierwsza rzecz banalna: zrobić stronę z komunikatem. Właściwie statyczną. Znalazłem szablon wyświetlający coś podobnego. Skopiowałem. W środku znalazłem miejsce na nagłówek i treść. Wypełniłem. Uruchomiłem aplikację... i treść jest, bardzo brzydko ułożona (brak marginesów), ale jest. Nagłówka brak. Zaglądam do źródła strony... kod paskudny, ale nagłówek jest. Zaglądam do CSS, a tam coś takiego:

#titleBox p {
    background #FFFFFF;
    ....
    color: white;
}

No i miałem problem... co się stanie, jak zmienię kolor nagłówków na czarny...

Nie było źle... okazało się, że w całym interfejsie było dużo więcej opisów niż wcześniej było widać, wyjaśniła się kwestia wolnej przestrzeni we wszystkich formularzach. Ale oczywiście layout się popsuł, trudno to nawet było wyjaśnić tą drobną zmianą koloru, ale poprawić było trzeba. No to podłubałem jeszcze trochę w tym CSS i jest ok... ufff..

Potem chciałem dodać jeszcze parę komunikatów, w szczególność w przypadku niepowodzenia pewnego skryptu... Zajrzałem do kodu a tam nie jest sprawdzany kod wyjścia _żadnego_ polecenia. A ja za cholerę nie wiem jak to ładnie w tym Strutsie obsłużyć. Na razie poszedłem na łatwiznę i wszystkie niepowodzenia przekierowuję na statyczną stronę z Operation failed. Przy okazji wyszła kupa innych problemów... tym razem to już chyba tylko Javę można za to skląć, ech...

Update: Zacząłem czytać dzisiejszy The Daily WTF i poprawiłem tytuł wpisu :-)

1 komentarz do wpisu „ Taki drobny "WTF?"”



Jesteście obserwowani...