[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