Byla vydána verze 11.0 s kódovým jménem Aramo linuxové distribuce Trisquel GNU/Linux. Založena je na Ubuntu 22.04 LTS a podporována bude do roku 2027. Trisquel patří mezi svobodné distribuce doporučované Nadací pro svobodný software (FSF).
Mozilla založila startup Mozilla.ai a vložila do něj 30 milionů dolarů. Cílem je vývoj důvěryhodné, nezávislé a open source AI.
Po půl roce vývoje od vydání verze 43 bylo vydáno GNOME 44 s kódovým názvem Kuala Lumpur. Přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře. Krátké představení na YouTube.
Letošní Turingovou cenu (2022 ACM A.M. Turing Award) získal Bob Metcalfe za vynalezení, standardizaci a komercializaci Ethernetu.
Svobodná webová platforma pro sdílení a přehrávání videí PeerTube (Wikipedie) byla vydána ve verzi 5.1. Přehled novinek i s náhledy v oficiálním oznámení a na GitHubu.
Byla vydána Java 20 / JDK 20. Nových vlastností (JEP - JDK Enhancement Proposal) je 7. Nová Java / JDK vychází každých 6 měsíců. LTS verze je 17.
Google spustil konverzační AI Bard. Vyzkoušet lze zatím pouze ve Spojených státech a Spojeném království. Více v Bard FAQ.
David Buchanan na svém blogu rozebírá zranitelnost acropalypse (CVE-2023-21036) telefonů Google Pixel. Z výřezu (crop) snímku obrazovky vytvořeného integrovanou aplikací Markup může být možné částečné obnovení původního snímku obrazovky. Viz tweet Simona Aaronse. Vyzkoušet lze webovou aplikaci acropalypse.app. Opraveno v březnové aktualizaci.
V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Gitea (Wikipedie) byla vydána v nové verzi 1.19.0. Přehled novinek i s náhledy v příspěvku na blogu. Kvůli "převzetí Gitei" společností Gitea Limited byl v prosinci loňského roku představen fork Gitei s názvem Forgejo (Codeberg).
Byla vydána nová verze 5.11 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Nově je používán zram. Tor Browser byl aktualizován na verzi 12.0.4. Thunderbird na verzi 102.9.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: