No i spieprzyłem…

Przenosiny na LVM ukończone. Straty: prawdopodobnie kilkadziesiąt MB
plików z /opt i /home (oczywiście poza katalogiem mojej żony, który jako
strategiczny został zbackupowany). Na razie nawet nie wiem co to za pliki. Ale
sama informacja zdołała żonę wkurzyć… :-(

Do zapamiętania na przyszłość:

  • Przed jakimkolwiek zapisywaniem danych, po zmianach w filesystemie, czy
    tablicy partycji, robić fsck! I dobrze przemyśleć informacje
    jakie ono wypluje.
  • To, że resize2fs wywalił się z błędem glibc detected
    double free or cośtam
    nie znaczy że właśnie rozwalił mi filesystem (sam
    sobie później rozwaliłem wychodząc z takiego założenia).
  • Nawet gdy się zrobiło duży zapas miejsca na partycji pod zmniejszony
    filesystem, lepiej sprawdzić czy on się tam rzeczywiście mieści.
  • pvresize jest not implemented yet, więc nie
    ma sensu kasować starych partycji, żeby powiększyć istniejące PV — po
    prostu trzeba z tych partycji zrobić osobne PV i dodać do odpowiedniego
    VG.
  • Backupować zawsze więcej niż wydaje się istotne — żona może być zła
    także za nieistotne pliki.

Coś dla nieprzekonanych do dynamicznego typowania

Natrafiłem dzisiaj na artykuł Bruce’a Eckela

Strong Typing vs. Strong Testing
. Autor, znawca języków programowania,
znany autorytet w tej dziedzinie (autor słynnej książki Thinking in
Java
), opisuje w nim jak przekonał się do dynamicznego typowania
mimo, że wcześniej za jedyne słuszne uznawał statyczne systemy typów.
Oczywiście język z dynamicznym typowaniem, którym się zachwyca, to Python.
Interesująca jest też kontynuacja
tematu
— odpowiedź na list profesora, który z poprzednim artykułem
się nie zgadza. Blog Bruce’a
Eckela
dodałem do linkowni — czuję, że będę tam często zaglądał.

Miłe jest, że do Pythona przekonuje się coraz więcej znawców poważnych
języków
i miłe jest, że potrafią opisać czemu Python jest taki dobry
— zawsze to kolejne argumenty do przekonania nieprzekonanych. Co do
statycznego typowania, to też nie uważam tego za coś niezbędnego, ale raczej, że
w większości przypadków przeszkadza, jednak nie jestem też przeciwnikiem
wprowadzenia takich, opcjonalnych oczywiście, rozszerzeń do Pythona. Dobrze
czasem jest mieć możliwość zaznaczyć w kodzie dla jakich argumentów jest on
przygotowany. Często jest to istotna informacja dla innych developerów (ale tu
wystarcza odpowiednia dokumentacja) i dla interpretera/kompilatora (pozwala na
lepszą optymalizację krytycznych elementów kodu). Problem polega na tym, żeby
wprowadzić to nie psując przejrzystości i elastyczności języka i aby nie było
to nadużywane.

Thunderbird też spieprzony?

Kolejny klient zgłosił niedostarczenie ważnej wiadomości. Wiadomość została
zatrzymana w kwarantannie z powodu nieprawidłowego formatu (8-bitowe znaki
w nagłówku, łamiące RFC2822). Bardzo często muszę takie wiadomości odzyskiwać,
zwykle są wygenerowane przez niedorobione serwisy WWW (w tym np. Allegro i parę
banków) lub program Incredimail. Zwykle w odpowiedzi, oprócz informacji
o odzyskaniu wiadomości, sugeruję aby poprosić nadawcę o poprawę błędu
w serwisie, lub zmianę programu pocztowego. Tym razem jednak się wstrzymałem…

User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206)

Ja rozumiem, że webmajster-amator co się dorwał do PHP i MySQL może nie
mieć pojęcia o wysyłaniu majli, rozumiem że twórcy uprzykrzaczy życia typu Incredimail (oprócz
umieszania masy syfu w majlu podobno nie da się odinstalować i w ogóle chyba
jakieś adware/spyware to jest) nie przejmują się zgodnością ze standardami,
rozumiem że Microsoft w swojej wspaniałomyślności zostawił użytkownikom
możliwość wyłączenia zgodności ze standardem, z której to możliwości niestety
czasem ktoś korzysta. Ale jak to możliwe, że twórcy Thunderbirda robią taki
głupi błąd? Subject był dobrze zakodowany, ale wszystkie nazwiska
w To miały polskie literki w surowym UTF-8 (reszta wiadomości
w ISO 8859-2)…

