Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Ondřej Novák

Stran: 1 ... 36 37 [38]
556
Vývoj / Re: C++, ukazatel na statickou funkci
« kdy: 05. 04. 2011, 20:57:28 »
Ještě že C++ 2011 bude mít typ function

std::function v C++ 2011 je převzatá právě z Boostu (stejně jako naprostá většina dalších novinek) a má totožný zápis.

Tohle je jedna z věcí, které mě na celém konceptu vadí. Všechny nové typy narvali do namespace std, přestože jsou to konstrukce jazyka, nikoliv knihovny.

nevím, proč máme typ auto, ale std::function. Proč neudělají std::int? nebo std::auto? Jednou to je se std, podruhé ne. Visual studio například valnou část těchto typu narvalo do rootovského namespace, takže není nutné psát std::size_t ale jen size_t (generický typ pro operator new), není nutné psát std::type_info ale jen typeinfo. Další adept: std::initializer_list<int>, proč ho zase narvali do std? Ani for(:) se mi nelíbí, staví na begin() a end() což nepovažuji za šťasné.

Hrají si na normu, kde stl je její součástí a přitom, kdyby to oddělili, tak by to udělali lépe. Mýchají hrušky a jabka. No nic, jsem zase offtopic.

557
Vývoj / Re: C++, ukazatel na statickou funkci
« kdy: 05. 04. 2011, 16:31:46 »
Pro C++ doporučuji Boost.Bind, tam se to potom dělá takto:
Kód: [Vybrat]
boost::function<int(int, int)> f = &MojeTrida::tvojeStatickaMetoda;

Aneb, jak zapsat ekvivalentní věc delším způsobem (a ještě nutné includovat boost). Ještě že C++ 2011 bude mít typ function

558
Hardware / Re: Zálohování: DVD vs Flash
« kdy: 01. 04. 2011, 10:51:14 »
Tou flexibilitou jsem myslel zejména to, že zazálohuju, vyndám, a uložím do krabice a v případě, že zálohu z nějakého důvodu potřebuju, tak ji z krabice vytáhnu a připojím, přečtu a zase odpojím.

Zdá se mi že mluvíte o archivaci, ne o zálohování. Archivací myslím např. video z dovolené nebo fotky dětí, zkrátka data, která chcete mít, ale která si prohlížíte málokdy. Na to jsou DVD vhodná, osobně tyto věci které považuju z osobních důvodů za cenné zálohuji 3x na DVD a každá kopie je v jiném domě.

Aha, sorry, tak jsem s tím myslel spíš archivaci. Zálohování ve smyslu pravidelné zálohování, inkrementální zálohování a podobně, to nepotřebuju. Protože se zabývám programováním, používám subversion a vyvíjím na vícero strojích, takže i kdyby odešel server se subversion, vždycky jsem schopen někde vytáhnout relativně aktuální verzi. A server občas zarchivuju (nebo zazálohuju) manuálně.

Ale ono to i něco mezi. Většinou archivuju, třeba fotky, videa, ale nechávám na původním médiu, dokud je tam místo, takže jde o zálohu, protože už jsem takhle přišel o nějaké fotky po tom, co mi odešel disk. V případě, že dojde na disku místo, archivuji podruhé a uvolňuji místo na disku a pak mám vlastně archiv a zálohu archivu. Nicméně v minulosti jsem to nedělal a mělo to své důsledky, včetně situace, kdy mi odešel disk a já následně zjistil, že zálohy (tedy archivy) na DVDčku nejsou také čitelné, většinou proto, že mechanika vůbec médium nepozná.

559
Hardware / Re: Zálohování: DVD vs Flash
« kdy: 01. 04. 2011, 09:51:04 »
Vím že jste se ptal na jiná média než HDD ale z hlediska ceny a spolehlivosti a flexibility při zálohování mi vychází nejlépe HDD který má zrcadlo, a to buď jako raid nebo jiný stroj , nejlépe svou lokací jinde a synchronizovaný třeba pomocí rsync.

