V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."
Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.
Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.
Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.
… více »Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.
Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.
ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím
… více »ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.
Strands Decider 2B je malý open-source model s 2 miliardami parametrů, určený k rychlé klasifikaci vstupů a rozhodování mezi možnostmi, generující odpovědi ve stylu modelu Jev. Strands dosáhl přibližně 72% shody s Jevem na veřejné testovací sadě JevBench (tento benchmark pochopitleně nepředstavuje přímé srovnání s modelem Jev). Zdrojové kódy jsou k dispozici na GitHubu pod licencí Apache-2.0, váhy modelu na Hugging Face.
Ve věku 90 let zemřela americká softwarová inženýrka Margaret Hamiltonová, která vedla tým, jenž vyvíjel letový software pro program Apollo amerického Národního úřadu pro letectví a vesmír (NASA).
Řešení dotazu:
function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}
$cmd se provede na pozadí a php na něj podle všeho nečeká.
exec($cmd . " > /dev/null &");
To je takovej hroznej problém dát na tu první stránku něco co kopne do serveru že se má probudit? Stačil by jednopixelovej obrázek. Nebo, když už jste banda líná, tam prostě prdnout celou tu stránku s grafama v neviditelným iframe.
Jen v málo případech, kdy se to tak dělá, je to vůbec třeba (jsem přesvědčený, že tento původní dotaz je toho příkladem ;)) a ve valné většině zbytku to lze řešit jinak. Určitě je lepší pustit něco na pozadí mimo php (démona) nebo spouštět něco na pozadí (cron-em). O propojení se může postarat záznam v DB nebo jednodušeji přes soubor(y) - má to sice svá úskalí, ale toto jich má mnohem více.
OT: Ještě se tam zapomnělo přesměrovat chybový výstup, je pravdou, že z exec() nevyleze, ale poslat jej do null je slušnost
.
Nevím kolik těch grafů máš, ale pokud je jich 10 a každý 100ms, tak řešení níže je čisté.
Stránka se načte hned a obrázky/grafy budou doskakovat, ty co už existují se jen zobrazí (není mi jasné jakou platnost dané grafy mají).
Pokud chci aby se generovali, ještě když nejsou vidět (ihned po přihlášení), tak si o ně řeknu a vložím je do stránky, nastavím width a height na 1 a styl display: none. Nebo jako vyšší level zavolám jen jeden „pesudo_obrazek_gengraph.php“ (opět 1x1px), který grafy vygeneruje, nebo si odešlu požadavek pomocí httprequest z JS.
Když to uděláš, tak že místo graph.jpg tam bude v tagu img graph.php?htype=typ… tak ti chodí hned a serepetičky s před-generováním už doplníš pak, jestli to bude třeba.
Taky je můžeš mít ve stránce ihned a jen dělat pomocí css show/hide, nějaké generování na pozadí, či z cron-u se jistě hodí, ale u něčeho výrazně náročnějšího, nebo při vysoké návštěvnosti, kde se servíruje jen statický obsah.
OT: Když si dělám něco pro sebe, tak to právě dělám tak aby to bylo v daný okamžik „co nejlepší“, bo se něco naučím a nikdo mně nijak nelimituje…
Takže tim chceš říct, pokud dam na stránku na konec nějaké skryté obrázky, je to čistší řešení, než když je budu generovat na pozadí? Když třeba 2 vteřiny budu danou stránku načítat....Taky je můžeš mít ve stránce ihned a jen dělat pomocí css show/hide ...
8*7 grafů?
Nechápu, jak rozumíš na pozadí, z html stránky jsou asynchroně stahovány obrázky, tedy se generují, nezávisle na načítání stránky, pokud je stránka aspoň trochu rozumě napsaná, tak načítání obrázků nemá přímý vliv na její zobrazení a vytváří to de-facto vytváření grafů na pozadí, bez dalšího vytvřání dalších procesů a používání nebezpečných fcí jako exec….
Toto je fragment stránky (se dvěma grafy):
<?php $time=time(); ?> <div> <h3>Graf číslo 1</h3> <img href="getpgraph.php?htype=1&hw=100&hh=100&htime=<?php echo $time; ?>" title="Graph 1" alt="Graph 1" width="100" height="100" /> </div> <div>Graf číslo 2
<img href="getpgraph.php?htype=2&hw=100&hh=100&htime=<?php echo $time; ?>" title="Graph 2" alt="Graph 2" width="100" height="100" /> <div>
A toto je script 'getpgraph.php' vracející obrázek/graf:
<?php
//potlačení nechtěného výstupu
@error_reporting(E_ERROR);
@ini_set('display_errors', 'Off');
@require_once 'gengraph.php';
//rozměry obrázku/grafu, bez ošetření platného rozsahu hodnot
//rozsah ošetřuje fce gengraph_to_stdout
$width=isset($_GET['hw'])?(int)$_GET['hw']:0;
$height=isset($_GET['hh'])?(int)$_GET['hh']:0;
//hlavička: posílám jpeg
header('Content-Type: image/png');
if(isset($_GET['htype'])){
$type=(int) $_GET['htype'];
}else{
//return error image
readfile('error.png');
exit;
}
/*
* funkce generující graf typu $type a a rozměrech $width × $height
* a vypysující ho na std out pomocí imagepng($image).
* Obsah funkce někde už máš dle: 'jen generaci přes jpgraph bych nechal'
*/
gengraph_to_stdout($type,$width,$height);
exit;
Ukázky jsem netestoval, ale pokud se míjíme, tak jedná se obdobu (funkčního) tohoto jen s rozdílem, že tady se nezabývám tím kreslením, jen volám fci, kterou už někde (uvedeno v gengraph.php) máš a jmenuje se gengraph_to_stdout.
Nevím čemu nerozumíš…
Pak si upravíš obsah a vytvoříš diskovou cache, graf pokud neexistuje, vytvoříš, uložíš a pošleš, pokud existuje jen pošleš. A apk si generování můžeš zavolat, kdy chceš a při opravdovém užití už budou nachystané (nebo vyprší jejich platnost a vygenerují se nové).
…Není pro mě špatné volat shell z php, cronem spouštět program v PHP, atd. Samozřejmě, že si dám pozor na všechny možné ošetření, atd…Ach ta blažená nevědomost. Myslíš že zkušenější lidi co ti tady radí to nedělat to ošetřit neumí?
…Velmi mě zaujala myšlenka přístupem na stránku spustit program na pozadí, i když nechápu v čem je to lepší, oproti spouštění z cronu…Oproti cronu v ničem, spíš naopak. Cron je na tohle správný nástroj, ale je to velice odlišné prostředí od http démona pod kterým php normálně běhá. Navíc php jako jazyk na tohle hrubě není stavěné takže psát v něm cronjoby bych po nikom nechtěl ani za trest. Ťuknout přes síť do skriptu (třeba i wgetem z cronu
) je technicky komplikovanější, ale je to něco co průměrný php bastlič umí udělat.
Problém unixu je to, že zkousne téměř vše, jak se má potom BFU učit čeho je lepší se zdržet?Uvědom si že v systému kterej je čtyřicet let starej platí že cokoliv řešíš už řešil milion lidí před tebou. To je studnice znalostí všeobecně, ale hlavní poučení z toho je, že když tě napadne jak to dělat "líp" než ti pitomci předchozího půl století, tak to obvykle znamená že ti pitomci věděli něco co ty ne. Například, že neprůstřelně zaescapovat vstup do shellu se daleko snáz řekne než udělá
$cmd neobsahovalo nic, co zadal uživatel a nebylo ošetřeno escapeshellarg (escapeshellcmd ne, spouštět skript, jehož cestu zadal uživatel, je o hubu tak jako tak), a druhak to nefunguje v safe módu.
/* background script (b.php): */
$logfile = "logging/b.log";
print("Starting background job with logfile " . $logfile . " ...");
@file_put_contents($logfile, "job " . getmypid() . " started...\n", FILE_APPEND | LOCK_EX);
ob_flush();
flush();
ignore_user_abort(true);
set_time_limit(0);
/* som usefull background work
*/
$i = 0;
while($i++ <= 30) {
sleep(1);
}
@file_put_contents($logfile, "job " . getmypid() ." finished...\n", FILE_APPEND | LOCK_EX);
/* :background script */
/* foreground script (f.php): */
$options = array("http" => array("method" => "GET","timeout" => 0.1));
$context = stream_context_create($options);
$bgmsg = file_get_contents("http://domain.cz/b.php", false, $context);
if($bgmsg === FALSE){
print("Bg job cannot be started...");
} else {
print("Bg job was started, message: " . $bgmsg);
}
/* :foreground script */
Určitě bych to řešil tak (při době trvání 100ms), že bych grafy generoval při požadavku na ně a tedy splnil podmínku generování jen při požadavku. A případně následně souborovou cache. Píšu jen tak z hlavy - nezkoušeno a nevím, kde jsem udělal chybu nebo na co zapomněl (určitě lze doplnit některá ošetření vstupů)!
Prakticky ve stránce (time() je tam pro unikátnost url a vřazení cache-ování a lze použít jako čas vzniku požadavku.):
<img href="getpgraph.php?htype=1&hw=100&hh=100&htime=<?php time(); ?>" title="Graph 1" alt="Graph 1" width="100" height="100" />getpgraph.php:
<?php
@error_reporting(E_ERROR);
@ini_set('display_errors', 'Off');
//rozsah ošetřuje fce při použití
$width=isset($_GET['hw'])?(int)$_GET['hw']:0;
$height=isset($_GET['hh'])?(int)$_GET['hh']:0;
header('Content-Type: image/jpeg');
if(isset($_GET['htype'])){
$type=(int) $_GET['htype'];
}else{
readfile('error.jpg');
exit;
}
@gengraph($type,$width,$height);
readfile('generated.jpg');
// #OR
// echo gengraph_as_string($type,$width,$height);
// #OR
// gengraph_to_stdout($type,$width,$height);
exit;
s diskovou cache:
<?php
@error_reporting(E_ERROR);
@ini_set('display_errors', 'Off');
//rozsah ošetřuje fce při použití
$width=isset($_GET['hw'])?(int)$_GET['hw']:0;
$height=isset($_GET['hh'])?(int)$_GET['hh']:0;
header('Content-Type: image/jpeg');
if(isset($_GET['htype'])){
$type=(int) $_GET['htype'];
}else{
readfile('error.jpg');
exit;
}
$old_time = 1800;//smaž starší 1/2hodky, dle času vytvoření souboru!
@delete_old_files($old_time);//nebo||a mazat z venku přes cron
//Pokud danný graf neexistuje
// funkce vygeneruje soubor dle pramatrů a dle času a vrátí jeho uid
//Nebo vrátí jen jeho uid/file_name (MD5/SHA1 z data-času a parametrů)
//POZOR: fce, by měla generovat graf to svého jedinečného tmp souboru
// a následně provést rename($tmp_name,"${uid_of_graph}.jpg");
// tmp_name a uid_of_graph.jpg by měli být na jednom souborovém systému
$uid_of_graph=gengraph($type,$width,$height);
readfile("${uid_of_graph}.jpg");
exit;
Pokud máš obavu o zdroje díky velkému počtu přístupů,
lze to různě generovat přes frontu přes DB, omezit počet přístupů nebo vracet
obrázek informující o přetížení (samozřejmně jen pokud by neexistoval požadovaný graf).

s/vřazení cache-ování/vyřazení cache-ování/
S prvním souhlasím (s druhým ne zcela :)), ale pokud píšu takové ukázky nebo i fragmenty, rozhodně to tam doplním (myšleno ini_set()) - bo se s tím bude někdo pak trápit.
A určitě takovouto věc neopřu jen o sys nastavení v produkčním serveru, myslím si, že kdy nesmí dojít k dalšímu výstupu je slušné a lepší si o to explicitně říct.
Tak to mám špatný přístup :), bo obrázky a stream-y důkladně ladím/testuji s plným zobrazováním chyb a pak to všechno zakážu…, asi díky tomu, že ne nad každým serverem vládnu a nemůžu ho nastavit, a pokud tam výpis (třeba časem vzniklé „deprecated“) obrázek není - áno správně je takovou situaci řešit, ale…
Tiskni
Sdílej: