31 marca 2007
19:08:57
|
kategorie:
html itp.,
jogger,
programowanie,
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ą.
;-)
15 lutego 2007
10:40:55
|
kategorie:
praca,
programowanie,
python,
w sieci,
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...
02 lutego 2007
22:08:24
|
kategorie:
gry,
linux,
oprogramowanie,
pld,
programowanie,
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).
06 stycznia 2007
18:07:08
|
kategorie:
polityka,
programowanie,
seks,
w sieci,
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...
07 września 2006
22:21:07
|
kategorie:
cjc,
programowanie,
python,
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.
;-)
30 sierpnia 2006
20:19:12
|
kategorie:
praca,
programowanie,
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 :-)