V červenci loňského roku organizace Apache Software Foundation (ASF) oznámila, že se částečně přestane dopouštět kulturní apropriace a změní své logo. Dnes bylo nové logo představeno. "Indiánské pírko" bylo nahrazeno dubovým listem a text Apache Software Foundation zkratkou ASF. Slovo Apache se bude "zatím" dál používat. Oficiální název organizace zůstává Apache Software Foundation, stejně jako názvy projektů, například Apache HTTP Server.
Byla vydána (𝕏) srpnová aktualizace aneb nová verze 1.104 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.104 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Spotify spustilo přehrávání v bezztrátové kvalitě. V předplatném Spotify Premium.
Spoluzakladatel a předseda správní rady americké softwarové společnosti Oracle Larry Ellison vystřídal spoluzakladatele automobilky Tesla a dalších firem Elona Muska na postu nejbohatšího člověka světa. Hodnota Ellisonova majetku díky dnešnímu prudkému posílení ceny akcií Oraclu odpoledne vykazovala nárůst o více než 100 miliard dolarů a dosáhla 393 miliard USD (zhruba 8,2 bilionu Kč). Hodnota Muskova majetku činila zhruba 385 miliard dolarů.
Bylo vydáno Eclipse IDE 2025-09 aneb Eclipse 4.37. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
T-Mobile od 15. září zpřístupňuje RCS (Rich Communication Services) zprávy i pro iPhone.
Společnost ARM představila platformu Arm Lumex s Arm C1 CPU Cluster a Arm Mali G1-Ultra GPU pro vlajkové chytré telefony a počítače nové generace.
Unicode Consortium, nezisková organizace koordinující rozvoj standardu Unicode, oznámila vydání Unicode 17.0. Přidáno bylo 4 803 nových znaků. Celkově jich je 159 801. Přibylo 7 nových Emoji.
Apple představil (YouTube) telefony iPhone 17 Pro a iPhone 17 Pro Max, iPhone 17 a iPhone Air, sluchátka AirPods Pro 3 a hodinky Watch Series 11, Watch SE 3 a Watch Ultra 3.
Realtimová strategie Warzone 2100 (Wikipedie) byla vydána ve verzi 4.6.0. Podrobný přehled novinek, změn a oprav v ChangeLogu na GitHubu. Nejnovější verzi Warzone 2100 lze již instalovat také ze Snapcraftu a Flathubu.
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: