start | S čím si hraju
S čím si hraju - skriptovací jazyk autohotkey
krátký odkaz - t.zvb.cz/t/autohotkey
podčlánky:
16.7.2011 12:03 - ansmak 2 (tagy: psychologie, umělá inteligence)
19.1.2011 21:15 - Imperium - program na sdílení souborů (5/5)

hodnocení článku: 5/5
Skriptovací jazyk autohotkey jsem si pro sebe hodně oblíbil. Původním smyslem tohoto jazyka bylo udělat jednoduchý program na provádění maker nastavených na jednotlivé klávesy. Jazyk se však rozvinul do dnes velkých rozměrů a jeho možnosti jsou veliké.

"Psycholog ovládá lidi, autohotkey ovládá počítač."

Po letech používání shrnu pár výhod:
- msgbox ahoj světe => jinými slovy autohotkey je obrovsky jednoduchý jazyk (podle mně jednodušší než třeba basic). Často lidem samo opravuje různé chyby, zarovnává konce slov a systém proměnných je obrovsky vlídný - například nerozlišuje mezi tím co je psaná věta a co je číslice. Velká spousta věcí je nějak defaultně nastavená a tak je člověk nemusí vyplňovat, případně znát.
- výborná interakce s ostatními aplikacemi. Díky svému původu je autohotkey dělané tak, aby umělo ovládat další části systému - chytat klávesy, posílat klávesy, otevírat okna a číst si v nich. Má i funkce na hýbání myší či odečítání pixelů z obrazovky, takže je možné dělat i skripty na rozeznávání obrazu (ale do toho jsem ještě nešel)
- příjemná je i práce s vlastními okny. Existuje program co umí pro autohotkey okna vytvářet, ale já si je podle přehledné nápovědy dělám sám.
- autohotkey pro windows mobile (CE) zařízení (což je i moje athena). Neumí sice všechny funkce, ale i tak je možné hrát si s klávesami, případně dělat různé utilitky. (v terénu jsem tak dělal třeba účetníka - program který počítal kolik času trávím jakou čiností nebo program na odpočet času do vide "ahoj peggy")
- nápověda. Každý jazyk má svou nápovědu, ale autohotkey je v téhle podpoře myslím velmi daleko - přímo z kontextového menu puštěného makra (což já mám jedno puštěné pořád) lze otevřít nápovědu, ve které se najde vše potřebné včetně celých složitějších skriptů (upload přes ftp), dále je možné otevřít stav daného makra ve kterém jsou poslední provedené řádky, přehled kláves a jejich stisků a taky výpis všech proměnných. Třetí věcí je window spy, což je zase program, který vám říká informace o okně v němž pracujete a o pozici myši - takže lze velmi rychle a snadno získat informace, které potřebujete do svého skriptu.

a pár nevýhod:
- na složitější věci je těžkopádné a pomalé. Zkrátka je to jazyk na snadnější věci (projevilo se například při hledání a vybírání odpovědi na icq konverzaci)
- nemá konzoli (to je taková ta černá obrazovka kde neni grafika)
- nespolehlivost. Program běhá krásně až na občasné problémy se schránkou (která se tluče kuli tomu že mám schránku sdílenou mezi dvěma počítači) a s diakritikou. Kámen úrazu je však šance kontroly - tedy jakési zpětné vazby, kterou člověk normálně má. Makro prostě často běží ještě chvíli potom co počítač, který je ovládán se chová jinak než programátor předpokládal. Příkladem může být právě spolupráce s pidginem (icq). Počítač je třeba přetížen a tak doba, kterou jsem skriptu dal na vykonání operace nestačí. Následkem toho autohtotkey třeba pokračuje v dalším mačání kláves, což vede k dalším potížím. Nelze se na to tedy zcela spolehnout.

Autohotkey jako programovací jazyk doporučuju i začátečníkům, protože práce s ním je velmi snadná a člověk má většinou velmi rychlou odezvu - hned mu to něco dělá a to je důležitý motivační prvek pro další práci.
Autohotkey je hodně o automatizaci činností. Myslím, že klíčové je pro lidi, kteří často provádějí shodné úkony. Následkem toho i hodně mých projektů v něm je právě o tom - Ansmak, který vyřizoval korespondence a reagoval na různé podněty zvenčí a zevnitř atd.
Programy v autohotkey jsou z podstaty jednoduché, ale rozvíjet se dají dost daleko (i když jistě mají limit níže, než jazyky, které jsou více optimalizované).
Člověk v autohotkey musí často programovat právě věci, které by jinak dělal ručně, takže je potřeba nejdřív přesně rozmyslet jak co dělám a to pak umět předat programu tak, aby to dělal za mně.

