PixiEditor byl vydán ve verzi 2.0. Jedná se o multiplatformní univerzální all-in-one 2D grafický editor. Zvládne rastrovou i vektorovou grafiku, pixel art, k tomu animace a efekty pomocí uzlového grafu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GNU LGPL 3.0.
Byly představeny novinky v Raspberry Pi Connect for Organisations. Vylepšen byl protokol auditu pro lepší zabezpečení. Raspberry Pi Connect je 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. Verze pro organizace je placená. Cena je 0,50 dolaru za zařízení za měsíc.
CISA (Cybersecurity and Infrastructure Security Agency) oznámila veřejnou dostupnost škálovatelné a distribuované platformy Thorium pro automatizovanou analýzu malwaru. Zdrojové kódy jsou k dispozici na GitHubu.
Ubuntu nově pro testování nových verzí vydává měsíční snapshoty. Dnes vyšel 3. snapshot Ubuntu 25.10 (Questing Quokka).
Společnost Proton AG stojící za Proton Mailem a dalšími službami přidala do svého portfolia Proton Authenticator. S otevřeným zdrojovým kódem a k dispozici na všech zařízeních. Snadno a bezpečně synchronizujte a zálohujte své 2FA kódy. K používání nepotřebujete Proton Account.
Argentinec, který byl náhodně zachycen Google Street View kamerou, jak se zcela nahý prochází po svém dvorku, vysoudil od internetového giganta odškodné. Soud uznal, že jeho soukromí bylo opravdu porušeno – Google mu má vyplatit v přepočtu asi 12 500 dolarů.
Eben Upton, CEO Raspberry Pi Holdings, informuje o RP2350 A4, RP2354 a nové hackerské výzvě. Nový mikrokontrolér RP2350 A4 řeší chyby, i bezpečnostní, předchozího RP2350 A2. RP2354 je varianta RP2350 s 2 MB paměti. Vyhlášena byla nová hackerská výzva. Vyhrát lze 20 000 dolarů.
Představen byl notebook TUXEDO InfinityBook Pro 15 Gen10 s procesorem AMD Ryzen AI 300, integrovanou grafikou AMD Radeon 800M, 15,3 palcovým displejem s rozlišením 2560x1600 pixelů. V konfiguraci si lze vybrat až 128 GB RAM. Koupit jej lze s nainstalovaným TUXEDO OS nebo Ubuntu 24.04 LTS.
Po půl roce od vydání verze 2.41 byla vydána nová verze 2.42 knihovny glibc (GNU C Library). Přehled novinek v poznámkách k vydání a v souboru NEWS. Vypíchnout lze například podporu SFrame. Opraveny jsou zranitelnosti CVE-2025-0395, CVE-2025-5702, CVE-2025-5745 a CVE-2025-8058.
Byla vydána nová verze 9.15 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání.
Jsem zakladatelem tohoto portálu. Linux jsem používal spousty let, nějaký čas jsem se aktivně podílel na jeho propagaci v Česku (CZLUG, časopisy ComputerWorld, Network Magazine atd). Se současným Abíčkem už nemám nic společného.
Právě jsem si zkušebně zapnul logování SQL dotazů a mé černé představy se naplnily. Opravdu je načítání rubrik velmi neefektivní a pomalé. Viz bug 337. Z fleku mě napadl jedna optimalizace (o které přemýšlím ve skutečnosti už nějakou dobu), ale ta pomůže jen z části. A jelikož více hlav více ví, chci vás poprosit o radu. Třeba mi poradíte.
Nejdříve krátce popíšu datový model. Na úrovni Javy je popsán v článku Strč prst skrz AbcLinuxu - I (a přes ta léta a spoustu nových služeb se prakticky nezměnil), o databázovém schématu se zmíním teď. Každý objekt má svou tabulku s číselným primárním klíčem. Pak je zde tabulka relace, která vytváří vztah rodič-potomek mezi dvěma řádkami libovolných tabulek pomocí kódu tabulky plus čísla řádky.
Když načtu v Javě nějaký objekt, musím pro něj zjistit i jeho potomky. To zvládne jeden select do tebulky relace, kde vyplním identifikaci předka. Když mě zajímá potomek, už znám kód jeho tabulky a číslo řádky, není problém jej načíst. Tohle je velice jednoduchý a rozšiřitelný postup, který ale má své meze v efektivitě načítání.
A teď konkrétně. Pro načtení rubriky musím nejdříve zvolit aktuální články a načíst jejich relace. Není problém. A pak pro každý článek načíst seznam jeho potomků, načíst dvě položky (honorář, hlavička diskuse), načíst záznam (obsah článku) a zjistit počet přečtení. Tedy čtyři dotazy na každý článek. Naštěstí používám efektivní cache, ale ta je k ničemu, když je prázdná nebo tu stránku ještě nikdo nenačetl.
Dovedu si představit, jak načíst ve třech dotazu celkem všechny záznamy, položky i počty přečtení. Trocha kódování a je to. Jen musím být opatrný a nezaneřádit kód nějakým hackem. Ale neznám cestu, jak v jednom dotazu načíst potomky všech objektu a vyznat se ve výsledku, ke kterému výsledku co patří. A vůbec, jak zadat do jednoho dotazu N dvojic. Leda to shlukovat podle typu předka do tolika dotazů, kolik různých typů předků potřebuji načíst.
Takže jsem si ujasnil myšlenky a nejspíše si na vše přišel sám . Ale možná vás napadne lepší způsob.
CREATE TABLE relace ( cislo INT AUTO_INCREMENT PRIMARY KEY, -- identifikator vazby predchozi INT NOT NULL, -- id predchozi vazby typ_predka CHAR(1) NOT NULL, -- id tabulky predka predek INT NOT NULL, -- id predka typ_potomka CHAR(1) NOT NULL, -- id tabulky obsahu potomek INT NOT NULL, -- id obsahu url VARCHAR(255) DEFAULT NULL, -- URL stranky data TEXT DEFAULT NULL -- volitelne jmeno vazby );
SELECT * FROM relace WHERE typ_predka=? AND predek=?
Tiskni
Sdílej:
select * from relace where typ_predka='P' and predek=42802 select * from polozka where cislo in (42803,42831) order by cislo select * from zaznam where cislo in (57550) order by cislo select soucet from citac where typ like 'P' and cislo=42802
Ctverice zminenych dotazu. Posledni tri by sly celkem snadno aplikovat hromadne na vsechny clanky. Proste by tam tech cisilek trosku pribudlo
Ale ten prvni je v obecnem pripade nejhorsi. Zde ale vim, ze se bude menit jen cislo predka. Jenze stejne radeji hledam obecne reseni. Takze kdyz mam treba dvojice (A,1), (A,2), (B,3), (C,1), IMHO by resenim bylo:
select * from relace where typ_predka='A' and predek in (1,2) select * from relace where typ_predka='B' and predek in (3) select * from relace where typ_predka='C' and predek in (1)
A pak rucne projit vracene radky a podle sloupecku predek rozhazet udaje ke spravnym objektum.
select * from relace where (typ_predka='A' and predek in (1,2)) or (typ_predka='B' and predek in (3)) or (typ_predka='C' and predek in (1))Ale jinak se v tom zatím moc nevyznám
create table
pro polozka a zaznam?
Předpokládám, že ta čísla (42803,42831) a (57550) jsou z relace, a které je nebo je polozka a zaznam se pozna podle typ_potomka?
Nestačilo by nepoužívat 'select *
'? Navíc u databází bývá zvykem, že v záznamu nejsou celé BLOBy, ale jen jakési handly na ně, ale nevím, jestli to tak dělá i MySQL.
SELECT * FROM relace AS Rserial, relace AS Rclanky WHERE Rserial.url = ? AND Rserial.cislo = Rclanky.cislo AND Rclanky.typ = 'P' ORDER BY Rclanky.cisloTím bych měl získat čísla všech článků v seriálu. K nim potřebuji přidat obsah (zaznam) a třeba dvě položky z polozka – dejme tomu autor a honorar. Upravím tedy SELECT:
SELECT * FROM relace AS Rserial, relace AS Rclanky, zaznam, polozka AS Pautor, polozka AS Phonorar WHERE Rserial.url = ? AND Rserial.cislo = Rclanky.cislo AND Rclanky.typ = 'P' AND zaznam.cislo = Rclanky.cislo AND Pautor.cislo = Rclanky.cislo AND Phonorar.cislo = Rclanky.cislo ORDER BY Rclanky.cisloStejně by se do SELECTu přidal i počet položek. Na spojování tabulek jsou databáze optimalizované, pokud jsou na příslušných sloupečcích indexy, mělo by to být OK. Výsledkem SELECTu by měl být 1 řádek = 1 článek. Místo
SELECT *
si samozřejmě vyberu jen ty sloupečky, které potřebuji.
Doufám, že tu nepíšu úplné nesmysly a půjde to na strukturu databáze napasovat SELECT * FROM relace AS Rserial, relace AS Rclanky, zaznam, polozka AS Pautor, polozka AS Phonorar, relace AS Rautor, relace AS Rhonorar WHERE Rserial.url = ? AND Rserial.cislo = Rclanky.cislo AND Rclanky.typ = 'P' AND zaznam.cislo = Rclanky.cislo AND Pautor.cislo = Rautor.cislo AND Rautor.predek = Rclanky.cislo AND Rautor.typ_predka = 'P' AND Phonorar.cislo = Rhonorar.cislo AND Rhonorar.predek = Rclanky.cislo AND Rhonorar.typ_predka = 'P' ORDER BY Rclanky.cislo
CREATE TABLE polozka ( cislo INT AUTO_INCREMENT PRIMARY KEY, -- jednoznacny identifikator typ SMALLINT, -- typ polozky (diskuse, faq, ..) podtyp VARCHAR(30) NULL, -- podtyp data TEXT NOT NULL, -- XML pridal INT(6) NOT NULL, -- odkaz na uzivatele vytvoreno DATETIME, -- cas vytvoreni zmeneno TIMESTAMP NOT NULL -- cas posledni zmeny ); CREATE TABLE zaznam ( cislo INT AUTO_INCREMENT PRIMARY KEY, -- jednoznacny identifikator typ SMALLINT, -- typ zaznamu (HW, SW, clanek ..) podtyp VARCHAR(30) NULL, -- podtyp data LONGTEXT NOT NULL, -- XML pridal INT(6) NOT NULL, -- odkaz na uzivatele vytvoreno DATETIME, -- cas vytvoreni zmeneno TIMESTAMP NOT NULL -- cas posledni zmeny );
ALTER TABLE relace ADD INDEX in_potomek (typ_potomka,potomek); ALTER TABLE relace ADD INDEX in_predek (typ_predka,predek); ALTER TABLE relace ADD INDEX in_predchozi (predchozi); ALTER TABLE relace ADD INDEX in_url (url);
Indexy jsem delal podle EXPLAIN, ale spise jen amatersky.
Pokud jde o prvni dotaz, mas pravdu, take jsem si ted vsimnul, ze ten LIKE je zbytecny, kdyz znam presnou hdonotu. Ale bude to poznat na vykonnosti, kdyz ma sloupecek vzdy jediny znak a ten strcim do vyrazu? Pak snad nebude rozdil mezi porovnanim a LIKE, ne?
Chápu to dobře, že každej jednotlivej příspěvek v diskusi získáváš jedním SQL dotazem? V případě, že ano, nebylo by mnohem efektivnější získat všechny příspěvky z jednoho vlákna pomocí 1 dotazu (například podle UID prvního-kořenového záznamu) a ty pak srávně "pospojovat" podle nějakého identifikátoru udávající pozici ve stromu příspěvků u jednotlivých příspěvků až v aplikaci?