Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
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.
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
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: