Výzkumníci ukazují, jak mohou otevřené tunely a IPv6 Extension Headers synchronizovat pakety do krátkých provozních špiček. V kontrolovaném experimentu naměřili přes 180násobnou koncentraci paketového toku vůči průměrné rychlosti odesílání — nikoli 180násobné zvětšení objemu dat. Článek obsahuje metodiku, limity měření i mitigace pro GRE, IPIP a další tunely.
Po velkém úspěchu prvního MobileLinux Hackdaye se vracíme do Českých Budějovic s druhým ročníkem. V pátek 30. října 2026 od 10:00 se v prostorách Jihočeské univerzity uskuteční Embedded & MobileLinux Hackday #2. Těšit se můžete na témata jako Immutable Linux na telefonech (BengalOS), U-Boot a upstream vývoj, AI optimalizace pro embedded systémy nebo otevřený hardware. Nebude chybět praktické hackování, sdílení zkušeností a možnost … více »
Dne 21. října 2026 vydal projekt Node.js bezpečnostní aktualizace opravující deset zranitelností, včetně jedné umožňující potenciální vzdálené spuštění kódu (RCE). Nejzajímavější je CVE-2026-111497, chyba dekodéru Brotli, kterou objevili výzkumníci využívající OpenAI Codex Security. Chyba je v nativním dekodéru Brotli, nikoli v samotném JavaScriptu. Speciálně vytvořený komprimovaný vstup způsobí, že dekodér zamění
… více »Francouzský výrobce kabelů Nexans upozornil na napjaté dodávky elektrických kabelů. Výstavba nové výrobní linky pro některé typy kabelů může trvat přibližně tři roky. Datacentra potřebují rozsáhlé nízkonapěťové a středněnapěťové rozvody. Poptávka roste současně s modernizací elektrických sítí. Někteří odběratelé proto uzavírají výrazně delší dodavatelské smlouvy [Reuters].
Představena byla (𝕏) virtuální platforma FLYBENCH FPV, která nováčky provede zapojením a konstrukcí dronů.
Google Chrome 156 byl prohlášen za stabilní. Přehled novinek v poznámkách k vydání. Opraveno bylo 353 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Indická společnost eMudhra po bezpečnostním incidentu, tj. kompromitaci soukromých klíčů osmi mezilehlých certifikátů své certifikační autority, opouští globální byznys s SSL/TLS certifikáty.
Dle Phoronixu zveřejnila společnost Trend Micro prostřednictvím programu Zero Day Initiative (ZDI) několik hlášení bezpečnostních zranitelností přímo na veřejném mailing listu LKML, přestože některé chyby dosud nemají opravu začleněnou do hlavní větve jádra. Mezi hlášenými problémy jsou dvě zranitelnosti s hodnocením CVSS 9.0, týkající se SMB Direct a KSMBD, které mohou umožnit vzdálené spuštění kódu. Další hlášení se týkají … více »
Správce hesel KeePassXC byl vydán ve verzi 2.8.0. Přechází na Qt 6, podporuje vkládání hesel s Waylandem, rychlé odemykání pomocí Polkitu nebo možnost nastavení klávesových zkratek (seznam změn).
Databáze DuckDB (Wikipedie) byla vydána ve verzi 2.0.0 LTS. S kódovým názvem Cinnamon Teal (čírka skořicová). S vyladěným protokolem Quack.
array(4) {
[0]=>
array(2) {
[0]=>
array(2) {
["id"]=>
int(1)
["name"]=>
string(5) "jedna"
}
[1]=>
array(2) {
["id"]=>
int(4)
["name"]=>
string(5) "ctyri"
}
}
[1]=>
array(2) {
[0]=>
array(2) {
["id"]=>
int(2)
["name"]=>
string(3) "dva"
}
[1]=>
array(2) {
["id"]=>
int(3)
["name"]=>
string(3) "tri"
}
}
[4]=>
array(3) {
[0]=>
array(2) {
["id"]=>
int(5)
["name"]=>
string(3) "pet"
}
[1]=>
array(2) {
["id"]=>
int(6)
["name"]=>
string(4) "sest"
}
[2]=>
array(2) {
["id"]=>
int(7)
["name"]=>
string(4) "sedm"
}
}
[7]=>
array(2) {
[0]=>
array(2) {
["id"]=>
int(8)
["name"]=>
string(3) "osm"
}
[1]=>
array(2) {
["id"]=>
int(9)
["name"]=>
string(5) "devet"
}
}
}
rekurzivni funkce (dovolil jsem si tam dat var_dumpy):
public function findListDown($seekVal, $tmp_array = array()) {
if (count($tmp_array) == 0) { // kdyz je pole prazdne vlozi prvni hledanou hodnotu
array_push($tmp_array,$seekVal);
}
var_dump($tmp_array);
foreach ($this->slovnik()[$seekVal] as $tmp_key) {
var_dump($tmp_key['id']);
array_push($tmp_array,$tmp_key['id']);
$seekVal = $tmp_key['id'];
$this->findListDown($seekVal,$tmp_array);
}
return $tmp_array;
}
Vystupem var_dumpu je toto:
array(1) {
[0]=>
int(0)
}
int(1)
array(2) {
[0]=>
int(0)
[1]=>
int(1)
}
int(2)
array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
}
int(3)
array(4) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
} ---------> az sem vsechno ok
int(4)
array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(4) ---> ale tady mi asi ta rekurzivni funkce prepsala hodnoty v poli
}...
------------> chtel bych zde mit:
int(4)
array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
}...
<?php
class itemList {
public $slovnik =
array (
0 =>
array (
0 =>
array (
'id' => 1,
'name' => 'jedna',
),
1 =>
array (
'id' => 4,
'name' => 'ctyri',
),
),
1 =>
array (
0 =>
array (
'id' => 2,
'name' => 'dva',
),
1 =>
array (
'id' => 3,
'name' => 'tri',
),
),
4 =>
array (
0 =>
array (
'id' => 5,
'name' => 'pet',
),
1 =>
array (
'id' => 6,
'name' => 'sest',
),
2 =>
array (
'id' => 7,
'name' => 'sedm',
),
),
7 =>
array (
0 =>
array (
'id' => 8,
'name' => 'osm',
),
1 =>
array (
'id' => 9,
'name' => 'devet',
),
),
);
public function findListDown($seekVal, $tmp_array = array()) {
# [ 0: {1,4}, 1: {2,3}, 4: {5,6,7}, 7: {8,9} ]
if (count($tmp_array) == 0) {
array_push($tmp_array,$seekVal);
}
var_dump($tmp_array);
foreach ($this->slovnik[$seekVal] as $tmp_key) {
var_dump($tmp_key['id']);
array_push($tmp_array,$tmp_key['id']);
$seekVal = $tmp_key['id'];
$this->findListDown($seekVal,$tmp_array);
}
return $tmp_array;
}
}
$Lists = new itemList;
echo "<pre>";
$Lists->findListDown(0);
echo "</pre>";
?>
upravena verze:
<?php
class itemList {
public $slovnik =
array (
0 =>
array (
0 =>
array (
'id' => 1,
'name' => 'jedna',
),
1 =>
array (
'id' => 4,
'name' => 'ctyri',
),
),
1 =>
array (
0 =>
array (
'id' => 2,
'name' => 'dva',
),
1 =>
array (
'id' => 3,
'name' => 'tri',
),
),
4 =>
array (
0 =>
array (
'id' => 5,
'name' => 'pet',
),
1 =>
array (
'id' => 6,
'name' => 'sest',
),
2 =>
array (
'id' => 7,
'name' => 'sedm',
),
),
7 =>
array (
0 =>
array (
'id' => 8,
'name' => 'osm',
),
1 =>
array (
'id' => 9,
'name' => 'devet',
),
),
);
private $tmp_array = array();
public function findListDown($seekVal) {
if (count($this->tmp_array) == 0) {
array_push($this->tmp_array,$seekVal);
}
var_dump($this->tmp_array);
foreach ($this->slovnik[$seekVal] as $tmp_key) {
var_dump($tmp_key['id']);
array_push($this->tmp_array,$tmp_key['id']);
$seekVal = $tmp_key['id'];
$this->findListDown($seekVal);
}
return $this->tmp_array;
}
}
$Lists = new itemList;
echo "<pre>";
$Lists->findListDown(0);
echo "</pre>";
?>
a jejich rozdilne vystupy, puvodni verze bez privatni promenne...:
array(1) {
[0]=>
int(0)
}
int(1)
array(2) {
[0]=>
int(0)
[1]=>
int(1)
}
int(2)
array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
}
int(3)
array(4) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
}
int(4)
array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(4)
}
int(5)
array(4) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(4)
[3]=>
int(5)
}
int(6)
array(5) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(4)
[3]=>
int(5)
[4]=>
int(6)
}
int(7)
array(6) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(4)
[3]=>
int(5)
[4]=>
int(6)
[5]=>
int(7)
}
int(8)
array(7) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(4)
[3]=>
int(5)
[4]=>
int(6)
[5]=>
int(7)
[6]=>
int(8)
}
int(9)
array(8) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(4)
[3]=>
int(5)
[4]=>
int(6)
[5]=>
int(7)
[6]=>
int(8)
[7]=>
int(9)
}
upravena verze s privatni promennou:
array(1) {
[0]=>
int(0)
}
int(1)
array(2) {
[0]=>
int(0)
[1]=>
int(1)
}
int(2)
array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
}
int(3)
array(4) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
}
int(4)
array(5) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
}
int(5)
array(6) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
[5]=>
int(5)
}
int(6)
array(7) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
[5]=>
int(5)
[6]=>
int(6)
}
int(7)
array(8) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
[5]=>
int(5)
[6]=>
int(6)
[7]=>
int(7)
}
int(8)
array(9) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
[5]=>
int(5)
[6]=>
int(6)
[7]=>
int(7)
[8]=>
int(8)
}
int(9)
array(10) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
[5]=>
int(5)
[6]=>
int(6)
[7]=>
int(7)
[8]=>
int(8)
[9]=>
int(9)
}
$seekVal i $tmp_array a místo standardního
$tmp_array[] = $tmp_key['id'];používáš nedoporučovanou konstrukci
array_push($tmp_array, $tmp_key['id']);Takže: Čeho chceš vlastně dosáhnout? Nestačilo by jednoduché volání nějaké standardní funkce, která by tohle vše udělala jedním vrzem? Odkud bereš data? Nestačilo by je vyfiltrovat už při čtení? Proč to neuděláš funkcionálně?
id | parent_id | name | dalsi sloupce
-------+-----------+-----------+---------------
1 | 0 | jedna |
2 | 1 | dva |
3 | 1 | tri |
4 | 0 | ctyri |
5 | 4 | pet |
6 | 4 | sest |
7 | 4 | sedm |
8 | 7 | osm |
9 | 7 | devet |
1 0 jedna 2 1 dva 3 1 tri 4 0 ctyri 5 4 pet 6 4 sest 7 4 sedm 8 7 osm 9 7 devetProtoze chci obcas vykreslovat jen nektere vetve (napr. id 4-9) Vytvoril jsem si slovnik, ktery odrazky prevede do tvaru
[ 0: {1,4}, 1: {2,3}, 4: {5,6,7}, 7: {8,9} ]
Funkci $this->findListDown(4); bych napr. vykresloval jen odrazky s id 4-9.
Nicmene, to asi utikame od dotazu. Zajimalo by me, proc prvni uvedena funkce nedela to co druha? Dela prece to same, je jen zapsana jinak...
array_push(), kterou nepoužívám a proto jsem ani nevěděl o této její vlastnosti.
$doc = new DOMdocument();
$pole = array();
$pole[0] = $doc->appendChild(new DOMElement('root'));
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
$id = $row['id'];
$pid = 0 + $row['pid'];
$parentId = isset($pole[$pid]) ? $pid : 0;
$child = new DOMElement('div', htmlspecialchars($row['nazev']));
$pole[$id] = $pole[$parentId]->appendChild($child);
}
V CSS jsem pak dal jen odsazení divu na 4% a bylo to. Proměnná $pole je jen pomocná, výsledek je v $doc
public function findListDown($seekVal, &$tmp_array = array()) {
if (count($tmp_array) == 0) {
array_push($tmp_array,$seekVal);
}
foreach ($this->slovnik[$seekVal] as $tmp_key) {
$tmp_array[] = $tmp_key['id'];
$seekVal = $tmp_key['id'];
$this->findListDown($seekVal, $tmp_array);
}
return $tmp_array;
}
Tiskni
Sdílej: