Diskuze: Desktop Launcher
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Vlastník

Zobrazeno 39 zpráv z 39.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Já mám všechny často používané programy v dolní liště vedle startu,
tu lištu mám roztaženou na dva řádky, i když teď zrovna mám obsazený
jen jeden řádek, takže já bych to asi nevyužil
Tak já bych využití rozhodně našel Vypadá to docela užitečně.
Co přesně se skrývá pod ikonkou chromu?
Když klepnu na ikonku chromu, spustí se mi chrome Si nadefinuješ jak to má vypadat.
Naházíš si tam co chceš, jaký chceš ikonky, jaký chceš názvy...
Tak to je rozhodně užitečný . Každopádně já bych spíž ocenil aby to umělo takové věci jako
otevřít nějaký předem nadefinovaný seznam stránek. Kupříkladu kliknu na
chrome a vyjede mi seznam skupin stránek které bych si chtěl otevřít.
Třeba pracovní kdy by se mi otevřel google, gmail atd...
Sme zkoušel, to nejde, funguje to jenom s *.exe. To já neovlivním bez většího zásahu do systému. Ovšem můžeš si udělat jednoduchej baťák (ten by mohl fungobat) nebo si ho pak přehodíš do exe a ten ti bude spouštět ty stránky. To už je jednoduché.
přes argumenty spustit v chrome víc stránek najednou nejde?
Jo takhle to myslíš. To by mohlo jít... zkusím
Edit: jop jde to:
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe devbook.cz google.com
Pěkný. Zhruba tak mi to funguje na mém desktopu už mnoho let. Je fajn, že se to dostalo už i do Windows.
jj.. taky sem už slyšel, že se na linux konečně dostavaji hry..
Šak právě od tebe jsem to obkoukal Se mi hrozně líbí plocha bez
ikonek.
Dobrý vtip. Těch pár desítek her mi bohatě stačí.
Také jsem slyšel, že na Windows už konečně funguje multiuser. Je to
pravda?
Vždycky mě zvedne ze židle, když nějaká "skvělá aplikace" má vytapetovány všechny okraje pracovní plochy ikonami. Děsně mě to ruší. Asi proto nesnáším IDE. Bývají děsně přeplácané a na samotnou práci zbývá jen minimální prostor uprostřed.
Většinou ty panely s ikonkama můžeš schovat/přesunout/zmenšit
Jenže pak se to IDE stává nepoužitelným, resp. se z toho stane obyčejný editor. Raději zůstávám u svého oblíbeného Vimu a jeho přetížených a překrytých maker.
Nemusíš schovávat všechny panely, ale jen ty, které nepoužíváš nebo používáš málo.
A dnešní monitory jsou tak velké, že většinou máš (co se týče do šířky) v editovacím okně stejně vedle kódu tolik místa, že tam klidně nějaké panely být můžou a stále je tam rezerva, např u mě ve Visual Studiu můžu na řádek bez zalamování napsat klidně 180 znaků i víc, ale pak už se ten kód stává hůř čitelný, tak se snažím to nacpat do 80, případně cca 60 znaků na řádek.
Už jsem psal, že stejně nemá význam psát delší řádky než 80 znaků, protože pak se s tím špatně pracuje. Raději si zvětším písmo - většinou mám nastaveno 15px.
Ještě jsem prostě nepřišel na to, v čem je IDE výhodnější.
Právě proto netuším, jak se ti můžou panely plést, když je můžeš (alespoň v rozumných programech) nastrkat do stran, kde máš místa spoustu, protože i 80 znaků textu zabere jen asi půl obrazovky na šířku.
Pokud i ten editor má nějakou formu Intellisense, tak sílu IDE většinou pocítíš až při debugování - breakpointy, krokování kódu, sledování obsahu proměnných, úprava kódu za běhu, atd.
Mně se ty panely nepletou. Jen mě ty ikony na nich rozptylují. Prostě
ruší mé kruhy
Debugování nedělám, takže zbývající funkce nepotřebuji.
Aha, tak to pak jo, mě to tam nijak neruší
99% programátorů debugování používá, takže IDE je asi pro těch 99%
zbylých programátorů
Asi patřím mezi to 1 % programátorů, kteří místo pracného
debugování raději pohodlně testují
Evidentně vidíš pod pojmem debugování něco jiného než já, jinak by
jsi nemohl napsat, že debugování je pracné a testování pohodlné
Testy píšeš vždy, i když je testovaný kód správný, což mi přijde jako zbytečná práce navíc.
Debugování provádíš až ve chvíli, kdy narazíš někde na chybu -
třeba nějaká funkce vrací něco jiného než by měla - tak ji jen
prokrokuješ příkaz po příkazu a najdeš místo, kde je chyba
Myslím, že je evidentní, která metoda je pohodlnější a stojí méně
práce
Samozřejmě jsou situace nebo části programu, kde je důležité, aby nebyla žádná chyba, tam používání testů schvaluji.
To je debata mezi dvěma extrémy Když uděláš v metodě chybu, může se to projevit úplně jinde,
od toho jsou testy, chyba se ti vždy neprojeví jen na té části, kterou teď
zrovna píšeš a testuješ. Test uděláš jednou a pokud si něco rozbiješ,
přijde ti na to starý test, co jsi dělal předtím.
Teoreticky bys opravdu při dobrém pokrytí testy a dekompozici na jednoduché metody debugování nepotřeboval, prakticky to bude ale vypadat trochu jinak a nahlížení do obsahu proměnných se hodí, stejně tak i krokování.
Kde bereš jistotu, že je testovaný kód správný a správný zůstane i po provedení zdánlivě nepodstatných změn? Nezapomeň, že nejprve se píší testy. V tu chvíli netušíš, jestli bude testovaný kód správný, protože ještě žádný neexistuje.
Krokování funkcí je prakticky zbytečné, pokud dodržuješ jejich délku do 15 řádek.
Testování je poměrně zábavná činnost, při které produkční kód vzniká jaksi mimochodem. Výsledný kód bývá zpravidla i kratší a přehlednější.
Zase více kódu (testy), větší šance udělat chybu, to se pak musí
špatně hledat, když uděláš třeba chybu v testu a honíš neviditelnýho
draka, ne?
Testováním se nedá dělat veškerý kód, to je jasné. Integrační testy jsou také potřebné. Test samozřejmě může nahlížet do obsahu proměnných a testovat, zda je v nich správná hodnota, ale zpravidla to není nutné. Kvůli tomu se dělají mocky, aby se nasimulovaly všechny možné stavy. Do kódu se dále dávají asserty, které jsou během testování zapnuté, v produkci jsou však vypnuté kvůli výkonu. Přepínání se děje zcela automaticky.
Bylo prokázáno, že při TDD je zpravidla provedeno méně úhozů na klávesnici, než při debugování. Navíc po testování ti zbudou stále použitelné testy, po debugování jen výsledný kód a nic víc.
Že bych zkusil Googla? Nebo si snad myslíš, že si pamatuji, na které stránce jsem to před mnoha lety četl?
Testy se dají psát dobře i špatně. Fakt si myslíš, že když napíšeš kód a pak ho debuguješ, strávíš na tom méně času než v TDD?
Jde také o to, že TDD tě donutí psát programy přísně objektově, protože když je objektově neuděláš, stane se z testování debugování. Pokud jsi zvyklý psát metody na 1000 řádek, tak ti TDD nepomůže, ale naopak bude jen zdržovat. Jenže pokud děláš TDD, tak ani tak dlouhou metodu nenapíšeš.
Bylo prokázáno, že při TDD je zpravidla prováděno více úhozů.
Ano, myslím, pokud to není nějaký kód, kde je cílem nulová chybovost.
Psát metody na 1000 řádek zvyklý nejsem, v takovém špagetovém kódu
bych se nevyznal, mám rád přehlednost (I když to tak občas v mém kódu
nevypadá, hlavně po různých úpravách ).
Podle mě jsi moc nepochopil ten princip testování. Nejde o to testovat funkčnost, která právě teď funguje, ale funkčnost, která by někdy fungovat nemusela (tj. většinou celý kód krom pár věcí - samozřejmě, jak už bylo řečeno, nejde testovat všechno). Kód, kde je cílem nulová chybovost, je alespoň pro mě (a klienty) každý. Nulové chybovosti nedosáhnu nikdy, ale testování mi k tomu pomůže. Krom toho mi testování pomohlo psát lepší kód. Nutí člověka zamyslet se nad tím, co dělá.
Celkem bych i věřil tomu, že když testuješ, napíšeš méně kódu, protože když netestuješ, máš mnohem větší pravděpodobnost chyb. Celkem mě taky zaráží, že to v C# není běžné. Myslel jsem, že právě v C# se už testování bere jako samozřejmost.
Ale teď k tématu
David Jančík plánuješ zveřejnit zdrojový kód?
Já chápu, jak TDD funguje, ale nemyslím si, že se hodí vždycky, je to jen jeden z možných postupů a rozhodně není ten jediný správný, podobně jako není jediné správné objektové programování, prostě jsou situace, kdy se hodí jeden postup a situace, kdy se hodí jiný postup.
Dalším problémem je to, jak to ve většině firem funguje - tam si o
těchto věcech, které vás učí ve škole, můžete často nechat jen
zdát.
TDD jsem zatím nepotkal nikde (a sám programovat přes TDD je asi nesmysl),
návrh aplikace většinou není moc detailní a požadavky na (i docela velké)
změny přicházejí často.
Přepisovat kvůli nějaké větší změně půlku testů by mě asi moc
nebavilo.
Navíc nikdy nevíte, jaké spolupracovníky do týmu dostanete, občas člověk
nestačí zírat, čeho jsou někteří "programátoři" schopní
Samozřejmě každý se snaží mít počet chyb minimální, také občas nějaký test napíšu, ale jen pro nějaká kritická místa, kde je větší pravděpodobnost, že jsem nějakou chybu udělal.
Může to výborně fungovat, pokud máte pevné a neměnné zadání (nebo jen opravdu malé změny) a pokud váš tým včetně vedení je na TDD připravený, ale v praxi to tu zatím moc nefunguje.
Jop, když je zájem, přidám ho Jen musím udělat ještě nějaké úpravy, trochu to zjednodušit a
popsat. Je to tam samá rekurze
Ale celkem jsem si to tam zjednodušil. Když hledám cestu k danému
prvku:
DesktopLauncher
- Menu1
- SubMenu1
- SubSubmenu1 -> chci cestu sem
- SubMenu2
- Menu2
Tak jdu jako v rodokmenu, od potomka až po všechny známé předky. A abych nemusel data dávat do nějakého Listu, tak využívám rekurze:
private string GetParrentText(MenuItemExtended menu)
{
string prefix = "";
if (menu.Parrent != null)
prefix += GetParrentText(menu.Parrent);
if (menu.Parrent == null)
prefix = "DesktopLauncher." + prefix;
else
prefix += menu.Text.RemoveInvalidCharacters() + ".";
return prefix;
}
To si myslím, že sem celkem vyšéfil. Teď mám jiné povinnosti, ale
myslím, že v pátek bych to mohl vypustit
V TDD programuji hlavně pro sebe. Je s tím o hodně větší sranda než s nějakým laděním. Netvrdím, že je to jediný správný postup, ale pokud ho pochopíš jako cestu nikoli nutnost, je to přínosem hlavně pro programátora.
Není dobré, pokud někdo píše testy a někdo jiný píše kód. Měl by to dělat jeden programátor nebo v týmu by se v této roli měli střídat. Také je nesmysl dělat hned na začátku komplexní testy. Musí se vyvíjet souběžně s kódem. Jinak to brzy začneš považovat za zdržující zlo.
Při větší změně zadání se přepisuje jen jedna metoda, maximálně jedna třída, takže přepisuješ jen jednu sadu testů.
TDD funguje výborně právě pro měnící se zadání, pro velmi časté změny. Vedení by mělo podporovat vývoj touto technikou, ale dá se to provozovat i vedení navzdory, protože dobře prováděné TDD zvyšuje produktivitu.
Rekurze je v pořádku. Tuhle jsem dělal reflexi na rodiče třídy a první verzi jsem měl také rekurzí. Teprve při refaktoringu jsem z toho udělal cyklus, protože to vypadalo o něco lépe.
A jak si to procházel tím cyklem? Já to potřebuju poskládat od předu do zadu (tedy od rodiče po potomky) a začínám u potomka a pokaždé znám jen odkaz na rodiče.
Mám to takhle:
static Object[] getAncestors(Class<?> c) {
List<Class> seznam = new ArrayList<Class>();
if (c != null) {
Class<?> ancestor = c.getSuperclass();
while (ancestor != null) {
seznam.add(ancestor);
ancestor = ancestor.getSuperclass();
}
}
return seznam.toArray();
}
Neměl by být problém před returnem obrátit pořadí
Collections.reverse(seznam);
Zjistil jsem, že ta vnější podmínka je zbytečná. Můžeš ji klidně vyhodit.
Zobrazeno 39 zpráv z 39.