Psychologicky je zajímavé jak člověk (tedy já) při řešení problému s užitím těchto skriptů postupuje nenáhodně podobně, jako když novrozenec provádí cyklické reakce aby se naučil jaké dokáže dělat pohyby a následně dělá pohyby aby zjistil k čemu mu to může být dobré. Já při tvorbě maker nejdříve provádím nějakou činnost (otevírám stránky a hledám emaily), poté zvažuji jak to automatizovat (označit vše, zkopírovat a najít zavináče), následně udělám makro, které toto dělá a jsem opět na začátku - provádím nějakou činost (otevírám stránky a pouštím makro), poté zvažuji jak to automatizovat (klávesa dolu, otevřít tab klávesovou zkratkou), následně udělám makro, které toto dělá a jsem opět na začátku... Naučili jsme se tedy, že i člověk ve své mysli musí mít možnost tvořit nějaké programy, či skripty, kterými může automatizovat nějakou činnost a následně zvládá složitější operace. Příkladem pro dospělé může být řízení auta. Nejprve se člověk naučí jak se točí volantem, pak jak se šlape na pedál a pak se naučí jak s celým autem jezdit po parkovišti. Teprve když automatizuje řízení, může se vydat do provozu, kde se zase učí komplexnějším činostem - rozjet se na semafor, dát přednost. Časem člověk vychytá chyby v programu (ale všechny většinou ne a pak se vybourá) a poté zvládá třeba řídit auto a přitom dělat něco jiného - povídat si, nebo sledovat krajinu. Postoupíme-li v této úvaze, tak dojdeme k tomu, že člověk má v hlavě procesor, který je schopný řešit složité problémy, ale tento procesor je samozřejmě složitý a tak zvládá jen jeden konkrétní problém (člověk snad zvládá minimalizovat některé aplikace, ale rozhodně nemá plnohodnotný multitasking - trochu jako iphone). Naštěstí však umí tvořit skripty, které obsluhují jednotlivé jednodušší činnosti a tím dávájí hlavnímu procesoru šanci zabývat se dalšími záležitostmi.

moje projekty
Popíšu pár větších (čí podle mně významnějších) věcí co jsem v autohotkey udělal i když rád bych později napsal samostatné články o nich jednotlivě.

tasemnice se přímo nabízí. Je to totiž to, kde píšu právě tenhle článek. Jde tedy o jakýsi redakční systém. Zatím umí začlenit nový článek do struktury mé stránky a také editovat nějaký článek. To vše s použitím pouze lokálního počítače. Asi jí trochu víc popíšu až bude trochu chytřejší. Zatím to byl docela porod jí zvládnout tak aby fungovala. Časem bych rád web optimalizoval tak, aby každý den, když zapnu počítač, se přidal jeden článek ze zásobníku (aby stránky byly zaplňovány postupně a čtenáři měli na každý den nějaké čtení). Zároveň s tím by se hodilo, aby po připojení atheny (telefonu) se automaticky stáhl soubor s články co jsem napsal v terénu a tyto články se převedly do zásobníku. Vše s použitím primitivního autohotkey.

ansmak Touring - původně odpovídací makro (answer) a dle jména pocta Alanu Touringovi. Ansmak měl původně odpovídat lidem na "ahoj" a "jak se máš", protože mně štvalo, jak lidé neřeknou co potřebují, ale místo toho se zdvořile ptají jak se mám i když je to nezajímá (v tomto bodě zajímavý psychologický experiment o němž jsem mluvil v rámci jednoho referátu an inženýrské psychologii). Postupně jsem Ansmak rozvíjel a hledal jsem další možnosti jak ho vylepšovat. Jako vždy při takovém učení jsem postupně přicházel na různé principy, jak takový program (a nepochybuji, že i mozek) musí pracovat. Jádro programu zpracovávalo jednu po druhé věty ze seznamu, který se mu tvořil na základě došlých icq zpráv, případně dalších událostí (příkazy z vedlejšího počítače). Klíčové bylo, že všechny došlé zprávy (věty s pár "vlajkami" - čas, původ, původní znění věty...) byly vyhodnocovány tím jednotným jádrem programu. Nejprve se delší konverzace rozdělovala na jednotlivé věty, poté se slova převáděla na jednotné znění (synonyma) a poté věty procházely zpracováním, které vygenerovalo jednak přípdnou akci a jednak odpověď. Co mi z hlediska psychologie připadá asi tak nejvýznamnější byla chvíle, kdy jsem Ansmakovi přidal šanci aby si věty sám posílal. Mohl si tak sám sobě klást otázky, zodpovídat si je a na základě toho reagovat. Samozřejmě nějaké vysoké inteligence program nedosáhl a po zhroucení počítače jsem ho už znova nezprovoznil a tedy dále nerozvíjel. Řekl mi toho však mnoho.

