O baterii, która nie mogła

Jakoś tak w październiku padł mi iPhone. Pad objawiał się wieszaniem i losowymi rebootami. Początkowo pomagało przywracanie systemu, potem sprzęt zaczął się wieszać w trakcie instalacji tegoż a ja mogłem oglądać najprawdziwszy kernel panic i obrazki jądra sypiącego komunikatami w trybie tekstowym. Otworzyłem, podmuchałem, podumałem, zamknąłem. Zamknąłem też szufladę, do której trafił. Po ponad pół roku szufladę otworzyła żona, zainstalowała system i zameldowała, że przywróciła sprzęt do życia. Cud.

Cud trwał dwa dni - w tym czasie telefon działał bez zająknięcia. Po dwóch dniach nastąpiła powtórka z rozrywki: restarty, wywrotki, dramat. Przełączyłem się w tryb pomysłowego Dobromira i doszedłem do wniosku, że jednym elementem tego kawałka elektroniki, na który czas ma jakikolwiek wpływ, jest bateria. Bateria, która trzymała niby dzielnie (dwa-trzy dni bez konieczności ładowania) a jednak coś tu, prawda, było nie teges. Szybki rzut oka na Allegro - 44 zł jestem w stanie poświęcić.

Dziś właśnie dostałem przesyłkę, przełączyłem się w tryb Adama Słodowego i wsparty przez nieoceniony iFixit w pół godziny wymieniłem inkryminowany[1] element (jest na samym spodzie, trzeba wybebeszyć cały telefon). Myślałem, że trzeba będzie przeinstalować system - nic z tych rzeczy, wstał sam. Wszystko działa.

Morał i przesłanie: jeśli zdarzą Ci się podobne objawy, wiedz, że serwis jest daleko i jest drogi (90-130 zł plus koszty przesyłki). Jeśli osoba o tak drewnianych rękach jak moje dała radę, Ty też dasz. Dwie rady, ponad to, co doradza iFixit:

  1. śrubokręt z namagnesowaną końcówką - te osiem śrubek potrafi doprowadzić do rozpaczy przy wkręcaniu,
  2. kartę SIM wkładamy do slotu zaraz po włożeniu płyty głównej, przed przykręceniem czegokolwiek - od razu widać czy płyta jest na swoim miejscu czy może jednak niekoniecznie.

Przypisy:

  1. zawsze chciałem użyć tego słowa []

1Password dla Maka. Chce ktoś?

Wszystkie licencje znalazły sobie nowych właścicieli. Do następnego rozdawnictwa - może za rok?

To będzie krótkie ogłoszenie: chcesz 1Password, daj znać w komentarzu. Kto pierwszy, ten lepszy, bo mam tylko jedną licencję. Nadal mam jedną licencję do rozdania.

iFail

Miało iść na Fejsbuku, ale się w 420 znakach nie zmieściło.

„Moje Jabłuszko” przechrzciło się na „iMagazine”, czyli kiepska nazwa została, tyle że teraz zwichnięta jest w drugą stronę. Była przaśna, jest wiejska.

Kolorystyka fatalna jest i dialogi bardzo niedobre.

Redakcja przeszła jednak samą siebie zmieniając layout na pionowy, pod AjPada. Wbiła tym samym środkowy palec w delikatne miejsce tych wszystkich czytelników, którzy jeszcze nie zdążyli zaciągnąć kredytu na owo urządzenie. Czyli - tak się śmiesznie składa - przytłaczającej większości.

Way to go, way to go.

OpenMeta

Przedsłowie: poniższy tekst został napisany dawno temu dla „Mojego Jabłuszka”. W wyniku niekorzystnej koniunkcji planet nigdy tam nie trafił, puszczam go więc na blogu, bo żal mi tylu klepnięć w klawiaturę. Wrodzone lenistwo nie pozwoliło mi zasadniczo zmienić jego stylu, proszę więc nie dziwić się, że jest lekko nieblogowy w formie.

