{"id":812,"date":"2016-03-26T23:24:47","date_gmt":"2016-03-26T22:24:47","guid":{"rendered":"http:\/\/www.datascience.rs\/?p=812"},"modified":"2016-03-26T23:24:47","modified_gmt":"2016-03-26T22:24:47","slug":"rstudio-shiny-responsizivni-dizajn-reaktivni-model-programiranja-u-r","status":"publish","type":"post","link":"http:\/\/imuno-srbija.com\/data-science\/en\/2016\/03\/26\/rstudio-shiny-responsizivni-dizajn-reaktivni-model-programiranja-u-r\/","title":{"rendered":"RStudio Shiny: Responzivni dizajn i reaktivni model programiranja u R"},"content":{"rendered":"<p>Dr Goran S. Milovanovi\u0107,<\/p>\n<p>Data Scientist, <em>DiploFoundation<\/em><\/p>\n<p><a href=\"http:\/\/www.exactness.net\" target=\"_blank\" rel=\"noopener\">www.exactness.net<\/a><\/p>\n<p><a href=\"https:\/\/www.r-project.org\/\" target=\"_blank\" rel=\"noopener\">Programski jezik R<\/a> polako ali sigurno postaje <i>lingua franca<\/i> savremene Data Science. Do pre samo nekoliko godina vi\u0111en kao ekstravagancija sa tek odre\u0111enom ulogom u akademskim krugovima matemati\u010dke i primenjene statistike, <a href=\"https:\/\/www.r-project.org\/contributors.html\" target=\"_blank\" rel=\"noopener\">jaka zajednica u razvoju jezgra\u00a0samog\u00a0jezika<\/a> i ogromnog broja <a href=\"https:\/\/cran.r-project.org\/\" target=\"_blank\" rel=\"noopener\">R paketa<\/a> uspela je da ga pozicionira na prakti\u010dno centralno mesto\u00a0u \u010ditavoj mre\u017ei jezika i alata koji predstavljaju podr\u0161ku savremenom menad\u017ementu podacima i kvantitativnoj analitici.<\/p>\n<p>Pored mnogih dobrih strana i prednosti, programskom jeziku R je svakako mogu\u0107e uputiti i brojne kritike. Jedna od njih se svakako odnosi na \u010dinjenicu da se R ne skalira lako na rad sa velikim podacima. Me\u0111utim, od vremena kada je ovo bilo ta\u010dno, zajednica je razvila veliki broj paketa koji podr\u017eavaju integraciju R-a sa sistemima za menad\u017ement i procesiranje ovog tipa. Druga, da je razvoj R-a bio fokusiran oko pretpostavke rada na jednoprocesorskom sistemu, zbog \u010dega je dugo ovaj mo\u0107an programski jezik pogre\u0161no interpretiran kao ne\u0161to \u0161to je vi\u0161e u kontinuitetu sa platformama za statisti\u010dke analize poput SPSS, Statistica, i sl. Danas smo svedoci \u010dinjenice da sam Microsoft kupuje Revolutions &#8211; sada dostupnu pod imenom <a href=\"https:\/\/mran.revolutionanalytics.com\/open\/\" target=\"_blank\" rel=\"noopener\">Microsoft R Open<\/a> &#8211; distribuciju ovog programskog jezika koja se prirodno prilago\u0111ava vi\u0161eprocesorskim platformama. Svaki put kada bi se razvoj jezika na\u0161ao pred ovakvim ili sli\u010dnim izazovima, zajednica koja u\u010destvuje u njegovom razvoju uspevala je da odgovori naj\u010de\u0161\u0107e razvojem <em>vi\u0161e<\/em>, ne tek jednog, odgovora koji bi \u0161irio kompetencije R-a. Paket <em><a href=\"http:\/\/shiny.rstudio.com\/\" target=\"_blank\" rel=\"noopener\">Shiny<\/a><\/em>, razvijen od strane <a href=\"https:\/\/www.rstudio.com\/\" target=\"_blank\" rel=\"noopener\">RStudio<\/a> &#8211; \u0161to je ujedno ime najpopularnijeg R IDE &#8211; predstavlja novo, zna\u010dajno pro\u0161irenje kompetencija R-a, ovog puta u pravcu brzog i fleksibilnog razvoja <em>responzivnog dizajna<\/em>, odn. laku izgradnju interaktivnih web-aplikacija sa prirodnom podr\u0161kom za sve analiti\u010dke i vizuelne kapacitete koje vam R pru\u017ea.<\/p>\n<p>O RStudio Shiny smo razgovarali na <a href=\"http:\/\/www.datascience.rs\/events\/rstudio-shiny-okruzenje-za-razvoj-interaktivnih-r-web-%C2%ADaplikacija\/\" target=\"_blank\" rel=\"noopener\">Meetup Data Science zajednice Srbije 21. marta 2016 u prostorijama Startita<\/a>. Neke mogu\u0107nosti od ovog paketa, posebno pro\u0161irenje kroz shinydashboard paket, diskutovane su tada; <a href=\"https:\/\/www.youtube.com\/watch?v=d3loi6ylUEI\" target=\"_blank\" rel=\"noopener\">video Meetup-a<\/a> je, zahvaljuju\u0107i Startitu, dostupan na Youtube. Iskoristio bih ovu priliku da podvu\u010dem mo\u017eda samo najzna\u010dajnije informacije koje sam tada poku\u0161ao da predstavim i diskutujem.<\/p>\n<p>Shiny po\u010diva na reaktivnom modelu programiranja, koji ne\u0107e biti intuitivan kada se prvi put susretnete sa njim. Reaktivni model ne\u0107e ograni\u010diti va\u0161e mogu\u0107nosti u izgradnji responzivnog dizajna, ali \u0107e do vas zahtevati vrstu kognitivne organizacije koja nije karakteristi\u010dna za uobi\u010dajene paradigme poput proceduralne, objektno-orijentisane i drugih. Svaki razvoj Shiny web-aplikacije podrazumeva (prakti\u010dno) paralelni razvoj najmanje dva R skripta &#8211; standardna imena su im UI.R i server.R &#8211; pored mogu\u0107nosti da zbog urednijeg skopinga razvijate uporedo i tzv. global.R skript. Dizajn samog interfejsa aplikacije se daje u deskriptivnoj paradigmi i \u010dini sadr\u017eaj UI.R. Sama sintaksa koju koristite za razvoj interfejsa aplikacije dakle nije sintaksa programskog jezika R\u00a0u\u00a0onom smislu re\u010di u kome ste <em>navikli<\/em> da je koristite. Me\u0111utim, deskriptivni razvoj interfejsa je krajnje jednostavan i elegantan. Funkcije koje su vam na raspolaganju &#8211; a njih broj prakti\u010dno svakodnevno raste &#8211; mahom su funkcije iz JS okru\u017eenja, tako da je Shiny zapravo ispravno posmatrati kao apstrakciju nad JS, CSS, i HTML. Sa druge strane, paralelno sa razvojem interfejsa, razvija se server.R skripta, koja se na podignutom Shiny serveru automatski povezuje sa UI.R skriptom u reaktivnom modelu. To zna\u010di slede\u0107i: svaki dizajnirani kontejner sadr\u017eaja koji \u0107ete prikazati korisniku automatski je povezan sa odgovaraju\u0107om funkcijom opisanom u server.R skriptu. Veze izme\u0111u elemenata inputa i autputa koje defini\u0161ete na UI.R i funkcija &#8211; \u010diji je sadr\u017eaj bilo koja ekspresija programskog jezika R podr\u017eana ma kojim raspolo\u017eivim R paketom &#8211; odvijaju se preko tzv. reaktivnih konduktora koji automatski apdejtuju vrednosti svih varijabli \u010dija je koordinacija neophodna za uspe\u0161an rad aplikacije.<\/p>\n<p>Model reaktivnog programiranja u Shiny je, prema mom iskustvu, izuzetno dobar kada je u pitanju <em>razvoj jednostavnih aplikacija<\/em>, dok po\u010dinje da zahteva daleko vi\u0161e planiranja nego \u0161to ste mo\u017eda navikli\u00a0pri svakom poku\u0161aju da se u Shiny razvije kompleksnija web-aplikacija. Ovo nije o\u0161tra kritika Shiny: moj sud je da u Shiny mo\u017eete da razvijete fantasti\u010dne web-aplikacije podr\u017eane od strane R, ali da kompleksnost razvoja jednostavno dolazi sa cenom u jedinicama ergonomije; to ne implicira da rad u Shiny nije vredan truda, ve\u0107 naprotiv &#8211; da je trud veliki, ali isplativ. Posebno ako ste posle u\u010denja ve\u0107eg broja R paketa koji su vam neophodni za analiti\u010dki deo rada u Data Science dovoljno prezasi\u0107eni da vam ne treba i postajanje web-developerom kako\u00a0biste va\u0161 rad plasirali klijentima koje interesuje jednostavan point-and-click na sve \u0161to radite. U su\u0161tini, R nikada nije bio ovako jak na strani produkcije kao sada kada je tu RStudio paket Shiny.<\/p>\n<p>Upotreba Open verzije <a href=\"https:\/\/www.rstudio.com\/products\/shiny\/shiny-server2\/\" target=\"_blank\" rel=\"noopener\">Shiny Server<\/a>, koji \u0107ete koristiti da plasirate va\u0161u aplikaciju online, dolazi uz neprijatna ograni\u010denja koja \u0107ete morati da prevazilazite. Naime, pod Open Source Shiny mo\u017eete hostovati koliko god ho\u0107ete aplikacija, ali \u0107e svakoj od njih biti dodeljen maksimalno <em>jedan<\/em> R proces pod va\u0161im OS. U tom slu\u010daju, ako ste npr. zainteresovani da skalirate Shiny aplikaciju na ve\u0107i broj korisnika, mora\u0107ete da udaljite kompjutaciono zahtevne procese \u0161to vi\u0161e mo\u017eete od same aplikacije, \u0161to je protivno po\u010detnoj logici po kojoj bi Shiny sve to trebalo da integri\u0161e (analitiku sa interfejsom, izve\u0161tavanjem i vizuelizacijom). Postoji vi\u0161e na\u010dina da taj problem u\u00a0R re\u0161ite, ali u svakom slu\u010daju raditi sa jednim R procesom po aplikaciji donosi bitna ograni\u010denja. Shiny Server Pro \u0107e ukinuti ovo ograni\u010denje, ali za ne mali iznos godi\u0161nje licence koji \u0107ete morati da platite RStudio da biste ga koristili. Tre\u0107e re\u0161enje je hostovanje Shiny aplikacija u cloud-u na <a href=\"http:\/\/www.shinyapps.io\/\" target=\"_blank\" rel=\"noopener\">shinyapps.io<\/a>, koje \u0107e vas re\u0161iti i mnogih administrativnih poslova, ali koje tako\u0111e ne sti\u017ee besplatno &#8211; i opet ne ukida sva ograni\u010denja u okviru standardno ponu\u0111enih paketa usluga.\u00a0Procena je da \u0107ete sa Open verzijom Shiny Server naj\u010de\u0161\u0107e tra\u017eiti klijente koji zahtevaju elegantan interfejs ka analitici ali nemaju potrebe za velikim brojem konkurentnih korisnika. To nije malo tr\u017ei\u0161te. Ipak, ideja da kroz Shiny razvijate web-aplikaciju namenjenu \u0161irokoj publici, samo na osnovu podr\u0161ke Open verzije servera, nije dobra.<\/p>\n<p>Shiny je ambiciozan i mlad R projekat, tako da je rano davati sudove o tome \u0161ta nosi budu\u0107nost za njega i kakvu \u0107e poziciju u R zajednici i na tr\u017ei\u0161tu izboriti za sebe. \u010cinjenica je da jednom kada savladate rad u njemu po\u010dinjete R da gledate drugim o\u010dima. Shiny \u0107e u\u010diniti da svu podr\u0161ku za vizuelizaciju podataka, kojom se R odlikuje u izobilju, lako i brzo integri\u0161ete sa elegantnim responzivnim dizajnom. Finalni proizvodi, uverio sam se, mogu da izgledaju doslovce fascinantno (pogledajte tek neke od jednostavnijih primera <a href=\"http:\/\/shiny.rstudio.com\/gallery\/\" target=\"_blank\" rel=\"noopener\">ovde<\/a>). Cena ni za \u0161ta tako dobro, po pravilu, nije niska.<\/p>\n<p>Na kraju, ne \u017eelim da propustim priliku da se zahvalim Data Science zajednici Srbije, a posebno Branku i Milo\u0161u ovog puta, za to \u0161to su mi pru\u017eili priliku da popularizujem R pred na\u0161om publikom i dobijem sijaset interesantnih, korisnih, i konstruktivnih pitanja 21. marta u Startitu. Hvala svima koji su uzeli u\u010de\u0161\u0107a!<\/p>\n<!--themify_builder_content-->\n<div id=\"themify_builder_content-812\" data-postid=\"812\" class=\"themify_builder_content themify_builder_content-812 themify_builder tf_clear\">\n    <\/div>\n<!--\/themify_builder_content-->","protected":false},"excerpt":{"rendered":"<p>Dr Goran S. Milovanovi\u0107, Data Scientist, DiploFoundation www.exactness.net Programski jezik R polako ali sigurno postaje lingua franca savremene Data Science. Do pre samo nekoliko godina vi\u0111en kao ekstravagancija sa tek odre\u0111enom ulogom u akademskim krugovima matemati\u010dke i primenjene statistike, jaka zajednica u razvoju jezgra\u00a0samog\u00a0jezika i ogromnog broja R paketa uspela je da ga pozicionira na [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[25],"tags":[],"_links":{"self":[{"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/posts\/812"}],"collection":[{"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/comments?post=812"}],"version-history":[{"count":0,"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/posts\/812\/revisions"}],"wp:attachment":[{"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/media?parent=812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/categories?post=812"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/imuno-srbija.com\/data-science\/en\/wp-json\/wp\/v2\/tags?post=812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}