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 01:22 | Zajímavý článek

Julia Evans pomocí svých kreslených obrázků proniká do Linuxu a informačních technologií. Vedle ucelených zinů publikuje také jednotlivé kreslené obrázky (RSS).

Ladislav Hagara | Komentářů: 0
včera 13:22 | Zajímavý software

Jordi Sanfeliu vydal verzi 1.0.0 svého unixového jádra Fiwix (Wikipedie) určeného také pro výuku operačních systémů. Dle článku na OSNews na něm začal pracovat již před více než dvaceti lety. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT. Stáhnout a vyzkoušet lze živou disketu nebo CD s GNU/Fiwixem.

Ladislav Hagara | Komentářů: 2
včera 06:00 | Nová verze

Byla vydána nová verze 10.7 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu. Vývojáři GitLabu zdůrazňují Web IDE (YouTube) a SAST (Static Application Security Testing) pro Go a C/C++.

Ladislav Hagara | Komentářů: 0
22.4. 14:00 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, zveřejnil na svém blogu recenzi notebooku Librem 13 od společnosti Purism. Používá jej již sedm měsíců a s ním i jako umělec spokojen. Potřebu francouzské AZERTY klávesnice vyřešil přelepkami. Na displej se podíval kalibrační sondou, barvy vyladil pomocí open source softwaru DisplayCAL, v aplikaci Inkscape nastavil zvětšování na 170 % aby 1 cm v Inkscapu byl 1 cm v reálu. Webovou kameru, mikrofon, Wi-Fi a Bluetooth lze na Librem 13 hardwarově vypnout.

Ladislav Hagara | Komentářů: 7
21.4. 23:44 | Komunita

Několik posledních verzí GNOME Shellu obsahuje chybu způsobující memory leak (únik paměti). Viz například videozáznamy verzí 3.26 nebo 3.28. Nalezení chyby #64 a její opravě se věnuje Georges Basile Stavracas Neto v příspěvku na svém blogu [reddit].

Ladislav Hagara | Komentářů: 0
21.4. 10:33 | Komunita

V pondělí měl na YouTube online premiéru otevřený krátký 2D film Hero vytvořený v 3D softwaru Blender. Cílem stejnojmenného projektu Hero je vylepšit nástroj Grease Pencil (tužka) v Blenderu 2.8.

Ladislav Hagara | Komentářů: 4
20.4. 23:22 | Nová verze

Byla vydána verze 4.0 kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Přehled novinek v Changelogu (GitHub).

Ladislav Hagara | Komentářů: 0
20.4. 17:22 | Komunita

Včera vydanou hru Rise of the Tomb Raider pro Linux lze do pondělí 23. dubna koupit na Steamu s 67% slevou. Místo 49,99 € za 16,49 €.

Ladislav Hagara | Komentářů: 0
20.4. 16:11 | Komunita

Na Humble Bundle lze získat počítačovou hru Satellite Reign (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 5
20.4. 15:44 | Zajímavý software

Společnost Apple koupila před třemi lety společnost FoundationDB vyvíjející stejnojmenný NoSQL databázový systém FoundationDB (Wikipedie). Včera byl tento systém uvolněn jako open source pod licencí Apache 2.0. Zdrojové kódy jsou k dispozici na GitHubu.

Ladislav Hagara | Komentářů: 0
Používáte na serverech port knocking?
 (2%)
 (7%)
 (46%)
 (27%)
 (17%)
Celkem 362 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    Rozcestník

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

    22.1. | Redakce | Reklama | 4706×

    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.