Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Již delší dobu jsem zde nic nenapsal o svých zkušenostech s PHP, jelikož jsem na svůj projekt neměl moc času. Teď se mi ale podařilo přijít na lepší způsob, jak vytvořit strukturovanou diskusi, nebo menu.
Předchozí pokus byl mým prvním zápisem v blogu o PHP. To se mi však pro složitost moc nezamlouvalo a tak jsem se snažil při psaní strukturované diskuse přijít na něco lepší a myslím, že se mi to i povedlo. Ostatně posouzení nechávám na vás v diskusi pod tímto zápisem.
V datazázi musí být uložené údaje od id komentáře, jeho úrovni(level) a předchůdci(parent) a další věci jako text nadpisu, komentáře, nebo cokoliv dalšího. Celé toto pole načítám v jednom SQL dotazu, kde zadám uspořádání podle úrovně(level). Druhým a posledním SQL dotazem zjistím maximální hodnotu úrovně komentářů.
Pokračuju vytvořením zdrojového a cílového pole. Ve zdrojovém poli si v cyklu vytvořím pro každou úroveň podpole a do nich v následujícím cyklu doplním komentáře se shodující se úrovní:
// Resulting array of comments $cmnt = array (); // Source array $child = array (); // Generate subarray for each comment level for ($i = 0; $i <= $lmax; $i ++) { $child[$i] = array (); } // Add comment's to subarrays by level. for ($i = 0; $i <= $lmax; $i ++) { // Cross db array for ($lv = 0; $lv < count($rows1); $lv ++) { // If level of db array is the same as source subarray, then add comment's to this subarray. if ($rows1[$lv]["level"] == $i) { array_push($child[$i], $rows1[$lv]); $rows1[$lv] = null; } } }
Tím mám připravené zdrojové pole, následně zavolám funkce godown a goup v tomto pořadí. Zdrojové a cílové pole předávám odkazem. První funkce vypadá takto:
function godown($childs, $max, $start, $cmnt) { // Parse level from $start to $max for ($i = $start; $i <= $max; $i ++) { $exist=0; // If is set first comment in current level if (isset ($childs[$i][0])) { // Check if exist's parent of this comment. If so, then we counldn't add this comment into resuling array // and delete from source array, because we need add it after parent and if parent exists, then wasn't parsed // and added into resulting array yet. for ($k = 0; $k < count($childs); $k ++) { if ((!empty ($childs[$k])) && ($childs[$i][0]["parent"] == $childs[$k][0]["comm_id"])) { $exist = 1; } } // If parent don't exist then we add this comment on the end of resulting array and delete it from source array. if ($exist == 0) { array_push($cmnt, $childs[$i][0]); array_shift($childs[$i]); } } } }
Do jejich parametrů předávám zdrojové pole- $childs, maximální úroveň-$max, první úroveň-$start, která je při prvním volání 0 a později se nastavuje z funkce dgoup. Posledním parametrem je cílové pole.
Jako první v cyklu procházejícím komentáře podle úrovně testuju, jestli první komentář v dané úrovni existuje-postupně totiž komentáře odebírám pomocí array_shift, k tomu ale až za chvilku. Pokud tedy komentář existuje, tak ještě testuji jestli neexistuje jeho předek, protože pokud by existoval(ještě by nebyl zrušený), znamenalo by to, že by se komentář vypsal u jak na něj přijde řada u jiného rodiče.
Pokud zjistím, že komentář žádného rodiče nemá, tak jej přidám na konec cílového pole $cmnt a odeberu ze zdrojového pole $childs.
function goup($childs, $max, $cmnt) { // Parse level from max to 0 - first level of comment. for ($j = $max; $j >= 0; $j --) { $exist = 0; // Check if is set first comment in current level if (isset ($childs[$j][0])) { // Check if exist's parent of this comment. If so, then we counldn't add this comment into resulting array // and delete from source array, because we neet add it after parent and if parent exists, then wasn't parsed // and added into resulting array yet. for ($k = 0; $k < count($childs); $k ++) { if ((!empty ($childs[$k])) && ($childs[$j][0]["parent"] == $childs[$k][0]["comm_id"])) { $exist = 1; } } // If parent don't exist then we add this comment on the end if resulting array and delete it from source array. if ($exist == 0) { array_push($cmnt, $childs[$j][0]); array_shift($childs[$j]); } // If exist comment in upper level, then we call funcion godown with current level - 1 in params. if (isset ($childs[$j-1][0])) { godown(& $childs, $max, $j-1, & $cmnt); } } } }
Funkce pro průchod komentáři směrem nahoru je velmi podobná té předchozí, jenom je zde přidána kontrola jestli existuje první komentář nižší úrovně a jestli ano, tak se zavolá funkce godown.
Nakonec vypisuji strukturovanou diskusi, menu, nebo cokoliv jiného.
Na závěr bych vás chtěl požádat, abyste mi do diskuse napsali, co si o tomto řešení strukturovaného výpisu myslíte, případně nějaké návrhy na vylepšení
Tiskni
Sdílej:
PS: Jako zarytému perlistovi mi zásadně vadí, že komentáře jsou delší než vlastní kód!U nas ve firme se naopak rika, ze komentar musi byt delsi nez metoda (Java)... sice trochu nadsazka, ale v podstate jde o vyjadreni principu, ze spatne komentovany kod muze byt super dobry, ale kdyz k nemu nekdo po case prijde a musi ho studovat, tak produktivita prace jde do haje.
No aktivita možná vzrostla, ale nikde to nevidět.No když už si toho všiml i takový bulvár jako DDJ, tak na tom něco bude...
Roughly 80% of the world’s data cannot plausibly be stored in a relational database. The 20% that does fit there is important enough that we’ve spent the last 20 years stuffing it into relational databases and doing interesting things with it. I’m still doing a lot of that. But there’s a lot more data out there that doesn’t look like tables than does.
A nebo rovnou objektovou databázi.A nebo. Ale mam pocit, ze ty se prosazuji jeste pomaleji nez XML storage. Je nejaka objektova DB, ktera by byla podobne rozsirena jako ZopeDB?
I když zrovna to STX mi připomíná XSLT, a jak bych podle toho chtěl postavit dostatečně funkční databázi, na to už mi fantazie nestačí... (Ale to neznamená, že bych se to nechtěl rád dozvědětSTX v podstate (z uzivatelskeho hlediska) je XSLT. Zmente namespace a odstrante nutnost stavet kvuli transformaci cely XML strom do pameti a mate STX (zhruba) Leda že bych měl nějaké velké XML soubory a nad nimi tyto příkazy prováděl.
"Objektově-relační databáze", "STX" a "Pes přeoperovaný na chobotnici" z mého pohledu patří do téže množiny (a sice do množiny obskurností).Rozvedte to s tim STX trochu. Jak si predstavujete reseni nejvetsiho problemu XSLT a dalsich dnesnich technologii na transformaci/dotazovani do XML -- tedy nutnosti reprezentovat cely XML strom v pameti? (krome nazoru "tahnete s XML do haje"
Já si osobně taky myslím, že XML je dost o problémechKdyz ho razite nekam, kam se nehodi, tak jo. Ale ja i kdyz jsem narazil na problemy, tak nikdy nebyly takove, abych se musel divat po alternative -- ona totiz srovnatelne rozsirena a podporovana alternativa pro praci se stromovymi daty neni (ne, YAML opravdu neni alternativa k XML, pokud nechcete zustat u ukladani konfiguracku pro pristup do DB
ale je in a každý kdo jí používá je happy a cool. Ale dost humoru.No tak u XML myslim tohle uz opada. Ted se na nej spise hazi spina a roli ruzovoucke in super technologie prejima uz zmineny YAML, ktery nemalo lidi (hlavne railsistu) povazuje za spasitele...
Zatímco na XML tam najdu hned minimálně 3 různé knihovny pro práci.Ano, a všechny tři jsou odporné a použitelné jen s krajním sebezapřením. Pro mě jako kdyby tam vůbec nebyly, já jsem rád, že tam pořád ještě jsou, jen kvůli zpětné kompatibilitě se softwarem, co je používá. Jediná pořádná XML knihovna pro Python, kterou jsem aspoň trochu ochoten vzít na milost, je lxml. ElementTree API je ještě rozumně použitelné, ale v "referenční implementaci" mi chybí pořádný XPath, takže od lxml mě nikdo neodtrhne.
ale na data typu "tabulka uživatelů" a podobně mi přijde pořád ještě lepší YAML, obzvlášť pokud do toho člověk musí lozit editorem ručně.To byste se divil. Me je XML na editaci moc prijemne a to z jedhono duvodu -- ze je vizualne symetricke. Vidim, kde tag konci a kdyz to mam rozumne zformatovany, tak vim, k cemu ze tenhle koncovej tag patri. U YAMLu tezko.
Nicméně kolem sebe zvláště od Vimařů<flame>Vim neumi automaticky uzavirat tagy nebo zvyraznovat XML syntaxi?slyším, že dotyční XML nepoužívají, pokud nemusejí.
...YAML se nemusíme bavit, to je prostě směšná záležitost typu, jakých si u Ruby vymysleli spousty, YAML je IMHO velmi nedomyšlená a nedotažená věc.Ale? Že o tom tolik víte...