POSLEDNÍ ČÁST REALIZACE DATABÁZOVÉHO SYSTÉMU VE FIRMĚ:
V měsíci září (2006) se stále ještě pracuje. Kamarád mi už konečně začal dělat na nových stránkách, které slíbil před 2 měsíci, tak jsem zvědavý, zda je stihne do 14 dnů, kdy je termín. Dokončil jsem program na automatické kalkulace a ač nekreslí zrovna efektní náhledy, světe div se, co se týče odhadu ceny za dané logo, dost se trefuje (i když, jak kdy). Ono se to navíc dá jednoduše doladit koeficienty poté, co se to pořádně otestuje. Toto není primární projekt, jen jsem si na něm alespoň vypilovat programování pro Windows (můj první projekt) a jednotky, které se pak použijí pro databázový systém.
Opět nám přestala fungovat jedna z kamer (ta, co byla připojená na 8 metrovém USB). Myslel jsem, že by mohlo jít o chybu v ovladačích, tak jsem je zkusil překompilovat. Ale problém! MODPROBE nechtěl modul zavést, protože měl prý nesprávný formát. Naštěstí jsem měl KO soubor zálohovaný na DVD, tak jsem ho přepsal zpět. Zkoušel jsem i restart, protože mi totiž pak nešla ani jedna kamera. Po restartu začala fungovat ta v kanceláři, ale ta na dílně ne. Přitom se obě hlásily stejně. Zkusil jsem kameru připojit na kratší kabely a začala fungovat. Tak sláva. Ale po menší manipulaci zase přestala. Tak jsme hledali, kde je problém. Po krátkém testu s kabely jsme zjistili, že prostřední segment (nyní poslední) u prodlužovačky je nějaký divný a pokud se zkroutí/narovná, kamera sice příkazy dostane, ale data už nepošle. Takže se na to bude muset dávat pozor. Kamera v nové pozici navíc funguje ještě lépe než předtím :-). Ale stále jsme nevyřešili problém. Později se zdálo, že je kamera schopná udělat jen 2 snímky za sebou a pak musí mít asi tak 1 minutu pauzu. Nebo jestli to závisí na Linuxu (SW chyba)? Každopádně tato metoda šla cca. po 8 snímcích do kytek, neboť pak kamera neposkytovala snímek ani po delší pauze. Pak se vedle ní zapnul stroj a ona zase začala produkovat alespoň 1 snímek za minutu. Tedy, pochybuji, že ten stroj na to má nějaký vliv. Pak jsem ale zkoušel típat z kamery obrázky 1x za určitou dobu, a naposílala jich dost a ani jednou se nezasekla. Tak, snad jí to vydrží. Tohle je jeden z důvodů, proč je Linux pro obyčejné uživatele, kteří nemají "za zadkem" někoho, kdo tomu rozumí, absolutně k ničemu (možná tak na práci s Internetem, používáním Office a síť - běda, jak by chtěli něco víc).
Další na řadě je databázový systém. Na jednotkách pro něj se pracovalo neustále, včetně síťových, takže jsem předpokládal, že by mohl fungovat. Napsal jsem si testovací server (1kB zdroják) a klienta (2 kB) a světe div se, po pár úpravách, které zabraly všudy všeho asi 1 kB zdrojáku (ze 74 kB) byl klient schopen se připojit k serveru, zalogovat se pod jménem a heslem, pak poslat příkaz k ukončení, načež ho server odpojil (nejprve mu to sdělil) a pak se sám odpojit od serveru. Více méně pomocí příkazů totiž bude fungovat i zbytek ostatních operací. Alespoň, že se něco povedlo, když se všechno ostatní kazí (jestli se Vám ještě nepovedlo spadnout s autem do příkopu a pak do pole, tak jste přišli o hodně - kam se na Felicii hrabe terénní auto). Takže teď budu muset začít dělat na grafickém GUI klientovi (textový server může zatím zůstat). K tomu se budou hodit jednotky z automatického kalkulátoru. Díky fóru FP jsem také na serveru konečně nastavil non-blocking packety, takže zjišťování, zda packet přišel, pokud nepřišel, nezastaví systém do doby, než opravdu přijde. Co se týče klienta, nějaké řešení jsem také díky jisté osobě našel, ale ještě jsem neměl čas ho vyzkoušet.
Kromě SW řešení se také musí dělat HW. Systém docházky přes karty byl kvůli ceně (30.000 Kč) definitivně zamítnut (proč bych měl kupovat nějaký terminál za 15.000 a software pro docházku za dalších 11.000? Naše řešení bylo levné, ale nenašli jsme nikoho, kdo by nám udělal levně karty), takže se to bude řešit onou klávesnicí. Protože ale moc nerozumím součástkám a v té firmě je mají dost blbě popsané, zkusil jsem napsat kamarádovi ze školy. Pokud se neozve, budu si muset poradit nějak sám (např. přes tu danou firmu - otázka je, zda budou ochotni něco hledat, když si objednáme od všeho 1, max. 2 kusy). Samotné řešení přes klávesnici a DEC/BCD kodér (omylem jsem v původním schématu počítal s multiplexorem, což je samozřejmě blbost), ale nenašel jsem snímače pohybu, které by produkovaly 5V, takže by tam musely být i nějaká trafa, děliče napětí, případně tranzistory. Seznam součástek můžete najít např. na:
http://en.wikipedia.org/wiki/List_of_7400_series_integrated_circuits
a zakoupit si je poté můžete třeba u http://www.gme.cz/. I když, pokud ty čidla mají oddělené napájení od spínacího kontaktu, je možné do nich pustit 5V a ony to buď pustí dál nebo ne. Tím by odpadla jedna věc. A co se týče převodníku, ten by se v nejhorším případě dal realizovat i pomocí ORů (min. čtyři 8 vstupé). Více součástek by pak už nebylo potřeba. Výše zmíněné součástky jsou TTL, takže by se měly dát připojit na paralelní port bez problémů. Naneštěstí je paralelní port dost citlivý, tak ho snad neodpálím (předpokládám, že snad více než 10 mA ta pasivní klávesnice a diody brát nebudou). Na webu FP jsem si našel návod, jak s LPT portem pracovat pod Linuxem:
http://wiki.lazarus.freepascal.org/index.php/Hardware_Access
Jednoduše poté, co povolíte přístup (musíte být ale jako Root - např. pomocí bitu), můžete používat PORT jednotku. Další řešení je využívat Read a Write přes zařízení v /dev. Škoda, že na sériový port jednotka je, ale na paralelní ještě ne. Ale snad existuje nějaké řešení, jak v Linuxu nejen číst data z paralelního portu, ale i stav příslušného zařízení (bitů). Zdá se ale, že by mělo stačit použít jen jednotku x86, protože v ní jsou všechny potřebné funkce (a snad ani není potřeba volat externí knihovnu). Prý je to pro starší Linuxy, ale snad to bude pod Rootem fungovat.
Také proběhla další reinstalace software. Takže teď ve firmě jede pár Linuxů, tři Windows 98 kvůli uzavřenému softwaru (Corel nevyjímaje), Corel Draw a jedny Windows XP. Všude běží Firefox a Open Office. Alespoň takhle se mi podařilo snížit náklady. A nebýt toho blbého Corel Drawu, pro který neexistuje ani blbý prohlížeč (stačil by převodník do BMP), tak by tady stačil jen jeden Windows 98. Dokud nebude vhodná náhrada, těžko se může Linux rozšířit do firem, které jakkoliv potřebují získávat od zákazníků grafické podklady (protože ti je ve 40% případů posílají právě v Corelu - a nejen, že člověka štvou zasíláním obrázků v PDF (což je ještě pochopitelné), ale najdou se i takoví exoti, kteří JPEG obrázek (jasně, že čím více rozmazanější, tím "lépe") vloží do Corelu, nebo nedejbože ještě do Wordu! Génius na druhou je pak někdo, kdo uloží do jednoho rohu PCX obrázku logo, do druhého jeho popis, přičemž pak vznikne geniálně prázdná plocha o rozlišení 15.000 pixelů na druhou, kterou nenahraje ani počítač s 384 MB RAM - naštěstí máme i lepší. Genialita takovýchto lidí se dá ještě rozšířit tím, že pošlou logo ke zpracování vyfocené za nějakém předmětu (nejlépe kulatém, který logo co nejvíce zdeformuje), kdy předmět je velký 5000 pixelů a samotné logo plné nápisů v Times New Roman asi tak 128 bodů, s kterýmžto se samozřejmě nedá vůbec pracovat! A dokonalost na závěr: takovýchto lidí se samozřejmě vždy velmi dotkne, pokud je upozorníte na to, že je to v nejlepším případě plýtvání zdroji). Objevila se nemilá neschopnost Windows 98 mít nainstalovaných více než 850 fontů. Dokonce, i když je smažete o 30, stejně nemůžete doinstalovat ani jeden. Windows XP měly sice "kecy", ale nainstalovaly všechny (cca. 1700).
Olda začal dělat na stránkách pro firmu (sice pozdě, ale přeci), registrovali jsme si CZ doménu za 100 Kč + 599 Kč/rok. Zjistil jsem, že pro formuláře a interaktivní menu či katalog budu potřebovat PHP. Protože na serveru zatím nepracovalo, budu ho muset rozchodit. Přečetl jsem si o tom ABCLinuxu, a provedl následující příkazy:
apt-get install php4
apt-get install libapache-mod-php4
Zeditoval jsem soubor /etc/apache/httpd.conf, kam jsem dopsal následující řádky:
AddType application/x-httpd-php .php
AddHandler php-script php
AddType text/html php
Ale po provedení příkazu /etc/init.d/apache restart mi stále jakýkoliv pokus o načtení skriptu ze serveru skončí s tím, že se ho prohlížeč snaží stáhnout jako nějaký soubor. Napsal jsem do fóra a opět zapomněl přiložit LOGy :-). Zatím si nikdo neví rady. Ale to byly teprve první dvě hodiny.
Tak, dobrá věc se podařila. Nejprve si zkontrolujte, zda máte v /etc/php4/apache soubor php.ini (nebo někde podobně). Po stažení PHP4 by se Vám měl v /etc/apache/conf.d vytvořit soubor php4.conf. Ten by měl vypadat nějak takto:
Obrazky\PHP4.CONF
V samotném httpd.conf souboru se upravovat nic nemusí. Vlastně ani nesmí. Těch pár řádků, co jsem tam ručně přidal, jsem na radu opět zakomentoval, restartoval Apache jedničku a už to funguje tak, jak má. Zvláštní :-)
A když se daří, tak se daří. Podle dobré rady jsem dokázal, aby packety i pod Windows byly non-blocking, takže teď už se program při zjišťování, zda nějaké přišly, nezastavuje. Hurá, sláva. Měl jsem také potíže se svým Win32 klientem na jednom počítači s Windows 98 (čistá instalace). Fungoval všude jinde (doma, Win98), u mě v práci na Win98, na Windows XP, na dalším Win98, jen tady ne. Tak jsem usoudil, že je chyba asi v HW. Vzal jsem z domu starou S3 Savage, vložil do PCI, Windows si sám našel ovladače, po 2 restartech (ještě monitor) to naběhlo OK. Ale program ne. Sice už nehlásil neplatnou operaci, jako před tím, tentokrát se nestalo nic. Tak jsem zkusil nastavit Velká písma (na tomto počítači si totiž Windows smysluplně odinstalovaly systémové fonty - sice mám plnou zálohu, ale zatím to tak nechám, vypadá to dobře). A najednou program fungoval. Hurá, sláva podruhé. Prostě, VIA neumí dělat grafické karty (ta S3 nabízí dokonce i vyšší rozlišení!).
Stejně, jak se ten systém rozrůstá, přemýšlím, zda ho mám dát k dispozici ostatním i se zdrojáky a když už, tak jestli pro firmy zdarma nebo za poplatek. Sice to není nic extra, ale jak se mi pochlubil kolega, něco podobného by také potřeboval řešit. Po delší době mne také napadlo vyzkoušet, jestli ten můj program, co komunikuje se záložním zdrojem, vůbec dokáže počítač vypnout. A jak jsem zjistil, program fungoval špatně. Tak jsem ho přepsal. Sice ho už není možné automaticky stopnout (např. při obnovení proudu), ale alespoň je schopen počítač vypnout (a málokdy se stane, že proud vypnou na 30 minut a pak ho zapnou jako naschvál za 1 minutu, kdy už bude počítač vypnutý - navíc má nařízeno se před každou ranní směnou sám zapnout). Bohužel, přidání do Spustit po startu v X ho zřejmě nespustilo. No, to nevadí, tak si ho, když budu potřebovat, spustím v konzoli přes "/usr/bin/upstat &" (vlastně tu cestu ani psát nemusím) nebo bez toho & na popředí (a aby mi ten terminál nepřekážel, přesunu ho na jinou plochu). Jak tento program, tak i můj server, mají na systém zdá se minimální vliv, co se týče zátěže. Protože jsem zjistil, že násilné zavření klienta přes CTRL+ALT+DELETE má za následek, že "spadne" i server zpět do konzole, napsal jsem si skript pro jeho neustálý restart (s 10 vteřinovou pauzou na začátku při použití jistého přepínače kvůli příkazu BIND, který občas hlásí při rychlém opakování chybu). Trochu jsem si také upravil firewall, aby mi fungoval freeware klient ICQ bez reklam na určitém portu (dá se v něm nastavit).
A aby těch šťastných událostí nebylo příliš, začal jsem dělat na zabudování kamerového systému do serveru. Počítač udělal cca. 3 snímky po 10 minutách u kamery A a cca. 5 snímků u kamery B. Při 6. snímku u B se počítač TOTÁLNĚ zaseknul. Nešla ani myš, konzole, nic. Pomohl jen tvrdý reset. Jak jsem zjistil, kamera má zřejmě špatný kabel (to se ještě řeší, proč ve skladu funguje, a jinde ne), ale prostě jakmile ona neudělá snímek a program ji shodí přes KillThread, tak hned jak naběhne druhá kamera, tak získá snímek a tím to hasne. Graber se už ani nestihne ukončit, prostě celý Linux zatuhne! S tou kamerou se to nějak vyřeší (po výměně kabelu už funguje, zatím), a kdyby snad zase někdy výjimečně ne, systém už nebude nic z kamer získávat a správci se pošle zpráva, aby s tím něco udělal (i když si myslím, že by stačilo prosté restartování serveru, tj. programu, což by zvládl udělat i automaticky tím, že by se prostě ukončil). Ale co, pár snímků mám, tak ještě dodělat server, aby je posílal a klienta, aby s nimi dokázal pracovat.
Napsal jsem si také krátké skripty, které po startu nastartují DB server a program UPSTAT. Přidal jsem je do /etc/init.d a do /etc/rc2.d (což je standardní runlevel, jak jsem si v /etc/inittab našel) jsem na ně udělal symbolické odkazy pod S99*** přes CTRL+SHIFT. Skripty jsou jednoduché, na prvním řádku je #! /bin/sh a na dalším už jen příkaz se spuštění buď serveru nebo obsluhy UPS s & na konci, aby se to spustilo na pozadí. Ale problém je v tom, že když to zkouším v konzoli, tak jsou oba programy jakoby pozastavené (nejde se připojit). Společně s tím se vynořila také další chyba: nevím proč, ale FileSize na Linuxu mi soubory větší než určitý počet bytů (1kB?) vrací zarovnané na 512 bytů dolů a dokonce mi ani BlocRead neumožní přečíst ty zbylé byty. Nicméně už přišla první rada a to spouštět program jako "nohup program &", což zajistí, že program bude Spát a nebude Pozastaven. Sice by to mělo ignorovat signály HUP, ale když zavřu terminál, ze kterého jsem to spustil, tak to sestřelí i ten program. Nicméně to snad při startu OS nebude vadit. A už se vyřešil i ten problém se zarovnáváním. Dostal jsem odpověď, že to prý není normální, a ať pošlu nějaký ten kód. A jak jsem se snažil postupně stvořit nějaký reprezentativní mini výřez, tak mi došlo, že FileSize vrací hodnotu správně. Tak jsem se schválně podíval, kde je chyba a ta byla v tom, že funkce na kopírování používala velikost záznamu 512 bytů a protože BlockRead nečte částečné záznamy, právě tady vznikalo to blbé zaokrouhlování. Pane bože, taková začátečnická chyba!!
Co se týče našeho webu, Olda se opět začal vykecávat, že prý má zkoušky, a cosi kdesi, a tak se ani nedivím, že našemu vedení došla trpělivost a zadali si WWW jinde. Uvidíme, jak to dopadne. Mezitím nám zprovoznili naši doménu u COL. Nějak jsem nepochopil to nastavování, ale zjistil jsem, že za 600 kč / rok máme i DNS. Po dotazu mne odkázali na jejich techniky, kterým jsem po e-mailu zadal číslo faktury, heslo, naši IP adresu a prosbu o změnu DNS záznamu. Nevím, kdy to zprovoznili (čekal jsem na mail, který nepřišel), ale cca. po 3 hodinách od prosby to už 100% fungovalo. Já jsem si zatím vyprosil, aby se technická záležitost docházkového systému přesunula na někoho, kdo rozumí mikroelektronice. Když budu mít štěstí, sestaví nám dotyčný (jestli se vůbec někdo najde) systém na bázi mikropočítače, se kterým se už dokáži domluvit i přes sériový port.
Tak, mám vyzkoušeno, že se oba programy opravdu po restartu spustí na pozadí. Jen se u AMTDBS (skript AMTSERV) nesmí zapomenout nejprve přejít do aktuálního adresáře, pokud ho skript vyžaduje, aby neběhal skript v nekonečné smyčce (100% zatížení CPU) ve snaze spustit něco, co neexistuje. Protože jsem zjistil, že po restartu serveru nefunguje webový server a vůbec přístup zvenčí, ačkoliv IPTABLES používá to své RESTORE (ale ostatní služby fungují, včetně Internetu, atd.), tak jsem raději celý příkaz pro nastavení IPTABLES přidal do inicializačního skriptu před AMT server (po startu počítače).
A aby té legrace nebylo málo, tak jsem zjistil 2 závady: a) 2. kamera, ač nyní používá sekvenční režim, stejně občas prostě snímky nepošle (ale proč jen ona?). To má za následek pozastavení celého systému kamer (ostatní systémy naštěstí jedou dál). Ale pokud se server ukončí, aniž by se zrušilo toto vlákno, tak potom hlásí chybu příkaz BIND (???) a je nutné restartovat celý počítač (no.. později jsem přišel na něco lepšího). Asi se budu muset naučit to vlákno zrušit tak, že mu nějak pošlu CTRL+C (#3), na které čeká, aniž bych tím zrušil server (ostatně, KillThread měl za následek, že další spuštění stejného vlákna skončilo tvrdým zaseknutím). b) server je sice při startu počítače spuštěn (jako root), dokonce tam je i vidět (System Monitor), ale nepřijímá klienty!
No, tak jsem zkoušel udělat restart a najednou bod B funguje. Alespoň něco. A kamery se za dnešek seknuly jen jednou. Co se týče BIND, zjistil jsem, že to, co vypadalo jako chyba, bylo jen hlášení, že už není znovu BIND potřeba. A pro ukončení serveru jsem tam dal klávesu ESC, takže by mě to mělo trknout. Také jsem si už ověřil, že funguje i posílání zpráv. A mám už i ověřené, že web server funguje nyní i po restartu. Hurá, alespoň něco. Ale neustále si pletu v GetDate pořadí parametrů (den
Obrazky\rok), takže mi server o půlnoci smazal záznamy za minulé tři dny, naštěstí to byl zatím jen demo provoz... Ale také mám další objev. Pokud zůstane snímač kamery viset (normálně by se dal shodit přes CTRL+C), tak pokud ukončím program (který při ukončování jeho vlákno zabije), tak tam stejně bude stále viset jako samostatná aplikace (System Monitor). Pokud ho neshodím ručně, tak nejde ani spustit server (BIND hlásí nějakou chybu jedna). Toho by se možná dalo využít ve skriptu, který má za úkol server znovu spouštět. Kdyby se za něj dal příkaz KILLALL s parametrem SPCACAT, tak by to snad pomohlo. Pak by se mohl server i sám o půlnoci restartovat, když by nebyl nikdo připojen a KILLALL by zařídil zbytek (snad to pomůže proti tomu záseku). Uvidíme, co to provede. Pak jsem také přemýšlel, jak by se dal server AMT restartovat, aniž bych ho musel zabíjet. Řešení by se možná našlo v démonech, ale pro mne snazší řešení je prostě vytvořit v adresáři s programem soubor RESTART a program se každou minutu prostě pokusí daný soubor najít. Pokud najde, tak se ukončí a zbytek už zařídí sám skript. Uvidíme, uvidíme. Jinak je zajímavé, že můj program údajně spotřebovává 10 MB, ale když ho spustím při startu, tak za 12 hodin běhu tam měl už 210 MB!
Teď jsem také zjistil, že pokud neběží server pod rootem (což při startu vlastně ano), tak ač já jako normální uživatel mohu zobrazit snímky, které si root z kamery uložil, tak sám server je nemůže načíst. Jde vlastně o to, že je otevírá Reset s režimem i pro zápis, což je chyba (měl by se nastavit nejprve na 0). Ale zatím to tak moc nevadí, tak to nechám být. Navíc, pod rootem běžel server celou noc a kamery fungovaly. Dneska za den, co běžel server 2x, tak kamery pod obyčejným uživatelem 2x selhaly. Že by to byl ten zapeklitý problém? ... teď jsem to zase nechal jet přes noc jako root a všechno fungovalo. Do serveru jsem také konečně přidal možnost logování, kdy se do souboru (jméno jako datum) zapisuje všechno (kromě výpisů SPCACAT) co na terminál (popř. do NOHUP souboru), ale ještě s časovou značkou. Zjistil jsem, že jsem měl někde v programu chybu a nevynuloval IOResult, takže od chvíle, kdy jsem server výjimečně při testování spustil přes skript, tak mi smazal nastavení kamer a kalendáře (to první jsem naštěstí měl zálohované). Chybu jsem opravil. Nastavit kalendář je celkem jednoduché. Dal jsem do hlavního cyklu klienta Delay(1), aby dal také více času ostatním Windows aplikacím. Ale zjistil jsem, že mi najednou přestalo fungovat nastavování kalendáře na straně klienta (klikání na políčka). Chyběly tam vnější závorky. Asi jsem je v zápalu optimalizace odstranil, pak to nevyzkoušel a nevšiml si faktu: (X+(Y)) div Z. To jsou fakt problémy pro ZŠ, sakra!
Dále se začal řešit systém docházky a alarmu. Před pár dny jsem napsal firmě Saitech, která dodává terminály a software, že bych měl zájem o terminál bez SW (Logic 210), pokud používá nějaký otevřený protokol. Bohužel mi zatím nic nenapsali, tak jsem se šel shánět dál. Napsal jsem do obchodu ohledně infračerveného detektoru pohybu, kolik voltů posílá na výstupu. Napadlo mne totiž celý systém opravdu definitivně řešit pomocí mikropočítače (cena i s programátorem je 1150 Kč, mikropočítač je to 8 bitový PIC16F627 - na webu jsem si našel dokumentaci; sice bych se musel z Atmelu hodně přeučovat, ale když k tomu dodávají i SW s příklady, není co řešit), který by s PC a databází komunikoval po sériovém portu (po startu by si vyžádal nastavení a pak by posílal každou změnu). K tomu fóliová klávesnice (250 Kč). Jedno čidlo pohybu pak stojí 650 Kč. Minule jsem to sháněl na http://www.gme.cz/, teď pro změnu (s lepším výsledkem - tady totiž nabízejí i ty hotové součástky) na http://www.elektroraj.cz/index.asp?floor=15&shop=76. Co se týče SW (klient), tak už umí i posílat zprávy (prakticky, server umí kromě materiálů, nití a umístění úplně všechno - snad - jen s tím klient zatím neumí pracovat (tj. GUI a informace od/pro uživatele). Ke kamerám jsem také chtěl koupit Infračervený reflektor pro snímání v noci, ale jak jsem zjistil, Trustky jsou CMOS a toto podporuje jen CCD. Zda by to fungovalo i na CMOS nevím, ale zkoušet to za 600 Kč raději nebudu. Prodavač mi už napsal a doporučil mi jiné čidlo, o 1 Kč levnější, které funguje jako relé, takže do něj klidně mohu pustit 5 V z mikropočítače a ty zase dostanu v případě sepnutí zpátky. Takže jsem to objednal a celkově to vyjde na 2800 Kč včetně poštovného (ovšem 1000 Kč z toho tvoří programátor mikropočítače!).
Teď jsem se dva dny trochu flákal, nicméně jsem dokázal alespoň připravit vyhledávací formuláře pro Výrobu a Zakázky a také pár nových položek. Ale to přeci nemá cenu sem rozepisovat. Důležité je, že se dneska i kamery zasekly na root právech. Tedy, po 2 restartech, kdy si teprve program všiml, že tam kamera visí moc dlouho (měl jsem špatný interval) a sám ji shodil po 20 minutách, už zase naběhly. Ale dobré je, že se díky tomu KILLALL už nezasekává počítač, a pokud se už 1x týdně ty kamery zaseknou, tak by je automatický restart o půlnoci měl snad dát zase dohromady. Přišel e-mail, že ty součástky přijdou asi za 14 dnů, takže na to mám ještě trochu času.
Neustále si pletu pořadí parametrů v GetDate, čímž se mi úplně zbytečně posílaly packety pro udržování spojení. Také kamery se moc nepovedly. Přes víkend systém selhal, ale nerestartoval se, protože jsem to měl špatně umístěné. Teď jsem to opravil, ale zase to hlásí výjimku někde při ukládání zprávy pro admina. Snad jsem ji už našel. Jednalo se prostě o adresování mimo rozsah. Opět trapná chyba. Kamera dneska celý den odmítala chodit i pod rootem, aby se pak po cca. 5 hodinách sama nahodila. No, nechápu to, ale co čekat od kamerového systému v hodnotě 400 Kč. Ale dneska jsem se ve dvě odpoledne nějak pustil do programování a skončil v šest. Problém je, že už ani nevím, co jsem vlastně do toho serveru napsal. A opravovat to dneska raději případně nebudu. Už mi z toho hrabe. Asi bych se měl začít léčit... ale to víte, práce člověka musí bavit (zvlášť, když to nedělá zadarmo a má ještě co jíst). Dneska jsem také zabudoval do programu dlouho potřebnou funkci, která zajistí, že si klient nebude znovu žádat o ta data, která už má (seznamy, aktuální fotka, obsah aktuální zakázky, atd.), čímž se serveru trochu ulehčí.
Jinak jsem dneska konečně dokončil na serveru všechny příkazy, takže prakticky už teď server umí opravdu všechno (ještě jsem přidal pro admina možnost dálkového okamžitého restartu přímo z klienta). Jen potřebuje dodělat modul pro alarm, aby jeho hodnoty měl kdo využívat, a modul pro docházku, aby mu měl kdo generovat příchody a odchody. Naproti tomu klient vázne (tak je to vždycky s něčím, co používá grafiku). Ale také už dorazil ten programátor a alarmy (ani ne do týdne). Ovšem čekalo mne nemilé překvapení. Celá deska je opravdu stavebnice, takže si ji budu muset dát dohromady sám pomocí pájky. Naštěstí je k tomu návod pro blbce. Snad to zvládnu. Dodává se k tomu také CD, na kterém je hromada programů snad ke všemu, co daná firma vyrábí. Ale po chvíli hledání jsem našel i ten prokletý manuál (K8048_VM111 Pic programmer). Je tady 28 MB velký instalátor a 8 MB dokumentace v PDF (to je ovšem jen elektronická podoba té tištěné). Po rozbalení (WinZIP) se tu objevila spousta příkladů, 30 MB PDF dokumentace (jedná se o technické manuály ke všem podporovaným mikropočítačům), ale jen dva malé programy: jeden kompiluje ASM do HEX, a druhý posílá HEX do PIC přes sériový port. Žádné vývojové prostředí. To jsem si ale našel na těchto adresách:
http://ww1.microchip.com/downloads/en/DeviceDoc/MP742.zip
http://ww1.microchip.com/downloads/en/DeviceDoc/MP742_comp_setup.exe
http://ww1.microchip.com/downloads/en/DeviceDoc/Readme_mp742.zip
Na adrese:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1408
potom najdete hodně příkladů, jak programovat 18Cxxx sérii mikropočítačů. Celkově ta legrace bez příkladů zabrala něco málo pod 200 MB. A teď to bude chtít restart. Naučit se pracovat s tím IDE alespoň do úrovně, že nahrajete ASM, zkompilujete ho a odsimulujete ho, včetně nalezení pár věcí pro upload do EEPROM, Vám zabere maximálně tak hodinu. Předpokládám, že to s tím snad nějak půjde. Ale nejprve musím dodělat SW ve FP pro Win32/Linux, pak budu mít teprve čas to nejprve spájet (asi si budu muset hodně upravit trafopájku nějakým lepším hrotem, abych to byl vůbec schopen dát dohromady) a pak pro to napsat software v ASM. Jinak co se týče té desky, piny jednotlivých patic pro "šváby" jsou podle schématu na straně portů mikropočítače dobře propojeny, takže bych měl být schopen využít přinejmenším asi 8+5 pinů pro připojení klávesnice, alarmu, atd.
Tak, ten kamerový systém nechápu. Dneska mi server v 8:30 poslal zprávu, že selhal kamerový systém. OK, tak ho vypnul a jel dál bez něho. Jenže, ačkoliv měl Killnout daný thread, ten samý den (bez restartu serveru) v 13:50 ten samý thread sám od sebe dokončil 3 snímky, které neposlal a sám se ukončil. Něco mi říká, že ten software SPCACAT je pěkný šmejd nebo je cosi shnilého v Linuxu. Dnes jsem alespoň přidal možnost, aby se restart při selhání kamerového systému dal vykonat nejen před půlnocí, ale také v 5, 12 a 17 hodin. Mimochodem nechápu, proč program občas své volně skočí do jiné sekce nebo mi server posílá každou zprávu (kromě doručenky) 2x (ale ne hned za sebou, což je ta záhada). Nový tvůrce stránek si zadal požadavek, abychom mu video AVI převedli do GIFu (neotevře ho), náhledy také (má drahou hodinovou taxu) a náš katalog vytvořený ve Writeru (DOC) do Calcu (XLS) - že to nejde přes pouhé CTRL+C/V nebo Export/Import, a tedy se to musí udělat znovu, není snad třeba zmiňovat. Nechápu proč.
No, tak v mém programu jsem rozšířil počet souborů v seznamu z 256 na 4096 (přeci jen, ten FP to unese v pohodě a v době 200 GB mít jen byte, to by byl trapas). U jednoho z našich počítačů z ničeho nic mezi 2 krátkými vypnutími odešel TP síťový kabel a při té příležitosti s sebou vzal i síťovou kartu na desce! Nový kabel přišel (14 m) na 401 Kč, síťovku máme rezervní z nějakého Celeronu 300 MHz. Horší bylo, když druhý den jeden z počítačů s Windows 98 odmítnul připojit sdílené prostředky toho Windows XP. Neviděl ho ani při vyhledávání. Jinak na Internet, e-mail a do jiných počítačů samozřejmě normálně mohl. Jiné počítače k němu (včetně Windows XP) také. Druhý počítač ale mohl. Tak jsem si s XP trochu pohrál a od té doby už do XP nemohl nikdo :-). Jinak XP mohly kamkoliv (ale hrozně dlouho jim trvá, než zobrazí sdílené prostředky - to ale dělaly i předtím, zatímco Windows 98 tam byl okamžitě). PING ale funguje i nadále. Asi něco se sdílením, ale co? No, po obědě přijde technik z vedlejší počítačové firmy, tak se snad něčemu přiučím (beztak to bude jen nějaká přehlédnutá blbost). Tak jsem si zatím alespoň pročetl 200+200 tipů na správu Windows XP a trochu si je urychlil. Technik přišel, řešili jsme, řešili, ale nic nevyřešili. Zjistilo se, že k XP se dokáže připojit v pohodě jedině Linux. Windows 98 to dokázal, pokud se zadal počítač UCTO pomocí IP adresy (pak to šlo i přes jeho název, ale jen do restartu). Po jeho odchodu jsem tedy na jeho rady zkusil vyndat síťovku, provést bod obnovení, znovu ji nainstalovat, dát ji jinou adresu, atd. Ale nic z toho nepomohlo. Nakonec jsem zkusil ještě odebrat a znovu přidat Sdílení souborů. Poté, co jsem zase dal složky ke sdílení, už to chodilo normálně. I po restartu počítačů s Windows. Také už konečně šlo tisknout. No, hurá. Fuj, systém! ... Ne, druhý den už to zase nešlo! Sakra práce! No nic, tak jsem si vytvořil zástupce pro IP adresu toho počítače a dal si ji do Po spuštění, čímž by se mělo obnovit spojení na daném symbolickém jméně (zajímavé je, že Windows při připojování jednotky při startu nehlásí chybu a to i když jednotku očividně nepřipojí - ale stále je tak nastavená). Tedy, abych byl konkrétní, tentokrát ten počítač, co poprvé nemohl, tak normálně může (byl spuštěn až poté, co jsem "připojil" toho prvního), ale ten druhý, co mohl, tak ne.
Dovolil jsem si k počítači do práce koupit tablet. Přeci jen se s ním vektorová grafika lépe zpracovává. Také jsem kromě funkce, která požaduje soubor ze serveru jen pokud je minimálně 1 minutu starý (u klienta) také funkci, která při zjišťování jmen uživatelů vytváří seznam a tedy, pokud se tam již uživatel nachází, nepožaduje ho znovu ze serveru (seznam se cyklicky přepisuje). Myslím, že zase není potřeba ulehčovat serveru v takových věcech, jako je např. hledání zakázek, neboť maximální počet klientů je stejně 8 současně, navíc tolik lidí u PC ve firmě ani není. Druhý problém ve funkci BLOCKxxx na Linuxu. Sice už to čte po bytech, ale zapisuje celé bloky o velikosti bufferu (ARRAY pole = 512 bytů). Zápis měl být jen tolik, co vrátí READ funkce (chyba byla, že se posílalo někdy více než mělo, zvláště při kopírování souborů, což zase není tak často). Opět jsem měl chybu při kopírování, tentokrát na straně klienta (opět BlockWrite dostával velikost bufferu, nikoliv výstup z BlockRead). Ach jo. A i kdyby člověka zabili, stejně si toho nevšimne :-). Nějak se opět zastavil vývoj WWW stránek, hm. Možná, že by na serveru (kvůli shození klienta) pomohlo, kdyby můj DBS program měl při práci se sockety kritickou sekci obalenou v TRY..EXCEPT, nebo takovém podobném bloku, ale zatím nepřepokládám, že by se někdo u nás ve firmě snažil takovou drastickou formou uzavírat program, když to jde i pomocí "X" (pokud tlačítko ODPOJIT nebo KONEC zůstanou viset), kdy server "nespadne", takže to zatím není potřeba řešit. Domů jsem si koupil nový 17" CRT monitor (menší neměli :-) a LCD je 1.5x dražší... prostě 15" odešla, jedna z mých 14" je rozmazaná, druhá zase neumí 800x600 a ty dva lepší jsou u jiných PC a nechci jim je brát) a paměť (+128 MB; ne, že bych to nutně potřeboval, ale třeba Windowsu a hlavně Linuxu těch 256 bude šmakovat víc).
Z ničeho nic nám přestaly fungovat minulý týden e-maily. Resp., my jsme mohli dostávat a také jsme mohli odesílat, ale ne nikomu, kdo byl z domény @tiscali (jako my). Komukoliv jinému ano (přes smtp.mybox.cz). Tak jsem napsal na bývalý Contactel a Tiscali. Ti druzí mi odpověděli, že u nich chyba není. No a asi za 3 hodiny to zase začalo fungovat. Ale nikdo mi zatím o tom nenapsal. Zvláštní... Stále pracuji na programu a už se blížím k dokončení realizace té části, pro kterou ještě nebudu muset komunikovat s mikropočítačem. Pokud to nebudu flákat, tak by to mohlo být do týdne (je polovina listopadu). Dneska jsem díky spolupracovnice z dílny zjistil, že nějaký vtipálek (snad to bylo omylem při "uklízení") rozpojil kabel vedoucí ke kameře, takže asi 4 dny nedodala nic. Program to naštěstí ustál bez ztráty kytičky (po zapojení začala hned fungovat). Tak, rozhodl jsem se, že ten projekt se zdrojovými kódy zveřejním. Ale v rámci bezpečnosti samozřejmě nebudu zveřejňovat IP adresy, porty (na kterých to pracuje), systém kódování hesla, ani 256 bytů velkou signaturu, kterou musí obsahovat příkazy pro prvotní přihlášení. Systém také uživatele odpojí a začne blokovat, pokud zadá špatný příkaz. Blokování trvá hodinu (i po zadání špatného hesla), takže útoky hádáním nebudou možné (už jen ta signatura má 256^256 kombinací :-D). Ale zase mne naštvalo něco jiného: koupil jsem si ke 2 SDRAM 133 modulům do PII novou RAMku (128 MB SDRAM 133 MHz) a ona nechodí. Ať už sama, či s jinými, počítač s ní prostě ani nenaběhne (ani monitor). Naštěstí se mi ji podařilo vyhandlovat s o trochu méně historickým kusem (800 MHz), který tuto novou paměť akceptoval, ale zároveň poskytl starší, kterou zkouslo i to mé Pentium II. Lepší starší modul, co chodí, než nový, co "nechodí" a musel by se vracet. Sice se BIOS teď startuje 2x pomaleji (?), ale např. přehrávač DVD reaguje na povely svižněji (a také se rychleji ukončuje). Začal jsem pájet tu desku. S obyčejnou trafo pájkou to moc dobře nepůjde. Ale naštěstí majitelka má prý mikropájku (doufám), tak mi ji půjčí. A také jsem vyřešil elegantní způsob zabezpečení přístupu do toho AMT systému. Jednoduše prostě povolím na daný port jen určité adresy, ostatní se zahodí. Ve firewallu Linuxu. Prosté a účinné.
Teď se mi jeden den stalo, že nešlo zapisovat na disk. Byl připojen jen pro čtení. V MTAB jsem zjistil, že se tak děje při chybě. Tak jsem to restartoval. Načítalo se to déle, zřejmě proběhl nějaký "scandisk", ale pak už bylo vše v pořádku. Ale určitě by to šlo i bez toho restartu.. Záznamy z jedné kamery mají při současném nastavení za 2 měsíce asi 100 MB obrázků typu JPEG (každý z nich má cca. 7 kB - jedná se o více než 10.000 souborů). Uvědomil jsem si, že mám v některých datových souborech, které se často přenášejí, zbytečně velké položky (např. String), tak jsem je zmenšil (String[24]), aby se to rychleji přenášelo (a stávající soubory jsem překonvertoval). Ono je rozdíl tahat několikrát po sobě 45 kB a 5 kB... a u dalšího souboru velikost položky 60 bytů namísto 520 (a šlo by i méně). Je stejně také zajímavé, že jsem změnil i názor na Linux vs. Windows. Ano, stále nejsem příznivcem Microsoftu a jeho politiky, nicméně po několika letech, kdy v tom pracuji, kdy jsem viděl pár přednášek, tak i přesto, že stále Windows považuji za více méně nestabilní systém (ovšem za ten považuji poslední dobou i Linux, pokud člověk nemá čas se v tom vrtat a chce to používat jen jako uživatel - ano, nepadá to, jen občas se zasekne Nautilus, ale ten se dá shodit, jednou to nešlo vypnout, občas zlobí kamery, ale jinak to funguje dobře, nicméně si umím představit tu hrůzu "typovače textů", když by se něco podobného vyskytlo jemu - na obranu Linuxu musím ale uznat, že pokud se něco takového vyskytne ve Windows (a mnohem častěji), výsledek by byl stejný - snad jen s tím rozdílem, že v Linuxu se jedná o opravu textového konfiguračního souboru, což je většinou i pro mne dnes už záležitost pár minut, zatímco ve Windows bych si s tím asi moc poradit neuměl - některé chyby, ač jsem je třeba po pár dnech vyřešil, nechápu dodnes proč a jak), tak už k němu nejsem takový ras. Popravdě, vadí mi spíše ta politika, že ač je Windows více méně stejně bezpečný jako Linux (hlavně má ale problém v tom, že 99% virů je pro Windows a tím pádem je alespoň v tomto Linux bezpečnější), Microsoft prezentuje svůj systém jako OS pro normální uživatele, jenže to je právě ta chyba. Když si nainstalujete Linux, tak v něm normální uživatel, který nemá páru o SUDO, prakticky ani nenainstaluje žádný program a tedy má skoro minimální šanci si ten systém rozvrtat. Jinými slovy: jsou tu zapnuté všelijaké ochrany, a když nevíte, jak je vypnout, budou tam stále. Naproti tomu Windows jsou řešené zcela opačně: jsou tam také mocné ochrany, ale když nevíte, jak je zapnout, tak Vám prostě budou na nic! Svědčí o tom i příhoda, kdy jsme na pracovní stanici v práci měli Windows XP s firewallem a antivirem s rezidentním štítem, na Internet se rozhodně nechodilo na warez a podobné stránky, a ony fungovaly (kromě tisku) celkem dobře. Po reinstalaci jsem ale v odloženém (už neaktivním) adresáři našel tři viry. Jak se tam dostaly? Zase ale musím pochválit Windows 98. Ty v práci už jedou pátý rok bez reinstalace. Je pravda, že občas nejdou vypnout, či hodí modrou obrazovku, ale to bych spíše sváděl na nenažraný software Tajima, díky kterému po chvíli (pár hodin) systém nevidí jiné než systémové fonty (kromě toho, že to občas spadne a výrobce se odvolává na to, že si máme pořídit Windows XP - tůdle). A doma? Jedny Windows mám chráněném Ghostem (bohovský program) a ty druhé vlastním opravovačem registru (sice každý druhé spuštění počítače znamená asi 30 vteřinová oprava, ale fungují takto bez reinstalace a bez pádů či modrých obrazovek asi 7-8 let). Nejsem příznivcem Microsoftu, ale začínám už uznávat některé jeho snahy.
Je konec roku 2006 a já vážně přemýšlím, jestli bych tu stavebnici programátoru nedal někomu ke spájení. Malinko jsem urychlil přenos souborů po síti, kdy jsem změnil Delay(100) na 1 v hlavní čekací smyčce (aby nebyl vytížen tolik CPU) v případě, kdy nějaký klient posílal data. Teď jsem si jako blbec uvědomil, že kdybych všem počítačům v síti dal pevné adresy, a na modemu nastavil RDR stejně jako teď, ale na některý lokální počítač v síti, nepotřeboval bych vůbec server. Ale to není taková výhra, protože pro systém kamer, docházky a hlavně zakázek (nemluvě o webovém serveru či o přístupu do AMT systému z venčí) by bylo potřeba, aby jeden z těch počítačů běžel neustále, takže bych si moc nepomohl. Urychlil jsem přenos souboru. Měl jsem na serveru smyčku, která při každém průchodu čekala 0.1 vteřiny. Důsledek toho ovšem byl, že se rychlost přenosu dat snížila na 10 kB oběma směry za sekundu. Takže teď, když nějaký klient přenáší soubor, je tam Delay(1), čímž se rychlost zvýší na propustnost sítě. Jakmile přestane stahovat, zase se tam vrátí původní zpoždění (aby si pro sebe nebral program všechen procesorový čas). A začínám zjišťovat, že se nějak moc rozepisuji o podrobnostech. Téměř jako to dělám u projektu Advent v informačních e-mailech. Asi budu muset trochu ubrat. Co jsem ale přidal, to je onen 128 MB modul (už tomu nějaký ten čas bude), ale jaký to mělo na Linux (Ubuntu 5.04) vliv! Panečku, jak teď jede o dost svižněji (kromě startu a Open Office 1). Deska byla předána ke spájení, tak snad bude brzy. Dneska mi také přestalo fungovat 2 roky staré CD! Ale naštěstí jsem většinu dat opravil. O tom bude ale jiný článek. Jinak docela zajímavé zjištění: na jednom disku mi bylo hlášeno 1.5 GB volného místa, ale programy tam nemohly zapisovat. Tak jsem udělal standardní ScanDisk a najednou už tam bylo jen 20 MB :-). Na druhém oddílu stejného disku to ovšem mělo úplně opačný následek (volné místo: 10 MB -> 8 GB). Kamery stále fungují s maximálně jedním hodinovým výpadkem týdně. Super.
Dnes jsem udělal velkou chybu. Nevšiml jsem si, že je v obou částech systému chyba při ukládání obrázků k náhledům, a uložil jsem do něj přes 150 položek. Pak jsem udělal blbost v tom, že aniž bych si ověřil, že je vše uloženo správně, tak jsem smazal pracovní data. Když jsem na to přišel (nepomohl ani Windowsovský UNDELETE), musel jsem to samozřejmě smazat, chyby opravit a začít to zadávat znovu (navíc jsem musel znovu vytvořit ta pracovní data). To člověka fakt naštve. Musí se na to dávat fakt pozor! Hlavně nikam nespěchat :-). Jinak můj formát AMT komprimuje 15 kB BMP z 8 bitů na 2-4 kB (někdy sice až 5, ale také i 1 kB!). To není špatné. Jedná se o obrázky 125x100 v 8 bitových barvách a neztrátovou kompresi. Ale také jsem si vylepšil sdílení, kdy konečně může mít jednu zakázku otevřeno více uživatelů současně, ale editovat ji může jen ten první (dosud to bylo tak, že když jeden otevřel zakázku, tak ji už nikdo neotevřel, ani pro čtení, navíc blokoval i všechny podzakázky, i když měl otevřenu jen jednu z nich). A nebylo to ani zase až tak těžké. U ADSL nám zvýšili limit dat na 12 GB (a opět zdarma). No co :-). Přidal jsem do SW možnost rychle vyhledávat v seznamech pomocí písmen. Kupodivu ani toto nebylo tak složité na přidání.
Po asi 10 měsících práce mám konečně hotového klienta. Všechno, co by měl umět, už umí (maximálně mě čeká ještě oprava chyb). Do serveru chybí ještě udělat komunikaci s mikropočítačem po sériovém portu (samozřejmě zpracování oněch dat) a napsat vůbec program pro ten mikropočítač (a až přijde spájený, tak postavit ještě okruh pro alarm a připojit klávesnici na docházku). Windows Commander si ze mě zase utahoval. Při změření velikosti adresáře hlásil 2.3 GB, a když jsem označil 9 z 10 souborů, měly 2.1 GB. Jakmile jsem ale přidal další 100 MB, už měly 4.2 GB :-). Zajímavé.. Tak, spájená deska dorazila i s kabelem. Ještě asi zneužiji služby a nechám si udělat multiplexor na klávesnici, neboť má 12 tlačítek a já mám u uP jen 4 volné piny (na kterých jsou tlačítka, která mě tedy nevadí) a dalších 6 (na kterých jsou diody). Další 2 jsou využity pro přenos dat do/z uP (PC komunikace po sériovém portu) a další 3-4 nejsou zapojeny vůbec (v programovací desce). Takže to budu řešit tak, že po těch 4 tlačítkových pošlu vždy výběrový signál, MUX mi vybere tlačítko a já přes diodu (kontrolka) přečtu hodnotu (samozřejmě se zpožděním, abych reagoval na zákmity tlačítka). Další diody budu využívat např. pro alarm (kontrola zapojení) nebo pro potvrzení příkazu, atd. 2 z nic budu ale muset využít na komunikaci s počítačem po sériové lince (a nějak si vymyslet obou směrný přenos, když mám jen dva dráty). Cestou domů jsem vymyslel i jakýs takýs protokol pro komunikaci po dvou drátech (sice bych si mohl najít I2C, ale tohle je moje). Dráty jsou D (data) a C (hodiny):
a) je linka volná? D=0? C=0? ANO? Pak B
b) chci vysílat: D:=1 C:=1 čekám nějakou dobu
c) je přijímač OK? D:=1 C:=0 čekám nějakou dobu
d) přišlo potvrzení? D=1 C=1? čtu nějakou dobu
e) čekám na volno: D=1 C=0? čtu nějakou dobu
f) vysílám...
Vysílání probíhá tak, že D se nastaví na určitý bit (1/0) a na C se změní hodnota (u prvního bitu na "1": to bude dělat vysílač po určité době v řádu desítek ms). Pošle se takto 16 bitů (8 bitů příkaz a 8 bitů data). Poslední bite za sebou logicky shodí C na "0" a obě strany se mohou vrátit k bodu A. Jinak, ta deska je Velleman-kit K8048'1 s uP typu PIC16F627-04/P. Jenom autoři vymysleli fakt chytrý kabel, takže aby vůbec šel zastrčit do sériového portu na desce, musíte dolní polovinu plastu upilovat (nebo tu desku). Díky mému systému a nákupu dalších programovacích SW (ale řádově o dost levnějších než ten stávající) se povedlo firmu převést v rámci programování z centralizované na decentralizovanou. Jinými slovy: pro opravu chyb či zadávání zakázky nemusí být ve firmě ani noha (kromě výroby), vše jde dělat z domova.
Jakýs takýs výzkumem jsem zjistil, že + má být na konektoru napájení uprostřed. Snad je to chráněné tou diodou. A bylo to správně. Problém je, že PC desku detekuje (přes základní program MAIDE si ani neškrtne, takže se hodí tak maximálně jako Debug), ale nejde do ní nic zapsat (prý se nevrací žádné ID). Nebudu nad tím laborovat, nechám to autorovi desky, ať to vyzkouší. Sériový kabel má dosah až 15 metrů (dle normy), takže by na propojení se serverem měl bohatě stačit. Co mě ale vadí, jsou logické úrovně až do 15 V, což by se PICu nelíbilo. Budu se muset podívat na paralelní. Tam je maximálně 5V, ale zase pro něj není dokumentace. Asi vyřešení tohoto problému nechám zase na třetí straně. Ze školy jsem už dlouho vypadl.. U jednoho našeho asi 6 měsíců starého PC v Praze nejde nabootovat. Buď odešel disk a nebo tam je virus. Až se mi to dostane pod ruku, určím, zda je moderní HW šunt, nebo je šunt legálně koupený Windows XP s antivirem (předpokládám, že 90% uživatelů o zabezpečení PC ví minimálně a tedy, pokud je OS šunt, z nich vlastně MS dělá vědomě šiřitele virů). Mezitím jsem také udělal čištění mého pracovního PC. Data, která jsou jen záložní nebo jsou pracovní (jednotky pro TP7 a FP sloužící jako příklady) jsem přesunul na disk D:, čímž se volné místo na disku C:, na kterém je snad všechno, co je důležité, zvýšilo z 18 GB na 49 GB. Hlavně ale Scandisk (málem jsem přišel o jeden :-) e-mail z prázdných (!) Konceptů, ale zkopíroval jsem data z DBX souboru do EML souboru a už načíst šel) netrvá 5 minut (tvrdé restarty jsou několikrát do týdne, hlavně, když jsem zase začal dělat na Adventure projektu. Člověk alespoň získává zkušenosti na "opravdové" projekty - ač to nerad přiznávám, AEditor a AEngine bude můj poslední DOSový výtvor vůbec). Byly to desetitisíce souborů! Dal jsem si požadavek, aby tvůrce předělal katalog zboží z HTML (o velikosti stovek kB) do PHP, které by vytvářelo HTML z TXT a obrázků na disku. Pokud to nebude umět, už jsem přišel na to, jak si to udělat sám ve Free Pascalu (ale zatím počkám).
Udělal jsem si na serveru zálohy (téměř) všech adresářů v Rootu (každý zvlášť) pomocí "TAR -CVVF ADR.TAR /ADR/". To pro případ, že bych musel někdy Linux reinstalovat (např. na nový počítač), tak aby stačilo jen to základní (BOOT) a ostatní bych zase mohl přepsat ze zálohy bez nastavování. Jsou toho pěkné 2.3 GB. Linux je myslím stejně už nastaven definitivně. Hlavně potřebujeme už 8 portový Switch, počítače a notebooky se nějak množí :-). A jen tak bokem. Jak to, že práce se zvukem 48 kHz je o 400% náročnější na CPU (i načtení souboru z disku) než 44 kHz? Díky programu VNCultra (který má v sobě i klienta, i server, ale stačí jen to druhé) se mi daří ovládat všechny počítače ve firmě (včetně těch s W98), aniž bych u nich vůbec seděl. Tvůrce WWW prý samozřejmě katalog neumí (tak proč se ptal na PHP?), takže jsem si za 1 den udělal v FP svůj vlastní, který z několika TXT souborů a šablon vytvoří tříděný katalog. Dneska se tvrdě zaseknul server. Ráno prostě jde a za chvíli už ne. Pomohl jedině tvrdý reset. Zato pak ale naběhl normálně. Nevím, co se stalo. Asi to byla nějaká z kamer... Škoda, server měl 115 dní běhu v kuse :-). Problémy s deskou K8048 stále trvají. Ale podle fór je má snad 1/2 uživatelů. Někdo to řeší přeletováním půlky desky, další přidává jakési tranzistory (či je mění) nebo vyměňuje přepínač, některým stačí použít starší počítač a jiným napájení 15V namísto 12V. Já bych zkusil poslední dvě možnosti, až se k nim nějak dostanu... Starší počítač jsem tedy zkoušel, stejně jako jiná trafa, ale nepomohlo to. Asi by to vážně chtělo těch 15V (stejně jako je vytištěno přímo na desce; pak ale manuál kecá!). K PICu potřebuji ještě ovládat klávesnici. Na toto (a ještě na komunikaci PC/PIC) jsem si vymyslel desku, a protože ten, kdo nám spájel programátor, to neumí, zkusil jsem si ji zadat do nějaké specializované firmy.
Když o tom tak přemýšlím, díky tomu, že na multiplexoru zbyly 4 vývody pro vstupy, mohl bych je využít jako signály z alarmů, a tedy ušetřil 2 piny na portu PICu. Jeden z nich bych mohl využít jako řídící signál vyhýbky těch 4 vodičů pro určení vstupu, takže buď by sloužily jako výběr signálu ("0"), nebo by se z nich staly datové vodiče ("1"), které by přes dekodér BCD-7SEG zobrazovaly na 1 místném 7 segmentovém displayi nějaké ty informace (např. čas příchodu/odchodu, nebo obsluha PICu, pokud by měl nějaké speciální funkce - jako svůj mini OS, který by se ovládal přes připojenou klávesnici po zadání nějakého extra kódu). A jelikož 7SEG zobrazí jen čísla 0-9, a tedy potřebuje sice 4 vodiče, ale nevyužívá všechny kombinace bylo by vhodné, aby se pomocí členů AND realizovaly i ostatní. Tedy kombinace 0000 až 1001 jsou zabrané (včetně 1000, což je také druhá jediná kombinace, která využívá poslední bit). Mohli bychom tedy realizovat pomocí adres ještě reproduktor (pípák o 1 určité frekvenci, zřejmě vyšší, možná C nebo ještě víc), který by měl kombinaci 110X. Pak by na desce ještě mohl být nějaký další vyvrtaný otvor pro připájení externího zařízení, jenž by měl hodnotu "1" tehdy, když by byla logická hodnota 101X (tento výstup by ovšem nebyl trvalý a byl by "ON" jen tehdy, když by byla vybraná jeho adresa: např. na měření teploty - překlopím monostabilní KO, pak přepnu na MUX, vyberu jeho adresu a počítám). Takto by PIC pomocí 6 vodičů mohl číst klávesnici o 12 tlačítkách, 4 další externí vstupy, ovládat 7 segmentový display, pípat pomocí reproduktoru a ještě ovládat nějaké další externí zařízení. A abychom využili ten 1 port, co nám u PICu zbyl volný, můžeme ho přidělat rovnou k desce s tím, že bude bez nějakých dalších propojení zase vyveden jako výstup (další ovládané externí zařízení). Tento bude již trvalý. Na oba výstupy bude připojeno po jedné diodě, aby se jimi dalo signalizovat, i když nebude žádné zařízení připojeno. A možná by bylo vhodné, aby se na výstup MUXu připojil obvod (jestli si to ještě dobře pamatuji, jde o nějak křížově zapojené tranzistory), který by eliminoval zákmity tlačítek na klávesnici.
Co se týče programování komunikace na straně PC, COM port má některé piny výstupní a jiné vstupní. Jak tedy zajistit, abychom mohli používat jen dva vodiče? Myslím, že celkem snadno. Na kabelu se u strany PC propojí vodiče DTR(out) a DSR(in), a pak RTS(out) s CTS(in). Tím mohu získat stav od PICu i PC na dvou vodičích, na kterých mohu zároveň i vysílat. To budou pak vodiče Data a Clock. Prováděl jsem (v dubnu 2007) krátké zaškolení své nadřízené v domnění, že jsem vychytal všechny zřejmé chyby, a ono se jich během chvíle vyvalilo asi 6 (ale ty jsem měl opravené za 2 hodinky). A také mne ještě nenapadlo změnit díry pro pájené dráty na normální svorky. Stejně tak přidat možnost externího napájení 12V adaptérem, které by bylo vyvedeno také ven. Pro napájení desky by se samozřejmě převádělo na 5V.
Našel jsem u nás nabíječku na bateriovou vrtačku, která produkuje 14.4V/500mA, tak jí jdu vyzkoušet :-). Prosbu o návrh a sestavení desky jsem poslal do dvou firem. Docela by mne zajímalo, jak dlouho budu ještě čekat a jestli se vůbec dočkám. Externí napájení 12V by také mohlo lépe sloužit převodníku COM-PC/PIC. Jinak ten PIC je 8 bitový, s pracovní frekvencí 4 MHz (pokud se napájí více než 3V, tak až 20 MHz - má na tom ovšem velký vliv teplota), má 1 kB (14bit) paměť pro program, 224B (8bit) RAM, 128B (8bit) EEPROM data a 8 úrovňový zásobník, 2 paralelní 8 bitové porty. Je tu podpora pro 1 sériový port, přerušení, atd. Ale o tom se můžete dočíst v dokumentaci (a navíc takové podrobnosti tady a teď nejsou důležité). Naučit se to programovat snad půjde rychle. Manuál o mém modelu je podrobnější než uživatelská příručka k sovětské televizi :-) se spoustou příkladů. Ještě si to celé pročíst. Dělal jsem aktualizaci a nahrál nové jádro. Zase nešly kamery. Tak jsem znovu zkompiloval ovladače a už šly. Udělal jsem si tedy do /usr/src skript, který to bude řešit za mne (abych ty příkazy nemusel stále vypisovat). Ty dvě firmy se zatím ani po 10 dnech neozvaly. No, snad se ozvou. Opravil jsem pár chyb v kamerách a PICu, které mi jednak zablokovaly celý PC, byly náročné na CPU a hlavně znemožňovaly občas připojit dalšího uživatele (zběsilé spouštění vláken). Snad to zase něčemu pomůže. Nabíječka na 14.4V nepomohla. Ani nezačala dodávat proud (ale připojení k desce poznala).
Problém je, že sehnat u nás 15V DC zdroj se rovná zázraku (nebo je to alespoň umění). Ale na oficiálním fóru u webu Vellemanu (http://forum.velleman.be/) jsem našel ještě jedno řešení. Prý, když je nějaký pin u PICu nastaven na "1" (to by možná vysvětlovalo tu svítící diodu), nelze ho naprogramovat. Řešení je prý buď odstranit R13, vymazat paměť, vrátit ho a pak by to mělo jít. Lehčí řešení je prý pro výmaz paměti zkratovat D7 (dočasně). Nebo ještě přerušit vedení na 2. straně desky a používat tlačítko reset pro zkratování báze T4. Vše jen pro výmaz, aby se pak dal PIC naprogramovat. Podle schématu by tedy jen stačilo oba vývody diody propojit nějakou svorkou. Zkusil jsem to a nic.. deska s aliasem VM111 mne prostě ignoruje. Stáhl jsem si ze stránek PicProg2006. Ten sice nepíše nic o ID (jen to podporuje více desek, takže se musí nastavit Compatibility, HW Config na správný COM a správný PIC (áčkové jsou staré výroby)). Ale ani on nebyl schopen nic do desky zapsat a při čtení jsem dostal samé nuly. Aktualizovaná verze PICPROG2 už také nehlásí ID, ale že nenašla žádný PIC na desce. Tak jsem hledal a hledal, a nakonec konečně našel u http://www.pselectronic.cz/ ten zdroj, který doporučuje myslím i sám Velleman. A stojí jen 270 Kč, což je oproti ostatním (cca. 600) skoro zadarmo. Jen aby to zabralo, jinak se asi půjdu zastřelit.. kdybych měl čím :-). A najednou i naše PC dodavatelská prodejna našla v katalogu velké množství 15V zdrojů. Ovšem řádově také o dost dražších.
A když už si tak hraji s těmi deskami, napadlo mne, proč si vlastně ničit programovací desku neustálým během. Proč si nenechat postavit vlastní, na které bude patice pro mikropočítač, nějaké ty podpůrné obvody, 5 různo barevných diod a celkem 12 výstupních vodičů. Tímto sice vlastně odpadá, proč mít tak složité adresování na druhé desce, ale třeba se to do budoucna bude hodit (tady stačí vlastně zapojit jen 6 vodičů, takže 2 budou volné, a dalšími 5 jde kromě jiného rozsvěcet i diody). Teď jen, aby mi to měl kdo udělat. Tamty dvě firmy se zatím neozývají, tak půjdu o dům (raději do více) dál. Firma zavádí přenos dat i na Compact Flash kartách, na což je ovšem můj systém již připraven (možnost ukládat na volitelný adresář nebo disk). Psal jsem dalším 3 menším firmám, jestli se nad námi někdo smiluje a tu desku nám vytvoří :-).
A vida! Po 6 hodinách se ozvala první z firem. Asi z těch lepších, protože cena za tuto desku se pohybuje prý cca. kolem 20.000 Kč! Moje představy to tedy nesplňuje, ale je nutno říci, že alespoň rychlost odpovědi je ucházející. Nicméně si e-mail nechám. Sice pohybuji, že by naše firma šla do tohoto, ale jeden nikdy neví. Doba výroby by prý byla 8-10 týdnů (klidně 20, kdyby byla cena poloviční). To by ale nebyl problém.. Budu čekat dál. Přemýšlím, jestli by nebylo lepší si dát do Anonce inzerát, zda by nám to nějaký kutil nebyl ochoten udělat. Přišlo by to určitě levněji. Ale jsem rád, že jsou firmy ochotné se zabývat i takovouto "hnojárnou" (jak by se o tomto schématu jistě vyjádřil můj bývalý učitel). Dal jsem si tedy zatím inzerát do Annonce. Na desce svítí dioda. Když vyndám PIC, tak nesvítí. Tzn. že jeden z pinů je nastaven jako výstup a je na něm 1. Podle schématu se jedná o pin 7 (RB1). Což by ale nemělo vadit (je tam sériový kanál). Otázka je, jak jsou nastaveny ty ostatní piny. Přišel zdroj, zkusil jsem a nejde to. Zkusil jsem rozdělat kabel, zda není špatně zapojený nebyl. Ale zjistil jsem jednu věc: červená dioda by měla zřejmě svítit (nebo ne?), když je připojená k PC. Zkusil jsem konektorem trochu zahýbat a blikala. Když se mi povedlo, aby svítila trvale při vypínači OFF a zhasla při PRG, tak v době, kdy se počítač snažil PIC reprogramovat, tak blikala! Hm, to je novinka! Nicméně ani tehdy nešel naprogramovat. Je sice pravda, že se mi ji občas podařilo rozsvítit rukou (zkrat), ale rozhodně ne ve všech případech. Zkusím to vyzkoušet ještě jednou doma na jiném kabelu 1:1.. ale nejdříve tu desku opláchnu.
Také jsem zjistil, že PIC16F627 má i svůj vlastní interní oscilátor pracující na 4 MHz, takže je zbytečné ho na desku vůbec dávat. Kromě podání v Annonci jsem také zkusil odpovědět na 2 měsíce starý inzerát shánějící práci na doma (jedním z oborů bylo právě pájení). Testy doma nepomohly. Chová se to stejně. Takže je vadný buď PIC nebo deska. Podal jsem si dotaz na oficiální fórum. Jinak, takto by prý měl fungovat PIC s minimem součástek, kromě té LED diody (možná ani ten oscilátor není vůbec potřeba; toto jsem našel zase na http://forum.microchip.com):
Protože mi dneska zase (zřejmě kamery) zasekli OS, zkusím něco jiného. AMTdbs sice neběží jako Root, ani nemá Stick bit, ale program, který ho spuští při bootu, resp. daný skript, je nastaven jako root. Zkusil jsem tedy firewall nastavit jako root se stick bitem (tím se nedá nic zkazit, jen se to dá při spuštění znovu nastavit, jakože opravit), zatímco jeho nadřízený skript bez něj (ten spouští i NOHUP se skriptem AMTdbServer, který řídí AMTdbs). Pomocí příkazu "chmod -R 777 adresář" jsem povolil přístup ke všem souborům, které vytvořil systém ještě jako root a zkusím to pak někdy restartovat. Pokud snad kamery nepoběží jako root, nebudou mít snad tu moc zaseknout OS. Systému by to vadit nemělo a snad poběží i ten firewall.. tak, udělal jsem restart, a zdá se, že systém i firewall chodí OK. Uvidíme, až se vytvoří první snímky, co to bude tvořit. Co se týče programátoru, dostal jsem odpověď, že to prý vypadá na poškozenou (špatně spájenou desku), hlavně kvůli hřejícím se tranzistorům. Dá se koupit už složená jako VM111, ale za $53. Na CZ internetu je programátorů málo, a když už, tak jen schémata. Asi to zkusím přes Annonci. Nebo si mohu koupit Nepájivé propojovací pole za 30-70 Kč a součástky si sestavit na něm. Jen jde o to, je sehnat a hlavně správně vybrat a to je ten problém. Našel jsem opět někoho, kdo prý sestavuje programátory, tak jsem mu zkusil napsat.
Obrazky\AMTNAVRH.CA4
Hm.. tak jsem zjistil, že i po resetu si server vesele jede jako Root. A skript pro firewall stejně nemohu spustit pod normálním uživatelem (kvůli IPTABLES). Tak jsem zkusil změnit startovací skript v RC2 a upravit řádek jako "nohup su -c /work/amtserv uživatel &", kde "uživatel" je někdo jiný než "root". Zkusil jsem další reset a víte co? Ne, to ne.. Chodí to! Internet chodí :-), systém chodí a už je vidět i ve Správci procesů, tj. nejede jako root! Doufám, že to pomůže a ne že za to mohou, jak kdosi někde napsal, Xka. Ve Workbenchi jsem si vytvořil něco na způsob toho, jak by deska asi měla vypadat, ale jak to člověk nedělá, tak z toho ze školy vypadne (no, nejsem si jistý, zda bych něco podobného byl schopen navrhnout i těsně po maturitě).
Napsala mi i firma Tomáše Fundy (kterou uvádím jen proto, že má celkem dobrou cenu), která mi nabídla cenu desky za průměrně 200*2+200*2+300*4+50*1+300*7, tj. asi 4150,- Kč, což už je přijatelnější. Protože jsem dostal ale i odpověď od dalšího adresáta (buď jde o velmi malou firmu nebo o jednotlivce "na koleni"), tak jsem mu odpověděl a zaslal patřičná schémata. Uvidíme, jaká bude jeho nabídka. Dostal jsem odpověď na svůj inzerát v Annonci, takže pomalu nevím, kdo to vlastně "vyhraje". Nicméně toto není žádná firma a čekal něco jednoduššího, takže budu spíše počítat s tím předešlým, kterého jsem si našel já. Začíná se to dost protahovat. Vzhledem k tomu, že PIC bude mít na nové desce uvolněny všechny piny portů, a pro zjednodušení převodu mezi PC a PICem (přes obvod MAX233/A, který propouští jen jedním směrem, ale má 4 kanály (2x2 typy), pokud ovšem někdo nevymyslí něco lepšího pro 2 kabely, aby to nebylo tak složité), tak bych mohl vymyslet komunikaci přes 4 vodiče. Na straně PC se nic nemění (pro SW), protože ten používá 4 piny portu COM (i když spojené do dvou kvůli oběma směrům). Bude ale možné změnit komunikační protokol. Asi následovně:
a) pokud chci vysílat, nastavím výstupní D a C na "1"
b) počkám, až se na vstupních objeví na D také "1" (odpověď) a na C bude "0"
c) shodím C na "0" a počkám 20 ms (dost dlouhá doba; přijímač může shodit D na "0")
d) pak 16x opakuji cyklus
1) nastavím na Dout vodiči datový bit
2) invertuji na Cout vodiči hodiny
3) počkám, až Cin také invertuje (na stejnou hodnotu jako Cout)
e) až skončím přenos, nastavím D na 0 (přijímač musí udělat totéž). Oba C jsou "0".
Dále jsem potřeboval sdílet data na Internetu ze serveru, avšak tak, aby byla chráněna heslem (tj. přístupná jen pro někoho). Takže jsem postupoval po přečtení ABClinuxu (nikomu by neuškodilo, kdyby psal odpovědi trochu konkrétněji a polopaticky) následovně: Práva u nového podadresáře jsem dal Pro čtení všem. Vytvořil jsem v něm soubor .htaccess, kterému jsem dal práva na čtení a hlavně na spouštění (všem)! Do něho jsem vepsal tyto údaje:
AuthType Basic
AuthName "Zpráva"
AuthUserFile /adresář/soubor_s_heslem
AuthGroupFile /dev/null
Require valid-user
Pak jsem spustil příkaz "htpasswd -c /adresář/soubor_s_heslem uživatel" a zadal heslo. Pak jsem ještě do souboru /etc/apache/httpd.conf jsem tuto sekci:
Obrazky\DIRECTORY /ADRESář
Options Indexes Multiviews
AllowOverRide All
Order deny,allow
Allow from all
Obrazky\/DIRECTORY
Důležité je nezapomenout Apache restartovat! Firefox pak heslo zadává jen jednou, resp. po druhé až po delší době (cca. 4 hodiny?), zatímco Internet Explorer při každém novém přístupu z jiného okna. Ale jsem rád, že jsem se naučil něco nového :-). Navíc heslo platí i pro všechny podadresáře, pokud nemají vlastní soubor.
V práci mi začíná Windows padat do modrých obrazovek. Vidím to na vadný paměťový modul (pokud není v háji samotná instalace běžící už 5. rokem den co den bez reinstalace). Opět se dneska zasekl server (už nevím, v čem by mohl být problém (asi tam budu muset dát návod: nejde-li internet ani databanka, stisknout tlačítko RESET)). Řešením by sice mohlo být, že by ADSL modem byl ve vnitřní síti, takže by stanice i v případě výpadku serveru mohly na Internet, ale stále to neřeší problém s databankou a kupovat na kamery vlastní PC je nesmysl.
Ještě doplním pár postřehů z "jednouživatelské verze" Linuxu. Mějme Win98SE s nainstalovaným Acrobat Readerem, velkou spoustou video kodeků a pak starý Linux Ubuntu 5.04. Např. PDF novější verze Windows neotevře, Linux ano! DivX G400 video se ve Windows přehrává zpomaleně, obraz má tak 75% dropoutů, a zvuk je nesynchronní. V Linuxu se toto video přehrává plynule, i když zvuk mírně chrčí. Navíc, video má v sobě dvě jazykové verze. Windows (resp. Media Player 6.4) je přehrává přes sebe, Linux tu první (českou). VSS umí extrahovat obě (pro titulky), ale to je trochu mimo. Pak tu máme MPEG1 po převodu z FLV. Ve WIN98 běží bez zvuku (některé ho mají, ale jiné ne. Tady u toho tvrdí, že tam ani není). V XP se to dokonce zasekne. V Linuxu zvuk jede. Sice chrčivě, ale funguje (VSS z něj ale nic nedostane. Také ten zvuk nevidí. Třeba to je tím, že to má údajně 32kHz stereo. Video Studio ho dokáže otevřít, ale exportuje jen ticho :-(. Naštěstí FFMPEG pro příkazovou řádku(!) se osvědčil. Jako výstup se zadal WAV a pomocí -VN se vyhodilo video a zvuk 22 kHz mono je na světě). Čím to je? Takové rozdíly!
A protože se teď díky organizačním změnám ve firmě a nemocím systém pomalu odkládá, ukončím i tento článek. Více méně je už vše zavedeno. Pokud se bude realizovat i ten mikropočítačový systém, dozvíte se o něm z jeho zdrojových kódů. Firma, která mi přislíbila realizaci, se totiž ani po zaslání schématu už neozvala, takže pokud se to bude realizovat, bude to zřejmě za ty 4.000 Kč a něco. Ale s tím už Vás nebudu zatěžovat. Nemá cenu psát romány. Alespoň máte představu, jak to chodí (alespoň, pokud na tom pracuji já :-D)...
* * * K O N E C * * *