Mozilla představuje Firefox Enterprise určený jako podnikový prohlížeč pro organizace s přísnými požadavky na bezpečnost, správu a dodržování předpisů. S profesionální podporou. Dostupný je zatím ve Francii, Německu, Rakousku a Švýcarsku.
Kybernetický útok zasáhl nejméně 150 supermarketů Intermarché a několik prodejen řetězců Leclerc a Coopérative U. Chladicí jednotky napadených obchodních domů byly nastaveny na nepřetržité odmrazování a teplota v nich mnohdy vystouala až nad 50°C. Škody napáchané na chlazeném a mraženém zboží budou patrně dosahovat miliónů eur.
… více »Stát Kalifornie zažaloval výrobce 3D tiskových filamentů Polymaker. Vrchní soud San Diego County tvrdí, že firma propagací svých výrobků mezi příznivci 3D tištěných zbraní podporovala výrobu takzvaných 'ghost guns' (DIY zbraní) a že její PLA filament pro 3D tiskárny lze za těchto okolností považovat za součást určenou k výrobě střelné zbraně. Žaloba požaduje mimo jiné finanční sankce a soudní zákaz činnosti, Polymaker se hájí tím, že filament je běžný a sám o sobě legální produkt. Celý text žaloby (PDF na Google Drive).
V červnu byla představena aplikace Myna pro převod řeči na text v prostředí desktopu Ubuntu. Včera byla Myna zpřístupněna širší komunitě Ubuntu formou technologické ukázky dostupné v Ubuntu 24.04 LTS, Ubuntu 26.04 LTS a Ubuntu 26.10 s GNOME na Waylandu.
Ubuntu 27.04 bude Tenacious T-Rex.
Byla vydána nová verze 2026.4.0 "Never-slop" svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Přehled novinek v poznámkách k vydání a na GitHubu. ScummVM oslavil 25 let. Verze 0.0.1 vyšla 8. října 2001.
Kanadský vývojář Anthony Sistilli vytvořil ironický DIY projekt parodující kamerové systémy Flock, s cílem názorně demonstrovat rizika masového sledování jaké provozují tyto komerční ALPR systémy. Z levné IP kamery a vlastního ML softwaru (napsaného s pomocí SI circa za 20 minut, kód se mi bohužel nepodařilo dohledat) běžícího v laptopu sestavil jednoduchý systém, který detekuje výhradně policejní vozidla, zaznamenává jejich SPZ a
… více »Část údajů uživatelů internetového supermarketu Rohlík byla odcizena. Kyberútočníci napadli nástroj zákaznické podpory Rohlíku, odcizili tak jména, e-mailové adresy, v některých případech také telefonní čísla nebo přepisy komunikace mezi klienty a zákaznickou podporou. Rohlík incident nahlásil příslušným orgánům a přijal příslušné opatření, aby zamezil podobným případům v budoucnosti, uvedla firma.
Aplikace eDoklady fungovala v obou volebních dnech stabilně a prakticky bez front. Digitální a informační agentura (DIA) odhaduje, že se digitálním dokladem prokázalo více než 100.000 voličů. Aplikaci si před volbami či během nich aktualizovalo 247.517 uživatelů. Nových registrací bylo 19.431 a do aplikace se přihlásilo 357.879 lidí. Největší nápor přišel bezprostředně po otevření volebních místností mezi 14. a 16. hodinou, kdy si
… více »Začal semestr, začal i podzim a kromě hub rostou jako po dešti i veřejné dílny v Praze. Nedávno strahováci referovali o hackerspacu Bordel, nyní se otevřela dílna Dejvice Lab jen kousek od ČVUT. Na blížící Virtuální Bastlírně tak uslyšíte nejen report z návštěvy dílny HWLab, ale i řadu novinek, událostí a úsměvných momentů, které se za poslední měsíc ve světě techniky, ale i vědy udály. Připojte se tedy již v úterý 13.10. od 20:00 a zapojte se do
… více »Pozor, chystáte se komentovat 23 dní starou diskusi.
Nezdá sa mi, že by táto diskusia mala až toľko no ale o to nejde...
Nechce sa mi čítať kód .. chcel by som sa spýtať v kocke ako sú riešené transakcie?
Pozor, chystáte se komentovat 23 dní starou diskusi.To bude možná tím, že jsem tenhle blog měl uložený už delší dobu, akorát se mi ho nechtělo publikovat než budu mít všechny zkoušky za sebou. Pak bych akorát strávil spoustu času opravováním chyb místo učením se.
Nezdá sa mi, že by táto diskusia mala až toľko no ale o to nejde...
Nechce sa mi čítať kód .. chcel by som sa spýtať v kocke ako sú riešené transakcie?
Ještě to není úplně hotovo, ale v zásadě jde o to, že jakmile se zavolá fce startTransaction tak se veškeré dotazy na DB začnou ukládat do paměti. Po zavolání fce commitTransaction() se všechny dotazy začnou odesílat do databáze. Po provedení každého dotazu se kontroluje, jestli byl proveden úspěšně. Pokud ano, tak pokračuje. Pokud ne, tak vrátí všechno zpět.
Bohužel to mám zatím implementováno jen pro odesílání nových dat. Pro mazání a updaty se totiž bude muset ještě ukládat původní obsah. A až to bude hotové, tak by se to v případě, že se rollback nepovede mělo všechno uložit na disk, odkud by se pak dala transakce znovu provést.
Co se týče cizích klíčů, tak ty se řeší vytvořením speciální tabulky, která ukládá informace o tom, jak jsou tabulky propojené a na základě toho probíhá vkládání dat. Ukládání potom probíhá tak, že se nejdříve uloží tabulka, ze které se klíč bere. Pak se zpětně v databázi vyhledá hodnota klíče (protože klíč může být, a v mém případě většinou je, generovaný) a vloží se na správné místo do dotazu ukládajícího obsah druhé tabulky. Bohužel tohle není (a ani nemůže být stoprocentní), protože když budou dvě tabulky na sobě cirkulárně závislé, tak nebude možné rozhodnout, která se má uložit dřív.
No, že bych se na to nevys... Takové práce a zbytečně. Sice mě tady lidi ukamenujou, ale přesně kvůli podobným případům jsem rád, že existuje něco jako MSSQL :)
Ale jinak držim palce, jsem zvědavej, jak to bude fungovat.
Navíc samotný kód cms (tj všechno kromě src/db_connectors/mysql.php) se tak dost zjednodušil, protože nemusím tolik kontrolovat, jestli se všechno proběhlo správně.
Takze... Mel bych jen dve pripominky - pri vyskytu chyby volat die("blablabla") neni nejstastnejsi napad. Zvlast, kdyz stejne hlaseni vypise vic funkci. Pozdejsi ladeni a hledani chyb bude nocni mura.Já myslel, že jsem se většiny už zbavil, ještě to omrknu. Předtím jsem to měl opravdu všude, ale špatně se to používalo v administraci pro upozornění uživatele o chybě. Jinak díky za připomínku.
Druha vec se tyka tech "transakci" bez InnoDB. (v tech uvozovkach je to zamerne - nesplnuje to hned dve z charakteristik transakci - zachovani atomicity a konzistence. Copak se asi stane, kdyz se behem toho vaseho "commitu" nebo "rollbacku" server odporouci?Z toho důvodu chci ještě dodělat to uložení na disk. Možná i nějaký výpis na obrazovku, když se nepovede ani to. Nejdřív ale chci dodělat chybějící fičury (ty s ! v todo). Ono udělat něco takového bez podpory databáze je noční můra. Zase na druhou stranu mám pohodlí s používáním cizích klíčů kdekoliv. A pro transakční databáze je implementace „konektoru“ (vlastní? název třídy, která se stará o propojení s DB pomocí přesně daného rozhraní) o to jednodušší.
To uložení na disk? Jak se pak pozná, když teoreticky server se odporoučí v době "transakce" místo kde transakce zkončila a uděla se požadovaný rollback?
Respektivě mohl by si mi akorát nastínit, jak by to mělo teoreticky fungovat?
A bude to umět i transakce úložných procedur? Tím myslím, že budu mít nějakou stored procedure a budu potřebovat nad ní provádět transakce?
To uložení na disk? Jak se pak pozná, když teoreticky server se odporoučí v době "transakce" místo kde transakce zkončila a uděla se požadovaný rollback?
Respektivě mohl by si mi akorát nastínit, jak by to mělo teoreticky fungovat?
Ta „transakce“ je ukládána v RAM serveru, kde běží php (já vím, je to blbé řešení už jenom kvůli možnému zaplácnutí RAM když by dat bylo moc, ale s tím se jaksi u tohohle pidisystému nepočítá). Mimochodem, pokud spadne server, kde beží php, tak to bude sakra velký průser.
K tomu jak by to mělo (snad) fungovat. Transakce je ukládána v RAM jako několik polí ($putRecordTrans, $updateRecordTrans, $deleteRecordTrans), které obsahují parametry, se kterými byly volány příslušné fce (putRecord(), updateRecord() a deleteRecord()). Pokud by došlo k problému, uložil by se soubor s parametry pro všechna volání v dané transakci a někam na začátek by se uložilo číslo, v kolikátém volání došlo k problému. Pak by bylo možné identifikovat, co vrátit a co už ne. Navíc by byla možnost tam ty data dodatečně nacpat. Toť teorie, jaká bude praxe ještě nevím.
A bude to umět i transakce úložných procedur? Tím myslím, že budu mít nějakou stored procedure a budu potřebovat nad ní provádět transakce?
Tolik to zas promáklé nebude. Hlavní je aby to mělo funkčnost, kterou požaduji já, tj. alespoň podpora cizích klíčů.
Zajímavé řešení. Ta ramka bude hodně limitujicí, jak to bude vypadat, když se celá ram zaplní a systém začně swapovat? A co třeba když poběží několik transakcí na ráz?
Zase velkou výhodu vidím v tom, že díky tomuhle řešení hodně odlehčíš sql serveru.
Jsem k tomu spíše skeptický, ale je to zajímavý nápad a určitě si procvičíš programovní :) Takže ať to vyjde, ale dofám, že tohle nebude nikdo nasazovat na produkční řešení.
A ta podpora cizích klíčů bude taky zajímavá. :)
Nemám ponětí.Zajímavé řešení. Ta ramka bude hodně limitujicí, jak to bude vypadat, když se celá ram zaplní a systém začně swapovat?
Vidíš, to mně nenapadlo. Napadl mně jenom jiný přístup k DB a proto se databáze spolu se zavolánim startTransaction() uzamkne. Asi to vyřeším sekvenčním odesíláním transakcí nebo jednodušeji prostým zablokováním dalších transakcí. To by mělo být pár řádků v startTransaction(), v podstatě jenom kontrola, jestli není $transactionMode nastaveno na true.A co třeba když poběží několik transakcí na ráz?
Zase velkou výhodu vidím v tom, že díky tomuhle řešení hodně odlehčíš sql serveru.
To asi jo.Jsem k tomu spíše skeptický, ale je to zajímavý nápad a určitě si procvičíš programovní :)
Takhle vysoko ani nemířím. Budu rád když si to někdo třeba použije na svoje osobní stránky.Takže ať to vyjde, ale dofám, že tohle nebude nikdo nasazovat na produkční řešení.
To už tam je, protože kvůli tomu jsem to dělal. Ale má to své masařky, viz poslední odstavec tohoto komentáře.A ta podpora cizích klíčů bude taky zajímavá. :)
není pořádná ochrana proti SQL injection (důsledek bodu jedna), asi to nebude tak hrozné (tj. bude to vyžadovat mrknout do kódu před útokem), ale přesto. Nejdříve ale chci dodělat nějaké další featury, tohle už bude jednoduché.rozhodne nesouhlasim. Nejen, ze je neskutecna otrava to vsechno vyhledavat a doplnovat, ale ono vydat kod a az pak resit bezpecnost neni rozhodne spravny pristup - prave kvuli riziku, ze neco opomenete. Je to jen to co me napadlo pri letmem pohledu do kodu.
Souhlas a pokud se ti to nechtělo dělat, tak si mohl použít už nějaký hotový layer. Třeba takové dibi :o)
1. Nechci si hrát na něco velkého, samozřejmě že bez popory DB to pořád bude všelijaké řešení. Ovšem pokud chcete, můžete dopsat konektor třeba pro Oracle a pak ta transakčnost bude opravdová. Jako základ můžete vzít mysql-innodb.php, který sice není kompletní a ještě jsem ho ani nezkoušel, ale není tam tolik balastu okolo jako v mysql.php. Můžete si i vygenerovat doxygenem dokumentaci.
2. co se týče SQL statements, tak ty by měly být ošetřené poctivým escapováním a tudíž všechno co je součástí dotazu je escapovaný text v uvozovkách (tudíž místo např SELECT tam bude 'SELECT', což by nemělo dělat nic.). Tudíž žádné strašné hledání. Dále všechny dotazy na databázi mimo administraci jsou v podstatě hardcoded, jediné co se předává jsou identifikátory, které by měly při jakékoli změně na něco jiného než číslo vrátit prázdný výsledek. Ovšem pro jistotu je do budoucna hodlám kontrolovat, jestli je identifikátor číslo, protože věřím, že by se našel nějaký šikula, který by to nějak zvládl oblbnout.
Druha vec se tyka tech "transakci" bez InnoDB. (v tech uvozovkach je to zamerne - nesplnuje to hned dve z charakteristik transakci - zachovani atomicity a konzistence.Mimochodem, proto tam ty uvozovky mám taky
Prostě jako databáze, které transakce nejsou cizí se to chovat nemůže, ale aspoň se to k tomu snaží konvergovat.
pokiaľ nejde čiste o radosť z programovaniaJinak bych to nedělal.
Pokiaľ viem, na ic.cz je aj postgresql ktorý transakcie podporuje. Na "kritickejšie" nasadenia by sa viac hodil ten.Zatím se mi ho nechtělo instalovat, ale možná pro něj v budoucnu udělám backend.
Zatím se mi ho nechtělo instalovat, ale možná pro něj v budoucnu udělám backend.
Pro "základní" věci (bez využívání specifik jednotlivých databází) není v PHP ani potřeba dělat specifické backendy pro různé DBMS. Úplně nejtriviálněji je to řešitelné tak, že se názvy jednotlivých funkcí sestavují v runtime na základě názvu databáze (mysql, pg, ibase apod.), který je někde v konfiguraci, a generického názvu funkce. Je pochopitelně otázka, jakou režii má kód typu:
$fnc = $dbname."_query"; $res = $fnc($sql);
oproti "obvyklému" kódu:
$res = mysql_query($sql);
(kde místo mysql_query samozřejmě může být třeba ibase_query() nebo něco jiného).
škaredému "variable variable"To jsem ukazoval jen jako to nejjednodušší možné univerzální řešení. Jen pro přesnost: není to "variable variable", nýbrž "variable function". A nejde o nic škaredého - je to velmi silný a užitečný nástroj. Samozřejmě je potřeba s ním pracovat opatrně, vzhledem k potenciální nebezpečnosti.
Teď na to dibi koukám a nevypadá to tak špatně, ale nelíbí se mi moc řešení, kdy musím psát SQL statements přímo do funkce.Kdyz uz psat SQL rucne, tak by imho melo byt uplne mimo v nejakem univerzalnim formatu (XML, .ini, .properties ...whatever) a v te aplikace by se na to melo odkazovat pres nejake unikatni ID. SQL dotazy rozesete po kodu je peklo udrzovat.
Já tohle používání proměnných ve jménech identifikátoru nemám moc rád, protože mi to přijde nepřehledné.
Další problém je v tom, že bych ten backend musel stejně udělat, protože spousta těch věcí je DB specific a tudíž na standardní funkce php by se to použít nedalo (možností by bylo použít namespace, ale pak by to nebylo kompatibilní se staršími verzemi php 5.x)
Teď jsem chtěl jako ukázku poslat rozdíl v commitTransaction() v implementaci v mysql-innodb.php a onom „obezličkovitém“ mysql.php. Jaksi jsem ale zjistil, že v mysql-innodb.php jsem ho ještě neimplementoval. 
Tak se vykašli na tuhle kombinace a udělej to v asp.net a mssql :)
Tak to i bylo původně řešeno (a na rovinu, v kódu je už ze zvyku tak řadím), ale problém byl s cizími klíči. Na to jsem používal mysq_inserted_id() nebo jak se ta fce jmenuje, ale znamenalo to možnost použití jenom na generované identifikátory. Tohle je univerzálnější řešení. A jak už jsem psal, přišlo my to jako zajímavý problém k vyřešení.
Navíc tohle se týká jenom jednoho backendu. Když při instalaci zvolíte connector mysql-innodb.php tak se používá transakčních schopností databáze a žádných obezliček. Pomíjím, že to nejspíš nebude fungovat, protože zatím mám veškeré DB jako MyISAM (ono to na databázi Amaroku docela stačí) takže to nemám otestované. Další problém je, a teď na sebe prásknu něco příšerného, – nikdy jsem přímo nepracoval s transakční databází, všechno mám založeno jen na teoretických znalostech vyčtených z manuálů.
Tiskni
Sdílej: