Podvodné reklamy na sociálních internetových platformách, jako je Facebook, Instagram nebo X, vytvořily loni v Česku jejich provozovatelům příjmy 139 milionů eur, tedy zhruba 3,4 miliardy korun. Proti roku 2022 je to nárůst o 51 procent. Vyplývá to z analýzy Juniper Research pro společnost Revolut. Podle výzkumu je v Česku zhruba jedna ze sedmi zobrazených reklam podvodná. Je to o 14,5 procenta více, než je evropský průměr, kde je podvodná každá desátá reklama.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.6 (Mastodon). Přehled novinek i s videi a se snímky obrazovek v oficiálním oznámení. Podrobný přehled v seznamu změn.
Czkawka a Krokiet, grafické aplikace pro hledání duplicitních a zbytečných souborů, byly vydány ve verzi 11.0. Podrobný přehled novinek v příspěvku na Medium. Od verze 7.0 je vedle frontendu Czkawka postaveného nad frameworkem GTK 4 vyvíjen nový frontend Krokiet postavený nad frameworkem Slint. Frontend Czkawka je už pouze v udržovacím módu. Novinky jsou implementovány ve frontendu Krokiet.
Jiří Eischmann na svém blogu publikoval článek Úvod do MeshCore: "Doteď mě radioamatérské vysílání úplně míjelo. Když jsem se ale dozvěděl, že existují komunity, které svépomocí budují bezdrátové sítě, které jsou nezávislé na Internetu a do značné míry taky elektrické síti a přes které můžete komunikovat s lidmi i na druhé straně republiky, zaujalo mě to. Když o tom přede mnou pořád básnili kolegové v práci, rozhodl jsem se, že to zkusím taky.
… více »Byla vydána verze 0.5.20 open source správce počítačových her na Linuxu Lutris (Wikipedie). Přehled novinek v oznámení na GitHubu. Instalovat lze také z Flathubu.
Peter Steinberger, autor open source AI asistenta OpenClaw, nastupuje do OpenAI. OpenClaw bude převeden pod nadaci a zůstane otevřený a nezávislý.
Společnost Backblaze zveřejnila statistiky spolehlivosti pevných disků používaných ve svých datových centrech za rok 2025. Ke konci roku 2025 vlastnila 349 462 pevných disků. Průměrná AFR (Annualized Failure Rate), tj. pravděpodobnost, že disk během roku selže, byla 1,36 %. V roce 2024 to bylo 1,57 %. V roce 2023 to bylo 1,70 %. V roce 2022 to bylo 1,37 %.
Nástroj sql-tap je proxy mezi aplikací a databází, které zachytává všechny SQL dotazy a zobrazuje je v terminálovém rozhraní. Zde lze téměř v reálném čase zkoumat dotazy, sledovat transakce a spouštět SQL příkaz EXPLAIN. Podporované databázové systémy jsou pouze PostgreSQL a MySQL. Zdrojový kód je dostupný na GitHubu, pod licencí MIT.
Byla vydána nová verze 9.2 textového editoru Vim (Vi IMproved). Přináší vylepšené doplňování, podporu schránky ve Waylandu, podporu XDG Base Directory (konfigurace v $HOME/.config/vim), vylepšené Vim9 skriptování nebo lepší zvýrazňování změn. Vim zůstává charityware. Nadále vybízí k podpoře dětí v Ugandě. Z důvodu úmrtí autora Vimu Brama Moolenaara a ukončení činnosti jím založené charitativní organizace ICCF Holland projekt Vim navázal spolupráci s charitativní organizaci Kuwasha.
Byl představen editor MonoSketch, webová aplikace pro tvorbu diagramů, technických nákresů, flowchartů a různých dalších vizualizací, to vše jenom z ASCII znaků. Všechny operace běží pouze v prohlížeči uživatele a neprobíhá tedy žádné nahrávání dat na server. Zdrojový kód aplikace (drtivá většina Kotlin, žádné C#) je dostupný na GitHubu pod licencí Apache 2.0.
Jde nějak v PHPku zařídit, abych na jeden XMLHTTP(Ajax) požadavek dostal více odpovědí? V AJAXu dělám importér, který podle importuje data ze souborů, které se během importu stahují, a na každý tento soubor mám vlastní AJAX request. Jenomže každý importovaný soubor má několik podpoložek a ty bych chtěl pomocí AJAXu hlásit do UI.
Schéma jak to ted funguje je takové:
id požadavku 1(ajax request) pozadavek uspesne zpracovan(ajax reply)A toto bych z toho chtel dostat:
id požadavku 1(ajax request) polozka 1 uspesne naimportovana(ajax reply) polozka 2 uspesne naimportovan(ajax reply) ...... pozadavek uspesne zpracovan(ajax reply)
window.onload=function() {
start_import();
}
function start_import() {
var f=document.adminForm;
var ajax=new Array();
var tid=f.tid.value.split(",");
do_import(ajax,tid,0);
}
function do_import(ajax, tid,i) {
var f=document.adminForm;
var msgs=document.getElementById('messages');
var url="index.php?option=com_cbazaar&controller=import&task=import_xxxcars";
if(window.XMLHttpRequest) {
ajax.push(new XMLHttpRequest());
} else if(window.ActiveXObject) {
ajax.push(new ActiveXObject("Microsoft.XMLHTTP"));
}
ajax[ajax.length-1].open('POST',url,true);
ajax[ajax.length-1].onreadystatechange=function() {
/*var p=document.createElement('p');
p.appendChild(document.createTextNode(ajax.length+' '+ajax[ajax.length-1].readyState+ ' '+ajax[ajax.length-1].responseText));
msgs.appendChild(p);*/
if(ajax[ajax.length-1].readyState==4 && ajax[ajax.length-1].status==200) {
var xml=ajax[ajax.length-1].responseXML;
if(xml.getElementsByTagName('status')[0].firstChild.nodeValue==0) {
var p=document.createElement('p');
p.appendChild(document.createTextNode("Successfully imported data to "+xml.getElementsByTagName('title')[0].firstChild.nodeValue));
msgs.appendChild(p);
} else {
var p=document.createElement('p');
p.appendChild(document.createTextNode("Failed to import data to "+xml.getElementsByTagName('title')[0].firstChild.nodeValue));
var div=document.createElement('div');
div.setAttribute('class','error');
div.appendChild(document.createTextNode(xml.getElementsByTagName('error')[0].firstChild.nodeValue));
p.appendChild(div);
msgs.appendChild(p);
}
if(xml.getElementsByTagName('img_err').length>0) {
var p=document.createElement('p');
p.appendChild(document.createTextNode('Image import warnings:'));
msgs.appendChild(p);
var ul=document.createElement('ul');
for(var j=0;j<xml.getElementsByTagName('img_err').length;j++) {
var li=document.createElement('li');
li.appendChild(document.createTextNode(xml.getElementsByTagName('img_err')[j].firstChild.nodeValue));
ul.appendChild(li);
}
msgs.appendChild(ul);
}
i++;
if(i>=tid.length) {
return;
}
do_import(ajax,tid,i);
}
}
var params="tid="+tid[i];
ajax[ajax.length-1].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax[ajax.length-1].setRequestHeader("Content-length", params.length);
ajax[ajax.length-1].setRequestHeader("Connection", "close");
ajax[ajax.length-1].send(params);
}
Soubor stahuju nějak takto:
$c = curl_init($this->_url_cars);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
if(!$this->_update = curl_exec($c)) {
$this->setError('Failed to download update file');
return false;
}
curl_close($c);
Takto získám xml soubor jednoho autobazaru(těch bazarů je víc podle obsahu pole tid) a následuje jeho zpracování do db. Když se dokončí zpracování souboru pošlu do prohlížeče xml hlášení jestli se import podařil, nebo ne. A takové hlášení bych chtěl poslat po zpracování každého auta, aby z toho šel udělat třeba teploměr, že tolik a tolik aut z toho bazaru už je zpracováno.
cometd, určitě se dozvíte víc.
Kedysi som experimentoval s tým, že som HTTP odpoveď rozdelil na viac častí, ktoré som postupne odosielal, ale spojenie za nimi neuzatváral. Nejak takto:
<?php
for ($i=0;$i<=100;$i++) {
echo $i."\n";
flush();
sleep(1);
}
?>
Bohužiaľ, prehliadače to v prípade normálneho requestu spracujú pekne, ale v prípade requestu cez AJAX to veľa prehliadačov vôbec nepochopilo. Možno to ale dnes už funguje lepšie...
Tiskni
Sdílej: