• ú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
    UETOYO
    UETOYO --- ---
    NECROMAN: Můj kolega má něco v R, děláme analýzy spojené i s volbama. Jinak co se týká přístupnosti dat a ochoty, tak je "staťák" ze státních institucí docela v pohodě.
    NECROMAN
    NECROMAN --- ---
    SIRLOON: je to státní web, tam je XML API horká novinka :)
    SIRLOON
    SIRLOON --- ---
    NECROMAN: nebudou mit schovany nejaky json api? U takovyho webu bych ho docela predpokladal
    NECROMAN
    NECROMAN --- ---
    TOOMIX: z XML to aktuálně zpracovávám. Ono zas tak složité nebude, jak se tak koukám.
    TOOMIX
    TOOMIX --- ---
    NECROMAN
    NECROMAN --- ---
    Dotaz do pléna, netušíte, zda již existuje nějaká open source libka na stahování a parsování dat z webu volby.cz? Chci si napsat programna vizualizaci, tak abych nepsal vše znova :)
    RAJCHE
    RAJCHE --- ---
    Zdravim, shanim profika na propojeni BT modulu a custom made amp. Hadrware je hotovy, staci udelat firmware v C. Nevite nekdo o nekom, prosim? Specha. Do posty prosim.
    SAJAGI
    SAJAGI --- ---
    UETOYO: Mně přijde, že použitelných je dost málo (pokud nechceš jen spustit msbuild) a z toho, co jsem vyzkoušel (cake, nant, msbuild), mi fake připadá nejlepší. Co používáš ty?
    UETOYO
    UETOYO --- ---
    SAJAGI: Používáte někdo FAKE?
    Já ne, pořád mi něco nefunguje, jednou na widlích pak na linuxu..., nějak se mi zdá že je těch nástrojů moc.
    SAJAGI
    SAJAGI --- ---
    SAJAGI: Tak si odpovím
    - dá se použít #r "paket: groupref build//", který vezme packages z paket.locku
    - Stejná verze fake nuget balíku má jiný obsah na nuget.org a jiný na chocolatey. Fujtajbl.
    SAJAGI
    SAJAGI --- ---
    Používáte někdo FAKE?

    Pro jeden nový projekt jsem zkusil používat rovnou FAKE 5, a přijde mi, že autoři sice vylepšili API, ale některá rozhodnutí mi přijdou velmi nešťastná:
    - nutnout specifikovat reference na Fake moduly pomocí #r paket: ... - a pak se buď velmi blbě updatují package (smazáním lockfilu buď vše, nebo nic - jde to jinak?), nebo se ještě bokem musí držet paket.dependencies a referencovat ručně :/
    - fake5.exe (resp. fake.dll) nemá vlastní nuget balík, nebo něco nechápu? (poslední beta verze obsahuje fake.exe, ale to je "starý" fake; fake.dll pro netcore tam není vůbec?)

    Celkově mi z toho vychází, že zatímco dřív člověk musel mít v repu miniaturní paket bootstrapper, aby dotáhl vše ostatní (včetně buildsystému), teď je člověk nucený mít nainstalovaný FAKE přes chocolatey globálně. Nebo se to někomu podařilo jinak?

    MORMEGIL: Ehm ještě jsem se k tomu pořád nedostal.. :)
    PEPSIN
    PEPSIN --- ---
    UETOYO: Uz to padlo, byla to trosku spatna komunikace. NPL je nad ramec zrdroju co muzeme pouzit.

    Ale zpetne: Teorie byla takova ze budou nejake texty o technice a my z nich zhruba vytahneme ceho se tykaji.
    UETOYO
    UETOYO --- ---
    PEPSIN: Tak asi hledáš nějakou NLP knihovnu? Co přesně chceš dělat?
    PEPSIN
    PEPSIN --- ---
    Zdravim ve spolek, potreboval bych nasmerovat. Pokud chci delat analyzu textu a chci to delat offline, co hledam?
    SAJAGI
    SAJAGI --- ---
    MORMEGIL: Hmmm hele to je zajímavý! V pondělí to pořádně vyzkouším a dám vědět :)
    MORMEGIL
    MORMEGIL --- ---
    SAJAGI: Ha! Tak ne, napadlo mě lepší řešení: Je potřeba si ten soubor držet otevřený. V zásadě by mohlo fungovat nějaké
    using (var f = File.Open(oldName, FileMode.Open, FileAccess.Read, FileShare.Delete))
    {
    	Kernel32.MoveFileEx(oldName, newName, 0);
    }
    


    Případně by mohlo být (možná čistší?) variantou SetFileInformationByHandle (s FILE_RENAME_INFORMATION).

    Útočníkovi se sice může povést ten soubor přejmenovat a pod původním jménem vyrobit adresář, ale nijak mu to nepomůže, ve finále se přejmenuje ten původní soubor.
    SAJAGI
    SAJAGI --- ---
    MORMEGIL: Díky. Doufal jsem, že bude nějaké jednoduché řešení a ono ouha :/
    MORMEGIL
    MORMEGIL --- ---
    SAJAGI: Vynucení přejmenování adresáře je jednoduché: místo "X" přejmenovávat "X\". Se soubory je to horší: Jediný trik, co mě napadl, je zneužít ReplaceFile:
    if (Directory.Exists(oldName))
    {
    	Console.WriteLine("Processing directory...");
    	if (!Kernel32.MoveFileEx(oldName + @"\", newName, 0))
    	{
    		Console.WriteLine("Failed!");
    	}
    }
    else
    {
    	Console.WriteLine("Processing file...");
    	File.Create(newName).Close();
    	if (!Kernel32.ReplaceFile(newName, oldName, null, 0, IntPtr.Zero, IntPtr.Zero))
    	{
    		Console.WriteLine("Failed!");
    		File.Delete(newName);
    	}
    }
    

    Nevýhodou je, že se tam nejdříve musí založit ten prázdný soubor pod novým jménem, jehož obsah se následně nahradí (a v případě neúspěchu ex post musí smazat), což pro nejčastější důvody využití přejmenovávání znamená, že to je nepoužitelné, předpokládám. Navíc se tím u toho přejmenovávaného souboru tedy ztratí přesně ty atributy, které ReplaceFile zachovává, což může taky trochu vadit (ale to by asi šlo obejít založením toho nového souboru třeba se stejnými ACL atd.).
    SAJAGI
    SAJAGI --- ---
    TROGLODYT: Je nutné, aby k té operaci vůbec nedošlo, bohužel. Ještě nás napadlo řešit to hardlinkem, ale bohužel se nemůžeme spolehnout na to, že filesystém bude vždy NTFS :/
    TROGLODYT
    TROGLODYT --- ---
    SAJAGI: A nestacilo by ti jen po operaci zkontrolovat, ze soubor zustal souborem (adresar adresarem) a pokud ne, tak ho prejmenovat zpatky?
    SAJAGI
    SAJAGI --- ---
    Ahoj, dá se nějak zjistit, zda-li soubor X na disku je soubor, nebo adresář, a poté ho přejmenovat na soubor/adresář Y za předpokladu, že se mezi těmito dvěma operacemi ze souboru nestal adresář či opačně (v důsledku nějaké paralelní operace)? MoveFileEx (kernel32) nerozlišuje mezi souborem a adresářem.

    Příklad, čeho se chci vyvarovat. Řekněme, že uživatel smí přejmenovávat/přesouvat soubory, ale ne adresáře. Pseudokód:
    
    RenameFileOnly(string from, string to) { 
      if (File.Exists(from)) {
         // jiný proces zde smaže soubor 'from' a vytvoří adresář 'from'
         Kernel32.MoveFileEx(from, to) // přejmenuje adresář... fuck
      }
    }
    

    btw. je mi jedno, pokud jiný proces nahradí soubor souborem, nebo adresář jiným adresářem.

    Napadlo mě nejprve založit cílový soubor/adresář a použít MOVEFILE_REPLACE_EXISTING, ale to failne jen pokud přejmenovávám soubor (na existující adresář), ne naopak.
    Kliknutím sem můžete změnit nastavení reklam