• ú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
    NECROMAN
    NECROMAN --- ---
    TENCOKACISTROMY: Ve zkratce chci prepsat toto:
    A WinRT behavior to mimic EventToCommand - Init
    http://www.be-init.nl/blog/12968/a-winrt-behavior-to-mimic-eventtocommand
    Aby to nebylo zavisle na Reactive Frameworku. Jedine misto, ktere ten framework vyzaduje je toto:
    Observable.FromEventPattern<RoutedEventArgs>(AssociatedObject, Event)
          .Subscribe(se => FireCommand());
    Takze otazka za pet bludistaku, jak to napsat ve WinRT bez Rx? :)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    A fakt nutne potrebujes volat tu generickou metodu? Nemuzes ji volat jako negenerickou?
    Ono i ve "velkym" runtimu tohle neni uplne ono.
    NECROMAN
    NECROMAN --- ---
    Uz to skoro mam. Ted jen resim:
    mam "Type eventHandlerType" a nejakou metodu "FireEvent(object sender, RoutedEventArgs args)" kterou lze priradit do onoho Eventhandleru, jak to ale udelat dynamicky, aniz bych znal ten typ eventHandlerType?

    Toto funguje napr:
    RoutedEventHandler reh = FireEvent;
    ItemClickEventHandler iceh = FireEvent;
    potrebuji ale
    object eh = (eventHandlerType)FireEvent;
    NECROMAN
    NECROMAN --- ---
    JACHYMKO: ve WinRT je akorat:
    GetRuntimeMethod(this Type type, string name, Type[] parameters)
    kde parameters jsou parametry metody, to se ale dostavam do zacarovaneho kruhu, protoze ta metoda, kterou chci ziskat reflexi, ma jako parametr prave T
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Rika se tomu kovariance nebo kontravariance (furt si to pletu). A v ramci generics to v .net runtime uz jde. Jinak to jde jednoduse obejit zabalenim do ananomni metody. Ale nese to s sebou nevyhodu toho, ze pak predavas uz jinou instanci. Takze treba pridavani & odebirani z udalosti je timto zpusobem nepouzitelny.
    NECROMAN
    NECROMAN --- ---
    TENCOKACISTROMY: nebylo by marne, pokud by neco takoveho nepridali do C# :) mam pocit, ze treba F# je v tomto dale, pokud se nepletu
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Delegat je trida jako kazda jina. Jen v ramci C# mas syntax sugar a muzes ho volat jako volas metodu. Priradit ho tam tedy nemuzes proto, ze ten slozitejsi z toho jednodussiho nededi.
    NECROMAN
    NECROMAN --- ---
    btw proc neni mozne priradit slozitejsiho delegata do jednodussiho?
    EventHandler eh;
    RoutedEventHandler reh = null;
    eh = reh; // chyba
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Kazdopadne, jestli tohle potrebujes delat, tak to je docela code-smell.
    Mel by mit spis nejakou negenerickou metodu, ktera je pro takovy ucely stvorena.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Musis si udelat delegata pres reflexi a pak na nem volat "DynamicInvoke".
    NECROMAN
    NECROMAN --- ---
    dotaz, jak volat generickou metodu, pokud mam onen typ ulozeny v Type?
    Type mujtypEventHandleru = ...
    // tento typ chci pouzit v nasledujici metode
    AssignEvent<T odpovidajici mujtypEventHandleru>(AssociatedObject, Event, FireCommand);
    
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Ja teda s varem pri refactoringu nemel problem nikdy. A to refactoruju docela rad :).
    SHIGORBIRDMAN
    SHIGORBIRDMAN --- ---
    ja teda na var taky nedam dopustit a udelo mi radost normalni cecko, ze uz ma taky :)
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    NECROMAN: to mas pravdu, ale explicitnich pretypovani je v rozumne navrzenem/napsanem objektovem kodu minimum, ne? + testy? ostatni vyhody pro mne pred timhle minoritnim problemem naprosto prevazujou..

    co generika, linq a tak - ty jsou taky spatny? ;D
    NECROMAN
    NECROMAN --- ---
    BUTHRAKAUR: pak nekde zapomenes nejake explicitni pretypovani a nestacis se divit, kdyz to po zmene typu nevyhodi zadnou chybu a jen potichu projde :)
    MORMEGIL
    MORMEGIL --- ---
    BUTHRAKAUR: U PHP je pro mne skoro největší přínos jeho „polymorfní“ chování – skvěle využitelný při programování, kdy člověk nemusí řešit, jestli ta proměnná bude obsahovat spíš čísla nebo spíš texty.</trolling> ;-)
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    NECROMAN: u varu je pro mne skoro nejvetsi prinos jeho "polymorfni" chovani - skvele vyuzitelny pri refactoringu, kdy clovek nemusi menit tisic mist v kodu (i kdyz treba pres R#) jen pro to, ze zrefaktoroval par typu navratovejch hodnot apod..
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    PAJIN: Dobry vedet.
    PAJIN
    PAJIN --- ---
    PAJIN: Takze 4ty den k ranu vyreseno. Bylo tam nekolik problemu:
    1)Ten certifikat musi bejt trusted na ty masine (mel sem svuj, takze pridat jako trusted CA)
    2)Microsoft vsude tvrdi ze Hash toho filu je SHA1 (to je ale jen na .NET 2) ale na .NET 4.5 je to SHA256 (mel sem SHA1 hash kterej generuje primo BMG ale instaloval sem na 4.5 .NET)
    3)To ze public key je potreba jen pokud se prerequizita stahuje z vendor site je taky Microsoftu
    pokud jeto custom prerequisita tak kouka pokazdy po public key

    Nastesti pokud ma public key tak nemusi mit hash

    Takze reseni aby to slo na .net 2.0 a i 4.5 je vyhodit hash, pridat publick key a koupit code sign certificate.
    PAJIN
    PAJIN --- ---
    Ahoj nemate nekdo zkusenosti s ClickOnce app deployem a custom prerequisitama, uz ctvrtej den se snazim
    premluvit ten installer aby nainstaloval moji prerequisitu a furt koncim na hlasce :

    Error: Setup has detected that the file 'C:\DOCUME~1\jakub\LOCALS~1\Temp\VSD1B.tmp\USBScaleCommunication\setup.exe' has either changed since it was initially published or may be corrupt.
    pritom ten soubor na webu je v poradku a pokud ho stahnu rucne a pustim tak ta instalce projde.
    Zkousel sem odebrat kontrolu hash i sem ten setup.exe digitalne podepsal s public key ale zadna zmena :(

    tady je package.xml pro ten bootsrap package (generovanej z Boostrap Manifest Generatoru )

    package.xml
    Kliknutím sem můžete změnit nastavení reklam