Doplnění k dotazu z poslední soboty k „jednoduchému Nette debuggeru“

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Martin
Člen | 171
+
0
-

Jelikož to mnozí neslyšeli a nebyl jsem schopen se dnes večer řádně „vyžvejknout“, odpovídám zde znovu na dotaz: „Jak zajistit uchování stavu debuggeru v bezestavovém prostoru?“

Samozřejmě lze navazovat prodlevy ve zpracování (navrhoval Jakub), serializovat proměnné i callstack (nejsem si ale jist jednoduchou rekonstrukcí, nějak to řeší GUBED, který ovšem zřejmě používá klasický debugging parsováním řádků a komunikací na vlastním portu), použít spolupráci s xdebug či APD.

Jako primitivní a nejjednodušší řešení však vidím opakování requestu. Samozřejmě v tom je problém provedení akcí měnících stav databáze, filesystému, periferií atd. Pro 95% případů by to však nemuselo způsobovat problémy. A ani rychlost asi dnes už nebude hrát závažnou roli.
Pro rychlé vyřešení problému někde na webu to může stačit a časem třeba někdo přijde na lepší řešení.

Dejte vědět, zda v tom není nějaká bota v základní myšlence. Zítra to vyzkouším, budu na to mít asi hodinu, snad něco stihnu. Pak až koncem léta, takže kdo byl na sobotě a měl by zájem, napište si o nedokončené zdrojáky.

Alespoň „WWW Commander“ se pokusím dotáhnout (dořešit bezpečnost) a dát do addonů.

Editoval Martin (30. 5. 2011 13:05)

Martin
Člen | 171
+
0
-

Tak jsem si s tím přes noc hrál a musím uznat, že Jakub Vrána navrhl asi nejlepší řešení.

Tak nějak funguje obojí, zatím je to ale v nezveřejnitelném stavu. Předpokládám, že díky DI nebude problém ani zobrazit DebugBar dříve než obvykle (zatím vše zobrazuji jinde).

Na druhou stranu – většinou se „Quick Debugger“ použije po neočekávaném vykreslení laděnky, přičemž případná externí data jsou už stejně změněna, takže metodou opakovaných requestů se nic nezkazí. Pak by to mohlo fungovat i bez ajaxu či rámců, což ale není zrovna nutný požadavek. Stejně bych to raději viděl v panelu DebugBaru, kam to logicky patří a jsou tam připraveny vhodné struktury.

Editoval Martin (29. 5. 2011 8:06)

Martin
Člen | 171
+
0
-

Tak jsem zkusil rozvinout ty opakované sleepy. Skončil jsem na tom, že neumím poslat DebugBar na výstup. Po prostudování kódu to na výše zmíněnou DI moc nevidím. Jinak někde se mi sice už zobrazí, ne však tam, kde má být a ne ve správné podobě. Tušíte někdo, jak to zařídit? On se celý ukládá do proměnné, která se v Debugger::_shutdownHandler() vypisuje do javascriptové obsluhy window.onload. Když to pošlu stejně, čeká se na událost (lze ji simulovat posláním čehosi dříve?). Když to pošlu jinak, nedaří se mi nastylovat DebugBar a panely na svoji obvyklou pozici.

Editoval Martin (29. 5. 2011 23:03)

Martin
Člen | 171
+
0
-

Tak už jsem na to částečně přišel. Když tam ještě nemám šablony, kde natahuji jquery , musím jej (nebo nette.q) nejprve natáhnout z kódu „breakpointu“. Už mám debugBar viditelný i po dobu sleepu, jen mi ještě vzápětí spadne javascript. No nic, teď na to tak měsíc nemám čas, pak se ozvu.

Editoval Martin (30. 5. 2011 0:16)

Martin
Člen | 171
+
0
-

Tak jsem konečně 1st pre-alpha WWWCommanderu zprovoznil na hostingu. Zkoušejte, kritizujte, hackujte (nesmí se to dostat výš ve filesystému!) na projekty.netuje.cz/WWWCommander/www klikem na ikonu továrny. Jelikož to ještě není zajaxované, funguje vše velmi pomalu a pro získání focusu použijte po každém překreslení shortcut F11.

Zabezpečení je definováno v config.neon. Nastavují se tam prvotní adresáře (pak už se oba panely ukládají do session) a hledaný povolovací soubor, zde .wc (hledá se „nejblíže výše“ v kompletní cestě). Po vybrání a stisku F3 si jej můžete prohlédnout a změnit (F3 zatím stejně jako F4 pouští R/W editor a to i bez ohledu na restrikce).

Fungují shortcuty F3(nyní stejně jako F4), F5, F6, F7, F8, Enter, tabelátor, F11 a samozřejmě myš včetně doubleclicku. Pozor, bez většího upozorňování to přesouvá a maže i neprázdné sdresáře. Nezkoušejte, prosím, rekurzi (kopírování či přesun adresáře do jeho podadresáře). Není to ještě ošetřeno a ošklivě to zahltí server.

Editor najdete v panýlku Edit, mezi soubory se přepíná selectBoxem nahoře. Zatím nefunguje automatické ukládání, readonly stav, zvýrazňování syntaxe, ani vkládání breakpointů a trasování zobrazeného PHP či Latte kódu (vše je rozpracované, ale nemám teď čas to dokončit).

Jen tak mimochodem – struktury pro zatím nedokončený „debugger“ najdete v panelu Variables na vývojovější verzi.

Pokud by někdo řešil stejnou drobnost jako já (3 hodiny zbytečné práce, nakonec to bylo na fóru, ale netušil jsem, že jde o „Nette“ záležitost) – Nette odchytává warningy včetně restrikcí open_basedir. Po dlouhém hledání jsem došel k tomu, že pro prohledání celé cesty musím při hledání „povolovacího“ souboru místo try/catch použít Nette ekvivalenty:

function my_file_exists($filePath) {
    Debugger::tryError();
        return file_exists($filePath);
    if(Debugger::catchError($message))
    {
        return FALSE;
    }
}

Způsobí to ošklivé (ale mnou zde požadované) chování ze starého PHP.

Editoval Martin (30. 5. 2011 21:20)

bauer01
Člen | 30
+
0
-

cau,
bude to na Githubu?

Martin
Člen | 171
+
0
-

Zatím ne. Použil jsem tam „very obtrusive“ javascript, šablony smíchané s php a další šílenosti, hlavně aby to bylo při nedostatku času co nejrychleji hotové. Takže spíš to zpřístupním někomu, koho zaujme základní myšlenka a bude mít schopnosti, chuť i čas to přepsat. Nebo si ten čas najdu já o prázdninách a pak to tam dám, případně některé části rovnou do addonů.

Tady spíš zjišťuji, jestli o to vůbec bude zájem, hledám další náměty a připomínky hlavně ohledně bezpečnosti. Moje vzdálená představa je nahrát skeleton na server, a za čtvrt hodiny tam naklikat a odladit web dle nejběžnějšího zadání (něco jako soutěž na poslední sobotě, ale i pro líné lidi, jako jsem já).

Případně přijít za zákazníkem a než mi vylíčí, co má web umět, mít ho naklikaný na netbooku (u mě spíš na mobilu). S tím, že vše by se generovalo podle best practices a nebyl problém cokoli kamkoli dopsat.

K tomu ale je hodně dlouhá cesta, takže alespoň ten commander, viewer a editor bych chtěl v případě zájmu komunity zprovoznit tak do konce léta. Důvod pro použití PHP je ten, že pak mi stačí opravdu větší mobil s prohlížečem, nepotřebuji javu, windows ani drahý software. Vždyť i tady na fóru jsem tak aktivní díky dlouhému cestování s mobilem v MHD :-)

Editoval Martin (30. 5. 2011 22:44)

bauer01
Člen | 30
+
0
-

ja bych urcity zajem mel. Delam na necem podobnem, teda spise jen neco jako spravce souboru pro uzivatele a takovy webovy IDE editor si tam dovedu predstavit jako plugin/aplikaci – oznacis soubory a otevres je treba prave v tom tvem editoru.

Kdyztak na to mrkni, pokud by te to zaujalo

Demo

GIT

Kdybys udelal treba jen ten IDE editor jako konfigurovatelnou komponentu, kterou vezmu a pouze ji vlozim do sve slozky „plugins“ a zaregistruju ji, tak by to bylo super :-)

Editoval bauer01 (30. 5. 2011 22:31)

Martin
Člen | 171
+
0
-

Koukal jsem na to, ale na můj mobil je to moc velké (mám komunikátor 640×200 px).

Jak řešíš ten upload? Já bych rád dostal do jednoho z panelů výpis lokálního adresáře s možností rekurzivního uploadu celých podadresářů. Má to sice umožňovat javascript podle jakési připravované specifikace, ale spíš doufám, že to neprojde (při sebelepším zabezpečení bych javascriptu jako uživatel moc nevěřil).

Takže jsem zkoušel ládovat do iframu data přes lokální server (stejně většina vývojářů má php na desktopu stále puštěné), případně zaregistrovat vhodný protokol a napsat dobře zabezpečenou desktopovou aplikaci (něco jako wshosts, ale po svém), to by ale zase běhalo jen na windows. Možná to vyřeším spíš portovatelnou desktopovou aplikací s přímým přístupem na internet, která bude na pozadí jen vyměňovat data (po předchozím dotazu na uživatele). Já jsem C++ programátor, asi to zvládnu rychleji než weby.

Na editor se koukni na výše zmíněném odkazu. Přidat do něj javascript pro doplňování kódu a zvýrazňování syntaxe by neměl být problém, volně ke stažení je toho dost. Já jsem spíš řešil spolupráci s debugbarem Nette. Ta umožňuje jednu na první pohled nepostřehnutelnou výhodu. Pokud něco zedituješ a uložíš, stačí zmáčknout F5 a změna se Ti hned projeví na webu zobrazeném pod tím, který je zobrazován nezávisle. Například mobilní opera nemá taby, které to jinak také řeší :-)

Jinak pro Tebe asi stačí tohle zadělat do běžného Nette formuláře.

Editoval Martin (3. 6. 2011 23:06)

Martin
Člen | 171
+
0
-

Hmmm… tušíte někdo, jak dostat codepress nebo editareu do debugbaru? Ať dělám, co dělám, neobarvuje a neobarvuje.

Editoval Martin (2. 6. 2011 10:10)

Martin
Člen | 171
+
0
-

bauer01: Tady jsem Ti udělal příklad pro Nette kód. V běžném formuláři není problém "EditAreu: použít, problém je to v panelu DebugBaru, nějak se tam tlučou styly a javascript.

Editoval Martin (4. 6. 2011 22:08)

Martin
Člen | 171
+
0
-

Tak je tam. Občas to ještě blbne, chce to po kliku na ikonku editoru překreslit F5, zatím se neotvírá soubor vybraný v commanderu, ale už je to v debugpanelu. Na druhou stranu – práce s tím spojená je neúměrná výsledku, asi to chtělo spíš vlastní okénko a nelpět na DebugBaru.