Rozpowszechnianie standardów…

Już pisałem o tym, że do generowania dokumentacji do PyXMPP używam
Epydoc. Bardzo ładnie wyciąga
dokumentację z kodu, ale… zajrzałem wczoraj do wygenerowanego HTMLa.
Najpierw miła niespodzianka, DOCTYPE XHTML 1.0 Transitional. Jednak
radość znikła gdy zapuściłem na tym xmllint --valid
--noout
. Nawet well-formed to nie było. xmllint
--html
nie lepiej. Ani o XHTML, ani HTML. Gdy zajrzałem do środka
moje obawy się potwierdziły — koszmarek. Wstyd mi by było to na stronie
projektu publikować.

Wczoraj więc wypełniłem bugreporta na SourceForge, a
dzisiaj w tym podłubałem i conieco porawiłem. Już się waliduje, niestety nie
jako XHTML Strict, bo to ramek używa. Ale i tak usunąłem wszystkie
<center/>,
<font/>,
<b/>,
<i/>, itp.,
zamieniając na coś odpowiedniejszego i dodając odpowiedni styl. Poprawiłem
też funkcję kolorującą regexpy (w dokumentacji pyxmpp.jid wrzucała znak bajt 0
do wyniku) oraz obcinającą za długie fragmenty HTMLu (żeby zamykała tagi).
Patcha dołączyłem do bugreportu i opisałem na liście dyskusyjnej. Zobaczymy co
z tego wyniknie ;-). Mam nadzięję, że patch nie zostanie olany.

Reklamy

ZPT

System obsługi użytkowników sieci obsługiwanych przez naszą firmę robiłem w Zope.
Prezentację przy użyciu DTML, bo Zope’a uczyłem się z ZopeBook, gdzie o DTML było najwięcej,
a ZPT wyglądał strasznie verbose. Poza tym było tam wyraźnie napisane, że oba rozwiązania
są równorzędne i po prostu DTML bardziej przypadnie do gustu
programiście/hackerowi, a ZPT webmasterowi.

No i system działa, nawet bardzo ładnie działa (wygląda gorzej, ale mnie to
nie obchodzi). Jednak Zope zaczął mnie wkurzać, bo niby proste rzeczy w tym
DTML trzeba było robić na około, a do tego VIM się gubił w składni i podświetlał
mi część kodu jako błędy (w sumie nie dziwię mu się). Poskarżyłem się nawet na
pl.comp.lang.python i tam ktoś mi odpisał, że to DTML jest do d… i należy
używać ZPT. A więc zacząłem czytać o ZPT. I rzeczywiście wygląda dużo lepiej niż DTML,
chyba zaraz spróbuję jakiś prostszy kawałek systemu na to przepisać. Może się przeproszę
z Zopem i kolejny projekt też w nim zrobię? Niestety do metod ZSQL trzeba używać DTML,
a tam to nawet wartości None nie rozumie. Ale z tym się jeszcze da żyć…
Gdyby jeszcze można było używać Subversion do tego to już by było super.

Format CV

W jakim formacie przysyła swoje CV grafik starający się o pracę?
Oczywiście w JPEG.

Boje się, że kandydaci na adminów (przyjęcie grafika na szczęście nie
należy do mnie) zaczną mi przysyłać CV w postaci skryptów perla… Na razie
dostaję głównie doce, rzadziej PDF i
RTF. Raz dostałem dwa pliki .rtf, jeden z
Content-Type: text/richtext, ale w formacie RTF (zdaje się że to
co innego), a drugi, z Content-Type: application/octet-stream
mimo rozszerzenia okazał się być dokumentem w formacie
OpenOffice. Ja nawet na początku się nie zorientowałem, bo i
tak w OO to otwierałem, ale ktoś z Windowsem i bez OO raczej by tego nie
otworzył.

Najgorsze jest to, że na razie format Worda się najlepiej sprawdził. Bo
treść tak przesłanych CV od razu mogłem przeczytać w moim
muttcie (dzieki wv w mailcap),
a do RTF i PDF musiałem przechodzić do Xów i odpalać jakąś kobyłę. Co gorsza
jeden z tych RTFów był tak rozjechany, że można było się jedynie domyślać o co
chodzi. Właściwie nie wiem jaki byłby właściwy format przesyłania takich
dokumentów. Mnie by plain-text wystarczył, ale jak musi być ładnie, to
chyba zostaje PDF, lub nieszczęsny (w mailach) HTML.

No i stało się

Przed chwilą dokonałem zmian w PyXMPP w kierunku który doradził Jarek,
ostatecznie zrobiłem tak:

  • fr -> from_jid
  • to -> to_jid
  • typ -> stanza_type
  • sid -> stanza_id

Dla ułatwienia życia sobie, a także innym developerom używającym PyXMPP
(są tacy?) przygotowałem też skrypt poprawiający kod pythona używający starych
nazw. Mnie nawet ten skrypt nic nie popsuł.

A w pracy wkurzałem się na interfejs WWW zarządzania switchy DLink
i access-pointów Proxima. Chcę dać na zewnątrz (żebym miał w domu,
czy gdzieś w terenie) dostęp do tych urządzeń. Że urządzenia nie mają SSL, to
nie mogę tego po prostu przeroutować, więc robię to przez reverse-proxy na
Apache z mod_ssl. Pierwszy problem to bezwzględne linki na stronach tych
interfejsów. Ale to załatwia (teoretycznie) mod_proxy_html.
Tylko, że mod_proxy_html parsuje otrzymany HTML, poprawia co
trzeba i serializuje od nowa. Ale jak to ma działać na czymś co do HTMLa jest
tylko miejscami podobne (tak jest w przypadku Proxima — po prostu
koszmar)? No nie całkiem działa. Do przeglądarki dochodzi już poprawny HTML,
ale wyrażający nie całkiem to co autor miał na myśli. Miejscami prześwituje
kod JavaScript, inne rzeczy poprzestawiane itp. Z tym pewnie będę jeszcze
długo walczył.

mod_proxy_html poprawia też skrypty JavaScript w kodzie
HTML, robi to na głupa, ale jak się postarać, to można uzyskać ciekawe
efekty. Gorzej ze skryptami zewnętrznymi, w osobnych dokumentach. W przypadku
switchy nie jest niby źle, bo w zewnętrznych skryptach nie ma zaszytych
żadnych ścieżek, ale za to są serwowane jako text/html, a co za
tym idzie mod_proxy_html próbuje z nich robić poprawnego
HTMLa. No i taki skrypt po dodaniu <html><body> na początku
i po przetworzeniu tagów w środku nie bardzo chciał działać. Musiałem więc tak
skonfigurować mod_proxy_html, aby zajął się jedynie
dokumentami *.html.

Proximy za to mają zaszyte ścieżki w plikach *.js, jednak
serwowanych poprawnie, jako text/javascript.
mod_proxy_html w ogóle tego nie rusza, za to znalazłem
jeszcze mod_ext_filter (standardowa część Apache 2.x). Przy pomocy tego
moduliku można serwowane dokumenty przepuścić przez zewnętrzny program. A więc
przepuściłem przez seda i poprawiłem ścieżki gdzie trzeba.
Nawet zadziałało. Chyba tego samego modułu wraz z sedem, albo
jakimś mądrzejszym skryptem w
perlu/awku/pythonie będę
musiał użyć do tego paskudnego HTMLa z Proxima. To jest do zrobienia,
ale może być z tym kupa roboty i nie wiem czy się wcześniej nie poddam.

Prezent?

Mojej żonie obcy facet (jej znajomy z Internetu) kupił prezent na urodziny. I to
nie taki całkiem drobny prezent. Ja nawet wierzę, że bezinteresownie i wiem, że
facet od tego raczej nie zbiedniał, ale nie wiem co o tym myśleć. Głupia
sytuacja, dla żony też.

