Każde oprogramowanie, które udostępnia użytkownikowi choćby najmniejszą formę personalizacji swoich ustawień, musi posiadać jakiś sposób przechowywania oraz edycji tych ustawień. Zasadniczo możemy wyróżnić dwie metody zapisywania konfiguracji: format binarny oraz format tekstowy.
Format binarny
W tym przypadku zestaw parametrów konfiguracyjnych jest kopią 1:1 binarnej struktury przechowywanej w pamięci podręcznej procesora.
- Dobre upakowanie danych,
- Prosty odczyt/zapis – format nie wymaga parsowania,
- Konieczność zachowania binarnej kompatybilności przy każdej zmianie struktury danych,
- Arbitralnie ograniczona ilość rekordów konfiguracyjnych (np. alarmów, wykresów, itp.) oraz tekstów,
- Konieczność używania oraz utrzymywania dedykowanej aplikacji czytającej binarny format danych,
Format tekstowy INI/XML/JSON
Tu dane zostają zapisane w bardziej “ludzkim” formacie. Każdy parametr jest identyfikowany nazwą oraz położeniem w drzewiastej strukturze danych.
- Elastyczna struktura danych,
- Możliwość zmiany ustawień nawet przy użyciu zwykłego edytora tekstu,
- Brak ograniczeń w ilości czy rozmiarze wpisów konfiguracyjnych,
- Łatwiejsza do zachowania wsteczna kompatybilność,
- Konieczność stworzenia mechanizmu parsującego tekst i tłumaczącego go na format binarny,
- Słabe upakowanie danych,
- Dłuższy czas ładowania,
Co wybrać?/h5>
Ponownie stajemy przed wyborem – czas na porównanie obu metod. Format binarny jest oczywiście prostszy w implementacji po stronie urządzenia. Aby zapisać ustawienia wystarczy zrzucić fragment pamięci np. do pliku. Problemem staje się ich wczytanie po stronie komputera. Poprzedni projekt, HypeFIS, posiadał dedykowany program konfiguracyjny. Z perspektywy czasu to rozwiązanie okazało się być bardzo pracochłonne. Każda, nawet niewielka zmiana kodu w urządzeniu, wymagała zapewnienia kompatybilności od strony aplikacji konfiguracyjnej.
Formaty tekstowe, takie jak XML czy JSON nie stawiają przed nami takich wymagań. Ich addytywna i elastyczna struktura pozwala na łatwe zapewnienie wstecznej kompatybilności. Z drugiej strony będziemy potrzebowali odpowiedniego parsera, który zamieni tekst na format binarny, zrozumiały dla naszych aplikacji. Mniejsze “upakowanie” danych w formacie tekstowym wymusza zastosowanie jakiegoś pojemnego medium, które będzie w stanie przechować konfigurację. W naszym przypadku nie stanowi to najmniejszego problemu, gdyż posiadamy w systemie kartę pamięci SD, która zapewnia ogromną (jak na wymagania konfiguracji) ilość miejsca 🙂
Konkluzja
Doświadczenia poprzednich projektów pokazują jasno, że o ile tylko pozwalają na to warunki, warto wykorzystać elastyczniejszą formę zapisu danych jaką stanowią wszelkie formaty tekstowe. Inwestycja czasu w napisanie odpowiedniego parsera jest rzędy wielkości mniejsza, od tego spędzonego nad utrzymywaniem dedykowanych aplikacji. Wybór jest więc dość jasny 😀
.