Co to za wersja tego Thunderbirda w ogóle jest? Jakiś snapshot, fianalna?
Błąd jest znany? Poprawiony? Ja raczej bugreportu zgłaszać nie będę, bo nie
jestem użytkownikiem tego programu, ani instalować go tylko z tego powodu nie
mam zamiaru.

Drukarka…

W firmie mamy całą masę drukarek w sieci, ale jak ja chciałem coś wydrukować, to ciężko było. Bo
te drukarki to albo jakiś Develop (słyszał ktoś o takiej marce?), albo
Xerox PEcośtan, po których nawet żadnego śladu na linuxprinting nie ma, a próby ujarzmienia
kończyły się fiaskiem. Jedna sensowna (HP LaserJet 1200) podłączona była do
komputera kumpla, który albo był wyłączony, albo skutecznie zahasłowany,
albo… go nie było.

W końcu przekonałem kumpla, że lepiej podłączyć tę drukarkę do mnie. W końcu
ja mam zawsze komputer włączony, a on się z tego Windowsa jakoś podepnie.
Dzisiaj to konfigurowałem. Lokalnie ruszyło od kopa (podpięte pod USB, bo
kabelek równoległy ktoś zwinął), trochę więcej napracowałem się przy
udostępnianiu przez Windows, bo trzeba było odpowiednie sterowniki przygotować
(drukarka udostępniona jest jako PostScriptowa — nie podoba mi się
Microsoftowa idea sterowników do każdej drukarki na każdym kompie osobno).
W każdym razie kumpel z Windowsa wydrukował sobie co chciał, bez najmniejszych
problemów.

W końcu przyszedł czas na mnie. Korzystając z tego, że już mam drukarkę
(ciekawe jak długo, hehe), postanowiłem wydrukować dla szefa dokument który
napisałem. Dokument był w reStructuredText, więc zrobiłem z tego HTML,
otworzyłem w Firefoksie i wcisnąłem print. A ten tylko Memory
Fault
powiedział i zniknął. Super. Dłubanie w about:config nic nie pomogło.

No to jako ostatnią deskę ratunku wziąłem Konquerora. Ten pięknie wykrył drukareczkę,
ale jak dałem podgląd wydruku to pokazał mi coś, co mogłoby być moim tekstem, ale zapisanym
alfabetem Morse’a. Mimo to wcisnąłem print. I wydrukowało… tylko że
maciupkimi literkami (mimo wszystko czytelnymi). Oczywiście w opcjach wydruku (cała masa ich była) nie
znalazłem nic co by mi te literki zwiększyło. W opcjach całego Konquerora było jakieś zwiększanie fontów…
ale max na 18 udało mi się to ustawić (wcześniej było 14), nawet już nie
sprawdzałem, czy na wydruk to ma jakiś wpływ — olałem sprawę, szef się jakoś doczyta…

Ciekawe czy jak będę potrzebował z OO coś wydrukować, to czy coś z tego wyjdzie…

Wrrr….

Wracam z pracy, zabieram się za odgrzewanie obiadu, a tu już telefon.
Jakiemuś ważnemu klientowi coś nie działa i trzeba to sprawdzić. Odpowiadam,
że za jakieś pół godziny sprawdzę. W końcu obiadek gotowy. Jem sobie, przy
laptopiku oczywiście, delektując się chwilą spokoju. Jednak nie długo. Dorwał
mnie ktoś na Jabberze i pisze, że ten BTS
z PLD
(nad robieniem którego zarwałem kiedyś kilka nocy) w ogóle nie
działa
. Że jest do dupy, że
Bugzilla byłaby lepsza i po co w ogóle było coś innego tam pisać jak jest
gotowe rozwiązanie. Wrr….

Bugzilla była w PLD lata temu i nikt tego nie używał, bo toporne i
zupełnie niedopasowane do czegoś takiego jak dystrybucja. Potem pojawił się
jakiś nasz własny, prymitywny BTS. Ale nikt się nim nie zajmował, nie
uaktualniał, aż wkońcu zaczął on zarzynać maszynę na której chodził i został
wyłączony. Przez wiele tygodni w ogóle nie było gdzie zgłaszać błędów w PLD.
Co jakiś czas pojawiała się na ten temat dyskusja, z której nic nie wynikało
(poza tym, że wielu developerów nie chce Bugzilli). W końcu nie wytrzymałem i
mimo, że nie mam dość wolnego czasu, postanowiłem coś zrobić. Wziąłem
Flyspraya, poprzerabiałem, żeby pasowało do dystrybucji i było nieco bardziej
zgodne ze standardami. Uruchomiłem tak, aby działały podstawowe funkcje, a kod
wrzuciłem do SVN. Tyle byłem w stanie zrobić i to było dużo więcej niż
ktokolwiek zrobił w tej sprawie. Przekonałem się przy okazji, że kod Flyspraya
jest straszny, że słusznie PHP nie lubię. Wiedziałem, że to co zrobiłem jest
pełne niedoróbek, i że ja ich raczej nie poprawię. Ale uznałem że to lepsze
niż nic. I nawet ludzie zaczęli z tego korzystać — pojawiły się nowe
zgłoszenia błędów, niestety mało kto je próbował zamykać.

A teraz czytam, że to co zrobiłem jest do niczego. I to jeszcze w momencie,
gdy chcę po prostu odpocząć po ciężkim tygodniu pracy, a nie jakiś pluskw
szukać. Człowiekowi się wszystkiego w takiej chwili odechciewa, ale z drugiej
strony jedyny sposób, żeby odeprzeć zarzut to przynajmniej znaleźć błąd będący
źródłem tej opinii i go poprawić (potem można rzucić projekt w cholerę, skoro
jest do niczego i wszyscy mają to w dupie). Okazało się, że błąd występował
gdy ktoś zgłaszał buga bez podania wersji błędnego pakietu. Zamiast
odpowiedniego komunikatu generowany był nieprawidłowy kod XHTML. Mozilla
wyświetlała odpowiednią informację, że XML nie jest well-formed, a Konqueror,
podobno, nie wyświetlał nic. Poprawiłem, co miałem robić? A tak… odpocząć po
ciężkim tygodniu… eh… Następnym razem jak będzie coś podobnego do
zrobienia, to chyba ja się do tego nie zgłoszę, szkoda nerwów.

Rysowanie na ekranie

Aby dziecko czymś zająć odpaliłem Krysi Tux Painta. Już kiedyś
jej to pokazywałem, ale właściwie tylko na ślepo klikała myszką. Teraz
wyraźnie zaczynała rozumieć o co w tym chodzi…

Najpierw narysowałem jakąś buźkę i dałem jej myszkę. Stwierdziła, że
narysuje wąsy i rzeczywiście próbowała kursorem trafić w okolice nosa, ale coś
jej nie wychodziło. Potem pokazałem jej pieczątki i zaczęła stawiać
pingwinki, nawet w jakiś określony sposób. A jak ją poprosiłem o narysowanie
biedronki, to nawet udało jej się ją wybrać z menu i narysować. Nad celnością
kursora musi jeszcze popracować, ale chyba i tak jest to zdolne dziecko. Mam
nawet wrażenie, że szło jej lepiej niż kredkami na kartce (a to drugie ćwiczy
już dość długo).

Miło mnie zaskoczyło też to, że nie było ryków jak stwierdziłem, że trzeba
kończyć. Krysia nawet pomogła mi wyłączyć program.

Nie tak całkiem leniuchuję…

Postanowiłem przenieść listy dyskusyjne moich projektów z Enemies of
Carlotta
na mailmana. To pierwsze nie bardzo się
rozwija, a i możliwości ma skromne, a z mailmanem i tak się muszę męczyć przy
innych listach (przy okazji się przekonałem, że od strony administratora jest
nieco przyjemniejszy). No i nawet listy działają. Udało się to nawet pogodzić
z moją SQLową bazą użytkowników synchronizowaną na zapasowym MX. Jednak
stwierdzam, że mailman to gniot, szczególnie ten z paczki PLD
(której jednak nie chciało mi się poprawiać). A już zupełnie obsługa
wirtualnych domen dla postfixa (tak jak on to robi, to te domeny są średnio
wirtualne, bo listy zaśmiecają przestrzeń nazw systemowych użytkowników).
Ale przejście się chyba opłacało. Listy jak już ruszyły to działają, a archiwa
wyglądają lepiej.

Jakiś czas temu jeden z Release Managerów PLD prosił mnie, abym
dorobił ACLe na branche do automatyki builderów. Wczoraj więc się za to
zabrałem: cvs up, poprawka, login na src-builder (najważniejszy z
builderów), cvs up i sprawdzam jak to działa… W tym czasie inny
developer PLD mnie informuje, że jak robię te poprawki na HEAD, to to się na
nic nie zda, bo to co jest na HEAD i tak się na buildery nie nadaje, bo ów
developer coś tam samemu psocił. No fajnie, ale przecież właśnie to na głównym
builderze zainstalowałem…

Na szczęście psuja zostawił taga na ostatniej działającej wersji
automatyki. Z taga zrobiłem brancha, przeniosłem tam swoje poprawki i z tego
brancha zrobiłem cvs up na builderze. Jeszcze parę poprawek do
mojej poprawki i ACLe na branche działają :-). Mogłem wreszcie
pójść spać (0:30).

W przedpoprzednim wpisie, tam gdzie wspominałem o RFC 3920, 3921, 3922 i
3923, wspominałem, że dodam odwołania do tych RFC do dokumentacji PyXMPP.
Jednak dopiero przed chwilą mi się to udało, przez te zabawy z automatyką
builderów i listami dyskusyjnymi. Ale za to dopisałem też odwołania do
wszelkich innych implementowanych RFC i JEPów. Będzie łatwiej znaleźć
odpowiedni dokument jak będzie trzeba coś sprawdzić.

A jutro jadę na Jesień Linuksową
:-).

A może ejabberd?

Dość mam już jabberd 1.4.x. Nie po to powstała
specyfikacja XMPP (sam też starałem sie dopilnować, żeby była jak
najlepsza), żeby dalej się trzymać starego protokołu z jego błędami,
ograniczeniami i ficzerami. Próbowałem już jabberd 2.0,
jeszcze w fazie beta jego rozwoju. Była to kompletna porażka. Do
pełnej kompatybilności z XMPP sporo mu brakowało, a stabilność była
stanowczo poniżej oczekiwań. Od tego czasu wyszła wersja stable, ale
nie wygląda na to że wiele się zmieniło. Chociażby patrząc na doświadczenia
smoka z migracją
chrome.pl. A teraz jeszcze ten
produkt został porzucony przez głównego i praktycznie jedynego
autora. Jeśli chodzi tempo rozwoju to teraz
jabberd 1.4.x wypada lepiej i ma nawet szansę
przegonić dwójkę w kompatybilności z XMPP. Mnie się jednak
nie chce czekać.

Trzeba było więc poszukać czegoś innego. WP Jabber
pojawił się z hukiem i w tamtym czasie (no, po poprawieniu tych paru
błędów które wyszyły przy włączeniu S2S) był naprawdę dobrym
rozwiązaniem. Niestety związanym mocno z Linuksem i konkretną
(spatchowaną) wersją kernela. Przez jakiś czas nawet szybko się
rozwijał, ale potem ucichło. Wsparcia XMPP praktycznie brak.

A więc z darmowych serwerów pisanych standardowo
w C (właściwie czemu kierować się użytym językiem?) nie zostało nic.
Pozostał Javowy OpenIM i napisany w Erlangu
ejabber (czytając o nim pierwszy raz spotkałem się
z tym językiem programowania) i pewnie parę innych o których nie
słyszałem bądź nie pamiętam (co oznacza, że pewnie nie są warte
zainteresowania). O OpenIM zresztą też nie słyszałem wiele poza tym,
że jest. Za to ejabberd zawsze kusił. Straszył
jedynie ten Erlang (którego nawet nie było w mojej
dystrybucji) i budowa wszystko w jednym co
potencjalnie mogło utrudniać integrację z czymkolwiek innym.

A czym to ten ejabberd kusi? Ano tym:

  • Obsługa dużej części XMPP (StartTLS jeszcze nie ma w oficjalnym
    wydaniu, ale w CVS już podobno jest), łącznie z privacy
    lists
  • Zarządzanie (rejestracja użytkowników itp.) z linii komend,
    przez WWW i z klienta Jabbera (tkabber ma odpowiedni
    plugin).
  • Możliwość tworzenia rozproszonych serwerów odpornych na awarię
    (to akurat na razie nie jest mi potrzebne).
  • Wbudowane serwisy takie jak katalog użytkowników, czaty grupowe
    (MUC),
    transport IRCa (nie będę używał, bo JJIGW jest napewno lepsze
    ;-)), czy pubsub
    itp.

A więc zdecydowałem — spróbuję tego ejabberd.
Paczki z Erlangiem i samym ejabberd zrobione. Na
localhost w pracy nawet udało mi się to odpalić.
Użytkownikom dałem odpowiedni komunikat. Dzisiaj wieczorem będę
unowocześniał mój serwer!

No to dość tych optymistycznych akcentów. Kolejna notka (jeżeli
w ogóle będę miał ją z czego wysłać) pewnie będzie o tym, czemu
ejabber też jest do d…

Zabezpieczenie, czyli jak odtworzyć płytę Łzy — Nie czekaj na jutro pod Linuksem.

Żona kupiła płytkę CD. Oryginalną.
Niestety odtworzyć jej się nam nie udało. Płytka jest zabezpieczona przed
kopiowaniem:

Ograniczona możliwość kopiowania cyfrowego. Uwaga! Próba
kopiowania niniejszej płyty pogarsza jakość cyfrowej
kopii i może spowodować zawieszenie pracy komputera, a nawet jego uszkodzenie.

Płytę niniejszą można odsłuchiwać w zwykłym sprzęcie audio, odtwarzaczach
samochodowych oraz komputerach wyposażonych w urządzenia do odtwarzania
nagrań.

Minimalne wymagania sprzętowe dla komputerów: procesor Inetl Pentium lub
inny kompatybilny 133MHz, pamięc 32Mb RAM, system Microsoft Windows
95/98/NT/2000/XP lub kolejny, napęd CD-ROM, karta dźwiękowa.

Zaleca się instalację programu do odtwarzania załączonego na płytce.

Pierwsze to oczywiście straszak. Drugie nie zupełnie prawda (założę się, że w wielu
odtwarzaczach samochodowych nie da się tej płytki odtworzyć). Trzecie jest śmieszne,
niestety częściowo prawdziwe — nie mam Windows i nie mogłem płytki
normalnie odtworzyć (żona próbowała i usłyszała jedynie po parę sekund
z utworu). Czwarte zostawiam bez komentarza, bo załączonego programu nie widziałem.
Najlepsze, że płytki nie udało mi się zamontować tak, jakby ścieżki z danymi w ogóle
tam nie było — ciekawe jak Windows ten program znajduje.

Przede wszystkim tej płytki nie powinniśmy w ogóle kupować. Skoro mają
słuchaczy/klientów w d… to czemu dać im zarobić? Z drugiej strony… nie ma innego
sposobu na zdobycie tych utworów bez korzystania z usług piratów. W każdym razie
stało się, płytkę mamy i zwracać nie będziemy, bo gościu z Allegro jest tu
niespecjalnie winny. Poza tym, takie zabezpieczenie to wyzwanie.

A więc zabrałem się za zgrywanie zawartości płytki. cdda2wav sobie nie radził.
cdparanoia też nie. Dopiero
cdstatus dał jakieś efekty
— udało się zgrać pierwsze 4 piosenki do *.raw, Dalej w TOC płytki były
jakieś bzdury — ścieżki kilku sekundowe, kilkudziesięcio minutowe, czy nawet o ujemnej
długości i nakładające się na siebie, dotego oznaczone jako data
i więcej się przeczytać nie dało, nawet jak próbowałem adresować sektory bezpośrednio,
omijając TOC.

Cztery utwory na dwanaście to trochę mało. Zacząłem więc googlać w poszukiwaniu
lepszego rozwiązania. Pierwsza strona którą za tym podejściem znalazłem, strona
o wdzięcznym tytule JUST
SAY NO TO CIRCUMVENTING COPY PROTECTION
mówiąca dokładnie czego nie robić,
żeby nie złamać popularnego zabezpieczenia i co za tym idzie DMCA (wspaniały twór
amerykańskiego prawodawstwa). O numerze z markerem już słyszałem, ale nie sądziłem,
że okaże się przydatny. Szczególnie że płytka nieco się różniła od tych z opisu.
Jednak spróbowałem…

Oczywiście nie chciałem zniszczyć płytki, ani napędu, więc zamiast taśmy klejącej,
czy trwałego markera użyłem flamastra do pisania na białej tablicy. Najpierw
zamalowałem brzeg, ale nie dało to efektu. Następnie zamazałem lekko widoczny okrąg
w 1/3 zapisanej powierzchni płytki (licząc od środka). Bingo!
cdstatus przestał widzieć płytkę jako mixed, a zaczął jako
audio, a spis treści wyglądał już sensownie. Próbowałem więc zgrać
kolejne piosenki. Jednak piątej i szóstej mi się nie udało — widać też zostały
mazaczkiem zamazane. Pozostałe (7.-12.) zgrały się bez problemu. Później wyczyściłem
płytkę i próbowałem zamalowywać ostrożniej. Udało się odzyskać jeszcze piosenkę
numer sześć.

Ostatecznie mam zgrane 11 z 12 utworów na tej płytce i zaraz je sobie ładnie
zakoduję do Ogg Vorbis. Jak widać zabezpieczenie, jak każde które nie ingeruje
w sprzęt użytkownika (ja sobie takiej ingerencji nie życzę!) jest niewiele warte.
Utrudnia tylko dość skutecznie legalne korzystanie z nagrań wielu ludziom, którzy
uczciwie je kupili. Na płytce są nawet numery telefonów i adresy e-mail oraz WWW do
kontaktu z zespołem. Chyba do nich zadzwonię i powiem co o tym myślę.