{"id":786,"date":"2018-04-30T20:29:37","date_gmt":"2018-04-30T20:29:37","guid":{"rendered":"http:\/\/hayperek.pl\/?p=786"},"modified":"2018-04-30T20:29:37","modified_gmt":"2018-04-30T20:29:37","slug":"co-z-ta-konfiguracja-czesc-2","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/04\/30\/co-z-ta-konfiguracja-czesc-2\/","title":{"rendered":"Co z t\u0105 konfiguracj\u0105? &#8211; cz\u0119\u015b\u0107 2"},"content":{"rendered":"<p>Wczoraj zastanawiali\u015bmy si\u0119 nad wyborem sposobu przechowywania ustawie\u0144 u\u017cytkownika w naszym systemie. Finalnie zapad\u0142a decyzja o u\u017cyciu jednego z dost\u0119pnych format\u00f3w tekstowych, g\u0142\u00f3wnie ze wzgl\u0119du na wygod\u0119 u\u017cycia i wsteczn\u0105 kompatybilno\u015b\u0107 mi\u0119dzy wersjami software&#8217;u. Oczywi\u015bcie wci\u0105\u017c otwarta pozostaje kwestia doprecyzowania kt\u00f3ry dok\u0142adnie format wybra\u0107: XML, JSON czy mo\u017ce YAML. Ka\u017cdy z nich ma swoje wady i zalety, jednak nie b\u0119dziemy tym razem szczeg\u00f3\u0142owo rozwa\u017ca\u0107 ka\u017cdej z opcji. <\/p>\n<blockquote><p>O, to jakie\u015b novum! Dlaczego?<\/p><\/blockquote>\n<p>Sk\u0142adnie XMLa, JSONa czy YAMLa s\u0105 na tyle zbli\u017cone do siebie, \u017ce trudno obiektywnie wybra\u0107 najlepszy format, oceniaj\u0105c jedynie spos\u00f3b opisu struktur danych. Ka\u017cdy z nich jest w por\u00f3wnywalnym stopniu czytelny dla cz\u0142owieka oraz wymaga dedykowanego parsera po stronie maszyny. <\/p>\n<blockquote><p>Brak nam jakiegokolwiek kryterium&#8230;<\/p><\/blockquote>\n<p>C\u00f3\u017c.. jest jedno. Pami\u0119tajmy, i\u017c musi powsta\u0107 jaka\u015b forma aplikacji na komputer\/tablet pozwalaj\u0105ca edytowa\u0107 ustawienia zapisane w pliku konfiguracyjnym. Analizuj\u0105c do\u015bwiadczenia z poprzednich projekt\u00f3w, doszli\u015bmy do wniosku, \u017ce tworzenie dedykowanego programu jest bardzo nieefektywne i czasoch\u0142onne. Dlaczego wi\u0119c nie skorzysta\u0107 z gotowej aplikacji, kt\u00f3r\u0105 ma zainstalowany ka\u017cdy wsp\u00f3\u0142czesny komputer, czyli z&#8230; przegl\u0105darki internetowej? \ud83d\ude42<\/p>\n<p>Takie rozwi\u0105zanie ma ogromnie wiele zalet. Stworzenie interfejsu graficznego jest banalnie proste &#8211; sprowadza si\u0119 do stworzenia strony HTML. Nie jeste\u015bmy ju\u017c uzale\u017cnieni od konkretnego systemu operacyjnego &#8211; uzyskujemy doskona\u0142\u0105 przeno\u015bno\u015b\u0107, konfiguracj\u0119 mo\u017cna edytowa\u0107 na dowolnym urz\u0105dzeniu wyposa\u017conym w slot karty SD\/micro-SD oraz przegl\u0105dark\u0119. Wszelka forma konwersji i walidacji danych czy interakcji z u\u017cytkownikiem amo\u017ce zosta\u0107 oprogramowana w j\u0119zyku JavaScript i jego rozszerzeniach, wrodzaju jQuery.<\/p>\n<blockquote><p>A jak wczytamy plik z konfiguracj\u0105?<\/p><\/blockquote>\n<p>Tak si\u0119 dobrze sk\u0142ada, i\u017c jeden z naszych kandydat\u00f3w, JSON, jest natywnie wspierany przez JavaScript \ud83d\ude42 Trudno wyobrazi\u0107 sobie prostsze rozwi\u0105zanie. <\/p>\n<p>Oczywi\u015bcie sam wyb\u00f3r formatu nie okre\u015bla ostatecznej formy zapisu danych &#8211; ta b\u0119dzie specyficzna dla ka\u017cdej aplikacji, ka\u017cdego komponentu w naszym projekcie. I tu pojawia si\u0119 do\u015b\u0107 istotna kwestia. Dobr\u0105 praktyk\u0105 jest oddelegowanie odczytywania, dekodowania i aplikowania ustawie\u0144 do zainteresowanego nimi komponentu. <\/p>\n<blockquote><p>Co to oznacza?<\/p><\/blockquote>\n<p>Kod &#8222;platformowy&#8221;, odczytuja zawarto\u015b\u0107 pliku JSON, przeparsuje go do pewnej struktury binarnej i przeka\u017ce jej fragment do aplikacji. Od tego momentu to sama aplikacja ma wiedzie\u0107 co dane ustawienia dla niej znacz\u0105 i jak je zinterpretowa\u0107. W ten spos\u00f3b zmniejszamy ilo\u015b\u0107 zale\u017cno\u015bci mi\u0119dzy cz\u0119\u015bci\u0105 platformow\u0105 a aplikacjami do niezb\u0119dnego minimum. Dodawanie nowych ustawie\u0144, parametr\u00f3w dla poszczeg\u00f3lnych sub-komponent\u00f3w nie b\u0119dzie wymaga\u0142o wprowadzania \u017cadnych zmian w platformie.<\/p>\n<blockquote><p>Tak sobie gadamy i gadamy&#8230; a co uda\u0142o si\u0119 dzi\u015b zrobi\u0107?<\/p><\/blockquote>\n<p>C\u00f3\u017c&#8230; uda\u0142o si\u0119 napisa\u0107 prosty, acz kompletny sk\u0142adniowo parser JSONa w j\u0119zyku C. Tak, wiem &#8211; jest ca\u0142e mn\u00f3stwo gotowych bibliotek \ud83d\ude42 Niestety, \u017cadna z nich nie odpowiada\u0142a naszym wymaganiom, szczeg\u00f3lnie pod wzgl\u0119dem zarz\u0105dzania pami\u0119ci\u0105.<\/p>","protected":false},"excerpt":{"rendered":"<p>Wczoraj zastanawiali\u015bmy si\u0119 nad wyborem sposobu przechowywania ustawie\u0144 u\u017cytkownika w naszym systemie. Finalnie zapad\u0142a decyzja o u\u017cyciu jednego z dost\u0119pnych format\u00f3w tekstowych, g\u0142\u00f3wnie ze wzgl\u0119du na wygod\u0119 u\u017cycia i wsteczn\u0105 kompatybilno\u015b\u0107 mi\u0119dzy wersjami software&#8217;u. Oczywi\u015bcie wci\u0105\u017c otwarta pozostaje kwestia doprecyzowania kt\u00f3ry dok\u0142adnie format wybra\u0107: XML, JSON czy mo\u017ce YAML. Ka\u017cdy z nich ma swoje wady [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":789,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-786","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\/en\/wp-json\/wp\/v2\/posts\/786","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/comments?post=786"}],"version-history":[{"count":3,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/786\/revisions"}],"predecessor-version":[{"id":790,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/786\/revisions\/790"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media\/789"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}