Pliki. Na dyskach mamy ich miliony. Dawno, dawno temu, gdy jeszcze nie było Internetu, pojawienie się kolejnego pliku wymagało stworzenia go. Dziś, gdy Internet jest nawet w lodówkach (pierwsza miała go w 2001 roku, uwierzycie?), zapychanie coraz większych dysków coraz to nowymi plikami stało się trywialnie proste. Pliki MP3, dokumenty PDF, kolejne prezentacje mistrzów PowerPointa spływają z sieci w ilościach trudnych do ogarnięcia. Część z nich chcemy zatrzymać - stajemy wówczas przed koniecznością posegregowania ich w jakiś logiczny sposób. Oczywistą oczywistością wydaje się poupychanie wszystkiego w katalogach, podzielonych na kolejne podkatalogi, które z kolei dzielimy na kolejne podkatalogi… Brzmi znajomo? Katalogować da się oczywiście, ale przy większej liczbie plików cały ten misternie ułożony, hierarchiczny schemat zaczyna się uroczo chwiać w posadach.

Enter tags

Alternatywą są tagi lub, bardziej po polsku, znaczniki czy też słowa kluczowe. Pojawiły się w okolicach roku 2003 (Wikipedia łączy je z serwisem Delicious) i były cudownym dzieckiem Internetu w wersji 2.0. Wersja ta - jak chce ludowa legenda - dała użytkownikom prawo współtworzenia treści. No i użytkownicy tworzyć zaczęli. Szybko okazało się, że nazwy plików czy nawet krótkie opisy sprawdzają się średnio w sytuacji, gdy liczba obiektów do opisania zaczyna iść w tysiące. Ktoś wpadł na pomysł żeby zacząć je etykietować pojedynczymi słowami. Chwyciło. Obecnie tagi są w każdym szanującym się serwisie, pardon my French, społecznościowym. Pytanie dlaczego do tej pory nie pojawiły się w żadnym systemie operacyjnym…

Wróć, pojawiły się. Od czasów Windows XP SP2 niemal każdy plik można sobie bez problemu otagować wykorzystując opcję „słowa kluczowe”. Po zainstalowaniu darmowego dodatku Windows Search można te tagi bez problemu wyszukiwać, stosując dość wyrafinowane zapytania. Użytkownicy nowszych wersji systemu z Redmont (Vista i Windows 7) mają jednak mniej szczęścia – tam da się używać znaczników jedynie do plików JPG oraz plików pakietu Office. Nikt nie wie dlaczego podjęto taką decyzję i dlaczego zdecydowano się na taką akurat implementację: w przypadku plików graficznych sięgnięto po promowane przez Adobe XMP, w przypadku zaś Office oparto się na nowym formacie pliku, który po prostu miejsce na znaczniki przewiduje. Połączono dwa różne systemy tagowania, które w praktyce niewiele dają a pod ręką są przecież gotowe do użycia strumienie ADS będące od niepamiętnych czasów częścią ichniego systemu plików - NTFS. Ale dość już o Microsofcie, bo zaczynam niebezpiecznie dryfować po temacie.

Pora zatem na Apple. Ustalmy jedno: Apple nie zrobiło nic. Kwestia tagów umknęła jakoś inżynierom z One Inifnite Loop, pewnie dlatego że od wersji 10.4 OS X ma na pokładzie silne narzędzie pozwalające na błyskawiczne lokalizowanie praktycznie wszystkiego, co tylko w takiej czy innej formie znajduje się na dysku: Spotlight. Spotlight faktycznie sprawdza się w tej roli znakomicie, tyle że wyszukiwanie po nazwie pliku bądź jego zawartości nadal pozostawia użytkownika z problemem: zawartość danego pliku nie zawsze dobrze odpowiada jego ogólnemu znaczeniu. Nie mówiąc już o nazwie. Przykład:

Załóżmy przez chwilę, że nasz hipotetyczny użytkownik jest lekarzem. Lekarze dużo czytają (a przynajmniej powinni), mają więc sporo literatury fachowej. W dobie Internetu i PubMedu można ją zgromadzić bardzo szybko w formacie PDF. Załóżmy teraz, że nasz lekarz szuka dokumentów dotyczących jaskry. Wpisanie słowa „jaskra” do okna Spotlight zwróci listę wszystkich dokumentów, w których nazwie albo treści ono występuje. ALE występowanie słowa (szczególnie w treści) o niczym przecież nie świadczy. „Jaskra” pojawić się przecież może w opracowaniu dotyczącym zupełnie innego schorzenia, wystarczy na przykład, że w bibliografii znajdzie się opracowanie zawierające taki termin.