Tou flexibilitou jsem myslel zejména to, že zazálohuju, vyndám, a uložím do krabice a v případě, že zálohu z nějakého důvodu potřebuju, tak ji z krabice vytáhnu a připojím, přečtu a zase odpojím.

Tohle lze u disku maximálně s rámečkem, ale ani to není podle mě dost flexibilní. Navíc je to mechanická součástka a netuším, co se s ní může stát, když se s krabicí bouchne při přenášení.

Co se týče flashek, tak asi nejzajímavější informaci jsem se dozvěděl, že flashky vydrží dlouho, pokud jse jednou za čas v horizontu 8 - 10 let refreshnou.

Ty DVDčka, ať už RW nebo RAM ... nevím, nějak se nedokážu zbavit obavy, že materiál na médium stářím "zkoroduje".

560
Hardware / Zálohování: DVD vs Flash
« kdy: 31. 03. 2011, 21:01:19 »
Zdar, nevím zda ten dotaz už tu byl. Nicméně s jedním kolegou jsme se bavili, na co má smysl dneska zálohovat... teď mám na mysli zejména soukromá data, jako fotky, videa, a podobně. Po vyřazení varianty zálohování na HDD (jako sice často uživanou metodu, ale méně flexibilní) přešla řeč, zda zálohovat klasicky na DVD nebo na Flash v podobě USB klíčenky.

Já mám s vypalováním špatné zkušenost, mám mnoho starých CDček, které už po deseti letech nepřečtu. Navíc mi přijdou CD/DVD hůře skladovatelná, než flasky. Cena jedná flašky rozumné velikosti už dnes není tak strašná a vzhledem k tomu, že pro přístup není potřeba žádné speciální zařízení mi přijde jako lepší volba. Jak je to s trvanlivostí záznamu?Vypalovací CDčka na tom podle mě nejsou zas tak slavně. U Flash se na jednu stranu dozvídám, že flashky trpí hlavně na zápisy, nikoliv na čtení,... zapsaná data jsou prakticky nezničitelná... na druhou stranu, běžná záruka na data je 10 let. Taky mi přijde, že flaška je skladnější a méně náchylná na drsnější zacházení (hlavně při stěhování atd).

 Co doporučujete?

561
O serveru Root.cz / Pomalé načítání stránek
« kdy: 30. 03. 2011, 17:50:42 »
Zaznamenávám podobné problémy, v kombinaci s IPv6, i přesto, že v jednom případě jsem na páteři a podruhé mám 2MB přes teredo (2M změřené).

Kromě toho zaznamenávám i pomalé načítání stránek. Homepage nabíhá klidně i 10 sekund, zatímco statický obsah je vyřízen v řádově milisekund. Dalším zdržovákem je také cz.adocean.pl, na který je prohlížeč schopen čekat i minutu. Ten se naštěstí dá zablokovat v hosts. Nicméně šlo by s tím něco udělat? Když už se ty reklamy vkládají skriptem, na který musí prohlížeč aktivně čekat, nešlo by je narvat až za obsah a na správná místa je pak nastylovat?

562
Vývoj / Re: Strategie alokování paměti v C++
« kdy: 26. 03. 2011, 13:26:45 »
Specialoziovane alokatory jsou rozhodne lepsi pro urcitou tridu uloh. Ja treba pouzivam specializovane alokatory, kde jsou jeji instance "per container" a pokud je kontejner pouzit v ramci jednoho vlakna, neni treba je zamykat. A v pripade, ze se kontejner sdili, resi si zamykani sam, takze i tady to odpada. Pro alokaci uzlu ve strome, spojovych seznamu a podobne mam CLusterAllocator, ktery vytvari clustery pro objekty stejne velikost a tam je alokace konstantni a dealokace (v dusledku nutnosti podle adresy vyhledat patricny cluster) asymtoticky log N.