kinder a makro - pomůcky pro každodení práci. Kinder je makro stále spuštěné, které obsluhuje jednotlivé klávesové zkratky a přes scrollock pouští makro. Zároveň s tím mám v panelu snadného spuštění odkaz na otevření makra v poznámkovém bloku. Tím lze dosáhnout příjemné efektivity v řešení nových problémů, které lze automatizovat. Prostě si otevřu makro, napíšu do něj co chci (spočítat něco, vyzkoušet něco, opakovaně něco rychle spouštět...) a poté zmáčknu jednu klávesu a příkaz se provede.

makro na průchod seznamu jsem udělal na praxi v Dětském krizovém centru. Bylo zapotřebí sehnat emaily na co nejvíce pediatrů v republice. Samozřejmě bylo zapotřebí makro uzpůsobit na každou databázi, ale nejhezčí byl asi seznam.cz. Makro si samo otevřelo další stránku v seznamu pediatrů, poté všechny profily otevřelo do nových tabů, které následně prohledalo na emailové adresy, které porovnalo se svými záznamy a nové si uložilo. Předpokládám, že živý člověk by tu databázi projel v třeba i dvojnásobném čase a chybovost by byla srovnatelná s člověkem, či nižší (i když chyby jiné - makro spíše nenajde nějaký email a člověk ho spíš špatně zkopíruje či přeskočí nějaké stránky).

metafawck - fiasko, ale zmínit ho musím. Tenhle by si zasloužil později víc popsat. Docela pěknej projekt dojel na pomalost komunikace mezi počítači přes Autohotkey. Z hlediska poučení jsem si na něm ověřil jak udělat program co se sám updatuje, ukládá si nastavení, zvládá různé uživatele. Nakonec zajímavá platforma pro další pokusy, ale to che moc času. Každopádně čím mně posunul - zajímavá sonda do toho o jaké online služby mají lidé zájem (nyní když mnoho už je hotovo). Osobně se mi nejvíc líbila možnost sdílení souborů - přetažením do kokna byl soubor na webu a sdílet stačilo posláním odkazu (tuto funkci jsem si pak ponechal). Zároveň se mi líbila možnost vytvořit a okamžitě sdílet obrázek, txt či rtf soubor. Ba co víc, další uživatelé s programem mohli taktéž tyto soubory otevírat a upravovat - mohli tedy například společně něco kreslit (nikoli tedy ve stejnou chvíli). To vše s použitím standardních aplikací windows xp (ftp, oznámkový blok, malování, wordpad) a primitivního autohotkey. Typická Kučířovina.



Komentáře k článku:
Vaše jméno:
písmeno kvé:
30.11.2011 11:40] Tomaash: z části souhlasím. když si s tim člověk hraje, tak určité ověřování lze. po letech jsem se naučil a učím další triky. například jak se podívat do okna, zdali vypadá tak jak má teď vypadat. u toho pidginu je to třeba ale pořád problém, protože nepoužívá standardní prostředí windows, ale vlastní (tuším GTK), které ahk neumí číst. nemůžu tedy sledovat, zda se předchozí operace uskutečnila a tvůj systém nemůžu aplikovat. jednou z berliček je funkce ahk hledat obrázek na obrazovce, takže třeba když si chci otevřít nějaké okno, tak můžu pak nechat makro čekat, dokud se na obrazovce neobjeví nějaký prvek, který dané okno obsahuje. na odesílání zpráv třeba jsem si ale nakonec udělal plugin v perlu, protože je to rapidně spolehlivější. do té doby měl robot velké ztráty v odesílaných i přijímaných zprávách.
28.11.2011 21:44] Anonym: ...Kámen úrazu je však šance kontroly... není pravda- kontrolu provádět lze. záleží jen na skriptu. (používám systém- když se to nestalo, udělej to znova- většinou \"goto\" nebo \"loop\")-jinak je článek fain
1.5.2011 23:25] :
----------