Dopiąłem do swojego Joggerka skrypt zbierający informacje o odwiedzających. Co
prawda użyta metoda — obrazkowa, ze wspomaganiem JavaScriptu — nie jest
idealna i trochę fałszuje wyniki (olewane są przeglądarki tekstowe — w tym
wiele moich wejść), ale i tak ciekawe co z tego wyniknie. Na razie najciekawsze
są zapytania Google używane do wejścia na mój blog. W każdym razie inwigilacja
trwa…

A w pracy się wkurzyłem nieco, aż o mało nie nawymyślałem szefowi. Dostałem
godzinę na skonfigurowanie urządzenia. Urządzenie takie miałem pierwszy raz w
rękach, opcji cała masa, do tego miało działać z urządzeniem innej firmy. Żeby
to zrobić porządnie potrzebowałbym przynajmniej jeden cały roboczy dzień.
Skonfigurowałem, ale na pewno nie optymalnie ani najbezpieczniej. Jak się sypnie
będę musiał jeździć niewiadomogdzie, żeby to naprawiać. Nie lubię takiej
roboty.

Działający parser i kompilowany szablon

Wczoraj udało mi się doprowadzić nowy parser strumienia w PyXMPP do działania.
Nie piszę skończyć, bo zasługuje jeszcze na wiele, głównie kosmetycznych, poprawek.
W każdym razie już CJC z libxml2 2.6.7 dzała, a to najważniejsze.

W pracy dokończyłem analizę tego nieszczęsnego machine check exception
i wyszło mi na to, że błąd został zgłoszony przez north bridge i dotyczy
kontroli ECC w pamięci. Czyli albo pamięć walnięta, albo płyta główna. Będzie trzeba
to sprawdzić i felerny sprzęt wymienić.

Potem na jogu
Marcoosa
przeczytałem o XFN i postanowiłem
użyć tego cuda u siebie. Ale że wymagałoby to poprawienia linków w dwóch plikach
(index.html i comments.html), to postanowiłem najpierw coś z
tym utrudnieniem zrobić. Więc resztę czasu w pracy, pomiędzy telefonami
klientów, spędziłem na tworzenie szablonów do szablonu i systemu kompilacji tego
do formy strawnej przez Joggera. Udało mi się – z kawałków będących well-formed
XML składane jest (XInclude, zaimplementowane w xmllint) szablony dla strony
głównej i z komentarzami. Po drodze jest wszystko walidowane – w tym celu
stworzyłem DTD do szablonów dla XHTML 1.0. Pliki źródłowe się nie walidują, bo
musiałbym zrobić jeszcze DTD uzwględniające XInclude, a docelowy nie waliduje
się, bo ma deklarację DTD dla XHTML, nie uwzględniającą tagów Joggera, poza
deklaracją waliduje się względem tego mojego Joggerowego DTD.

Dla odmiany style CSS tworzone są przy pomocy preprocesora M4. Zrezygnowałem
z używania @import do składania szablonów w przeglądarkach
czytelników, zamiast tego na Joggerze leżą już kompletne, posklejane pliki
stylów. Dzięki temu walidator przestał głupieć, a i strona ma szansę szybciej
się załadować (aby wyświetlić stronę w pełni teraz wystarczy załadować 3 pliki
zamiast 7).

Wszystko razem spięte jest przy pomocy plików Makefile dla
GNU Make Oznaczeń XFN jeszcze nie dodałem. Nie starczyło czasu…
:-)

Obiadek (schabowy z frytkami i surówką) zjadłem Pod Pierożkiem, tak
jak pisałem. I smakował mi bardziej, niż wczorajszy w Sphinksie. Do tego był
tańszy, ale odrobinę mniej.

A teraz zabiorę się za zamalowywanie pamiątek po krysinych obiadkach. Ciekawe
czy po tym ta ściana nie będzie wyglądać jeszcze gorzej…

Problemy z CSS

Coś spieprzyłem CSS w moim szablonie. Mnie się wydaje że jest OK, ale Validator ma inne zdanie. No cóż – nie wiem jak to poprawić (nie zmieniając za bardzo sposobu zapisu kolorów), więc na razie usuwam ikonkę Valid CSS, ale będę musiał coś z tym zrobić. :-(