Přes prázdniny jsem vyzkoušel snad všechny různé knihovny pro OpenGL
či DirectX založené na různých jazycích například Ogre3D (C++), Monogame
(C#), lwjgl (Java), heaps (Haxe), libGDX (Java), OpenTK (C#) ale u žádné
knihovny jsem nebyl 100% spokojen, jelikož jedna nemá pořádnou dokumentaci,
u druhé nefunguje metoda google u třetí pro jistotu nejsem ani schopen
spustit hello world další je zase až moc low-end ... Prostě hrůza takže to
nakonec vypadalo že zůstanu u Monogame nebo u libGDX ale pak mě napadlo ...
TypeScipt + WebGL knihovna (BabylonJS) + Electron = super kombinace všeho co
potřebuji.
Možná to zní šíleně ale opravdu jsem opět skončil u webových
technologií ... S BabylonJS jsem pracoval již dávno ale to jen v rámci webu
takže nezačínám od úplné nuly což je další + tohoto řešení. Sice
mám trochu obavy co se výkonu týče (přece jenom C++ a JavaScript je na tom
trochu jinak) ale co jsem zatím dělal testy - na slabším PC (asus
transformer book t100tam) se FPSka drží na stabilních 60 - FPS lock (dobře
zatím ten projekt není moc složitý, ale to nebude ani když bude
dokončen).
Další otázka byla a co protekce kódu? Electron momentálně zdrojový
kód nijak neskrývá, jedině lze kód zabalit do asar archivu který jde
samosebou přes NodeJS jednoduše rozbalit avšak je to lepší než-li nic.
Takže jsem začal hledat řešení jak nějakým způsobem zabezpečit
JavaScript, proti nějakému chápání kódu a při velkém štěstí zamezit
úpravy což není nijak možné, jelikož kdykoliv může kdokoliv Electronu
předhodit jiný frontend toto mi ale nijak moc nevadí pokud Electronu někdo
podhodí jiný frontend tak se prostě zobrazí jeho frontend a už to nebude
mít nic společného s mojí aplikací.
Takže sem se spíše zajímal o znemožnění čitelnosti a pochopení
kódu. Samosebou již delší dobou znám obfuscatory a jejich principy avšak
je to dostačující? Z určitého pohledu ano, protože když se to vše
prožene obfuscatorem, všechny soubory se hodí do jednoho a proběhne
minifikace tak to již tvoří poměrně slušnou ochranu a popravdě by se mi s
takovým kódem nechtělo moc pracovat je jasné, že i toto lze po nějaké
stránce slušně obejít například pomocí JavaScript debuggeru ale jak jsem
již zmiňoval u asar archivu, je to rozhodně lepší než-li nemít kód
chráněný nijak.
Ostatně když se na to podívám z druhé stránky tak Java i C# se v
dnešní době dají decompilovat a výsledek je potom podobný jako u
JavaScriptu avšak co jsem slyšel tak když se C# či Java řádně obfuscuje
tak je téměř nemožné s kódem dále nějak pracovat ale jak jsem již
zmiňoval v případě JavaScriptu je to podobné.
Vývoj mé aplikaci nyní probíhá až nečekaně dobře a to je hlavně
zásluhou TypeScriptu a aktivní komunitou okolo BabylonuJS s jediným problém
s kterým jsem se zatím potýkal byl hrozně pomalý start aplikace -
respektive Electronu to jsem vyřešil že jsem si prostě udělal tlačítko na
reload frontendu avšak mi v hlavně stále strašilo proč sakra Electron
startuje tak dlouho když obyčejný chrome startuje tak rychle ... A pak mi to
došlo ... Avast! ... Avast! zkrátka mou aplikaci při každém startu
kontroloval jelikož není nijak podepsaná, tento problém jsem jednoduše
vyřešil tím že jsem mojí aplikaci přidal do listu výjimek a najednou bylo
vše v pořádku.
Na závěr bych chtěl dodat, že dnes v JavaScriptu vytvoříte téměř
všechno a někdy i jednodušeji než-li na jakémkoliv desktop jazyku, čímž
nechci říkat že C# či Java jsou špatné ba naopak C# je úžasný jazyk tak
stejně jako Java ale prostě zrovna v tomto ohledu mi JavaScript vyšel na
nejlepší řešení .
Jinak kdyby někoho zajímalo co vlastně dělám tak se jedná o primitivní
prototyp strategické hry založené na opravdu jednoduchých principech ... Pro
celý vývoj využívám BabylonJS (WebGL knihovna zaměřená na herní vývoj), Socket.IO (networking -
multiplayer), TypeScript, Electron, SCSS (UI - některé UI prvky jsou tvořené přes WebGL na
2D canvas a některé přes HTML a CSS).
Hm, od včerejška mám nějakou smůlu, včera (2.8) mi v iPhonu jen tak
přestala fungovat SIMka (no mohlo to být horší - taky se mohla rozhodit
čtečka SIMky v iPhonu ale naštěstí ne ...) a dnes (3.8) mi jen tak
přestala fungovat klávesnice ... Docela se bojím co se stane zítra ...
Zazvoní u nás BSA s tím že mám v PC nelicencovaný winrar? ... Vím nestalo
se mi nic hrozného ale
nejsem zvyklí na to že mi jen tak přestanou fungovat věci .
Hm k videu jsem se tehdy již nedostal avšak nevidím v tom problém, co
jsem dříve jednou experimentoval s web kamerou v prohlížeči tak to nebylo
nic složitého stačilo by streamovat data z webky a posílat je stejně jako
zvuk, druhý uživatel by si jen dané data vyrenderoval v canvasu. - Electron
umožňuje vytvářet multiplatformní desktop aplikace pomocí html, css, js
tedy frontend a nodejs jako backend (systémové práce se soubory atd s tím
že z frontendu máš api k backendu) - proto canvas.
Na Visual Studio to tak skoro mať nebude... Visual Studio je vyvíjané
niekoľko rokov, je to obrovské IDE z neskutočným množstvom možností... A
.NETáci naňho pravdepodobne neprejdu...už len z princípu. Skôr to pomôže
potencionálnym záujemcom o C# z radov PHPkárov, prípadne Javistov atď. -
tých, ktorý sú zvyknutí na menší komfort...