{
    "id": 755,
    "date": "2018-04-29T21:15:55",
    "date_gmt": "2018-04-29T21:15:55",
    "guid": {
        "rendered": "http:\/\/hayperek.pl\/?p=755"
    },
    "modified": "2018-04-29T21:15:55",
    "modified_gmt": "2018-04-29T21:15:55",
    "slug": "co-z-ta-konfiguracja-czesc-1",
    "status": "publish",
    "type": "post",
    "link": "https:\/\/hayperek.pl\/pl_pl\/2018\/04\/29\/co-z-ta-konfiguracja-czesc-1\/",
    "title": {
        "rendered": "Co z t\u0105 konfiguracj\u0105? &#8211; cz\u0119\u015b\u0107 1"
    },
    "content": {
        "rendered": "<p>Ka\u017cde oprogramowanie, kt\u00f3re udost\u0119pnia u\u017cytkownikowi cho\u0107by najmniejsz\u0105 form\u0119 personalizacji swoich ustawie\u0144, musi posiada\u0107 jaki\u015b spos\u00f3b przechowywania oraz edycji tych ustawie\u0144. Zasadniczo mo\u017cemy wyr\u00f3\u017cni\u0107 dwie metody zapisywania konfiguracji: format binarny oraz format tekstowy.<\/p>\n<h5>Format binarny<\/h5>\n<p>W tym przypadku zestaw parametr\u00f3w konfiguracyjnych jest kopi\u0105 1:1 binarnej struktury przechowywanej w pami\u0119ci podr\u0119cznej procesora. <\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">Dobre upakowanie danych,<\/li>\n<li class=\"pro_item\">Prosty odczyt\/zapis &#8211; format nie wymaga parsowania,<\/li>\n<\/ul>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">Konieczno\u015b\u0107 zachowania binarnej kompatybilno\u015bci przy ka\u017cdej zmianie struktury danych,<\/li>\n<li class=\"cons_item\">Arbitralnie ograniczona ilo\u015b\u0107 rekord\u00f3w konfiguracyjnych (<em>np. alarm\u00f3w, wykres\u00f3w, itp.<\/em>) oraz tekst\u00f3w,<\/li>\n<li class=\"cons_item\">Konieczno\u015b\u0107 u\u017cywania oraz utrzymywania dedykowanej aplikacji czytaj\u0105cej binarny format danych,<\/li>\n<\/ul>\n<h5>Format tekstowy INI\/XML\/JSON<\/h5>\n<p>Tu dane zostaj\u0105 zapisane w bardziej &#8222;ludzkim&#8221; formacie. Ka\u017cdy parametr jest identyfikowany nazw\u0105 oraz po\u0142o\u017ceniem w drzewiastej strukturze danych.<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">Elastyczna struktura danych,<\/li>\n<li class=\"pro_item\">Mo\u017cliwo\u015b\u0107 zmiany ustawie\u0144 nawet przy u\u017cyciu zwyk\u0142ego edytora tekstu,<\/li>\n<li class=\"pro_item\">Brak ogranicze\u0144 w ilo\u015bci czy rozmiarze wpis\u00f3w konfiguracyjnych,<\/li>\n<li class=\"pro_item\">\u0141atwiejsza do zachowania wsteczna kompatybilno\u015b\u0107,<\/li>\n<\/ul>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">Konieczno\u015b\u0107 stworzenia mechanizmu parsuj\u0105cego tekst i t\u0142umacz\u0105cego go na format binarny,<\/li>\n<li class=\"cons_item\">S\u0142abe upakowanie danych,<\/li>\n<li class=\"cons_item\">D\u0142u\u017cszy czas \u0142adowania,<\/li>\n<\/ul>\n<h5>Co wybra\u0107?\/h5><\/p>\n<p>Ponownie stajemy przed wyborem &#8211; czas na por\u00f3wnanie obu metod. Format binarny jest oczywi\u015bcie prostszy w implementacji po stronie urz\u0105dzenia. Aby zapisa\u0107 ustawienia wystarczy zrzuci\u0107 fragment pami\u0119ci np. do pliku. Problemem staje si\u0119 ich wczytanie po stronie komputera. Poprzedni projekt, HypeFIS, posiada\u0142 dedykowany program konfiguracyjny. Z perspektywy czasu to rozwi\u0105zanie okaza\u0142o si\u0119 by\u0107 bardzo pracoch\u0142onne. Ka\u017cda, nawet niewielka zmiana kodu w urz\u0105dzeniu, wymaga\u0142a zapewnienia kompatybilno\u015bci od strony aplikacji konfiguracyjnej. <\/p>\n<p>Formaty tekstowe, takie jak XML czy JSON nie stawiaj\u0105 przed nami takich wymaga\u0144. Ich addytywna i elastyczna struktura pozwala na \u0142atwe zapewnienie wstecznej kompatybilno\u015bci. Z drugiej strony b\u0119dziemy potrzebowali odpowiedniego parsera, kt\u00f3ry zamieni tekst na format binarny, zrozumia\u0142y dla naszych aplikacji. Mniejsze &#8222;upakowanie&#8221; danych w formacie tekstowym wymusza zastosowanie jakiego\u015b pojemnego medium, kt\u00f3re b\u0119dzie w stanie przechowa\u0107 konfiguracj\u0119. W naszym przypadku nie stanowi to najmniejszego problemu, gdy\u017c posiadamy w systemie kart\u0119 pami\u0119ci SD, kt\u00f3ra zapewnia ogromn\u0105 (<em>jak na wymagania konfiguracji<\/em>) ilo\u015b\u0107 miejsca \ud83d\ude42 <\/p>\n<h5>Konkluzja<\/h5>\n<p>Do\u015bwiadczenia poprzednich projekt\u00f3w pokazuj\u0105 jasno, \u017ce o ile tylko pozwalaj\u0105 na to warunki, warto wykorzysta\u0107 elastyczniejsz\u0105 form\u0119 zapisu danych jak\u0105 stanowi\u0105 wszelkie formaty tekstowe. Inwestycja czasu w napisanie odpowiedniego parsera jest rz\u0119dy wielko\u015bci mniejsza, od tego sp\u0119dzonego nad utrzymywaniem dedykowanych aplikacji. Wyb\u00f3r jest wi\u0119c do\u015b\u0107 jasny \ud83d\ude00<\/p>\n<p>. <\/p>",
        "protected": false
    },
    "excerpt": {
        "rendered": "<p>Ka\u017cde oprogramowanie, kt\u00f3re udost\u0119pnia u\u017cytkownikowi cho\u0107by najmniejsz\u0105 form\u0119 personalizacji swoich ustawie\u0144, musi posiada\u0107 jaki\u015b spos\u00f3b przechowywania oraz edycji tych ustawie\u0144. Zasadniczo mo\u017cemy wyr\u00f3\u017cni\u0107 dwie metody zapisywania konfiguracji: format binarny oraz format tekstowy. Format binarny W tym przypadku zestaw parametr\u00f3w konfiguracyjnych jest kopi\u0105 1:1 binarnej struktury przechowywanej w pami\u0119ci podr\u0119cznej procesora. Dobre upakowanie danych, Prosty odczyt\/zapis [&hellip;]<\/p>",
        "protected": false
    },
    "author": 1,
    "featured_media": 784,
    "comment_status": "closed",
    "ping_status": "open",
    "sticky": false,
    "template": "",
    "format": "standard",
    "meta": {
        "footnotes": ""
    },
    "categories": [
        3
    ],
    "tags": [],
    "class_list": {
        "0": "post-755",
        "1": "post",
        "2": "type-post",
        "3": "status-publish",
        "4": "format-standard",
        "5": "has-post-thumbnail",
        "6": "hentry",
        "7": "category-stodni",
        "9": "post-with-thumbnail",
        "10": "post-with-thumbnail-large"
    },
    "_links": {
        "self": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/755",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts"
            }
        ],
        "about": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/types\/post"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/comments?post=755"
            }
        ],
        "version-history": [
            {
                "count": 5,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/755\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 785,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/755\/revisions\/785"
            }
        ],
        "wp:featuredmedia": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media\/784"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media?parent=755"
            }
        ],
        "wp:term": [
            {
                "taxonomy": "category",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/categories?post=755"
            },
            {
                "taxonomy": "post_tag",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/tags?post=755"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}