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.