• ú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
    CERMI_FOX
    CERMI_FOX --- ---
    SAJAGI: použivá se LifestyleScoped ; windsor si tam přidává nějaký middleware, který zajišťuje vytvoření & rušení toho scope tak, aby to odpovídalo cca per webrequest style. Nebo si to napíšeš sám, což jsem kdysi dělal, když ještě ta podpora nebyla out of the box
    SAJAGI
    SAJAGI --- ---
    Věděl by někdo, jakým způsobem se u Castle Windsor přiřadí per-webrequest lifestyle pro ASP.NET Core MVC? (to Core je důležitý)
    TEAPACK
    TEAPACK --- ---
    MORIARTY: ber to tak, že počáteční prvek má index 0, a pak můžeš jít buď na následující (1), nebo předchozí (-1) ...a pak ti sedí i případné přetečení pokud bys to měl jako kruhový buffer.
    TOOMIX
    TOOMIX --- ---
    ARANIUS: nene, koukni na ten muj obrazek. Jsem to hned zkousel a ^1 vrati prvni od konce, takze posledni, je to jako v Pythonu, kdy se posledni prvek vrati pomoci indexu -1. Proste misto minusu je ^ a to je cely
    ARANIUS
    ARANIUS --- ---
    MORIARTY: Ak som ten článok cital korektne tak posledný prvok je ^0, ^1 by mal označovať predposledný prvok ;)
    MORIARTY
    MORIARTY --- ---
    Vtip je v tom, že poslední prvek není ^0, ale ^1? To je trochu nekonzistentní, když pak u pětiprvkového pole je poslední prvek pole[4], ale první je pole[^5] :)
    VITI
    VITI --- ---
    TOOMIX: CERMI_FOX: no ok ... osobne tyhle magicky zkratko zapisy moc nevyhledavam. No uvidime :-)
    TOOMIX
    TOOMIX --- ---
    VITI: usetris psani kodu. Mas treba dataset, v nem tabulku a chces posledni radek.
    Misto
    var r = dataset.mojetabulka.Rows[dataset.mojetabulka.Rows.Count - 1];

    Nove muzes pouzit
    var r = dataset.mojetabuka.Rows[^1]
    CERMI_FOX
    CERMI_FOX --- ---
    VITI: syntactic sugar - napsání více logiky za použití menšího množství kódu :)
    VITI
    VITI --- ---
    TOOMIX: BTW k cemu je to dobre?
    TOOMIX
    TOOMIX --- ---
    TEAPACK: no mínus ne, ale System.Index má i přetížený konstruktor, kde si boolem dáš, jestli je to od konce nebo od začátku
    
    //stejné jako ^1
    var index = new System.Index(1, true)

    But you can also create an Index with a new ^ operator, meaning "from end". So ^1 is one from the end
    TEAPACK
    TEAPACK --- ---
    TOOMIX: byl bych raději, kdyby tam bylo mínus, podobně jako u pythonu, protože takhle nemůžeš jednoduše skripty, které by používaly oba způsoby najednou... :-/
    TOOMIX
    TOOMIX --- ---
    Take C# 8.0 for a spin | .NET Blog
    https://blogs.msdn.microsoft.com/dotnet/2018/12/05/take-c-8-0-for-a-spin/

    Do more with patterns in C# 8.0 | .NET Blog
    https://blogs.msdn.microsoft.com/dotnet/2019/01/24/do-more-with-patterns-in-c-8-0/

    Už lze indexovat od konce pole/listu, aniž by se muselo použít aaa.Count-1 pro návrat posledního prvku. Dá se tam ^1 a je to

    RUTHAN
    RUTHAN --- ---
    Dik moc podivam se na to.
    SAJAGI
    SAJAGI --- ---
    RUTHAN: Pokud jsi ve stádiu, že tápeš, proč bys měl synchronizační mechanismy používat, tak doporučuju třeba https://msdn.microsoft.com/en-us/magazine/jj863136.aspx (včetně části 2). Nepropadni ale pak zoufalství - pokud neprogramuješ pro ARM, tak to není tak zlý :) Obecně ale nejjednodušší je nemít žádný sdílený stav mezi více vlákny. Pokud potřebuješ něco sdílet, tak můžeš používat třídy k tomu určené (třeba Interlocked, ConcurrentDictionary). No a pokud ani tohle nepomůže, tak je jsou tu synchronizační primitiva (lock, ReadWriteObjectLock(Slim), Monitor, apod). Reálně ti asi bude stačit jen ten lock.
    SUK
    SUK --- ---
    RUTHAN: Hele, ono to "neni slozity". Vzasade na to koukej tak, ze ti jedno muze menit hodnoty pod rukama (tzv. race condition), cemuz muze zabranit lock alias mutex, v C# na to je Monitor. Jen davej pozor na poradi a konkretni locky, aby nenastal deadlock. Toliko asi k paralelnimu programovani - dulezite keywordy k googleni jsou tucne. Mnoho uloh se da vyresit bez jakyhokoliv lockovani, mezivlaknove komunikace a tak. Jinak, ohledne toho Invoke, tak to spociva v tom, ze ty "reknes, co se ma udelat" tomu prvku, ktery si to vykona az bude cas ve svem vlakne. Tady na to hledej asi C# invoke delegate.
    RUTHAN
    RUTHAN --- ---
    SUK: Obecne ti rozumim a rozumim, ze je to robustnejsi, lepsi.. a ze by to tak melo byt, ale potreboval bych nejaky odkaz, odkud se toho naucit protoze, zatim nejaka prace s vlaknama jde mimo me.

    Jednoduchy priklady na webu chapu, ale pokud to ma aplikovat na svuj pripad, tak uz to nedavam, moc novych veci.. a veci nejaky lamba errory mi zatim nic nerikaj. Potreboval bych nejaky dobry uvod do problematiky.

    Jinak z tohohle clanku: https://docs.microsoft.com/...standard/parallel-programming/data-structures-for-parallel-programming , ze tyhle veci mely svuj vyvoj (ja jsem naivne cekal,ze je to dalo optimalne vyreseny).. a je mozny, ze to historicky C# 2010, ktery pouzivam neni to pravy, to samy nejaky stary navody. Jsem ho zvolil, protoze je to maly co se tyce instalace a neinstaluje se to dlouho. Co jsem se dival tak 2012 express je jeste docela rozumnej, pokud by to neco zlepsilo?

    Je mozny, ze na muj skill a patlani je to zatim moc, ale chtel jsem to zkusit..
    HALCYON
    HALCYON --- ---
    BRAP242: ODP.NET Core, ne? Ale jestli hledáš ORM, tak nevim.
    BRAP242
    BRAP242 --- ---
    jaka je momentalne nejdostupnejsi technologie, pokud chcete z .NET Core pristupovat do Oracle databaze? Pochopil jsem spravne, ze EF Core 2.0 > provider je ve vyvoji?
    SLUPKA
    SLUPKA --- ---
    SMOKY: Něco podobného se mi stalo myslím kdysi v .NET 3.5, když jsem měl něco takového:
    var x = new Foo(GetParam(z));

    Když GetParam(z) vyhodil výjimku, tak to při zavolání finalizeru padlo (jen při release konfiguraci a způsobovalo to pád v náhodné době). A chyba byla v tom finalizeru že this je null (bylo tam volání this.Dispose(false)).

    Jsou to pěkné chyby, které se strašně pěkně hledají :))
    Kliknutím sem můžete změnit nastavení reklam