Vsechny tyhle alokatory maji dve nevyhody. Samy nejsou efektivni (jak velke clustery pro mapu?) s tim souvisejici hodne mista, ktere lezi ladem a ceka ze mozna nekdy v budoucnu bude potreba.

Dalsi nevyhodou je to, ze kdyz dojde vyhrazene misto, nastupuje opet malloc, jehoz casova a pametova slozitost, rezie a MT propustnost je neznama a casto velice neoptimalni.

Ale jiste, je urcite dobre alokaci rozdelit vhodnou formou rozdel a panuj a pak to ma lepsi zejmena casove slozitosti

563
Vývoj / Re: Strategie alokování paměti v C++
« kdy: 26. 03. 2011, 11:22:33 »
V zásadě ano, inkrementální alokátor má konstantní složitost a to je i základ mého návrhu. Pokud alokované bloky dealokujeme dekrementálně (v opačném pořadí), tak naprosto postačuje, takhle vlastně funguje zásobník. Horší je to s dírami.

Potřeboval jsem alokátor v mapované paměti. Mám datové struktur pro vytváření stromů v mapovaném souboru a potřeboval jsem nějakým způsobem spravovat přidělenou paměť, aby bylo možné prvky ze stromu i mazat a přidávat nové. Celý zádrhel je v tom, že v mapovaném souboru se může vyskytnout více druhů uzlů, různě veliké a je zde prostor i pro alokaci řetězců, které nechci držet mimo.

Snahou bylo přesunout správu volného místa (děr) až na proces dealokace, aby operace "alloc()" měla vše již připravené a nemusela nic hledat. Při dealokaci mimo pořadí, tzn jinde než na konec, se díra jen zaznamená, ale není ji možné zatím používat pro alokace. Dál se tedy alokuje inkrementálně na konci. Jednou za čas, na základě analýzy stavu haldy a na základě její "děravosti" (dejme tomu, jakmile díry obsadí víc, než 20% místa), se spustí dávka, ideálně na pozadí a všechny díry posbírá, seřadí podle adresy, sloučí ty, co leží vedle sebe a následně seřadí od největší po nejmenší. To lze dělat bez synchronizace, protože volné místo by už nikdo neměl používat. Evidence děr se provádí přímo v uvolněném prostoru, takže defacto nezabírá žádnou paměť. Paměťová složitost pro dávku je O(N), potřebuj pole o 2*N prvcích, kde N je počet děr, proto na jednu díru to vychází 2 (konstantní paměťová složitost na dealokaci). K řazení používám HeapSort a to průběžně, nejprve tam díry nasypu a pak je vybírám seřazeně a slučuju a sypu to do další heapy, kde se to řadí podle velikosti. HeapSort má složitost NlogN.

Alokátor pak dává přednost seznamu děr tak, že alokuje inkrementálně v té největší. Pokud nelze alokaci uspokojit v té největší díře (protože už byla předtím obsazena jinými alokacemi), zbývající nevyužité místo se nechá zatím ležet ladem a sáhne se pro další volnou díru v seznamu. Pokud se ale požadavek nevejde ani tam, rovnou se přistoupí ke klasické inkrementální alokaci na konci. To že je seznam seřazen má výhodu v tom, že nemusím procházet žádný seznam a že hned vidím, zda najdu dostatečnou díru na alokaci nebo ne. Proto konstantní složitost alokace.

Nevýhodu bych viděl v nižší efektivitě čelit fragmentaci. Protože se nepoužívá strategie best-fit, ale spíš first-fit (přesnějí largest-fit), nemusí na malé bloky vůbec vyjít řada protože jak se zmenšuje largest, přechází se postupně na klasickou inkrementální alokaci a roste i množství děr dočasně ležících ladem. Takže dřív nebo později se zase spustí dávka, posbírá je a seřadí. Malé díry se takto protočí i několikrát, než v nich někdo alokuje, větší šanci mají, když se je podaří poslučovat do většího souvislého bloku.

