JDS

Nie znoszę takich notek, ale jednocześnie odczuwam głęboką potrzebę napisania kilku słów, gdy odchodzi ktoś dla mnie ważny. Dziś, tak się składa, zmarł Jerome David Salinger.

Gdybym miał wskazać jedną książkę, która jest dla mnie pozycją magiczną, to przychodzi mi do głowy tylko „Buszujący w zbożu”. Pamiętam, tak jakby to było wczoraj, pochłonąłem ją wiele lat temu w pociągu osobowym z Wrocławia. Zacząłem czytać gdy skład ruszał z peronu, skończyłem gdy dojeżdżałem na miejsce. Pomiędzy tymi dwoma momentami czas właściwie przestał istnieć. Coś nieprawdopodobnego. Nigdy już nie doświadczyłem czegoś takiego. Nawet Vonnegut mi czegoś takiego nie zafundował.

What really knocks me out is a book, when you’re all done reading it, you wished the author that wrote it was a terrific friend of yours and you could call him up on the phone whenever you felt like it.

Dzięki.

Boski podcast

Dopiero co pisałem o moich ulubionych podcastach, a już mam pierwszą aktualizację tej listy. Zakochałem się beznadziejną miłością w produkcji niby z jednej strony amatorskiej, ale z drugiej robiącej wrażenie wyprodukowanej przez HBO czy innego Foksa. Chodzi o „Mr. Deity”.

Zaraz wyjaśni się tytuł wpisu: podcast jest o Bogu. Tym chrześcijańskim. Wic polega na tym, że ten Bóg to raczej „Bogu” ze znanego skeczu Neonówki. Mr. Deity ma zatem ajfona, lekko olewackie podejście do swoich dzieł, wspólnika Jesse (albo „Hesusa”, z hiszpańskiego), żonę Lucy (zdrobnienie od „Lucyfer”) i asystenta Larry’ego. Z poczty głosowej (modlitwy) odsłuchuje tylko pierwsze kilka nagrań, pozostałe miliony kasuje. Gdy idzie do knajpy prosi Jesse’go żeby rozmnożył pojedynczą porcję na trzy pozostałe talerze, dzięki czemu można będzie oszczędzić na rachunku. I tak dalej, i tak dalej. Czujecie już klimat? Jeśli nie, to może na zachętę pierwszy odcinek?

Co dziwne, podcast doceniany jest również przez amerykańskich chrześcijan. Twórcy dostali wiele maili, w których na przykład pastor pozdrawia i zwierza się, że wykorzystuje niektóre odcinki podczas zajęć w szkółce niedzielnej. OK, być może to nie powinno być aż takie dziwne, bo humor prezentowany w „Mr. Deity” to nie jest brutalne walenie młotem w głowę a raczej delikatne stukanie gumowym młoteczkiem w kolano. Nie każdy się zorientuje. Jak tak się zastanowić, to chyba „najmocniejszy” odcinek to „Mr. Deity and the Magic”. O, ten właśnie:

Problemy z tym podcastem są dwa. Po primo, jest po angielsku. Po secundo jest mocno „zlokalizowany” i żeby go docenić przydaje się jednak znajomość tła. W odcinku, który oglądaliście przed chwilą (bo oglądaliście go, PRAWDA?!) dobrze jest znać duet Penn&Teller, w innym z kolei („Mr. Deity and the skeptic”) warto skojarzyć, że Bóg rozmawia z PZ Meyersem i ten banan na końcu odcinka nie jest przypadkowy.

„Mr. Deity” to także „Words”, czyli taki trochę jakby sub-podcast, który opowiada o kulisach powstawania głównego show (i z którym są problemy w iTunes, ostrzegam). Od czasu do czasu trafia się też wariacja podstawowego tematu - czyli „mini wywiady o maxi sprawach”, gdzie Larry przeprowadza wywiad z Bogiem a całość wzorowana jest na słynnym pojedynku Frost vs. Nixon (i znowu dobrze jest wiedzieć takie rzeczy, bo nikt nie objaśnia kontekstu).

Fajne, c’nie? I’m sold, jak mówią rodacy autorów. Na tyle sold, że pewnie uaktywnię swoją kartę kredytową. W końcu jak ktoś tak ładnie prosi, to trudno odmówić (musicie to obejrzeć, koniecznie; sam przycinałem, temi rencami).

afsctool i kompresja na poziomie HFS+ w OS X

Mrrrrraaaauuuu, uwielbiam takie tytuły. 99% społeczeństwa nie wie czy przypadkiem nie oparłem się niechcący o klawiaturę.

Ad rem. OS X 10.6, ksywa Snow Leopard wprowadził, wśród innych nowości, kompresję na poziomie systemu plików, doganiając tym samym po piętnastu latach Windows NT 3.51. Brawo. Zanim jednak pochylimy się nad szczegółami, warto zapoznać się zasadą działania tego wynalazku.

Kompresja. Wiemy czym jest. Ale na poziomie systemu plików? Po co, skoro mamy ZIP-a, RAR-a i inne programy, które służą do rozpakowywania warezu? Po to, żeby móc zaoszczędzić miejsce na dysku zajmowane przez pliki, które do kompresji się nadają, a które są często w użyciu. Ja na przykład mam spory katalog z pedeefami. Gdybym go spakował, to owszem - odzyskałbym sporo megabajtów - ale jednocześnie stanąłbym wobec konieczności rozpakowywania całego archiwum tylko po to, żeby otworzyć jeden plik. Trochę bezsęsu.

Tym bardziej, że zastosowanie kompresji na poziomie systemu plików nie tylko oszczędza miejsce na dysku, ale i skraca czas odczytu pliku. Dzieje się tak dlatego, że skompresowane dane nie są przechowywane w sektorach, ale w tzw. resource forks a te najmniejsze nawet wprost w atrybutach pliku. Struktura tych elementów różni się od typowego układu sektor-za-sektorem i przypomina raczej bazę danych, więc i głowica Waszego twardego dysku nie musi wykonywać dłuższych wycieczek, co jest przecież elementem najbardziej wpływającym na wydajność odczytu.

OK, pora się dowiedzieć jak aktywować taką kompresję na Maku. Otóż, uwaga: NIE DA SIĘ. To znaczy, wróć, da się, ale nie z poziomu klikalnego interfejsu, jaki na przykład znamy z Windows.

Okno interfejsu Windows

Ja wiem, być może przyprawi to Wojciecha Orlińskiego o palpitacje wszystkiego, ale w celu aktywowania kompresji HFS+ trzeba się na Maku zapuścić w mętne otchłanie terminala, jak nie przymierzając jakiś linuksowiec. Zapuśćmy się zatem.

$ afsctool -v ~/Documents/pedeefy/jakiś_pedeef.pdf
File is not HFS+ compressed.
File content type: com.adobe.pdf
File data fork size (reported size by Mac OS X Finder): 12625780 bytes / 12.6 MB (megabytes) / 12 MiB (mebibytes)
Number of extended attributes: 4
Total size of extended attribute data: 244 bytes
Approximate overhead of extended attributes: 1072 bytes
Approximate total file size (data fork + resource fork + EA + EA overhead + file overhead): 12629532 bytes / 12.6 MB (megabytes) / 12 MiB (mebibytes)

Teraz uwaga: niespodzianka. Narzędzia, którym się posłużyłem nie znajdziecie w /bin. Apple postanowiło bowiem dobić Wojciecha Orlińskiego i wymyśliło, że kompresja the Mac way odbywać się będzie z wykorzystaniem komendy ditto, która to potrafi kompresować, owszem, ale podczas kopiowania. Tak jest, żeby skompresować plik trzeba go najpierw skopiować. #fuckyeah. Tak na marginesie: ditto pozwala również na wyrzucenie niechcianej architektury z Universal Binary, o czym niewiele osób wie. man ditto, jakby co.

