• ú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
    MORMEGIL
    MORMEGIL --- ---
    TENCOKACISTROMY: Tak to asi opravdu jenom držet pro každý thread vlastní instanci CookieContainer a přelévat cookies mezi těmihle a jedním centrálním, nic lepšího IMHO nevymyslíš. (A řekl bych, že to nebude ani nijak moc složité; nejtěžší tam bude detekce, které cookie se voláním smazaly, ale je možné, že to v tvém případě ani nemusíš dělat a prostě je tam necháš.)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    MORMEGIL: Ta webova sluzba poskytuje metody, ktery dotycnej server ma i na webu. Takze bych si tipnul, ze to thread-safe bude. Druha strana shodou okolnosti pouziva WCF (ne ze by to neco zajistovalo, ale neni to splacany na kolene, videl jsem kus jejich serverovyho kodu).

    Overridnout cleny me napadlo taky, ale v duchu "co nutne nemusi byt virtualni neni" se tam nic takovyho nenachazi :D :(.

    Prave situace "nastav C na 1" + "nastav X na 3" se mi prave muze klidne stat. Pravdepodobnost, ze budu chtit "C" nastavovat 2x na jinou hodnotu je miziva. Ale ze bych mel nastavit dve ruzny hodnoty se uz stat muze. Uvnitr toho CookieContainer jsou kolekce - a ty teda pri blbejch okolnostech muzou pri vicevlaknovym zapisu delat poradnou neplechu :/. Nicmene presny implementace neznam a moc se mi nechce resit to pres ILSpy.
    MORMEGIL
    MORMEGIL --- ---
    TENCOKACISTROMY: To je dost vtipná konstrukce… Je vůbec samotná ta WS „thread-safe“ (můžeš z jedné session volat současně několik metod)? Cookies se v principu posílají tak, že v requestu pošlu všechny, co mám, v response mi přijdou _změny_, které mám aplikovat. Takže už samotná ta situace, že současně pošlu dva dotazy, načež mi současně přijdou odpovědi 1. nastav cookie C na hodnotu X, 2. nastav cookie C na hodnotu Y, je dost zajímavá.

    Ale samozřejmě to ve tvé situaci může prostě nenastávat, v tom případě může být reálná cesta IMHO leda ta varianta 3; nejdřív mě teoreticky napadlo podědit si CookieContainer a přepsat si ho na thread-safe, ale to v praxi nejde, protože tam nemají nic virtual. (Plus samozřejmě thread-safovost jednotlivých metod neznamená, že to bude fungovat jako celek, ale to už i viz výše.)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Potrebuju pouzivat webovou sluzbou, a ta po me chce aby jsem mel cookies. Webova sluzba neni moje a nemuzu na tom nic zmenit.

    Ty jednotlivy metody mi muzou upravovat dotycny cookies. A ty metody potrebuju volat z vice vlaken. Koukal jsem se do dokumentace a trida System.Net.CookieContainer neni thread-safe. Co s tim mam delat?

    1) Mam se spolehnout na to, ze se mi to nezesere? To se mi moc nechce.
    2) Mam se pokouset detekovat, ze to je zesrany a pak to nejak napravit? To se mi chce jeste min.
    3) Mam mit nejakou "centralni" cookies a tu synchronizovat s tim, co mi prichazi z volani tech metod? To je docela vopruz, ale mohlo by to byt spravne.
    4) Neco jinyho?
    OODOOW
    OODOOW --- ---
    NECROMAN: na to je tam spešl funkce, takže nejjednodušeji asi takhle:

    s.Substring(0, 3).PadRight('*', s.Length);

    ale možná to není nejrychlejší :)
    MORMEGIL
    MORMEGIL --- ---
    NECROMAN:
    public static string ReplaceWithStars(string s)
    {
    	if (ReferenceEquals(s, null)) throw new ArgumentNullException("s");
    	return s.Length > 3
    		? s.Substring(0, 3) + new string('*', s.Length - 3)
    		: s;
    }
    
    [TestFixture]
    public class UnitTests
    {
    	[Test]
    	public void TestReplaceWithStars()
    	{
    		Assert.AreEqual("abc*****", ReplaceWithStars("abcdefgh"));
    		Assert.AreEqual("ABC*****", ReplaceWithStars("ABCDEFgh"));
    		Assert.AreEqual("a", ReplaceWithStars("a"));
    		Assert.AreEqual("abc", ReplaceWithStars("abc"));
    		Assert.AreEqual("abc*", ReplaceWithStars("abcd"));
    		Assert.AreEqual("***", ReplaceWithStars("***"));
    		Assert.AreEqual("", ReplaceWithStars(""));
    		Assert.Throws<ArgumentNullException>(() => ReplaceWithStars(null));
    	}
    }
    


    A dobrá soutěž teď vymýšlet problémy a omezení takového řešení. :-)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN:
    string MyStrFunc(string template) {
        return new StringBuilder(template,0,3).Append('*',template.Length-3);
    }
    


    Muzes vyzkouset, jestli to nebude rychlejsi nejprve s vytvorenim stringbuilderu s danou kapacitou teprve pak appendovat.
    Ochranu proti null atd... si zaridis sam :).
    NECROMAN
    NECROMAN --- ---
    Dotaz, jak byste nejcisteji napsali metodu, ktera pro dany string vrati jiny string, ktery bude mit pvni tri znaky stejne a misto dalsich hvezdicky?
    SAJAGI
    SAJAGI --- ---
    CERMINEK: Místo IndexOf raději http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx . .NET je deklarativnější, než C++.
    CERMINEK
    CERMINEK --- ---
    Asi jsem na .NET vážně lama, ale potřeboval bych píchnout s přístupem k souborům. Čumím do MSDN a nějak mi to hlava nebere. Marně hledám klasické fopen, fclose...

    Potřebuji přistupovat ke svě souborům, kdy oba na začátku otevřu pokud existují, pokud ne tak je vytvořím. Po té z jednoho načtu hodnotu a tu budu v průběhu programu aktualizovat. U toho druhého pak chci zapisovat nové hodnoty vždy na konec souboru, aby se zachovaly již ty co tam jsou...
    Poradí někdo prosím? stačí vodítko... snad to dohledám...
    CERMINEK
    CERMINEK --- ---
    NIXX: jj už jsem na to přišel :-)
    NIXX
    NIXX --- ---
    CERMINEK: Jak jsi přišel na tu nulu? Kdyby ses obtěžoval přečíst si základní dokumentaci, věděl bys, že tam má přijít -1.
    String.IndexOf Method (System)
    http://msdn.microsoft.com/en-us/library/system.string.indexof.aspx
    LOOCAS
    LOOCAS --- ---
    CERMINEK: Regular Expressions?
    CERMINEK
    CERMINEK --- ---
    Jsem asi lama, ale nevím... Potřebuji v C# porovnat dva řetězce kdy mám jeden dlouhy a druhý referenční, když se v tom dlouhém kdekoliv objeví ten referenční, tak chci vykonat podmínku pokud ne jede se dál...

    Nyní to mám takto:
    if (htmlContent.IndexOf("neexistuje") != 0){
    continue;}

    Kód mi ale pořád skáče na continue i tam, kde nemá...

    NECROMAN
    NECROMAN --- ---
    Prave jsem si koupil tuto knizku, tak dam vedet, jaka je
    Windows Phone 8 Development Internals (Preview 1) available now - Microsoft Press - Site Home - MSDN Blogs
    http://blogs.msdn.com/b/microsoft_press/archive/2012/10/30/windows-phone-8-development-internals-preview-1-available-now.aspx
    ESY
    ESY --- ---
    taky se primlouvam za inno. Kdykoliv jsem ho potreboval tak fungoval jak mel :]]
    OODOOW
    OODOOW --- ---
    TENCOKACISTROMY: neprahnu, bylo to jen první na řadě
    dík, vyzkouším to Inno
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    OODOOW: Pokud vylozene neprahnes po MSI instalatoru ve VS2010 - koukni se na InnoSetup. Pouzivam ho nekolik let a narozdil od vsech ostatnich instalatoru - u tohodle jsem nikdy nenarazil na problem, kterej by mi trval vyresit dyl nez max. par desitek minut a hlavne to je uplne super jednoduchy aniz by jsi prisel o nejaky moznosti.
    OODOOW
    OODOOW --- ---
    měl bych dotaz k vytvoření MSI instalátoru ve VS2010:
    Mám svou windows service a podle návodu na netu se mi povedlo vytvořit Deployment Project, který mi to nainstaluje a dokonce to i hodí do služeb, potud dobrý. Dál bych ale potřeboval, aby se mi do cílového adresáře, kam se to nainstaluje hodil i adresář s sql souborama, mám ho v solution, ale nevím jak to nastavit, aby se mi vložil i do té instalace.
    Kliknutím sem můžete změnit nastavení reklam