Proč mám při vývoji v Lotus Notes chuť řvát vzteky

Lotus Notes byla vždy dost specifická platforma. Spousta věcí se tam dělala jinak než jinde. Spoustu věcí musel člověk řešit formou drbání se levou nohou za pravým uchem, anebo rovnou tweakováním celé platformy. Kdo si také aspoň jednou nevyzkoušel ohnout celý ten bordel pomocí céčkových knihoven, že?

Problém celé platformy tkví v prostých faktech:

  1. Je to prastará platforma. Celé jádro, byť mnohokrát přepracovávané, stojí na knihovnách z počátku devadesátých let a všechny verze s sebou nesou kompatibilitu se vším, co za těch víc než dvacet let vzniklo. To má spoustu nepříjemných důsledků. Céčkovým jádrem počínaje, megalomanským a všudypřítomným cachováním konče.
  2. Všechno je tam provázáno a závislé jedno na druhém. Když vám spadne klient, spadne vám všechno. Když vám něco zatuhne, zatuhne vám všechno. Chápu, že je to asi snažší vyvíjet, ale když pracujete s něčím, co vypadá jako přehnojená radioaktivní cibule, kdy musíte oloupat spoustu vrstev, abyste se dostali k podstatě, je to oser a ne práce.

Pro vývojáře se to zpravidla projevuje tak, že by po pár hodinách vývoje nejraději rozmlátil počítač. Pár příkladů za všechny:

Píšu knihovnu v Lotusscriptu. Otevřu designera, vytvořím novou knihovnu, načrtnu si strukturu tříd a začnu do nich implementovat funkcionalitu. Po třech hodinách to IDE spadne. Počkáte, až proběhne NSD a nastartujete to znovu. Po pár povinných minutách, kdy se do paměti nahrává celý javovský backround (java tooling) otevřete svou rozpracovanou knihovnu a vzápětí se o vás pokusí infarkt. Ač jste pracovali v serverové replice a celé tři hodiny poctivě ukládali, máte tam stav z rána, což jsou pouhé kostry tříd. Tři hodiny práce v prdeli. A proč? Kvůli lokální cache, kam se práce ukládá, než se odsype na server.
Kvůli tomu získáte návyk vyvíjet v lokální replice a kromě pouhého Ctrl+S mačkat ještě Alt+F,R,R,ENTER, což zreplikuje změny a odsype cache. Nemusím snad říkat, že taková práce se výrazně protahuje.

Nebo vyvíjím webové rozhraní. Připravím si model, nějakou xPage a k ní controller v podobě managed java bean, kterou strčím do view scope. So far so good.
V té xPage mám tlačítko s event handlerem, který na zmáčknutí zavolá metodu deleteSetting(setting) v controlleru. Celou dobu to funguje, až najednou uděláte nějakou změnu v modelu, která s tím vůbec nesouvisí a fungovat to přestane. Hlásí to, že metoda deleteSetting(setting) neexistuje, byť se na ní právě díváte a nic jste s ní nedělal. Nic nepomáhá, ani Clear na projektu, ani replikace. Když si pak vytvoříte v controlleru novou metodu třeba doHovno() a přiřadíte jí tomu event handleru, fungovat to začne, a to i v případě, že tam vrátíte původní metodu deleteSetting(setting). Najednou je vše v oukeji a Lotus Notes na vás jen lišácky pomrkávají.

Anebo vám Designer (based on prehistoric Eclipse) začne házet chyby MojeTrida cannot be resolved to a type, i když tu konkrétní třídu má ve stejné package. Ale stačí vytvořit novou build složku, přetáhnout do ní celý projekt, počkat, až si přebuilduje importy a pak to přetáhnout zpět. A najednou je to opět sluníčkové.

Vůbec mám pocit, že těch chyb, kdy něco dlouho fungovalo a najednou to fungovat přestalo, přičemž stačí provést nějaký iracionální rituál a najednou to zase funguje, je tam čím dál tím víc. A to nemluvím o chybách klienta a serveru, kdy se třeba cache nějakého pohledu drží tak pevně, že musím restartovat server, aby se pustila, anebo neustálých pádech některého z klientů, které s sebou samozřejmě berou i ostatní klienty. A nemluvě o chybách, které se ani nikde neprojeví, nezapíšou, neukážou a člověk ani neví, zda je to chyba.

Jsou to i takové drobnosti, kdy mi prohlížeč ukáže debug chyby 500 a já nemůžu v žádném prohlížeči zaboha rozkliknout sekci se stackem, protože je tam zase nějaká zasraná chyba ve stylech, nebo javascriptu nebo v čem…

Problém je, že těch “drobností” je strašidelně moc. Někdy řeším třeba dvě hodiny nějakou věc, která pak najednou začne zázračně fungovat a já nevím proč vlastně. Unavuje mě to. Chtěl bych, aby to alespoň zhruba dělalo to, co má a alespoň zhruba informovalo o chybách tam, kde jsou. Chtěl bych mít vývojové prostředí naprosto nezávislé na zbytku ekosystému, abych nemusel neustále řešit, jaké krámy momentálně má nějaký jiný klient, popř. kde se zase doprdele zasekla lokální/serverová/nebo jiná zajebaná cache.

Fakt toho chci tolik?

Komentování je uzavřeno.