Byl publikován přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) za uplynulé dva měsíce. Servo zvládne už i Gmail. Zakázány jsou příspěvky generované pomocí AI.
Raspberry Pi Connect, tj. oficiální služba Raspberry Pi pro vzdálený přístup k jednodeskovým počítačům Raspberry Pi z webového prohlížeče, byla vydána v nové verzi 2.5. Nejedná se už o beta verzi.
Google zveřejnil seznam 1272 projektů (vývojářů) od 185 organizací přijatých do letošního, již jednadvacátého, Google Summer of Code. Plánovaným vylepšením v grafických a multimediálních aplikacích se věnuje článek na Libre Arts.
Byla vydána (𝕏) dubnová aktualizace aneb nová verze 1.100 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.100 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.5.
OpenSearch (Wikipedie) byl vydán ve verzi 3.0. Podrobnosti v poznámkách k vydání. Jedná se o fork projektů Elasticsearch a Kibana.
PyXL je koncept procesora, ktorý dokáže priamo spúštat Python kód bez nutnosti prekladu ci Micropythonu. Podľa testov autora je pri 100 MHz približne 30x rýchlejší pri riadeni GPIO nez Micropython na Pyboard taktovanej na 168 MHz.
Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 12.0. Přehled novinek v aktualizované dokumentaci.
Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-05-06. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Pravděpodobně se jedná o poslední verzi postavenou na Debianu 12 Bookworm. Následující verze by již měla být postavena na Debianu 13 Trixie.
Richard Stallman dnes v Liberci přednáší o svobodném softwaru a svobodě v digitální společnosti. Od 16:30 v aule budovy G na Technické univerzitě v Liberci. V anglickém jazyce s automaticky generovanými českými titulky. Vstup je zdarma i pro širokou veřejnost.
select lang2 as preklad from translations where text='vyraz_ktery_chci_prelozit'
Vyleze mi sloupec preklad s překladem ze sloupce lang2
Samozřejmě očekává se, že mám jinou tabuli, která definuje který sloupec je která jazyková verze.
Jazykové verze mám tedy jakoby horizontálně ve sloupcích.
----
Pak existuje druhý způsob a to jakoby vertikálně.
Mějme tabuli translations s cca 20000 záznamy krát počet jazykových verzí a v ní sloupce
text, langid, translation, vše dejme tomu varchar(200), langid je int(11). Index je na sloupci text & langid i samostatně na text, langid.
Představme si, že udělam
select translation as preklad from translations where text='vyraz_ktery_chci_prelozit' and langid=2
Vyleze mi sloupec preklad s překladem textu v jazykové verzi daného textu kde je langid 2.
Samozřejme očekává se, že mám jinou tabuli, která jazykové verze definuje a její id == translations.langid, je mezi nimi tedy vazba.
---
U toho horizontálního mám omezený počet jazykových verzí daný počtem rezervovaných sloupců, nicméně 7 je pro konkrétní účely naprosto dostatečné se značnou rezervou. Přidat sloupec je trivialní záležitost. U horizontálního také oproti vertikálnímu musím držet i nepřeložené prázdné překlady. Nicméně předpokládá se, že vše bude přeloženo a nic nebude vynecháno, jinak je to považováno za chybový stav a překlady je nutno doplnit.
Jak se komu který způsob jeví? Jaká mohou být úskalí a kde vidíte hlavní problémy toho nebo onoho přístupu?
Předem díky za diskuzi na tohle téma.
Řešení dotazu:
JOIN
odpadne? SELECT
y jsou jednodušší v případě sloupce udávajícího jazyk – podmínka na jazyk se píše normálně do WHERE
, jak je každý zvyklý, a ne do SELECT
. Doporučovat začátečníkovi ukázkový příklad, jak se to dělat nemá, není dobrý nápad. Porušovat pravidla je rozumné jedině tehdy, když to má nějaký přínos, a hlavně když dotyčný přesně ví, proč ta pravidla porušuje. Což by v tomto případě znamenalo alespoň to, že si umí změřit rozdíl v zátěži databáze, a že mu ten rozdíl něco přinese.
můžeš každému nastavit svoje řazeníCož má ale význam jedině tehdy, pokud podle té hodnoty opravdu chce řadit.
S vertikálním přístupem to neudělášMySQL neumí částečné indexy nebo funkční indexy?
Ať to uděláš jakkoliv, určitě to udělej tak, aby se SQL dotazy daly dobře generovatJeště podstatně lepší je udělat to tak, aby se žádné dotazy generovat nemusely. Pak nehrozí, že to generování dotazů bude postižené SQL injection, a databáze může prováděcí plány dotazů kešovat.
Což je docela časté, neboť do databáze se necpou stringy aplikace, ale data.můžeš každému nastavit svoje řazeníCož má ale význam jedině tehdy, pokud podle té hodnoty opravdu chce řadit.
MySQL neumí částečné indexy nebo funkční indexy?Pokud vím, tak ne.
a databáze může prováděcí plány dotazů kešovat.Kešovat může ve všech případech, jen to občas zabere trochu více místa. Typicky těch jazyků není mnoho, aby to nějak vadilo.
Což je docela časté, neboť do databáze se necpou stringy aplikace, ale data.To, že jsou to data, není podstatné. Řazení podle textu často znamená chybný návrh aplikace. Dává smysl řadit třeba podle data (chronologicky) nebo podle ceny. Řazení podle textu může mít význam, když se dělá nějaký výstup pro tisk (třeba seznam osob), ve kterém se bude hledat offline. Ale řazení podle textu velice často znamená, že aplikace nechává něco hledat člověka očima, místo aby mu nabídla možnost zadat hledaný text. A zrovna u těch jazyků a navíc 20 000 záznamů je velice pravděpodobné, že to nikdo nebude chtít řadit.
----- horizontal ----- Space usage: Data 1.5 MiB, Index 144 KiB, Total 1.7 MiB. $sql="select ".$column." as xtext from horiz_table where text_index='".addslashes($textindex)."'"; ----- vertical ----- Space usage: Data 1.5 MiB, Index 896 KiB, Total 2.4 MiB. $sql="select text as xtext from vert_table where text_index='".addslashes($textindex)."' and langid='".$langid."'"; horizontal vertical test 1 409832 380722 test 2 417419 384763 test 3 410420 387814Ty pocty jsou pocty radku, ktere se povedlo vybrat do presnych 30s. Cas meren pomoci microtime(true) a odecitano od casu startu ziskaneho stejne tak pomoci microtime, aby nam neutekly nejake ty zlomky sekund. Dokud rozdil je <30, tak makame.
jsou escapovány znaky, kterými se dá uniknout ze syntaxeTo je jen zbožné přání. Parser SQL příkazů používá nějaké kódování znaků, nějakou konfiguraci, může se lišit verzi od verze databázového stroje. Jste si jist, že vaše funkce pro escapování tohle všechno zohledňuje? Escapování znaků není ošetření SQL injection, je to jen hack, který možná zachrání ty nejkřiklavější případy.
Ze všeho nejhorší je že všechny defaultně považujete za blbce. Kdybych tu měl vypsat výčet všeho na co mě skutečně nemusíte upozorňovat, protože jsem si toho ze své více než 15ti leté programátorské praxe vědom aby jste měl jistotu, že mě mimo téma dotazu není třeba na další okolnosti upozorňovat, tak by původní dotaz úplně zapadnul pod tímto výčtem, jen aby jste pochopil, že se nebavíte s blbcem, ale skoro kolegouNe, nepovažuji všechny za blbce. O SQL injection jsem vám nenapsal ani čárku do té doby, než jste vy sám nenapsal kód, který je na SQL injection náchylný. Upozorňovat vás na SQL injection zjevně je potřeba, když pořád trváte na tom, že budete používat hacky, které možná proti SQL injection trochu pomáhají ale spíš ne. Máte aspoň nějaký důvod, proč používáte nebezpečné skládání SQL dotazů místo parametrických dotazů?
Ukládat statické texty pro gui do databáze není většinou štastné rozhodnutí. Databáze je primárně na živá (nestatická) data. Stejně jako kód který je statický, neukládáte do databáze, tak i statické texty nedává smysl ukládat do DB.
U statických textů, vás nezajímá transakčnost změn a podobné vlastnosti, které vám poskytují databáze. Zato pravděpodobně budete chtít verzování těchto textů (kdo kdy změnil jaký text) a jednoduchou úpravu v textovém souboru. Pokud při nasazení nové verze vaší aplikace nebudete potřebovat dělat zásah do databáze, tak zredukujete rizika při nasazení (data v databázi nemají příkaz "nainstaluj předchozí verzi před pokaženým nasazením" zatímco u verzovaného aplikačního kódu je to většinou triviální).
Tady máte příklad jak se řeší statické texty.
Nevyjádřil jsem se přesně. Coby databáze jsem myslel splňující ACID, což je drtivá většina SQL databází. A na SQL řešení se tazatel ptal.
Gnu gettext je úplně jiný typ úložiště dat a mnohem lépe by IMHO vyhovoval požadavkům tazatele.
Tiskni
Sdílej: