abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 14:44 | Nová verze

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 14.0 (Mastodon). Forgejo je fork Gitei.

    Ladislav Hagara | Komentářů: 2
    dnes 13:11 | Zajímavý projekt

    Just the Browser je projekt, 'který vám pomůže v internetovém prohlížeči deaktivovat funkce umělé inteligence, telemetrii, sponzorovaný obsah, integraci produktů a další nepříjemnosti' (repozitář na GitHubu). Využívá k tomu skrytá nastavení ve webových prohlížečích, určená původně pro firmy a organizace ('enterprise policies'). Pod linuxem je skriptem pro automatickou úpravu nastavení prozatím podporován pouze prohlížeč Firefox.

    NUKE GAZA! 🎆 | Komentářů: 2
    včera 16:44 | Nová verze

    Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.18. Díky 174 přispěvatelům.

    Ladislav Hagara | Komentářů: 2
    včera 15:11 | IT novinky

    Miliardy korun na digitalizaci služeb státu nestačily. Stát do ní v letech 2020 až 2024 vložil víc než 50 miliard korun, ale původní cíl se nepodařilo splnit. Od loňského února měly být služby státu plně digitalizované a občané měli mít právo komunikovat se státem digitálně. Do tohoto data se povedlo plně digitalizovat 18 procent agendových služeb státu. Dnes to uvedl Nejvyšší kontrolní úřad (NKÚ) v souhrnné zprávě o stavu digitalizace v Česku. Zpráva vychází z výsledků víc než 50 kontrol, které NKÚ v posledních pěti letech v tomto oboru uskutečnil.

    Ladislav Hagara | Komentářů: 12
    včera 13:55 | IT novinky

    Nadace Wikimedia, která je provozovatelem internetové encyklopedie Wikipedia, oznámila u příležitosti 25. výročí vzniku encyklopedie nové licenční dohody s firmami vyvíjejícími umělou inteligenci (AI). Mezi partnery encyklopedie tak nově patří Microsoft, Amazon a Meta Platforms, ale také start-up Perplexity a francouzská společnost Mistral AI. Wikimedia má podobnou dohodu od roku 2022 také se společností Google ze skupiny

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 02:22 | Nová verze

    D7VK byl vydán ve verzi 1.2. Jedná se o fork DXVK implementující překlad volání Direct3D 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.

    Ladislav Hagara | Komentářů: 0
    včera 02:00 | Nová verze

    Byla vydána verze 12.0.0 knihovny libvirt (Wikipedie) zastřešující různé virtualizační technologie a vytvářející jednotné rozhraní pro správu virtuálních strojů. Současně byl ve verzi 12.0.0 vydán související modul pro Python libvirt-python. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    15.1. 19:22 | Humor

    CreepyLink.com je nový zkracovač URL adres, 'díky kterému budou vaše odkazy vypadat tak podezřele, jak je to jen možné'. Například odkaz na abclinuxu.cz tento zkracovač převádí do podoby 'https://netflix.web-safe.link/logger_8oIlgs_free_money.php'. Dle prohlášení autora je CreepyLink alternativou ke zkracovači ShadyURL (repozitář na githubu), který dnes již bohužel není v provozu.

    NUKE GAZA! 🎆 | Komentářů: 3
    15.1. 12:33 | IT novinky

    Na blogu Raspberry Pi byla představena rozšiřující deska Raspberry Pi AI HAT+ 2 s akcelerátorem Hailo-10 a 8 GB RAM. Na rozdíl od předchozí Raspberry Pi AI HAT+ podporuje generativní AI. Cena desky je 130 dolarů.

    Ladislav Hagara | Komentářů: 3
    15.1. 12:11 | Komunita

    Wikipedie slaví 25. výročí svého založení. Vznikla 15. ledna 2001 jako doplňkový projekt k dnes již neexistující encyklopedii Nupedia. Doména wikipedia.org byla zaregistrována 12. ledna 2001. Zítra proběhne v Praze Večer svobodné kultury, který pořádá spolek Wikimedia ČR.

    Ladislav Hagara | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (5%)
     (0%)
     (9%)
     (20%)
     (3%)
     (6%)
     (3%)
     (11%)
     (42%)
    Celkem 473 hlasů
     Komentářů: 12, poslední 14.1. 21:12
    Rozcestník

    Jednoduchý linuxový server pro chytrou domácnost v Delphi 10.2 Tokyo

    22. 1. 2018 | Redakce | Reklama | 6272×

    Od základní motivace po naprogramování systému chytré domácnosti na Linuxu s využitím vývojového nástroje Delphi 10.2 Tokyo – zásuvky, světla, mediální centrum s TV. Klienty s Windows 10 i Androidem, pohání to Linux s MySQL na Raspberry Pi, ani to moc nežere… Prostě IoT pro domácnost.

    Delší dobu jsem si pohrával s myšlenkou proměnit svoji domácnost v tzv. chytrou. Jako vývojář jsem nechtěl sáhnout po komerčním řešení, ale navrhnout si svoje vlastní, které bude jednak vyhovovat mým potřebám a zároveň nezruinuje rodinný rozpočet.

    Na projektu jsem začal pracovat v polovině roku 2016, jeho dokončení předpokládám do tří let. Takže pořád jde o relativně ranou fázi.

    Představení systému chytré domácnosti

    Systém je založený na otevřených platformách Arduino a Raspberry Pi. V současnosti ho tvoří devět zásuvek RF (tři odlišné typy), čtyři spínače vnitřního osvětlení (Livolo), dvě desky Arduino Uno s ethernetovým rozšířením a naprogramovaným RF vysílačem ovládajícím zásuvky, dvě zařízení Raspberry Pi 3 s nainstalovaným mediálním centrem Kodi (OpenELEC) a připojená ke dvěma TV, jeden server NAS sloužící jako úložiště multimediálních souborů a konečně hlavní server Raspberry Pi 3 s linuxovým prostředím Raspbian, který celý systém ovládá.

    Interakce se systémem probíhá pomocí klientů. Hlavní klient běží na stroji s Windows 10 s dotykovou obrazovkou, další klienti běží na zařízeních s Androidem (mobilní telefon, tablet).

    Systém v této chvíli umí ovládat zařízení napojené na zásuvky RF. Je možné nastavovat jejich spínání v čase. Dále je možné spouštění multimediálních souborů na připojených TV, vytváření alarmů, připomínek a událostí ve formě zvukové či obrazové. Systém si dělá statistiku o spouštěných multimediálních souborech, z toho je pak schopný nabídnout např. oblíbenou hudbu atd.

    Software použitý k ovládání

    Ovladače zásuvek jsou napsané v jazyku Wiring (Arduino: jak pro něj začít programovat), určeném pro platformu Arduino. Na obou zařízeních běží jednoduchý HTTP server. Zařízení se pak ovládá pomocí protokolu HTTP jednoduše zavoláním jeho IP adresy a příkazem na zapnutí/vypnutí zásuvky.

    Delphi 10.2 Tokyo

    Na multimediálních Raspberry Pi 3 běží linuxový systém Openelec s mediálním centrem Kodi (bývalé XBMC). K zařízení se přistupuje opět protokolem http. Kodi má skvěle implementované API, pomocí kterého lze zařízení plně ovládat příkazy JSON, viz. http://kodi.wiki/view/JSON-RPC_API/v6.

    Delphi 10.2 Tokyo

    Klient pro MS Windows je psaný v Delphi 10.2 Tokyo. Je to aplikace VCL. Klient pro zařízení s Androidem je psaný v Delphi 10.2 Tokyo FireMonkey. Vzhledem k tomu, že není příjemné udržovat dva různé klienty (VCL a FireMonkey), uvažuji o nahrazení klienta VCL právě tím univerzálním pro FireMonkey, zbývá však doladit responzivní návrh. Výhoda univerzálního klienta do budoucna spočívá v platformní nezávislosti a možnosti použití i na zařízeních s iOS (i když v této chvíli takové nevlastním).

    Nejdůležitějším prvkem je hlavní server. Preferoval jsem malé, relativně výkonné zařízení, které by mohlo běžet 24/7 a neodebíralo půl bloku jaderné elektrárny. Padlo proto rozhodnutí na Raspberry Pi s Linuxem. Server používá databázi MySQL pro možnost zápisu a čtení uživatelem definovaných událostí.

    Ovládací software je složen ze tří částí:

    1. Speciální XMPP klient, kterým lze ovládat zařízení zvenku (mimo domácí LAN). Napsaný je v Lazarusu 1.6. Po přijetí zprávy od autorizovaného uživatele pošle tuto tzv. AIML botovi (Program-O napsaný v PHP, běžící lokálně na hlavním serveru). Ten přetransformuje lidský příkaz do patřičné podoby v JSON, kterou zpracuje hlavní jádro serveru a odpoví.
    2. Scheduler – aplikace, která každou minutu kontroluje v databázi MySQL, nemá-li být v daném čase spuštěná nějaká událost (např. sepnutí zásuvky, přehrání alarmu atd.). Aplikace je napsána v Lazarusu 1.6.
    3. Jádro serveru napsané v PHP. To reaguje na příkazy ve formátu JSON voláním příslušných PHP skriptů. Server provede požadovaný příkaz a zašle zpět odpověď (JSON).

    Delphi 10.2 Tokyo

    Převod existujícího řešení do Delphi 10.2

    S možností otestovat nové Delphi 10.2 s podporou Linuxu mě napadlo, že zkusím portovat svůj server z Lazarusu a PHP na Delphi. Mít server napsaný v jediném prostředí by bylo příjemné. Mohl bych v nejedné situaci přímo využít již dříve napsané části kódu z jiných projektů. Bude-li toto řešení funkční, pouvažuji o výměně stávajícího Raspberry Pi 3 s procesorem ARM za něco jiného, například mini PC od Intelu, běžící na x84-64, protože kompilátor Delphi 10.2 pro Linux je zatím jen pro platformu x84-64. Zatím tedy budu testovat ve virtuálním stroji.

    Instalace Delphi 10.2 proběhla naprosto bez problémů, dokonce jsem měl pocit, že o něco rychleji, než kdysi 10.1, což potěší. Následovala instalace virtuálního linuxového stroje. Jako návod mi výborně posloužil blog na embarcadero.com.

    Jako linuxovou distribuci jsem si vybral Ubuntu Server 16.04.2 LTS.

    Instalace na mém stroji (AMD FX8300, 8 GB RAM, SSD) proběhla za několik málo minut. Následovala instalace PAServeru dle návodu. Po otevření Delphi jsem si zvolil novou konzolovou aplikaci, napsal tradiční „Hello world“, přidal platformu 64bitový Linux, zkompiloval a nasadil. Vše proběhlo podle očekávání, aplikace se skutečně ve virtuálním stroji rozběhla a v konzoli pozdravila svět. Za to Embarcaderu veliká pochvala. Žádné velké komplikace, křížová kompilace funguje tak, jak má. Pro vývojáře zvyklé na kompilaci projektů FMX (FireMonkey) pro mobilní platformy to bude věc, na kterou jsou zvyklí. Kompilace pro Linux je pohodlná a rychlá.

    Nastal tedy čas na přepsaní existujících tří částí serveru. Prvotní myšlenku sloučit tři aplikace do jedné samostatné jsem brzy zavrhl, zůstanu u stávajícího řešení tří částí – Scheduler, XMPP klient a jádro.

    Nejjednodušší je Scheduler. V Lazarusu je to jednoformulářová (GUI) aplikace obsahující komponentu TTimer, která s periodou 60 sekund pošle dotaz na výskyt nějaké události pro danou minutu do databáze MySQL. V případě, že dotaz vrátí záznam(y), zabalí je do formátu JSON a pomocí http send je zašle jádru v PHP. Akce zaslání a odpovědi jádra se zalogují do Mema. Aplikace též jednou denně aktualizuje denní seznam událostí v databázi. Například o víkendu se pouští jiné události než v pracovní dny.

    Při přepisu do Delphi je zásadní rozdíl v tom, že nepůjde o grafickou aplikaci, ale konzolovou. Trochu mi to připomnělo roky dávno minulé, kdy jsem psával aplikace pro DOS. Člověk si však rychle zvykne. V Delphi jsem zvolil konzolovou aplikaci, která při inicializaci vytvoří DataModul, celá další funkčnost se pak už odehrává v něm. Pohodlné bylo vytvoření načtení souboru ini pro nastavení aplikace (dala se použít ta samá jednotka, kterou čte soubor ini klientská aplikace ve Windows). Malý zádrhel nastal při snaze použít komponentu TTimer. Ta pro konzoli není, nevložíte ji ani jako komponentu do DataModulu. Řešení bylo v přidání nekonečné smyčky se sleepem. Aplikace se dotáže, pak na minutu usne, a pak zase dotaz…

    Pro připojení k databázím jsem zvyklý používat komponenty třetích stran (ve firmách v ČR velice oblíbené komponenty od Devartu, v Lazarusu jsem použil komponenty ZEOS. Nic z toho v současné době pod Delphi 10.2 zatím podporováno není, tak byl čas vyzkoušet nativní FireDAC. S komponentami se pracuje velice podobně, jako se zmiňovanými komponentami třetích stran. Vytvořil jsem konexi pomocí TFDconnection, přidal TFGPhysMySQLDriverLink a pak už jednotlivé TFDQuery. Překvapilo mně, že to hned nefungovalo a dožadovalo se to ještě stažení libmysql.dll ve Windows a příslušné knihovny .so v Linuxu.

    Řešení pro Windows je vidět zde.

    Pro Ubuntu Linux bylo potřebné doinstalovat vývojové balíčky MySQL:

    sudo apt-get install libmysqlclient-dev

    Po tomto kroku už vše chodí tak, jak má. Aplikaci s příslušným souborem ini jsem nasadil do virtuálního stroje, běží podle očekávání.

    Druhá aplikace v pořadí na přepis byl XMPP klient. V Lazarusu je to opět jednoformulářová aplikace, která se přihlásí k vybranému XMPP (Jabber) serveru (je potřeba mít vytvořené konto na některém z veřejně přístupných Jabber serverů, viz např. Jabbim. Přepisování jsem začal podobně, jako u Scheduleru. Konzolová aplikace, DataModul, načtení souboru ini … pak přišla část s implementací Jabber/XMPP.

    Delphi 10.2 Tokyo

    A zde narazila kosa na kámen. V Lazarusu jsem použil řešení využívající nějakou starší verzi knihovny Synapse. Plus další jednotky, které implementovaly XMPP a byly postavené nad touto verzí Synapse. Vím i o snaze Ing. Radka Červinky o aktualizaci Synapse pro Linux (SynapseTCP), nepovedlo se mi to však celé s unitami pro XMPP rozchodit, bude to potřeba přepsat. Netroufnu si odhadnout, jak dlouho mi to zabere. Možná někdo přijde s implementací dřív. I když pravdou je, že se od protokolu XMPP upouští (například konec Google Talk apod.). Zatím tedy tato část serveru zůstává v Lazarusu. Tady je nutno podotknout, že řešení pomocí XMPP je pro budoucnost nevhodné, jelikož závisí na funkčnosti serveru třetích stran. Ideální by bylo použít nějaké vlastní řešení, jenže to asi bude chtít veřejnou IP adresu.

    Delphi 10.2 Tokyo

    Třetí částí je serverové jádro. Implementováno je v PHP. Na serveru je nakonfigurovaná služba Apache2 s podporou PHP a MySQL. Toto by po implementaci v Delphi mělo odpadnout. Aplikace samotná bude běžícím webovým serverem.

    Tady musím říct, že jsem si podpory pro Linux užil nejvíc a implementace proběhla velice hladce. Z menu Delphi se vybrala možnost New Web Server Application, zaškrtla se možnost pro Linux, vybralo se Stand-alone console application, vybral se port a základ nejjednoduššího web serveru je hotov. Žádné nastavování navíc, po nasazení (Deploy) na Linux bylo možné hned po spuštění otestovat v prohlížeči. Implementace vlastností webového serveru tak, aby se choval stejně, jak ten na původním Raspberry Pi, už byla jen otázkou několika hodin běžné práce s Delphi. Žádné složitosti, ani překvapení nenastala. Hlavní obsluha serveru se odehrává v DataModulu, který reaguje na příchozí požadavek HTTP. Skutečně velkou výhodou bylo, že jsem mohl použít téměř všechny nevizuální komponenty pro komunikaci se zařízeními chytré domácnosti, které jsem měl už napsané například pro klienty z VCL nebo FireMonkey (u jedné komponenty jsem měl použitý TTimer, tak to bylo nutné vyhodit a vymyslet jiné řešení, ale nic zásadního). Takže tady Embarcaderu dík, člověk v podstatě nepozná, že píše server pro Linux a ne pro Windows.

    Dojmy a shrnutí

    Embarcadero připravilo zajímavou možnost, jak efektivně vyvíjet aplikace pro Linux pro delphisty. Je velmi příjemné mít možnost vyvíjet ve svém oblíbeném RAD Studiu. Není nutné vyvíjet přímo v prostředí Linuxu, podobně, jak není nutné vyvíjet aplikace pro mobilní zařízení přímo na těchto zařízeních. Pro vývojáře mobilních aplikací to bude vstup do známých vod, kde v podstatě jen přepnou cíl kompilace. Všechno to zní hezky, ale má to v současné době několik velkých „ALE“:

    Jen ve verzi enterprise

    Asi největší problém je v přístupu k linuxovému kompilátoru až ve verzi Enterprise. Chápu, že Embarcadero cílí na velké firmy, které potřebují ušetřit na celkových nákladech se správou serverů a použití linuxových serverů namísto Windows vyjde v součtu levněji. Problém je, že i pro firmy (v ČR to platí dvojnásob) jsou edice Enterprise edice drahé. Setkávám se běžně s preferencí edicí Delphi Professional i ve velkých firmách.

    Jen pro x86-64

    Linux je dnes nejrozšířenějším OS. Nemám samozřejmě na mysli stolní počítače, ale spoustu zařízení od drobných, jako routery, TV, multimediální centra, servery NAS, až po výkonné firemní servery. Většina z nich je založená na různých linuxových distribucích a klonech. Zaměření jen na firemní servery a firemní klientelu je z hlediska Embarcadera krátkozraké. Dále je tu rozvíjející se segment zařízení IoT. Určitě by bylo žádoucí vyvinout i kompilátor pro architekturu ARM.

    Jen příkazová řádka

    Kompilace jen pro příkazovou řádku. Tady je trochu těžké říct, je-li to výhoda, nebo nevýhoda. Linuxové servery většinou grafické uživatelské rozhraní nepotřebují. Uživatelsky přívětivé nastavení lze udělat přes webové rozhraní. Zkušení uživatelé si jistě vystačí s příkazovou řádkou. Na druhou stranu, představa FireMonkey pro Linux by byla hezká. Nejspíš takhle neuvažuji jen já a existuje již projekt FmxLinux. Tím by se možnosti vývoje pro Linux dostaly na úplně jinou úroveň. Bude někdy FireMonkey for Linux standardní součástí Delphi? Zůstávám optimistou, všichni pamatujeme, jaký kus cesty ušla podpora pro vývoj mobilních aplikací od uvedení po dnešek.

    Myšlenka podpory Linuxu pro Delphi je skvělá. Vyhovující je i koncept psaní kódu na běžném stolním počítači s Windows v prostředí RAD studia a jeho následný build na linuxový stroj. Vývojáři mobilních aplikací jsou na to zvyklí a pracuje se jim tímto stylem pohodlně. Není nutno vytvářet nativní RAD studio pro Linux. Nakonec v minulosti taková snaha již existovala (Kylix) a neujala se.

    Aby se však vývoj v Delphi pro Linux stal plnohodnotnou, ne exotickou možností, bude muset Embarcadero zapracovat v první řadě na licenční politice. Edice Enterprise jsou drahé i pro leckteré firmy. Aby došlo k rozšíření, bude muset probublat ideálně až k jednotlivcům. Nejspíš ve formě rozšiřujícího balíčku k nižším verzím Delphi. Stejně jako je to dnes u mobilního balíčku už k verzi Professional. Ruku v ruce jde pak i rozšíření podpory pro architekturu ARM a přidání podpory GUI. Delphi jsou oblíbené nejen u některých velkých firem, ale hlavně mezi menšími nezávislými vývojáři. V blízké budoucnosti dojde k rozkvětu nových startupů zabývajících se například IoT. Věřím, že pro Embarcadero by rozšíření Delphi s podporou Linuxu mezi tyto nadějné subjekty mohlo být ekonomicky zajímavé.

    Můj článek je poděkováním neúnavnému propagátorovi Delphi Pawlovi Glowackému, který již bohužel není mezi námi.

    Autor Štefan Dušík, narozen 18. 2. 1979 v Košicích. Od roku 1997 žije v Praze. Vystudoval MFF UK (2002 Mgr., 2010 Ph.D.), obor Fyzika plazmatu a ionizovaných prostředí. Od roku 2003 aktivně programuje v prostředí Delphi. Má dlouholeté zkušenosti s databázemi Oracle, MSSQL a jinými. Pracoval jako programátor v prostředí velkých českých bankovních institucí, podílel se na vývoji informačního systému pro některé české univerzity, v současnosti pracuje jako vývojář mobilních aplikací ve firmě Asseco Solutions. Ve volném čase se věnuje železničnímu modelářství, zpěvu a rekreačnímu sportu.

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.