Jak widać komputery są bardzo kiepskie w kategoryzacji. Z prostego powodu: nie potrafią czytać ze zrozumieniem. Tu nadal rządzi człowiek i jego zdolność do konstruowania streszczeń. Tagi to takie jednowyrazowe streszczenia, w większości wypadków zupełnie wystarczające do trafnego zaszufladkowania danego obiektu. Zdolność zaś do nadawania wielu tagów pozwala na dalsze uściślanie znaczeń. Dokument otagowany słowami „jaskra” i „kliniczne” pozwala na odfiltrowanie tylko tych opracowań, które opisują kliniczne badania nad tą chorobą. Oczywiście, nadawanie znaczników wymaga najpierw przynajmniej jednokrotnego zapoznania się z treścią, ale przyjmijmy optymistyczne założenie, że użytkownik pobierając dany plik kiedyś się jednak z nim zapozna i zechce zdecydować czy nadal powinien zostać on na dysku.

Been there, done that

W sytuacji, w której nie ma co liczyć na Apple, użytkownicy i deweloperzy zaczęli liczyć na siebie samych. Odpowiedzią deweloperów był system SpotMeta. Był, działał, ale umarł (dokładnie rzecz ujmując: utknął na etapie wiecznej bety). Nigdy nie wyszedł poza Tigera i był skomplikowany już w założeniach (między innymi modyfikował kod Spotlight, co jest średnio udanym pomysłem). Użytkownicy przyjęli inną strategię: zamiast grzebać w systemie próbowali wykorzystać to, co już w nim jest. Wykorzystali komentarze, które można dodawać z poziomu Findera do każdego pliku i które to komentarze indeksuje Spotlight. Pomysł był prosty: poprzedźmy tag jakimś wybranym znakiem i wpiszmy do pola komentarza. Proste i nastręczające mnóstwa problemów. Problem: jakim znakiem? Każdy miał swój pomysł, co powodowało, że znaczniki nie były przenośne między różnymi użytkownikami (jeden wolał znak @, inny &, jeszcze inny #). Problem: co jeśli w treści jakiegoś dokumentu zdarzy się wyraz poprzedzony akurat takim znakiem i będzie on odpowiadał naszemu tagowi? Dla Spotlight jedno i drugie to po prostu tekst. Problem: można zapomnieć o automatycznym podpowiadaniu tagów podczas wpisywania. Problem, problem, problem.

Jak to się zaczęło?

W grudniu 2008 roku programista firmy Ironic Software, Tom Andersen, otwiera w ramach Google Code projekt OpenMeta. Ironic to producent programów, które część z Was powinna kojarzyć: Leap i Yep. Oba służą do zarządzania dużymi ilościami plików, oba korzystają z systemu tagów. Początkowo system ten był ich autorskim rozwiązaniem, zgodnym jedynie z samym sobą, ale pod koniec 2009 roku Tom doszedł do wniosku, że w sytuacji, gdy Apple najwyraźniej ma inne priorytety, warto by było wprowadzić do OS X standard tagowania plików. Jeśli zaś ma to być prawdziwy standard, który zaakceptują inni programiści, musi być to standard otwarty, wypracowany na drodze uzgodnień. Za tym jakże słusznym założeniem poszedł wybór licencji Open Source (MIT). Otwarte są techniczne założenia systemu oraz przykładowy kod będący tych założeń implementacją. Dziś, pod niemal dwóch latach, OpenMeta jest i działa. Korzysta z tego rozwiązania coraz więcej makowych aplikacji, w tym tak znaczące jak Default Folder X, MailTags, Hazel czy HoudahSpot.

Wszystko pięknie? Nie do końca.

Nie bójmy się tych słów: OpenMeta jest hackiem. Hack czy hacker to wbrew pozorom określenia, które powinniśmy kojarzyć pozytywnie i tylko mediom zawdzięczamy ich dzisiejszy, złowróżbny wydźwięk. Hacker zajmował się tym, czego nie przewidział producent – z lenistwa czy ze zwykłej niewiedzy. Uzdatniał oprogramowanie lub sprzęt, umożliwiając ich działanie w warunkach, które – według producenta – takie działanie wykluczały. Działające rozwiązanie to właśnie hack. Z hackami jest jednak jeden problem, który najboleśniej daje o sobie znać w przypadku hakowania aktywnie rozwijanego systemu operacyjnego, bo producent takiego systemu jest tu Bogiem, który może zrobić wszystko i w każdej chwili. Teoretycznie nie powinien zmieniać ustalonego raz API, czyli czegoś w rodzaju pośrednika, który umożliwia programom współdziałanie z systemem i wykorzystywaniem udostępnianych przez niego funkcji. Problem polega na tym, że Apple nigdy nie udostępniło API pozwalającego na wykorzystanie tagów w OS X. Jak zatem działa OpenMeta, skoro działa?

Od środka

Przechowywanie metadanych (danych opisujących inne dane; tagi są metadanymi właśnie) w systemach o uniksowych korzeniach nie jest szczególnym wyzwaniem. System plików każdego z nich przewiduje istnienie tak zwanych atrybutów rozszerzonych (ang. extendend attributes, w slangu programistów skracane często do postaci xattr). To dane, które można powiązać z każdym plikiem. OpenMeta korzysta po prostu z dwóch funkcji systemowych, które pozwalają na zapisywanie i odczytywanie tych atrybutów i ustala sposób w jaki powinny one być zapisywane aby można było zachować jeden, wspólny standard. Do tego momentu jest z górki. Droga pod górkę zaczyna się w momencie zadania sobie pytania co zrobić żeby te metadane raczył zauważyć Spotlight, bo przecież tagi bez możliwości ich wyszukiwania nie mają sensu. Tu właśnie leży Burek pogrzebany: Spotlight nie indeksuje atrybutów rozszerzonych nadanych przez użytkownika, co nie znaczy że nie indeksuje ich wcale. Indeksuje takie, które ustawiło oprogramowanie Apple. W praktyce oznacza to przestrzeń nazw com.apple.metadata („przestrzeń nazw” w tym przypadku można sobie przetłumaczyć jako rodzaj przedrostka poprzedzającego nazwę atrybutu). Problem zauważy nawet laik: com.apple na początku tego przedrostka, co oznacza że jest to przestrzeń nazw zarezerwowana przez Apple. „Rezerwacja” nie oznacza tu jakiejś strasznej kontroli ze strony Cupertino, oznacza natomiast, że o dalszych losach danych zapisywanych w tej przestrzeni decyduje Apple, które na przykład z wersji OS X na wersję może zdecydować się na inny format przechowywania metadanych, zmienić kod Spotlight a wszystkie dane z tej przestrzeni usunąć z atrybutów rozszerzonych. Oznacza to całkowite wyczyszczenie bazy tagów OpenMeta. Albo raczej „oznaczałoby”, bo w chwili obecnej każdy tag zapisywany jest przez OM w dwóch przestrzeniach nazw: com.apple.metadata (dzięki czemu Spotlight widzi nasze znaczniki) i org.openmetainfo, dzięki czemu mamy kopię zapasową, z której możemy potem próbować ponownie nakarmić systemowy demon indeksujący pliki. Jest jeszcze druga kopia zapasowa, zrzucana wprost na dysk do ~/Library/ApplicationSupport/OpenMeta/Backups , która ma zabezpieczać metadane przed aplikacjami Adobe z pakietu CS4 (między innymi Photoshop), które przy zapisywaniu pliku po prostu usuwają radośnie wszelkie dane zapisane jako atrybuty rozszerzone.

Zabrzmiało strasznie? Na szczęście póki co Apple nie rusza tego fragmentu kodu Spotlight a gdyby kiedyś ruszyło, to dzielni deweloperzy znajdą zapewne sposób żeby tagi działały jak dawniej. Pracownicy Apple byli przepytywani na tą okoliczność, ale wiele się od nich dowiedzieć nie można, właściwie nie można dowiedzieć się niczego. Oczywiście byłoby wspaniale gdyby Steve i spółka zauważyli potrzebę dodania tagów do systemu i zaproponowali konkretne API, ale czy i kiedy to się stanie… tego nie wiedzą nawet posiadacze największych szklanych kul.

Chciałabym a boję się

Będę szczery: jako przybysza ze świata Linuksa powyższy opis tylko mnie zachęca do wypróbowania tagów. Zdaję sobie jednak sprawę, że typowy czytelnik „Mojego Jabłuszka” z pewną taką niechęcią odnosi się do hakowania czegokolwiek na swoim komputerze. OpenMeta jest jednak inicjatywą wartą uwagi, ponieważ:

  1. daje o wiele większą kontrolę nad swoimi plikami, jeśli tylko zechcemy spróbować;
  2. istnieje wiele dopracowanych programów wykorzystujących ten standard, za które można zapłacić po 20-30 dolarów i poczuć siłę własnych pieniędzy.

Pozwolę sobie krótko wspomnieć o czterech takich programach: Tagger, Tagit, Tags oraz HoudahSpot. Dwa spośród nich są płatne, dwa nie. Pokażę też jak w oparciu o tagi można stworzyć system porządkujący informacje, który wykorzystuje tylko systemowe aplikacje i pozwala zaoszczędzić na cenie licencji takiego Together na przykład.

TagIt to program firmy, od której wszystko się zaczęło: Ironic Software. Jest niewielki, jest bezpłatny i robi, co trzeba. Jako jedyny z tu omawianych oprócz tagów potrafi też nadawać plikom oceny, wyrażane gwiazdkami (każdy kto używa iTunes, wie o co chodzi).

Działa oczywiście automatyczne podpowiadanie nazw znaczników oraz „klikalny” dostęp do tych ostatnio używanych. Ma też wbudowane proste wyszukiwanie.

Proste i schludne, większości użytkowników nie potrzeba niczego więcej.

Większości. Są jednak osobniki, które między jednym odcinkiem „The Big Bang Theory” a drugim oczekują jednak od oprogramowania nieco więcej i są przyzwyczajone nie płacić za drobne narzędzia. Dla nich wszystkich istnieje Tagger. To dość nietypowa aplikacja, nietypowa o tyle, że po uruchomieniu sama się zamyka. Spokojnie, nie od razu, ale w momencie przypisania znacznika(-ów) do pliku i klepnięcia OK Tagger kończy działalność i znika. Rzadko który program zachowuje się tak bez wyraźnej woli użytkownika, ale zastanówmy się… W przypadku nadawania tagów tego właśnie możemy oczekiwać. Przypisujemy je do pliku (lub plików) i tyle. Z reguły nie powtarzamy tej czynności. Tagger wygląda tak:

…i jest to jedyny kawałek GUI, którym dysponuje. Wyszukiwać otagowane pliki użytkownik musi sobie sam, wykorzystując Spotlight. Nie wspomniałem o tym do tej pory? Pora naprawić błąd. Wyrażenie tag:abc wyszukuje pliki ze znacznikiem abc, wyrażenie tag:abc AND tag:def wyświetla pliki opisane znacznikami abc oraz def, tag:abc OR tag:def te, które posiadają znaczniki abc lub def zaś tag:abc NOT tag:def tylko te, które otagowano jako abc a nie jako def. Wyszukiwać za pomocą Spotlight można oczywiście po zainstalowaniu dowolnej aplikacji wykorzystującej OpenMeta.

W sumie proste, ale jeśli ktoś bardzo chce, to twórca Taggera udostępnia kolejną bezpłatną aplikację: TagLists. Jej jedyne zadanie to właśnie wyszukiwanie otagowanych plików. Umożliwia nawet stosowanie operatorów booleanowskich w zapytaniach (te AND, ORNOT, o których wspominałem przed chwilą). W oknie programu działa QuickLook, kolejne zapytania są też zapamiętywane, więc łatwo do nich wrócić.

Wracając na chwilę jeszcze do Taggera: wielką jego zaletą jest to, że potrafi tagować nie tylko pliki, ale również innego rodzaju obiekty, na przykład strony WWW. Jeśli używasz Safari, Opery, Camino lub OmniWeb możesz opisać znacznikiem otwartą w przeglądarce stronę (wsparcie dla Firefoksa też jest, ale – jak pisze autor – „bardzo niestabilne”). Technicznie wygląda to tak, że Tagger tworzy na dysku plik .webloc zawierający skrót do tej strony i taguje sam plik. Kolejną zaletą tego niewielkiego narzędzia jest możliwość dodawania znaczników do plików otwartych w oknie aplikacji, czyli na przykład nowo tworzonych. Jedyne czego Tagger potrzebuje do szczęścia to aplikacja napisana we frameworku Cocoa lub taka, która wspiera AppleScript (przez tzw. „front application scripts”).

Pora na aplikacje płatne. Pierwszą z nich jest Tags, autorstwa Gravity Applications. Kosztuje 29 dolarów i wygląda tak:

To oczywiście jedynie okno służące do edycji znaczników, ale jest też moduł wyszukiwawczo-prezentacyjny.

Dodatkowo Tags oferuje coś w rodzaju nowego interfejsu do Spotlighta, który umożliwia wyszukiwanie tylko wśród plików otagowanych lub pośród również tych pozostałych. Program taguje pliki na dysku, te otwarte we wspieranych aplikacjach, strony WWW oraz pocztę w Mail.app (uwaga: wiadomości IMAP tagowane są tylko lokalnie, nie synchronizują się na innych komputerach).

Druga płatna aplikacja to HoudahSpot (30 dolarów). Znany zapewne wielu „Spotlight na sterydach” od wersji 3.0 umożliwia również wyszukiwanie plików według tagów oraz samo tagowanie. Dodawanie i edycję znaczników umożliwia okno, które można ukryć przy krawędzi ekranu i które wysuwa się, gdy w pobliżu takiej krawędzi pojawi się kursor myszy.

Wystarczy przeciągnąć plik (pliki) w odpowiednie miejsce i gotowe. Bardzo wygodne i cały czas pod ręką. Mocna propozycja dla osób, które często wyszukują pliki na dysku.

Tyle krótkiej przebieżki po przykładowych aplikacjach wspierających OpenMeta. Pora na obiecany lifehacking.

Jak panuję nad materiałami, które gromadzę na dysku? Oczywiście taguję, bez tego dawno bym zwariował próbując dopasować jeden plik do kilku zazębiających się kategorii. Wygodnym narzędziem służącym do tego celu są menedżery informacji osobistych (personal information managers), które mają jednak tą wadę, że wszystkie dane gromadzą w swojej bazie, oczywiście o  zamkniętej strukturze, co prędzej czy później może stanowić pewien problem. Kiedyś używałem wspomnianego wcześniej Together, ale od kiedy OpenMeta okrzepła na rynku, przerzuciłem się na Taggera, tylko i wyłącznie. To rozwiązanie ma same zalety – dane przechowywane są jako pliki (w tym .webloc załatwiają skróty do stron, zapisane przez Safari archiwa „zabezpieczają” mi całe strony), więc można je swobodnie przenosić na kolejne maszyny bez potrzeby kupowania kolejnych licencji na komercyjne oprogramowanie. Do wyszukiwania wystarczy Spotligh i Finder– znając składnię zapytań oraz nazwy atrybutów można znaleźć wszystko. Dodatkowy bonus to bezproblemowy backup i synchronizacja via Dropbox – eksperymentalna wersja, dostępna na oficjalnym forum, już uwzględnia tagi powiązane z plikami.

Przerwa na reklamę

Podsumowując: przed standardem OpenMeta przyszłość widzę świetlaną. Jeśli któryś z deweloperów chce zastosować w swoich aplikacjach znaczniki widziane nie tylko przez nią samą nie ma w tej chwili wyboru. Oby tylko do podobnych wniosków doszli ludzie z Apple i w końcu raz na zawsze ustalili format tagów stosowanych w systemie. Miło by było gdyby zechcieli się przy tym porozumieć ze społecznością skupioną wokół tego projektu.

PS Ważna uwaga na koniec: OpenMeta, w odróżnieniu od na przykład Growl, nie wymaga instalowania żadnej dodatkowej aplikacji przed skorzystaniem z programu, którego chcemy używać do zarządzania tagami. Growl jest usługą, która nasłuchuje komunikatów od aplikacji świadomych jej istnienia, OpenMeta zaś to jedynie sposób zapisywania atrybutów w systemie plików oraz zarządzania nimi. Wszelkie operacje wykonywane są z wykorzystaniem standardowych, systemowych bibliotek, więc nie ma potrzeby wcześniejszego instalowania czegokolwiek.

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.