• ú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 --- ---
    NECROMAN:Algoritmicky nic lepšího než dva vnořené cykly nevymyslíš, ať už to obalíš do LINQu nebo ne. V obecném složitějším případu bys mohl (s dodatečnou pamětí) předzpracovat jeden seznam do množiny (HashSet<string>) a projít jen ten druhý, čímž se ti z O(MN) stane O(M+N), ale u 1–2 prvků to fakt nemá smysl. :-)
    NECROMAN
    NECROMAN --- ---
    dalsi otazka, mam 2 objekty IEnumerable<string>, kazdy ma tak 1+ prvku (vetsinou 1-2, vyjimecne vice)
    jaky je tak nejefektivnejsi algoritmus, jak zjistit, zda nejaky string ze skupiny a se rovna nejakemu prvku ze skupiny b? v testu by se mela ignorovat velikost pismen.
    Napada me moznost dvou forcyklu, nebo pouzit group1.Intersects(group2, mycomparer)
    NECROMAN
    NECROMAN --- ---
    JACHYMKO: jo, dik!

    ProcessedFilesItem item;
    if (!ProcessedFiles.TryGetValue(key, out item))
    {
    ProcessedFiles.Add(key, item = new ProcessedFilesItem { key = key });
    }
    return item;
    NECROMAN
    NECROMAN --- ---
    dotaz, potrebuji mit kolekci velkeho mnozstvi objektu, ktere jako klic pouzivaji jeden string vevnitr. Ted jsem pouzival List<> a hleda polozku pomoci
    list.FirstOrDefault(l => l.key == key)
    ale to rostlo na kvadratickou slozitost
    ted mam dictionary<string, obj>

    jak provadet efektivni nalezeni polozky? toto podle me dela 2x search

    if (ProcessedFiles.ContainsKey(key))
    {
    return ProcessedFiles[key];
    }
    ProcessedFilesItem item = new ProcessedFilesItem { Key = key };
    ProcessedFiles.Add(key, item);
    return item;

    neslo by to nejak efektivneji s tim, ze kdyz tam ten klic neni, tak se vytvori objekt pro dany klic?
    URZA
    URZA --- ---
    jinak immediate window ve visual studiu 2010 je velmi prijemna vec pri debugovani.. obzvlast LINQu.. jsem si ho dlouho vubec nevsiml..
    URZA
    URZA --- ---
    JACHYMKO: jo dik, uz jsem na to prisel tak jsem to mezitim smazal :)
    LOOCAS
    LOOCAS --- ---
    H_U_N_T_E_R:
    JACHYMKO:

    Díky moc za info! Už jsem to rozběhal! :) Ale chyba byla jinde. Navíc dost triviální. Na serveru jsem sice winrm službu měl spuštěnou, ale na pracovní stanici ne! Po nastavení všechno běhá jak má.

    Ještě jednou díky!
    H_U_N_T_E_R
    H_U_N_T_E_R --- ---
    LOOCAS: přesně jak říká JACHYMKO . Pokud není tvůj PC v doméně, tak i když jsi připojen přes VPN, musíš stejně nastavit TrustedHosts a k tomu ještě explicitně dát credentials přes parametr -credentials.
    Tak to aspoň musím dělat já (scénář stejný jako popisuješ -> VPN do sítě s AD, ale notebook v AD není)
    LOOCAS
    LOOCAS --- ---
    H_U_N_T_E_R: Nastavil jsem na serveru to, co bylo psáno na tý stránce TechNetu. Služba běžela. Jsem připojenej vzdáleně přes VPN k serveru, tzn. jsem i ověřenej uživatel v doméně (moje PC neni součástí domény, btw), ale když jsem v PowerShellu zkoušel ze svýho PC spustit "invoke-command" příkaz, tak mi to vyhodilo:

    Windows PowerShell
    Copyright (C) 2009 Microsoft Corporation. All rights reserved.
    
    PS C:\Users\loocas> invoke-command -computername "XXXX" {ping www.seznam.cz}
    [XXXX] Connecting to remote server failed with the following error message : The WinRM client cannot process the r
    equest. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, t
    hen HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting. Us
    e winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. You can
     get more information about that by running the following command: winrm help config. For more information, see the abo
    ut_Remote_Troubleshooting Help topic.
        + CategoryInfo          : OpenError: (:) [], PSRemotingTransportException
        + FullyQualifiedErrorId : PSSessionStateBroken
    PS C:\Users\loocas>
    H_U_N_T_E_R
    H_U_N_T_E_R --- ---
    LOOCAS: popisek chyby / chování by nebyl?
    LOOCAS
    LOOCAS --- ---
    Tak ten PowerShell remote command se mi nedaří zprovoznit. :( Netušim, v čem je problém a nemám s tim žádný zkušenosti, tak se mi to hodně blbě debuguje.
    LOOCAS
    LOOCAS --- ---
    JACHYMKO: Supr! Díky moc, vyzkoušim. :)
    LOOCAS
    LOOCAS --- ---
    TENCOKACISTROMY: Jop, o tom jsem někde už čet, před časem. Nicméně tohle řešení by právě vyžadovalo mít nahozenou nějakou živou službu na serveru. Né, že by to byl problém, ale chtěl jsem se tomu vyvarovat. :) ale i tak se na to mrknu. Díky.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    LOOCAS: btw. v .NETu existuje trida FileSystemWatcher, pres kterou jsi schopen zjistit, ze se nekde vytvoril/smazal/zmenil soubor, aniz by jsi neustale prochazel celou hierarchii adresaru. Mozna by se ti to hodilo.
    LOOCAS
    LOOCAS --- ---
    TENCOKACISTROMY: I tak díky moc za tipy... nějak to snad dám dokupy. Resp. neni to nic složitýho, spíš se snažim najít optimální a pokud možno prozkoušenou cestu. :)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    LOOCAS: Nejak to urcite jde. Ale jak, to netusim.
    LOOCAS
    LOOCAS --- ---
    TENCOKACISTROMY: Hmm... taky jsem nad timhle scénářem přemejšlel, ale ta naplánovaná úloha, nebo běžící služba, mi přišla trochu krkolomná. Problém vidim v tom, že ta služba bude muset procházet tisíce adresářů (resp. skoro celej volume, cca. 8TB), aby narazila na RAR a pak ho rozbalila.

    Proto mi přišlo trochu jednodušší a přímočařejší spustit ten UNRAR vzdáleně přes nějakej síťovej příkaz, jestli to vůbec nativně ve Windows jde?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    LOOCAS: Nahraval bych to tam normalne pomoci *.bat-aku (zkomprimovat, nakopirovat s priponou *.rar.tmp, po uspesnym nakopirovani prejmenovat zpet na *.rar).
    Na cilovy stanici pak muze bezet sluzba (nebo naplanovana uloha), ktera bude kontrolovat v danych adresarich soubory s priponou *.rar a bude je extrahovat na urcene misto.

    To mi prijde jako nejjednodusi reseni, ktery kdyz bude chtit nekdo (treba admin) upravit, tak to zvladne sam a nebude k tomu potrebovat programatora.
    LOOCAS
    LOOCAS --- ---
    TENCOKACISTROMY: Jj, chci docílit vlastně jen urychlení kopírovaní přes zůženou VPNku. Teď, když tam kopíruju 150MB, ale i třeba 2GB binární soubory, tak je to prostě vomrd. Když je manuálně zabalim do RARu, tak z nich vyždímu i 80% velikosti, někdy i víc, záleží na obsahu samozřejmě. Pak to nakopčim, mnohem rychlejc, jelikož tam cpu místo 100MB, "jen" 20MB např., na server, kde to zas musim rozbalit, abych se dobral k původním datům. :D

    Napadlo mě využít toho, cos postoval, tušim, ty. A to zavolat si proces WinRARu, zabalit soubor, nahrát na server a pak poslat "nějakej" příkaz, aby server vzdáleně ten soubor na svym file systému lokálně rozbalil a RAR smazal.

    Nenapadá tě nějakej takovej "vzdálenej" příkaz? Jak poslat obyč command line příkaz, kterej by se proved lokálně na straně serveru?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    LOOCAS: Cili ty soubory proste kopirujes? V tom pripade bych ty soubory normalne zkomprimoval nekam do TEMPu, tamodtad je nakopiroval do cile a z TEMPU smazal. Na druhy masine bych pak mel nejakou sluzbu, ktera by ty soubory automaticky rozbalila.

    O zadnym zpusobu, kdy by se vzal soubor on-the-fly komprimoval a posilal to windows file share jsem neslysel. Nicmene nevylucuju, ze neco takovyho je. Tak jako tak, ti ale na druhy strane "pristane" zkomprimovanej soubor, kterej musi neco opet extrahovat (teda jen za predpokladu, ze to tam extrahovany chces mit).
    CRANK
    CRANK --- ---
    MICTECH: Předběhl jsi mě! :-D
    Kliknutím sem můžete změnit nastavení reklam