Co z tą konfiguracją? – część 2

Wczoraj zastanawialiśmy się nad wyborem sposobu przechowywania ustawień użytkownika w naszym systemie. Finalnie zapadła decyzja o użyciu jednego z dostępnych formatów tekstowych, głównie ze względu na wygodę użycia i wsteczną kompatybilność między wersjami software’u. Oczywiście wciąż otwarta pozostaje kwestia doprecyzowania który dokładnie format wybrać: XML, JSON czy może YAML. Każdy z nich ma swoje wady i zalety, jednak nie będziemy tym razem szczegółowo rozważać każdej z opcji.

O, to jakieś novum! Dlaczego?

Składnie XMLa, JSONa czy YAMLa są na tyle zbliżone do siebie, że trudno obiektywnie wybrać najlepszy format, oceniając jedynie sposób opisu struktur danych. Każdy z nich jest w porównywalnym stopniu czytelny dla człowieka oraz wymaga dedykowanego parsera po stronie maszyny.

Brak nam jakiegokolwiek kryterium…

Cóż.. jest jedno. Pamiętajmy, iż musi powstać jakaś forma aplikacji na komputer/tablet pozwalająca edytować ustawienia zapisane w pliku konfiguracyjnym. Analizując doświadczenia z poprzednich projektów, doszliśmy do wniosku, że tworzenie dedykowanego programu jest bardzo nieefektywne i czasochłonne. Dlaczego więc nie skorzystać z gotowej aplikacji, którą ma zainstalowany każdy współczesny komputer, czyli z… przeglądarki internetowej? 🙂

Takie rozwiązanie ma ogromnie wiele zalet. Stworzenie interfejsu graficznego jest banalnie proste – sprowadza się do stworzenia strony HTML. Nie jesteśmy już uzależnieni od konkretnego systemu operacyjnego – uzyskujemy doskonałą przenośność, konfigurację można edytować na dowolnym urządzeniu wyposażonym w slot karty SD/micro-SD oraz przeglądarkę. Wszelka forma konwersji i walidacji danych czy interakcji z użytkownikiem amoże zostać oprogramowana w języku JavaScript i jego rozszerzeniach, wrodzaju jQuery.

A jak wczytamy plik z konfiguracją?

Tak się dobrze składa, iż jeden z naszych kandydatów, JSON, jest natywnie wspierany przez JavaScript 🙂 Trudno wyobrazić sobie prostsze rozwiązanie.

Oczywiście sam wybór formatu nie określa ostatecznej formy zapisu danych – ta będzie specyficzna dla każdej aplikacji, każdego komponentu w naszym projekcie. I tu pojawia się dość istotna kwestia. Dobrą praktyką jest oddelegowanie odczytywania, dekodowania i aplikowania ustawień do zainteresowanego nimi komponentu.

Co to oznacza?

Kod “platformowy”, odczytuja zawartość pliku JSON, przeparsuje go do pewnej struktury binarnej i przekaże jej fragment do aplikacji. Od tego momentu to sama aplikacja ma wiedzieć co dane ustawienia dla niej znaczą i jak je zinterpretować. W ten sposób zmniejszamy ilość zależności między częścią platformową a aplikacjami do niezbędnego minimum. Dodawanie nowych ustawień, parametrów dla poszczególnych sub-komponentów nie będzie wymagało wprowadzania żadnych zmian w platformie.

Tak sobie gadamy i gadamy… a co udało się dziś zrobić?

Cóż… udało się napisać prosty, acz kompletny składniowo parser JSONa w języku C. Tak, wiem – jest całe mnóstwo gotowych bibliotek 🙂 Niestety, żadna z nich nie odpowiadała naszym wymaganiom, szczególnie pod względem zarządzania pamięcią.

Posted in Sto dni w kolorze.