Przywołany wyżej program o zupełnie niemakowej nazwie afsctool jest o tyle lepszy, że nie musi danych kopiować, żeby je skompresować, wyświetla sporo informacji o pliku i ma jeszcze całą masę innych, fajnych przełączników, których mnogość jest nie do ogarnięcia dla Wojciecha Orlińskiego. Autorowi, ukrywającemu się pod pseudonimem brkirch należą się wielkie brawa, uściski i co tam jeszcze.

Wróćmy do meritum. Jak widać wyżej, jakiś_pedeef.pdf liczy sobie 12 MB. Skompresujmy jegomościa.

$ afsctool -c ~/Documents/pedeefy/jakiś_pedeef.pdf
File is HFS+ compressed.
File content type: com.adobe.pdf
File size (uncompressed data fork; reported size by Mac OS 10.6+ Finder): 12625780 bytes / 12.6 MB (megabytes) / 12 MiB (mebibytes)
File size (compressed data fork - decmpfs xattr; reported size by Mac OS 10.0-10.5 Finder): 6999754 bytes / 7 MB (megabytes) / 6.7 MiB (mebibytes)
File size (compressed data fork): 6999770 bytes / 7 MB (megabytes) / 6.7 MiB (mebibytes)
Compression savings: 44.6%
Number of extended attributes: 4
Total size of extended attribute data: 244 bytes
Approximate overhead of extended attributes: 1608 bytes
Approximate total file size (compressed data fork + EA + EA overhead + file overhead): 7002180 bytes / 7 MB (megabytes) / 6.7 MiB (mebibytes)

No i proszę. 44,6%, ponad 5 megabajtów! Tyle skorzystaliśmy na całkowicie przezroczystej dla systemu kompresji, która nie wymaga żadnych dalszych zabiegów. Po prostu jest i działa. W dodatku plik ten od tej chwili będzie się szybciej ładował. Może nie będą to jakieś poważne różnice, ale zawsze.

$ purge
$ time cat ~/Documents/pedeefy/jakiś_pedeef.pdf 1>/dev/null

real 0m1.183s
user 0m0.001s
sys 0m0.024s

To przed kompresją. A po?

$ purge
$ time cat ~/Documents/pedeefy/jakiś_pedeef.pdf 1>/dev/null

real 0m0.828s
user 0m0.001s
sys 0m0.179s

Komenda purge czyści cache dyskowy w pamięci i nie ma jej domyślnie w systemie. Należy do pakietu The Computer Hardware Understanding Developer Tools, który Jobs daje za darmo o ile ma się konto w Apple Developer Connection.

Jak widać skrócił się czas ładowania kosztem wzrostu obciążenia procesora. To kompromis na, który trzeba się zgodzić - i na taki kompromis poszło Apple, kompresując większość aplikacji systemowych w OS X 10.6. To właśnie na aplikacjach notuje się największe zyski wydajnościowe, to one doczytują sporo danych z resource forków. Ludzie raportowali, że Snow Leopard zrobił się żwawszy i w dużej mierze ta „żwawość” wzięła się właśnie z kompresji w HFS+.

Dla ciekawskich: Apple wykorzystuje bibliotekę zlib, a Microsoft w swoim NTFS używa LZ77. Nie wiem jak wypada porównanie obu algorytmów, aż tak ciekawski nie byłem.

Na koniec szczypta dziegciu: kompresja w wykonaniu Apple nie przeżywa niestety modyfikacji pliku. Czyli jednak do NTFS-a trochę w tym względzie brakuje.

PS Wojciecha Orlińskiego przepraszam za naśladownictwo w stylu. Jednocześnie serdecznie pozdrawiam, machając przy tym swoim przyrządem do machania.