{"action":"created","issue":{"url":"https://api.github.com/repos/benabraham/listecky/issues/31","repository_url":"https://api.github.com/repos/benabraham/listecky","labels_url":"https://api.github.com/repos/benabraham/listecky/issues/31/labels{/name}","comments_url":"https://api.github.com/repos/benabraham/listecky/issues/31/comments","events_url":"https://api.github.com/repos/benabraham/listecky/issues/31/events","html_url":"https://github.com/benabraham/listecky/issues/31","id":297972098,"number":31,"title":"Refaktoring RFC","user":{"login":"iBobik","id":614232,"avatar_url":"https://avatars2.githubusercontent.com/u/614232?v=4","gravatar_id":"","url":"https://api.github.com/users/iBobik","html_url":"https://github.com/iBobik","followers_url":"https://api.github.com/users/iBobik/followers","following_url":"https://api.github.com/users/iBobik/following{/other_user}","gists_url":"https://api.github.com/users/iBobik/gists{/gist_id}","starred_url":"https://api.github.com/users/iBobik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iBobik/subscriptions","organizations_url":"https://api.github.com/users/iBobik/orgs","repos_url":"https://api.github.com/users/iBobik/repos","events_url":"https://api.github.com/users/iBobik/events{/privacy}","received_events_url":"https://api.github.com/users/iBobik/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":10,"created_at":"2018-02-17T02:44:47Z","updated_at":"2018-02-19T15:19:41Z","closed_at":null,"author_association":"NONE","body":"# Motivace / pain\r\n\r\n- chybějící persistence konfigurace termínu (obtížný rozvoj, chystání předem)\r\n- úprava stolů vyžaduje vlastní deploy #17\r\n- úkoly jsou uloženy v repozitáři aplikace → obtížná údržba \r\n\r\n# Řešení\r\n\r\n- Použít framework, který (ideálně out of box) řeší persistenci datových struktur včetně jejich real-time synchronizace mezi klienty (Meteor?)\r\n- úkoly načítat z repozitáře zadaného u termínu (typicky ten se slajdy v Reveal)\r\n  - možná rovnou ze slajdů (speciální sekce v md slajdu s úkolem), protože by se to parádně udržovalo \r\n- konečně to mít na dobře zapamatovatelné adrese (třeba listecky.czechitas.cz), takže nepotřebujeme zkracovače\r\n\r\n## Routy \r\n\r\n- `/add-term` a `/%tid/config`: Přidání a editace termínu. Obsahuje formulář s:\r\n  - `tid` libovolný slug, který pak bude v URL, slouží zároveň jako heslo pro účastnice k přístupu do termínu. Ideálně něco krátkého, ale rozumně bezpečného. Oproti jiným způsobům zabezpečení je škálovatelné podle míry rizika - dnes není problém, ale až se adresa aplikace proflákne a objeví se spam, tak prostě budeme vymýšlet delší a méně předvídatelný string.\r\n  - `date` datum kurzu\r\n  - `tasks-repo` repozitář kde hledat zadání úkolů \r\n- `/%tid/config/layout`: Konfigurace stolů. Možnost vybrat z šablon (soubory v adresáři), po vybrání se ukládá k termínu. Editor JSONu se zvýrazňováním syntaxe, chyb a live náhledem stolů. Současný formát i jeho renderování vyhovuje.\r\n- `/%tid`: Landing page pro účastnice. Vybere své místo, což je jen odkaz na následující.\r\n- `/%tid/%pid`: Hlavní stránka pro účastnice. Nastaví své jméno, zadává svůj stav, přijímá zadání úkolů.\r\n- `/%tid/coach`: Mapa se zobrazením stavů, poslední zadání úkolů.\r\n- `/%tid/teacher`: Obrácená mapa se stavy a ovládání.\r\n- `/`: Odkaz na aktuálně probíhající termíny (dnešní datum)"},"comment":{"url":"https://api.github.com/repos/benabraham/listecky/issues/comments/366723510","html_url":"https://github.com/benabraham/listecky/issues/31#issuecomment-366723510","issue_url":"https://api.github.com/repos/benabraham/listecky/issues/31","id":366723510,"user":{"login":"iBobik","id":614232,"avatar_url":"https://avatars2.githubusercontent.com/u/614232?v=4","gravatar_id":"","url":"https://api.github.com/users/iBobik","html_url":"https://github.com/iBobik","followers_url":"https://api.github.com/users/iBobik/followers","following_url":"https://api.github.com/users/iBobik/following{/other_user}","gists_url":"https://api.github.com/users/iBobik/gists{/gist_id}","starred_url":"https://api.github.com/users/iBobik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iBobik/subscriptions","organizations_url":"https://api.github.com/users/iBobik/orgs","repos_url":"https://api.github.com/users/iBobik/repos","events_url":"https://api.github.com/users/iBobik/events{/privacy}","received_events_url":"https://api.github.com/users/iBobik/received_events","type":"User","site_admin":false},"created_at":"2018-02-19T15:19:41Z","updated_at":"2018-02-19T15:19:41Z","author_association":"NONE","body":"Aha, už rozumím.\n\nJestli to řešít přes websockety nebo longpooling je nakonec celkem jedno, protože na to určitě budeme chtít použít nějakou knihovnu, která se napojí na MVC, protože nejlepší kód je ten, který nenapíšeme.\n\nService workery bych vzal až úplně na konec, protože to ohledně offline nic nepřinese - i dnes musí tu aplikaci poprvé otevřít a pak už to nechat v tabu. Benefit jsou notifikace pro kouče při neaktvní stránce a to stejně zatím jen pro Android.\n\n\nHonza Pobořil\nhttps://honza.poboril.cz\n\n\n\n\n> 19. 2. 2018 v 14:59, Jan Vlnas <notifications@github.com>:\n> \n> @iBobik <https://github.com/ibobik> Pardon, trochu jsem pomotal co mám na mysli. Vidím tu dva modely jak pojmout komunikaci mezi serverem a klienty:\n> \n> Klasický server-klient, server má kanonický stav, klient si stahuje stav ze serveru přes HTTP nebo WebSockets (dále).\n> P2P s použitím GUN nebo jiného řešení, stav je distribuovaný mezi klienty, server funguje jako klient, řeší perzistenci stavu, příp. peer discovery. Komunikace přes websockets (WebRTC transport je WIP <https://github.com/gundb/gun-rtc>). GUN je realtime.\n> V prvním případě lze komunikaci řešit přes websockets nebo přes HTTP. V případě HTTP lze použít tradiční polling a/nebo Server-Sent Events pro HTTP/2 (máš pravdu že server push slouží k něčemu jinému). SSE si trochu lépe rozumí s firewally protože udržuje obyčejné HTTP spojení a má smysl pro read-only komunikaci ze serveru, což je případ téhle aplikace (změna stavu účastnice, tj. \"Mám hotovo\", \"Potřebuju pomoc\" může být separátní request). U websocketů je zase snažší kontrolovat stav připojení klientů, nicméně je to nízkoúrovňový protokol a většina knihoven reimplementuje logiku kterou má HTTP out-of-box. Fail je, že Edge SSE stále nepodporuje, ale existují polyfilly.\n> \n> Service worker v základu pro offline caching assetů, většina build nástrojů to pořeší. Šel by využít i pro push notifikace, to může být šikovné zejména pro kouče.\n> \n> Zdroje k SSE:\n> \n> https://www.html5rocks.com/en/tutorials/eventsource/basics/ <https://www.html5rocks.com/en/tutorials/eventsource/basics/>\n> https://www.smashingmagazine.com/2018/02/sse-websockets-data-flow-http2/ <https://www.smashingmagazine.com/2018/02/sse-websockets-data-flow-http2/>\n> + argument proti WS <https://samsaffron.com/archive/2015/12/29/websockets-caution-required> (2015)\n> —\n> You are receiving this because you were mentioned.\n> Reply to this email directly, view it on GitHub <https://github.com/benabraham/listecky/issues/31#issuecomment-366700987>, or mute the thread <https://github.com/notifications/unsubscribe-auth/AAlfWKDmaFLLGr4MguFHM1ThkC2LzoAoks5tWX5dgaJpZM4SJKH1>.\n> \n\n"}}
{"actor":{"display_login":"iBobik"}}