• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Jo, Click & DoubleClick rozlisuje OS. Takze aplikace dostava zpravy, MouseDown, MouseUp, Click, DoubleClick.

    Jestlize ti OS neposila DoubleClick, tak by sis to mel nejak vosefovat na jednom miste. A zaridit si vlastni Clicky a DoubleClicky. My jsme to tak nakonec museli udelat ve Flashi, kde sice dostanes jak Click, tak DoubleClick, ale pri DoubleClicku dostanes i 2x Clicky.

    NECROMAN: Jak rikam - tohle napojeni ti nepomuze, protoze ty zpravy z OS se zpracovavaj v nejakym poradi, ktery neodpovidat tomu poradi v case.
    NECROMAN
    NECROMAN --- ---
    TENCOKACISTROMY: Asi tam dam nejakou globalni promennou "IsCommandActive", ktera bude navazana bud na CanExecute commandu nebo pres converter na IsEnabled na tlacitka, nez delat 20 promennych IsCommandAddXyInProgress.
    NECROMAN
    NECROMAN --- ---
    TENCOKACISTROMY: tady jde spise o dvojite kliknuti omylem. Pokud vim, tak treba Win aplikace umi rozlisit click a doubleclick a nepusti tam zkratka dvakrat kliknuti, ale u Windows Phone kdyz se dvakrat dotknu buttonu, tak to pusti oba clicky.
    Dost aplikaci na tom treba vylitava, pokud nejaky button presmerovava na webovou stranku, tak pokud se klikne dvakrat za sebou, tak to druhe volani schodi aplikaci, protoze Show Web task haze vyjimku, pokud aplikace neni v popredi.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: V tom pripade ti ale zasednuti tlacitka nepomuze. Postupnost akci totiz bude:
    - click na tlacitko
    -- zasednuti tlacitka
    -- pridani itemu
    -- odsednuti tlacitka
    - click na tlacitko (podruhe)

    Jediny jednoduchy reseni co me napada (ale asi nebude spravne), ze by to tolacitko bylo sedivy po nejaky cas. Ale UX tim podle me docela dostane ranu. Pokud ale tvi uzivatele nejsou schopny rozlisovat click/doubleclick, tak to mozna bude ve vysledku lepsi.
    NECROMAN
    NECROMAN --- ---
    TENCOKACISTROMY: bezi synchronne, ale kdyz omylem uzivatel klikne na button, tak se to zkratka zavola dvakrat se stejnym parametrem, coz muze treba zpusobit i dvojite pridani noveho itemu.
    Vim ze to mam nekde blbe, ale jen resim, jak to opravit co nejelegagneji. Konkretne jedna se o AppBar buttony ve WP7.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: A to ta tvoje operace bezi asynchronne? Protoze jestli bezi v UI, tak ti zadny nastavovani lze/nelze spustit nepomuze. Proste se ti to opravdu pusti dvakrat.
    ESY
    ESY --- ---
    MICA: on click vubec neresis. Resi se defaultne jen command. kterej si tam obhospodaruje canexecute. Pokud se teda bavime o mvvm
    MICA
    MICA --- ---
    NECROMAN: Nebylo by lepší nějak ošetřit "remove item" operaci? ;) Já osobně bych místo xyzButton.Enabled používal nějakou nějakou stavovou proměnnou (buď jednoduše bool nebo si vytvořit nějaký Enum s možnými stavy).

    ESY: Když zvrhle rovnou v obsluze OnClick eventu řešíš něco co může trvat déle než dvojklik? :)))
    ESY
    ESY --- ---
    NECROMAN: tak u buttonu mas snad can execute ne ? nenapadame ted moc kdy to co pises muze nzastat. :]
    NECROMAN
    NECROMAN --- ---
    Dotaz, jaky je tak best practice v GUI aplikacich, jak predchazet situacim, kdy uzivatel omylem dvojklikne na nejaky button nebo odkaz,aby se operace neprovedla dvakrat? Dneska jsem zjistil, ze mi pada app treba na "remove item" operaci, protoze druhe spusteni uz nenajde ten originalni objekt v kolekci.

    Napada jako nejlepsi uzamknout IsEnabled u buttonu, kdyz se vykonava operace, nebo vite i o chytrejsim reseni?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    H_U_N_T_E_R: Jen tak strilim od boku, ale pro kazdyho uzivatele/kontajner-opraveni by jsi mohl mit samostatnou aplikacni domenu. Pri prijmu requestu by jsi zjistil zda ji uz mas nebo vytvoril novou.
    H_U_N_T_E_R
    H_U_N_T_E_R --- ---
    Umíte někdo s WCF Data Services? Mám multitenant aplikaci, kde práva pro přístup k jednotlivým resources se nastavují dynamicky. Problém je, že z nějakého důvodu (pseudo-obhájení: http://blogs.msdn.com/b/marcelolr/archive/2008/06/16/so-special-initializeservice-in-ado-net-data-services.aspx ) nemám možnost vynutit si rekonfiguraci / nastavit práva dle lognutého uživatele (funkce na to se volá jednou za život appDomain). Navíc podle reflektoru tu settings cachují na základě GetType a ne na základě URL.
    Napadá někoho prosím nějaká obezlička?
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    class PolozeniKamenu - to fakt neni dobry kandidat na class :)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Nojo, zase skola a odevzdavani prvnich praci na posledni chvili.
    ESY
    ESY --- ---
    CERMINEK:
    jo tak udelej si neakej objekt



    Treba CStone
    {
    public EColor Color {get;set;}
    public EStoneType StoneType {get;set;}
    }

    enum EColor { Black, White }
    enum EStoneType { Normal,Dame}

    pokud chces mit teda pole tak ho nedelej stringu ale tech CStone[,]

    nekde si udelej tu inicializacni tridu. Co to pole naplni.

    A pak dal ty metody

    uz budes jen itinerovat ostatni sutry s neakejma podminkama.

    Kouk jsem an to jen rychle
    CERMINEK
    CERMINEK --- ---
    ESY: To bych rád věděl i já :) mám zadání úkolu a nulovou znalost OOP :/

    Ten paskvil co mám je tady http://pastebin.com/VJpKgRxA a zadání je v prvním komentu... Tak nějak jsem načal strukturu tříd, ale tím jsem asi skončil...
    ESY
    ESY --- ---
    CERMINEK: popravde ted nevim co presne myslis a ani co chces :]
    CERMINEK
    CERMINEK --- ---
    [C#] using System; using System.Collections.Generic; using System.Linq; using Syst - Pastebin.com
    http://pastebin.com/VJpKgRxA
    Za jakoukoliv radu, jak to rozchodit budu vděčný... odevzdávám dneska v noci... ach ta proktrastinace :(
    CERMINEK
    CERMINEK --- ---
    Tak jsem to nakonec vyřešil, že to naplním natvrdo... To pole se takhle vytvoří jen na začátku... teď pro změnu řeším jak to rozepsat do objektů a tady jsem v koncích i s nápovědou...
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    MORMEGIL: retezec jsem vybral v duchu pseudokodu, pac jsem netusil jak to definuje :) nicmene s rozlozenim sutru mas recht, je videt ze uz jsem nad ranem moc pozor nedaval.

    MORMEGIL
    MORMEGIL --- ---
    SHIGORBIRDMAN: Tak puristi by hlavně takovýhle věci nereprezentovali řetězcem, žeáno. Navíc on očividně nechce střídání barev na pozadí (ty se ostatně dají zjistit přes (x+y)%2), ale počáteční pozice kamenů. ;-)

    Nějakým cyklem se to dá zařídit třeba zcela obecně takto:
    const int INITIAL_PIECE_ROWS = 3;
    const int ROWS = 8;
    const int COLUMNS = 8;
    for (int player = 0; player < 2; ++player)
    {
    	for (int row = 0; row < INITIAL_PIECE_ROWS; ++row)
    	{
    		int realRow = player == 0 ? row : ROWS - row - 1;
    		for (int col = realRow % 2; col < COLUMNS; col += 2)
    		{
    			Console.WriteLine("Kámen hráče {0} na {1};{2}", player + 1, col, realRow);
    		}
    	}
    }
    


    Anebo by to mohlo fungovat i nějak takhle ;-)
    var pieces = Enumerable.Range(0, ROWS)
    	.Where(row => row < INITIAL_PIECE_ROWS || row >= ROWS - INITIAL_PIECE_ROWS)
    	.Join(Enumerable.Range(0, COLS), _ => 0, _ => 0, (row, col) => new { Row = row, Col = col, Player = row >= INITIAL_PIECE_ROWS ? 2 : 1 } )
    	.Where(x => (x.Row + x.Col) % 2 == 0);
    
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    (puristi a optimalizatori by pochopitelne dali misto x a y < 8 porovnavani s length, aby mel compiler radost a mohl vypnout boundary check :))
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    CERMINEK: nic elegantnejsiho nez tohle mne nenapada.

    bool markh1 = true;
    for (var y = 0 ; y < 8; y++)
    {
    for (var x = 0; x < 8; x++)
    {
    if (markh1) pole[x,y] = "h1";
    else pole[x,y] = h2;
    markh1 = !markh1;
    }
    marhh1 = !markh1;
    }

    nicmene v tomhle pripade bych opravdu spis udelal statickou inicializaci typu

    pole = { {"h1", "h2", "h1", "h2", "h1", "h2", "h1", "h2"},
    { "h2", "h1", "h2", "h1", "h2", "h1", "h2", h1}, a tak dal....
    CERMINEK
    CERMINEK --- ---
    CERMINEK: TAk jsem začal pracovat na tomhle úkolu a narazil jsem na první věc, kterou tak nějak nevím :/ Potřebuji naplnit dvourozměrné pole pro hru dáma, tzna uložit na pozice 0,0 2,0 4,0 6,0 1,1 3,1 5,1 7,1 0,2 2,2 4,2 6,2 hodnotu "H1" a na pozice 1,7 3,7 5,7 7,7 0,6 2,6 4,6 6,6 1,5 3,5 5,5 7,5 hodnotu "H2", ale nedaří se mi vymyslet elegantní cyklus, kterým bych to pole naplnil.. Nebude lepší to naplnit "ručně"? Tohle pole se naplní vždy na začátku, než se s ním začne pracovat...
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    H_U_N_T_E_R: aha.. kazda konference misi mit zrejme svuj retro koutek pro pametniky, chapu ;D

    TENCOKACISTROMY: a podobne je to i s tim Springem prave :))
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    H_U_N_T_E_R: obzvlast FoxPro je zajimava oblast pro dusevni masochisty :)
    H_U_N_T_E_R
    H_U_N_T_E_R --- ---
    BUTHRAKAUR: starší technologie jsou potřeba. Třeba loni podle user voice hlasování byl největší zájem o FoxPro :-D
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    H_U_N_T_E_R: je to proste z pohledu .NET cca 5let stara technologie preportovana z Javy. XML hell, IOC s tak max 50% funkcionalitou .NET konkurence a tak. Bohuzel jsem ted nucen s tim cca pul roku zapasit (zrovna kousek od Petra) a je to vazne jedna z nejhorsich veci, co se kdy .NETu prihodila :) Ale prednaset umi dobre - to je pravda..
    Proste mne jen zarazilo, ze mezi tema vesmes hodne zajimavejma prednaskama o novejch/modernich tematech, pristalo zrovna tohle.
    H_U_N_T_E_R
    H_U_N_T_E_R --- ---
    BUTHRAKAUR: vybíráme tak, že pošlem request do MVP konfery, na Microsoft a po lidech, kteří něco zajímavého přednášeli, případně o nich víme, že umí dobře přednášet.
    Petr Puš je zrovna ta poslední kategorie :-). Se Spring.NET jsem nikdy nedělal, takže upřímě netuším jak moc je to zavržení hodné. Když mi tohle téma posílal, tak jsem mlčky předpokládal, že když v tom dělá Unicorn ty svý mega projekty, tak to bude mít i nějaké výhody.
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    H_U_N_T_E_R: taky se zkusim zastavit - vetsina prednasek vypada zajimave.. akorat mne teda zarazi Spring.NET - jakym zpusobem se vlastne vybiraji na ms-fest prednasky, ze muze takova zavrzenihodna technologie ukoristit prostor? :)))
    MIRROR
    MIRROR --- ---
    OODOOW: Zkusil bych tohle, to ma i fci na autowidth http://epplus.codeplex.com/
    Kliknutím sem můžete změnit nastavení reklam