[Fanda] Keyjutsu 1.2, Masívny update, plný nových funkcií

ppartyka ppartyka na chello.cz
Středa Únor 12 22:15:02 CET 2020


Chtěl jsem se zeptat, jestli by se dalo nadefinovat, aby tento prográmek 
imitoval v určitém intervalu stlačení určité klávesy. Např. numerickou 
číslici po půlminutě nebo minutě. Právě zajímavé by bylo implementování 
automatických sekvencí kláves něco jako měla ve Win 3.1 tzv. kamera. Tam byl 
a plněná buď podmínka, že se něco objevilo na obrazovce, tak to automaticky 
provedlo zadání nadefinovaných kláves anebo myslím za jiných podmínek 
kdykoli se příkaz spustil.

P.P.
----- Original Message ----- 
From: "Rastislav Kiss" <rastislav.kish na gmail.com>
To: <fanda na elsa.cvut.cz>
Sent: Monday, February 10, 2020 9:41 PM
Subject: [Fanda] Keyjutsu 1.2, Masívny update, plný nových funkcií


> Ahojte,
>
> tak po troch resp. dvoch dňoch intenzívneho vývoja a písania dokumentácie 
> môžem konečne oznámiť, že vychádza Keyjutsu 1.2!
>
> Označenie masívna aktualizácia v tomto prípade vôbec nie je prehnané. 
> Hlavne interne prakticky neostal kameň na kameni, a veľa vecí prebieha 
> úplne ináč než predtým. No žiadne obavy, je to stále starý známy Keyjutsu, 
> akurát výkonnejší a obohatený o niekoľko cool funkcií. :)
>
> Zmien je objektívne dosť, neviem ani kde začať. Poďme teda na to!
>
>
> Ak ste študovali vygenerovaný kód predchádzajúcich verzií Keyjutsu, mohli 
> ste si všimnúť, že jeho princíp fungovania bol veľmi jednoduchý. Vytvorila 
> sa definícia klávesovej skratky, v nej sa odchytil vstup používateľa, 
> ktorý sa následne prehnal cez obrovskú if / else if konštrukciu, a ak 
> niekde došlo k zhode, vykonal sa kód na danom mieste, pričom sa paradoxne 
> po jeho dokončení proces nezastavil, ale pokračoval ďalšími podmienkami.
>
> S tým je v novej verzii koniec. Všetky skripty používateľa sú ponovom 
> vložené do funkcií, ktoré sa následne na základe vstupu volajú z funkcie 
> launchJutsu. je to krajšie, flexibilnejšie, výkonnejšie, a všetky možné 
> benefity, ktoré si len dokážete predstaviť.
>
> Tieto detaily nie sú pre bežné použitie v zásade dôležité, okrem funkcie 
> LaunchJutsu.
>
>
> A tým sa už dostávame k skutočne viditeľným zmenám:
>
> * Bola pridaná možnosť tvorby vlastných klávesových skratiek. Tie sídlia v 
> priečinku hotkeys, v podobe modulov, kde môžete jednotlivé skratky 
> definovať v autohotkey štýle. Ak tak máte už existujúce skripty, ktoré by 
> ale bolo nepraktické zaraďovať do sekvenčného prístupu Keyjutsu, typicky 
> napríklad prepínanie pracovných plôch, kde by teoreticky jednoduchá 
> skratka mohla byť účinnejšia než klávesová sekvencia, môžete ich ponovom 
> tiež zahrnúť.
>
> Ďalšou peknou výhodou tohto prístupu je, že je týmto spôsobom definovaná 
> aj aktivačná skratka Keyjutsu, v súbore ActivationHotkeys.txt. To tak 
> umožňuje nie len túto skratku meniť, ale jej dávať tiež rôzne kontexty - v 
> ktorých oknách má fungovať, v ktorých nie a pod. Pričom na to, aby mohla 
> byť skratka aktivačnou treba v zásade len to, aby volala už spomínanú 
> funkciu LaunchJutsu.
>
> Takže tí z vás, ktorý majú problémy s VisualStudiom, ale chcú napriek tomu 
> používať skratku ctrl+K, alebo nejakú inú obsadenú kombináciu, môžete 
> ponovom veľmi ľahko nastaviť, aby všade v systéme platila ako aktivačná 
> skratka ctrl+K, len vo VisualStudiu napr. ctrl+alt+=, alebo niečo podobné, 
> čo by nekolidovalo.
>
> Odpadá tak tiež pochopiteľne nastavenie activation shortcut z 
> konfigurácie, nakoľko je nový prístup podstatne silnejší.
>
>
> * Bola pridaná podpora pre regexy. Povedzme napr. že by ste chceli mať 
> sekvenciu, ktorá by vám otvorila priečinok niektorého z vložených diskov. 
> Tie sú každý v podstate priečinok na rovnakej úroni, len s odlišným 
> písmenom. Po starom by ste napriek tomu museli definovať 26 skriptov, 
> štýlom pda, pdb, pdc, ..., pričom by kód v každom z nich bol prakticky 
> rovnaký, líšil by sa len použitým písmenom, ktoré je ale obsiahnuté už v 
> sekvencií samotnej.
>
> Nová verzia tento problém rieši, a prináša popri klávesových skratkách a 
> sekvenciách tiež regulárne výrazy, ako možnosť vstupu. Menší reminder pre 
> nezasvätených, regulárne výrazy, tiež regex, umožňujú definovať reťazec 
> resp. množinu reťazcov pomocou vzoru, namiesto presnej interpretácie.
>
> V tomto prípade by tak stačilo namiesto vytvárania množstva skriptov 
> urobiť len jeden, s regexom pd., ktorý sa vzťahuje na všetky možné 
> jednotky, nakoľko bodka predstavuje v regulárnych výrazoch akýkoľvek znak. 
> Ak vám napadlo, že to nebude fungovať, lebo napr. čísla alebo interpunkcia 
> nie sú platnými názvami diskov, máte pravdu, aj to je však možné 
> regulárnym výrazom ošetriť, použitím formy pd[a-z], kde hranaté zátvorky 
> predstavujú rôzne možnosti znakov na danej pozícii, a a-z rozsah týchto 
> znakov, aby sme nemuseli vypisovať ručne abcdefghijklmnopqrstuvwxyz.
>
> Konkrétny vstup je potom v skripte k dispozícii v globálnej premennej 
> INPUT, ktorá je navyše v regex funkciách definovaná automaticky 
> assemblerom ako globálna, takže ju nemusíte sprístupňovať ručne.
>
> Kód by sa v tomto prípade scvrkol z 26 skriptov na:
>
> Run, % subStr(INPUT, 3) . ":"
>
> A je hotovo. :)
>
>
> Pozn. nepozná niekto nejaký dobrý regex tutoriál v našich jazykoch, ktorý 
> by som mohol uviesť v dokumentácii ako referenciu? Pozeral som články na 
> wikipédii, ale dobrý mi príde iba ten anglický, ktorému asi veľa našincov 
> neporozumie, český nikto nepochopí a slovenský sa skladá dokopy z dvoch 
> odstavcov.
>
>
> * Bol výrazne prepracovaný systém spúšťania akcí, zjednodušene to, čo sa 
> deje na pozadí, keď zadávate sekvenciu klávesov.
>
> V predchádzajúcich verziách sa používal príkaz Input, ktorý bol však 
> značne limitovaný, pokiaľ išlo o to, ako zisťuje, kedy ukončiť vstup a 
> vyhodnotiť klávesovú sekvenciu.
>
> Vo verzii 1.2 sa používa flexibilnejší InputHook, ktorý má hneď dve super 
> vlastnosti.
>
> Jednou z nich je, že si vždy automaticky vyhradí klávesnicu, ak ju nemá 
> pre seba. Tým kompletne odpadá problém s čítačmi obrazoviek, vďaka čomu 
> sme sa mohli zbaviť troch skriptov, jedného timeru a neustáleho 
> reštartovania Keyjutsu, nehovoriac o tom, že to aj tak nefungovalo za 
> určitých okolností.
>
> V novej verzii už ide všetko tak ako má a vždy.
>
>
> A druhou dobrou vlastnosťou je, že InputHook umožňuje kompletnú kontrolu 
> nad zadávaním vstupu, jeho zastavením, a ďalšími vecami. Čo som hneď 
> využil, aby som mohol naprogramovať jednak regexy, a jednak možnosť 
> automatického vypínania pri preklepe, aby ste to nemuseli robiť ručne.
>
> No a keďže mám vo všeobecnosti zlé skúsenosti s interpretovanými jazykmi 
> typu Autohotkey a cyklami, tak som tieto funkcie neprogramoval v AHK, ale 
> som vytvoril špeciálnu dll knižnicu naprogramovanú v ruste. Rust je 
> programovací jazyk známy svojou vysokou rýchlosťou, bezpečnosťou, 
> prehľadnosťou a tzv. zero cost abstrakciou, čo ho robí elegantným a mocným 
> zároveň. Opäť pre zasvätených, poráža C++ snáď vo všetkých možných 
> smeroch, vrátane rýchlosti, pre zvyšok stačí vedieť, že je matchovacia 
> knižnica vďaka nemu veľmi výkonná a mala by si poradiť aj s vysokým 
> náporom. Rustová regex knižnica patrí k najvýkonnejším na svete, takže sa 
> nemusíte pri ich využívaní obmedzovať, nemali by vás nijak spomaľovať. 
> Jedinou jej nevýhodou je, že kvôli rýchlosti nie sú podporované niektoré 
> funkcie typu look around či backreferences (dobre znejúci slovenský 
> preklad mi pravdupovediac nenapadá), ktoré ale aj tak nie sú v tomto 
> kontexte príliš podstatné.
>
>
> match_lib tak prináša množstvo benefitov, až na jeden malý detail. Keďže 
> sa jedná o natívnu knižnicu, musí mať vopred danú architektúru 32 / 64 
> bit. Nie je to nijak zásadný problém, je možné jednoducho skompilovať obe 
> verzie a potom načítať tú z nich, ktorá je na danom systéme treba, avšak 
> pre mňa by to znamenalo nutnosť inštalovať 32-bitový Rust toolchain, čo sa 
> mi jednoducho povedané nechcelo. Preto som sa vzhľadom k faktu, že dnes má 
> 64-bitový stroj snáď každý, rovnako ako Autohotkey, rozhodol urobiť len 
> 64-bitový build, čím je celé keyjutsu obmedzené len na túto architektúru.
>
> Ak by to pre vás predstavovalo problém, a chceli by ste Keyjutsu využívať 
> aj na 32-bitových strojoch, stačí, ak mi dáte vedieť, a možno si jeden 
> večer spravím čas, a urobím aj tú 32-bitovú verziu. Nechcel som sa s tým 
> babrať, ak to napokon nikto nebude využívať, ale ak záujem bude, nemal by 
> to byť problém.
>
>
> zdrojový kód match_lib je koniec koncov taktiež priložený v balení spolu s 
> kódom assemblera, teda ak ste technicky zdatnejší a máte s kompilermi 
> skúsenosti, môžete si knižnicu skompilovať v podstate aj bez mojej 
> asistencie na vlastnom stroji. Narozdiel od C++, v Ruste je to hladký a 
> jednoduchý proces.
>
>
> * Boli pridané nové možnosti v assembler_config.yaml. Sú myslím dokopy 4, 
> nebudem ich tu rozoberať, nakoľko majú skôr minoritný význam, odporúčam sa 
> však s nimi aspoň zoznámiť, aby ste vedeli, čo sa všetko dá, podrobný 
> popis nájdete v dokumentácii.
>
>
> * Aktualizovaná dokumentácia a changelog. Aj keď som tu myslím nové 
> funkcie celkom obšírne popísal, vynechal som niekoľko drobností, hlavne 
> presných detailov písania a fungovania určitých vecí. Odporúčam si preto 
> prejsť aktualizovanú dokumentáciu, hlavne sekcie Hotkeys, Regexes a 
> Assembler_config.yaml, kde sa zmeny prejavili najviac a kde je detailne 
> popísané používanie nových možností.
>
>
> * medzi functions pribudol skript !Keyjutsu.txt. Spomínam ho preto, lebo 
> je systémový, a obsahuje dôležité funkcie pre interné fungovanie Keyjutsu, 
> ako napr. práve funkciu launchJutsu. Mazať alebo meniť ho teda skôr nebude 
> dobrý nápad.
>
>
> A to je konečne k verzii 1.2, čo do tohto mailu, všetko. :)
>
> Mal som pravdu, bolo toho dosť, ale z môjho pohľadu to rozhodne stálo za 
> to.
>
> Novú verziu by vám už mal ponúkať assembler, prípadne môžete ručne 
> navštíviť stránku:
>
> https://rastisoftslabs.com/2020/02/01/keyjutsu-superschopnosti-priamo-vo-vasich-prstoch/
>
> Kde je voľne dostupná na stiahnutie opäť ako celok, lepší spôsob mi stále 
> nenapadol.
>
>
> Samozrejme uvítam akúkoľvek spätnú väzbu, návrhy na vylepšenia, opravy či 
> celkové hodnotenia.
>
>
> Enjoy!
>
>
> R.K.
>
> 



Další informace o konferenci Fanda