To všechno je podřízeno rychlosti. Nevýhodou také v jednovláknovém prostředí je, že dealokace nemá vždy stejnou složitost, protože většinu času je 1, ale když alokátor rozhodne spustit dávku, může to celé vlákno nachvíli pozastavit. Pustit to v separátním vlákně je tedy lepší.

Chtěl jsem původně porovnat různé strategie a podívat se, zda už tohle někdo neimplementovat. Nikdy nevěřím na možnost, že bych vymyslel něco, co už někdo nezkusil předemnou, abych se případně vyhnul opakování stejných chyb.

564
Vývoj / Re: Strategie alokování paměti v C++
« kdy: 25. 03. 2011, 19:56:56 »
Jde o casovou slozitost. Pametova slozitost je konstantni, stejne tak synchronizacni. Pokud jde o dealokaci na pozadi, je-li provadena v jednom vlakne oddeleneho od uzivatelskych vlaken, ma synchronizace konstantni slozitost a pocas provadeni operace neni allokator blokovan.

(kontantni slozitost znamena konstantni pocet synchronizacnich operaci na jednu operaci alokace/dealokace. zpravidle dve - zamknout a odemknout)

565
Vývoj / Strategie alokování paměti v C++
« kdy: 25. 03. 2011, 11:59:23 »
V C++ se nějakou dobu zabývám nejvhodnější alokační strategií pro různé situace. V diskuzích o Javě a GC jsem psal o alokacích do clusterů a dočasných alokátorech a podobně, v zásadě z toho vyplynulo, že pro každý algoritmus je vhodná jiná alokační strategie.

Nicméně, při vyvoji jsem  objevil alokační strategii, která (zatím jen teoreticky) vykazuje alokační složitost O(1) a dealokační složitost O(log N), kde N je počet dealokovaných bloků s možností provádět dealokaci na pozadí.

Hledal jsem na internetu nějaké zdroje zabývající se alokačními strategiemi, ale moc hledat neumím. Nevíte někdo o nějakém uceleném seznamu teoretických pracech, článcích, kteří se tématem zabývají? Jde mi o analýzu problémů a srovnání výhod a nevýhod různých metod, abych případně mohl následně mou strategii naimplementovat a vyzkoušet, nebo poslat k ledu.

Případně je možné rozvinout diskuzi zde.

566
Vývoj / Re: V čem vyvíjet C/C++
« kdy: 23. 03. 2011, 12:02:49 »
A v čem vyvíjej ve firmách? Já slyšel že maj Eclipse a jednou mi někdo říkal, že dělá v gcc, ale jenom nějaký suport jako vzdáleně. Ale tomu nerozumim.

U nás si každý dělá v čem chce. Výsledek musí být upravovatelný kombinací vim+gcc. Já dělám v Eclipse.

567
Distribuce / Re: Tipy pro Ubuntu na USB flashce
« kdy: 19. 03. 2011, 13:48:26 »
Dík, ale zdá se, že dotaz je už "expired". Při hraní si s Livem ubuntu 10.10 jsem narazil na linuxový evergreen. Nefungující ovladače na rt2500. Takže to nemá smysl dál řešit.

568
Distribuce / Tipy pro Ubuntu na USB flashce
« kdy: 19. 03. 2011, 11:27:36 »
Zdravím. Potřeboval bych rozjet nějaký ubuntu na flashce, ale radši bych se vyhnul klasickému live přes casper-rw. Spíš by se mi líbila plnohodnotná instalace.

Nemáte někdo nějaké návody nebo tipy? Stačí to jen prostě nainstalovat na flashku? Jaký tam dát třeba filesystem. Jak minimalizovat zápisy (jasně, třeba dát logy do tmpfs, to bych ještě zvládl)

PS: Mám většinu linuxů pod virtuálama, ale občas se prostě hodí umět to pustit nativně a nechci si kvůli tomu rozdělovat disk, a láká mě i možnost nosit sebou data i nastavení OS (balíky, prostředí, atd)

Stran: 1 ... 36 37 [38]