Otwarte źródło, otwarty plik
Kiedyś do zarządzania moim telefonem używałem programu floAt's Mobile Agent. Ten, dedykowany telefonom Sony Ericsson, program między innymi zapisywał wszystkie moje wiadomości SMS w swoim własnym archiwum. Ja, z wrodzonego chomikowania, sobie te jego zapisy backupowałem.
Niedawno znalazłem je, szukając pewnego bardzo starego wpisu. Otworzyłem tenże plik, a moim oczom ukazała się struktura pliku CSV, wartości rodzielanych przecinkami. Gdzie bez żadnych problemów dało się wyczytać datę otrzymania lub wysłania danej wiadomości. I pewnie dało by się też dojść do tego, co oznaczają pozostałe zmienne, jednak największy problem był z samą wiadomością, która przyjmowała postać długich ciągów cyfr w systemie szesnastkowym.
Nie miałem w pierwszej chwili pojęcia cóż to za format jest tych danych. Pierwsze bajty w kilkudziesięciu linijkach były stałe. Potem znów było coś... i tak dalej. Nie mam obycia w komendach AT, nie znam się na kodowaniach w sieci komórkowej (zbytnio). Ale znam się co nieco na programowaniu. Pomyślałem zatem - oto jest moment, by wykorzystać potęgę oprogramowania o dostępnym kodzie źródłowym! Wspomniany FMA to program napisany w języku Delphi, w którym kiedyś bardzo dużo siedziałem. A jego źródła są dostępne na licencji GPL.
Ściągnąłem zatem źródła, znalazłem moduł uSMS.pas, który wydawał się pasować do tego, co ja potrzebuję znaleźć (przekształcić te ciągi do postaci czytelnej dla człowieka). Po pierwsze okazało się, że te ciągi to po prostu "SMS Packet format", który zaczyna się od numeru SMS Center, dlatego początki ciągów były identyczne. Ale to nie przybliżało mnie do rozwiązania problemu - musiałbym zaimplementować zatem parsowanie tegoż formatu w swoim programie... ale moment, przecież mam moduł, który to robi!
W pierwszej chwili pomyślałem o przepisaniu tego na C#. Ale spojrzałem na 58 KB kodu i zrezygnowałem. Za dużo roboty, która ma być wykorzystana tylko raz, tylko do przerobienia jednego pliku na inny. Rozważałem przez chwile skompilowanie modułu do postaci .netowego assembly (za pomocą Delphi.NET), by użyć tej klasy w moim programie - ale musiałbym znów Delphi.NET instalować, grzebać, nie wiadomo jak by to miało działać. A przecież kiedyś Delphi było moim żywiołem, dlaczego więc nie odkurzyć starych umiejętności?
Po krótkiej chwili zabawy z Free Pascal Compiler, wyrzuceniu zbędnych zależności z tego wspomnianego modułu, po napisaniu prostego programu testującego - okazało się, że miałem rację i moje tajemnicze ciągi zmieniły się w treść wiadomości "Idziesz na rower?" wysłanej ponad 6 lat temu. Obiecujący początek. Dłuższa chwila zabawy (i zmagania, od Delphi się odzwyczaiłem) z kodem zaowocowały prostą aplikacją do przerabiania formatu archiwum FMA do prostego pliku CSV. Sam program jest jeszcze pełen błędów, nie obsługuje żadnego wyjątku od reguły i zapewne będzie się psuł - ale na moich dwóch plikach zadziałał.
A morał tej bajki jest krótki i niektórym znany - używanie otwartego, udokumentowanego standardu przechowywania danych może pozwolić, że w przyszłości, będziemy mogli dane nadal otrzymać. Wystarczy tylko napisać aplikację, która to zrobi jak nakazuje dokumentacja. Ewentualnie - używanie oprogramowania o dostępnym kodzie źródłowym może pozwolić na to, że część starego oprogramowania może zostać użyta do przekształcenia starych danych na jakiś nowy, czytelny format. Wiwat otwartość, dzięki której, bez konieczności instalacji tego starego, nierozwijanego już programu (z czym pewnie by się wiązały problemy) udało mi się dane odczytać, praktycznie bez problemów.
Oczyma wyobraźni widzę, jak za X lat będę tak samo się starał odczytać dane zapisane w prehistorycznym formacie .xyz...1
A teraz krok następny - w jakim formacie dane przechowuje PPCPimBackup, program zamknięty, rozprowadzany jako freeware? I czy te dane też mi się uda odczytać? Tu już wiem, że będzie znacznie gorzej ;-)
[1] Znalazłem też kiedyś moje pliki zapisane w formacie graficznym PCX przez PaintBrusha z Windows 3.1, którego już na Windows 64-bitowym nie mogę uruchomić. Sytuacja bardzo podobna.
11 czerwca 2010 00:35:52
Tako rzekłeś: Vivat otwartość!
P.S. jedziesz dziś [w piątek] na WzOS?
zapowiada się ciekawie...
11 czerwca 2010 01:05:55
Poważnie? 64-bitowy Paint(brush) nie czyta PCX-ów? A jakiś inny program? IrfanView czy coś w ten deseń też nie odczyta plików tego formatu w Windows 64 bit?
11 czerwca 2010 09:23:09
@Eduarten: Nie, jedyne gdzie jadę, to odpocząć, z daleka od komputerów ;-)
@Krystek: Microsoftowy Paint "od zawsze" nie umiał otwierać PCX, co zawsze mnie niebywale dziwiło (czytaj: od kiedy powstał w Windows 95). O ile pamiętam otworzyłem to, co trzeba za pomocą Corel Photo-Paint. Więc nie było tak źle.
11 czerwca 2010 12:27:47
Um, a skoro tak chwalisz otwarte oprogramowanie, to czemu Corel Photo-Paint, zamiast otwartego GIMP'a, który też powinien sobie doskonale poradzić? :) Nie mam pod ręką takiego PaintBrushowego PCX'a, ale jakiś format *.pcx widnieje na liście obsługiwanych przez niego formatów :).
11 czerwca 2010 12:28:47
Dot: +1
Hahaahaheee.. xD
11 czerwca 2010 12:55:12
Fakt, że w tym akurat momencie chwalę oprogramowanie o otwartych źródłach nie oznacza, że jestem jego absolutnym zwolennikiem. Używam Corela, bo mi wygodnie, do GIMP-a nigdy się nie przyzwyczaiłem. Z tego samego też powodu uzywam Windows i Outlooka, a nie Linuksa i Evolution.
Ja, po prostu, jestem pomiędzy Jasną i Ciemną Stroną Mocy ;-)