Zaujímavé linky #12

Konečne som naškriabal nejaké zaujímavé linky. Dnes to bude od kryptografie, cez UI až po IoT.

dokan-dotnet

https://github.com/dokan-dev/dokan-dotnet

Dokan-dotnet je .Net knižnica, ktorá umožňuje vašej aplikácii vytvoriť virtuálny disk so súborovým systémom, ktorý môže používateľ normálne používať.

Využitie je potom už na fantázii - od klientov pre synchronizáciu súborov, cez vlastné šifrované disky, klienta pre NAS,…

Monocypther

https://monocypher.org/

Je to jednosúborová C-éčková knižnica, ktorá poskytuje známe kryptografické primitívy pre Ed/X25519, XSalsa20Poly1305,…

Nie je závislá na stdc, takže je vhodná aj pre jednočipové mikroprocesory alebo WebAssembly, malé programy, ktoré šifrujú súbory

Kvantové počítače a budúcnosť kryptografie

https://www.youtube.com/watch?v=JcfcSmwlFZ0

Prednáška z rýchlika ukazuje, ako sa budú na kvantových počítačoch lámať eliptické krivky a RSA .

Na záver je ukážka C# kódu pre použitie post-kvantovej kryptografie.

O tom ako sa šifrujú skupinové chaty

https://www.youtube.com/watch?v=FESp2LHd42U

Súčasné skupinové chaty (e2e encryption napr. v Trhemere, WatsAppe) sa šifrujú tak, že odosielateľ zašifruje správu pre každého účastníka zvlášť. Vo videu je nový spôsob ako to robiť efektívnejšie.

Od neuróniek ku GPT

https://www.youtube.com/watch?v=o9TwtMywEuI

Česká prednáška z tohtoročného installfestu o tom ako sme sa dostali od trojvrstvovej neurónovej siete ku Chat-GPT.

PupNet-Deploy

https://github.com/kuiperzone/PupNet-Deploy/

Dotnet tool pre multiplatformové vytváranie inštalátorov: appImage, msi, flatpack, deb, rpm, zip.

Parakeet

https://github.com/ara3d/parakeet

C# generátor parseru, doteraz som používal Piglet, ale o ten sa autor už príliš nestará. Parakeet vyzerá podľa dokumentácie a príkladov použiteľné a navyše má na ňom autor postavený vlastný programovací jazyk.

Avalonia UI

https://avaloniaui.net/

V zime som dosť riešil dektopové aplikácie, respektíve technológie okolo toho. Zorientovať sa vo svete dotnetových desktopových technológii v roku 2023/2024 nie je na jedno popoludnie.

Potreboval som niečo multiplatformové a dektopové, tak som siahol po Avalonia UI (UNO Platform mi hádzalo chybu už pri vytváraní projektu). Musím povedať, že som s ňou bol celkom spokojný.

Ide o multiplaformového nástupcu WPF, takže ide veľmi ľahko portovať existujúce WPF aplikácie. Funguje na Windowse, Linuxe, Mac-u z nejakými obmedzeniami aj mobilné platformy, smart-hodiny, web pre webassembly (ukážka), Meadow,…

Využíva MVVM pattern a XAML pohľady. Modely fungujú klasicky pomocou INotifyPropertyChange, takže ich ide písať ručne, využiť ReactiveUI, alebo Community toolkit MVVM (to ide zvoliť vo wizardovi, pri zakladaní projektu).

Na tých pár projektoch, ktoré som skúšal sa mi osvedčila kombinácia Community toolkit MVVM a DryIoc.

Dokonca Avalonia UI ide spustiť na Linuxe bez desktopového prostredia a tak si vytvoriť kiosk aplikáciu (bez browsera alebo desktop enviromentu ako medzivrstvy). To som si skúšal na Raspberry pi Zero 2.

ILGPU

https://ilgpu.net/

Ako napovedá názov ILGPU je knižnica umožňuje písať programy pre grafické karty v C#. Kernely pre grafickú kartu sa prekladajú v runtime, čo má svoje nevýhody (treba testovať), ale výhoda je, že podporuje vykonávanie pomocou Cuda, OpenCL aj CPU.

Vyzerá, že táto knižnica má väčšie možnosti ako ComputeSharp (napr. multiplatformovosť), ale je za to platené nižším pohodlím pri vývoji.

nanoFramework

https://www.nanoframework.net/

nanoFramework je platforma umožňujúca programovať embeded zariadenia (jednočipy bez operačného systému) v C#, a nie len programovať ale aj debugovať, čo je veľký posun vpred.

Pri skúšaní na ESP32 som nenarazil na problém s inštaláciou a nastavením. Pripojil som sa na Wifi, blikal LED-kou, reagoval na tlačidlá,…

No nanoFramework spôsobil zvýšenú spotrebu a zahrievanie čipu ESP32. Na čo sa sťažujú aj ľudia v diskusiách. Na výkonnejších procesoroch by tento problém nemal byť, no to neviem potvrdiť, lebo doma mám len ESP-čka.

Ako to funguje: https://docs.nanoframework.net/content/architecture/index.html.

Jint

https://github.com/sebastienros/jint

Už nejaký čas zvažujem, akú technológiu použiť na tvorbu jednoduchých pluginov: .net assembly, WebAssembly, javascript, Lua,…

V rámci bádania som narazil na Jint.

Jint je javascript interpreter pre .Net, veľkosť doľahnutých nugetov je menšia ako 1,5MB, podľa benchmarkov dobieha V8-čku. A umožňuje sandboxing a interop z C# kódom.

2 Likes

Jint…Už nejaký čas zvažujem, akú technológiu použiť na tvorbu jednoduchých pluginov: .net assembly, WebAssembly, javascript, Lua,…

Len tak zo zvedavosti, neskusal si integrovat C# scriptovanie do .NET aplikacie? Neviem presne, ako by to malo fungovat, ale Roslyn to umoznuje a urcite su na to kniznice

Ak ma pamäť neklame, tak niektoré ORM tak fungovali. Vygenerovali si custom kód a injectli ho do vlastnej dll (dnes už ale vieš to poriešiť inak). Potom si ešte musel poladiť právomoci, lebo takéto chovanie je samozrejme security risk.

Len tak zo zvedavosti, neskusal si integrovat C# scriptovanie do .NET aplikacie?

Neskusal, viem, ze nieco take jestvovalo. Ale v praxy som to este nevidel (ak neratam LinqPad, RoslinPad).

Ani som to nevidel v kode, lebo to nahradili source generatori.

Rozmyslam o pluginoch pre BouncyHsm, ale to je hidba dalekej bucunosti, lebo by som musel prekopat architekturu a momentalne si to mozu zaujemci fornkut a upravit.

A beriem to tak, ze .Net assembly je pre tazke pluginy s velkou funkcionalitou (tam to asi aj skonci), navyse velmi sa mi paci instalacia pluginov cez nugety (tak to ma napriklad Seq, mozno aj RavenDb, no to si uz nepametam). Taketo pluginy nasadzuje ten co sluzbu prvadzkuje, takze tam ma obmedzenie prav az tak nepali.

Ostatne moznosti beriem skor ako pluginy, alebo rule endgine pre pouzivatelov.

WebAssembly - vyzera to dobre, ale zatial mam pocit, ze tooling je trocho kostrbaty, aj interoperabilita (WebAssembly nema stringy, ani chary a kazdy jazyk si to riesi sam). Ak poznate na to lepsi sposob sem s nim. Alebo ukazku na to.

Lua - z mna super minimalisticky jazyk, ktory bol prave na toto vymsleny. Ale malokto ho pozna a nema async, co je dnes uz trosku problem.

JS - kazdy ho pozna, ma async, da sa obmedzit, na kratke skripty super.