• ú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: 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 :))
    Kliknutím sem můžete změnit nastavení reklam