Oficiálně byl vydán Android 16. Detaily na blogu a stránkách věnovaných vývojářům.
Byla vydána nová verze 14.3 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.
CSIRT.CZ upozorňuje, že na základě rozhodnutí federálního soudu ve Spojených státech budou veškeré konverzace uživatelů s ChatGPT uchovávány. Včetně těch smazaných.
Ač semestr ve škole právě končí, bastlíři ze studentského klubu Silicon Hill neodpočívají a opět se jako každý měsíc hlásí s pravidelným bastlířským setkáním Virtuální Bastlírna, kde si můžete s ostatními techniky popovídat jako u piva o novinkách, o elektronice, softwaru, vědě, technice obecně, ale také o bizarních tématech, která se za poslední měsíc na internetu vyskytla.
Z novinek za zmínku stojí Maker Faire, kde Pájeníčko předvedlo … více »Na WWDC25 byl představen balíček Containerization a nástroj container pro spouštění linuxových kontejnerů na macOS. Jedná se o open source software pod licencí Apache 2.0 napsaný v programovacím jazyce Swift.
Do 16. června do 19:00 běží na Steamu přehlídka nadcházejících her Festival Steam Next | červen 2025 doplněná demoverzemi, přenosy a dalšími aktivitami. Demoverze lze hrát zdarma.
Apple na své vývojářské konferenci WWDC25 (Worldwide Developers Conference, keynote) představil řadu novinek: designový materiál Liquid Glass, iOS 26, iPadOS 26, macOS Tahoe 26, watchOS 26, visionOS 26, tvOS 26, nové funkce Apple Intelligence, …
Organizátoři konference LinuxDays 2025, jež proběhne o víkendu 4. a 5. října 2025 v Praze na FIT ČVUT, spustili přihlašování přednášek (do 31. srpna) a sběr námětů na zlepšení.
Po roce byla vydána nová stabilní verze 25.6.0 svobodného multiplatformního multimediálního přehrávače SMPlayer (Wikipedie).
DNS4EU, tj. evropská infrastruktura služeb DNS založená na vysoce federovaném a distribuovaném ochranném ekosystému, byla spuštěna v testovacím režimu [𝕏]. Na výběr je 5 možností filtrování DNS.
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...