<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hard Wired</title>
	<atom:link href="https://www.hardwired.dev/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hardwired.dev</link>
	<description></description>
	<lastBuildDate>Sun, 31 May 2026 11:23:06 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.hardwired.dev/wp-content/uploads/2022/10/android-chrome-256x256-1-150x150.png</url>
	<title>Hard Wired</title>
	<link>https://www.hardwired.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>New York schválil zákon o sledování 3D tiskáren a CNC strojů</title>
		<link>https://www.hardwired.dev/2026/05/31/new-york-schvalil-zakon-o-sledovani-3d-tiskaren-a-cnc-stroju/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Sun, 31 May 2026 11:23:06 +0000</pubDate>
				<category><![CDATA[3D Tisk]]></category>
		<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[3D GUN'T]]></category>
		<category><![CDATA[3D tiskárna]]></category>
		<category><![CDATA[A.10005C]]></category>
		<category><![CDATA[A2228]]></category>
		<category><![CDATA[Adafruit]]></category>
		<category><![CDATA[Alvin Bragg]]></category>
		<category><![CDATA[blocking technology]]></category>
		<category><![CDATA[CAD soubor]]></category>
		<category><![CDATA[Class E felony]]></category>
		<category><![CDATA[CNC stroj]]></category>
		<category><![CDATA[Cricut]]></category>
		<category><![CDATA[detekční algoritmus]]></category>
		<category><![CDATA[digitální výroba]]></category>
		<category><![CDATA[EFF]]></category>
		<category><![CDATA[Electronic Frontier Foundation]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[ghost gun]]></category>
		<category><![CDATA[Kathy Hochul]]></category>
		<category><![CDATA[Klipper]]></category>
		<category><![CDATA[laserová řezačka]]></category>
		<category><![CDATA[Marlin]]></category>
		<category><![CDATA[New York]]></category>
		<category><![CDATA[online prodej]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Print&Go]]></category>
		<category><![CDATA[prověrka kupujícího]]></category>
		<category><![CDATA[regulace technologií]]></category>
		<category><![CDATA[S.9005]]></category>
		<category><![CDATA[soustruh]]></category>
		<category><![CDATA[státní rozpočet]]></category>
		<category><![CDATA[střelné zbraně]]></category>
		<category><![CDATA[svoboda internetu]]></category>
		<category><![CDATA[trestný čin]]></category>
		<category><![CDATA[USA legislativa]]></category>
		<category><![CDATA[výrobní průmysl]]></category>
		<category><![CDATA[Washington State]]></category>
		<category><![CDATA[zbrojní legislativa]]></category>
		<category><![CDATA[zbrojní plány]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3092</guid>

					<description><![CDATA[<p>Shrnutí: New York jako první americký stát přijal zákon, který nařizuje výrobcům 3D tiskáren, CNC frézek a dalších digitálních výrobních &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/31/new-york-schvalil-zakon-o-sledovani-3d-tiskaren-a-cnc-stroju/">New York schválil zákon o sledování 3D tiskáren a CNC strojů</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p><strong>Shrnutí:</strong> New York jako první americký stát přijal zákon, který nařizuje výrobcům 3D tiskáren, CNC frézek a dalších digitálních výrobních strojů zabudovat do jejich zařízení software, jenž před každým tiskem nebo obráběním prohledá soubor se vzorem a porovná ho s databází zbrojních plánů. Pokud algoritmus vyhodnotí soubor jako podezřelý, stroj se nespustí. Zákon byl přijat jako součást státního rozpočtu na fiskální rok 2026–2027 a podepsán guvernérkou Kathy Hochul.</p>
<hr />
<h2>1. Jak zákon vznikl a co přesně říká</h2>
<p>Příslušná ustanovení jsou součástí rozpočtového zákona <strong>S.9005 / A.10005C</strong> (New York State Budget 2026–2027). Klíčová část je skryta v <strong>Part C</strong>, která obsahuje dva podčástky:</p>
<ul>
<li><strong>Subpart A</strong> — trestněprávní ustanovení týkající se výroby nelegálních zbraní na 3D tiskárnách a sdílení digitálních plánů.</li>
<li><strong>Subpart B</strong> — technický mandát: povinné zabudování tzv. <em>blocking technology</em> do všech 3D tiskáren a CNC strojů prodávaných v New Yorku.</li>
</ul>
<p>Zákon definuje „3D tiskárnu&quot; extrémně široce — jako:</p>
<blockquote>
<p><em>jakýkoliv stroj schopný vyrobit trojrozměrný objekt z digitálního návrhového souboru metodou přídavné výroby (additive manufacturing) nebo trojrozměrných úprav objektu metodou subtraktivní výroby (subtractive manufacturing).</em></p>
</blockquote>
<p>Tato definice tedy pokrývá nejen klasické FDM/SLA 3D tiskárny, ale i <strong>CNC frézy, CNC routery, soustruhy, laserové řezačky</strong> a v důsledku i hobbyistické plotry jako je <strong>Cricut</strong>. Jednoduše: pokud stroj převádí digitální soubor na fyzický objekt, zákon se na něj vztahuje.</p>
<hr />
<h2>2. Co je &quot;blocking technology&quot; a jak má fungovat</h2>
<p>Zákon definuje <strong>blocking technology</strong> jako hardware, software, firmware nebo jiná integrovaná technická opatření, která zajistí, že stroj nezahájí zpracování žádné zakázky, dokud nebude příslušný soubor vyhodnocen algoritmem detekce zbrojních plánů (<em>firearms blueprint detection algorithm</em>).</p>
<p>Algoritmus má za úkol:</p>
<ol>
<li>Vyhodnotit soubor (STL, G-code nebo jiný CAD formát).</li>
<li>Zjistit, zda lze soubor použít k výrobě střelné zbraně nebo nelegálního dílu.</li>
<li>Podezřelý soubor zablokovat — stroj se nespustí.</li>
</ol>
<p>Zákon nevyžaduje jen software. Vyžaduje, aby byl tento mechanismus přítomen přímo v každém <strong>prodávaném</strong> zařízení. Zároveň ruší možnost online prodeje a zásilkového doručení — veškerý prodej a přenos 3D tiskáren musí probíhat osobně (<em>in-person</em>). Pokuty za porušení dosahují až <strong>10 000 USD za incident</strong>.</p>
<p>Zákon neobsahuje <strong>žádné výjimky</strong> pro:</p>
<ul>
<li>komerční výrobce (automobilový, letecký, medicínský průmysl),</li>
<li>výzkumné instituce,</li>
<li>federálně licencované zbrojíře (<em>federally licensed gunsmiths</em>),</li>
<li>školy a vzdělávací instituce.</li>
</ul>
<hr />
<h2>3. Trestný čin za digitální soubor</h2>
<p><strong>Subpart A</strong> zavádí nový typ trestného činu: distribuci nebo držení digitálního návrhového souboru, který by mohl sloužit k výrobě dílu střelné zbraně, je nově <strong>zločinem třídy E</strong> (<em>Class E felony</em>), pokud jej sdílíte s kýmkoliv, kdo není federálně licencovaným zbrojířem registrovaným v New Yorku.</p>
<p>Podle výkladu zákona se tato definice teoreticky vztahuje na:</p>
<ul>
<li><strong>novináře</strong> reportující o dané problematice,</li>
<li><strong>výzkumné pracovníky</strong> studující 3D tisk a bezpečnost,</li>
<li><strong>designéry a umělce</strong> pracující s tvarovými soubory.</li>
</ul>
<p>Trestní třída E v New Yorku odpovídá trestu odnětí svobody až na <strong>4 roky</strong>.</p>
<hr />
<h2>4. Technický problém: proč to pravděpodobně nefunguje</h2>
<p>Zákon naráží na zásadní technické překážky, na které upozornily firmy i nezávislí experti.</p>
<h3>4a. Algoritmus čte geometrii, ne záměr</h3>
<p>Detekční algoritmus porovnává tvary — geometrii objektu. Problém je, že <strong>běžné průmyslové díly sdílejí geometrii se součástkami zbraní</strong>. Trubka vypadá jako hlaveň, konzola jako rám zbraně, konektor jako spoušťový mechanismus. Jeden výrobce otestoval svůj firmware na navrhovaném algoritmu ještě před přijetím zákona: systém <strong>označil 17 % zcela legitimních tisků jako podezřelých</strong> — šlo o díly motorů, jígy, nástroje.</p>
<p>Firma Adafruit a její spoluzakladatel Philip Torrone to shrnuli lapidárně:</p>
<blockquote>
<p><em>„Nevyžadujeme, aby stolní pily skenovaly dřevo kvůli zbraňovým tvarům. Nevyžadujeme, aby soustruhy volaly domů, než začnou obrábět kov. Ale přesně to tento zákon dělá s každým strojem, každým souborem a každou zakázkou.&quot;</em></p>
</blockquote>
<h3>4b. Open-source firmware — Marlin, Klipper, RepRap</h3>
<p>Drtivá většina desktopových 3D tiskáren a CNC strojů běží na <strong>open-source firmwaru</strong> — primárně Marlin a Klipper. Tento software vyvíjejí dobrovolníci a komunity, není připojen ke státní databázi a není navržen pro compliance infrastrukturu. Stroje jsou navíc velmi často <strong>offline</strong> — záměrně nepřipojeny k internetu. Implementace zákonného požadavku by vyžadovala kompletní přepis firmwaru, což je technicky i kapacitně mimo možnosti komunitních projektů.</p>
<p>EFF (Electronic Frontier Foundation) zákon veřejně oponovala a označila blocking technology za <strong>&quot;cenzurní software sledující každý tisk&quot;</strong>.</p>
<hr />
<h2>5. Software ThreeDGunT a role manhattanského státního zástupce</h2>
<p>Zákon nevznikl ve vzduchoprázdnu. Španělská firma <strong>Print&amp;Go</strong> se sídlem v Lleida (Katalánsko) již dříve vyvinula software nazvaný <strong>3D GUN'T</strong>. Tento systém:</p>
<ul>
<li>porovnává každou tiskovou zakázku s databází zbrojních plánů,</li>
<li>používá AI k rozpoznávání tvarů typických pro součástky zbraní,</li>
<li>v případě shody automaticky blokuje tisk a upozorní správce.</li>
</ul>
<p>Print&amp;Go má přes 420 000 uživatelů a software je integrován přímo do firmwaru zařízení při výrobě.</p>
<p>Manhattanský okresní státní zástupce <strong>Alvin Bragg</strong> začal tento software prosazovat u výrobců 3D tiskáren <strong>ještě před tím, než zákon existoval</strong>. V roce 2025 zaslal dopisy firmám <strong>Creality</strong> a <strong>Flashforge</strong> s hrozbou právní odpovědnosti, pokud software 3D GUN'T neadoptují. Vyzval rovněž k odstranění zbrojních CAD souborů z cloudových platforem výrobců.</p>
<p>Jinými slovy: <strong>vymáhací mechanismus byl postaven dříve, než byl zákon napsán.</strong> Zákon pak byl upraven tak, aby odpovídal již existujícímu řešení.</p>
<hr />
<h2>6. Chystané zákony: prověrka před koupí tiskárny</h2>
<p>Paralelně se v zákonodárném sboru New Yorku projednává <strong>Assembly Bill A2228</strong> (a jeho senátní protějšek <strong>S3562</strong>), který dosud nebyl přijat, ale je aktivní v komisích obou komor. Tento návrh by zavedl povinnou <strong>prověrku trestní minulosti</strong> při koupi 3D tiskárny — stejný typ prověrky jako při koupi střelné zbraně. Prodejce by musel žádat státní divizi trestního soudnictví, která má 15 pracovních dní na rozhodnutí.</p>
<p>Zákon sponzoruje assembleymemberka Jenifer Rajkumar a v různých podobách koluje v zákonodárném sboru od roku 2023.</p>
<hr />
<h2>7. Šíření do dalších států</h2>
<p>New York není jediný. <strong>Washington State</strong> projednával <strong>HB 2321</strong> — prakticky identický zákon vyžadující blocking technology v 3D tiskárnách. Podle návrhu by washingtonský generální prokurátor vytvořil a průběžně aktualizoval databázi zakázaných zbrojních souborů. Zákon byl v lednu 2026 postoupen do komise pro občanská práva a soudnictví.</p>
<p>Vzorový zákon, jakmile projde v jednom státě, mají ostatní tendenci kopírovat — a výrobci, kteří chtějí prodávat v celých USA, si nemohou dovolit vyrábět dvě různé verze produktu. V praxi tedy regulace jednoho státu de facto ovlivní zboží prodávané v celé zemi.</p>
<hr />
<h2>Přehled klíčových faktů</h2>
<table>
<thead>
<tr>
<th>Prvek</th>
<th>Detail</th>
</tr>
</thead>
<tbody>
<tr>
<td>Zákon</td>
<td>S.9005 / A.10005C, NY State Budget 2026–2027</td>
</tr>
<tr>
<td>Podepsán</td>
<td>Guvernérka Kathy Hochul</td>
</tr>
<tr>
<td>Klíčová část</td>
<td>Part C, Subpart A a Subpart B</td>
</tr>
<tr>
<td>Co pokrývá</td>
<td>Všechny stroje převádějící digitální soubor na fyzický objekt</td>
</tr>
<tr>
<td>Povinnost</td>
<td>Blocking technology — algoritmus detekce zbrojních plánů</td>
</tr>
<tr>
<td>Prodej</td>
<td>Pouze osobně (online prodej zakázán)</td>
</tr>
<tr>
<td>Pokuta</td>
<td>Až 10 000 USD za porušení</td>
</tr>
<tr>
<td>Trestný čin</td>
<td>Sdílení zbrojního CAD souboru = Class E felony (až 4 roky)</td>
</tr>
<tr>
<td>Výjimky</td>
<td>Žádné (ani pro zbrojíře, výzkum, průmysl)</td>
</tr>
<tr>
<td>Projednávané zákony</td>
<td>A2228/S3562 — prověrka při koupi tiskárny</td>
</tr>
<tr>
<td>Další státy</td>
<td>Washington State HB 2321 (v komisi)</td>
</tr>
<tr>
<td>Software</td>
<td>3D GUN'T od Print&amp;Go (Lleida, Španělsko)</td>
</tr>
</tbody>
</table>
<hr />
<h2>Zdroje</h2>
<ul>
<li>New York State Legislature — <a href="https://www.nysenate.gov/legislation/bills/2025/A10005/amendment/C">S.9005 / A.10005C text zákona</a></li>
<li>The Reload — <a href="https://thereload.com/new-york-bans-digital-gun-files-aims-at-3d-printers-capable-of-using-them/">New York Bans Digital Gun Files, Aims at 3D Printers</a></li>
<li>Electronic Frontier Foundation — <a href="https://www.eff.org/deeplinks/2026/04/stop-new-yorks-attack-3d-printing">Stop New York's Attack on 3D Printing</a></li>
<li>Reclaim the Net — <a href="https://reclaimthenet.org/new-york-3d-printer-law-mandates-firearm-file-blocking">New York Budget Bill Mandates File Scans for 3D Printers</a></li>
<li>3D Printing Industry — <a href="https://3dprintingindustry.com/news/adafruit-warns-of-flaws-in-the-new-firearm-screening-bills-248769/">Adafruit Warns of Flaws in the New Firearm Screening Bills</a></li>
<li>Manhattan DA — <a href="https://manhattanda.org/d-a-bragg-calls-on-3d-printing-companies-to-address-proliferation-of-illegal-firearms/">D.A. Bragg Calls On 3D-Printing Companies To Address Proliferation Of Illegal Firearms</a></li>
<li>Print&amp;Go — <a href="https://printandgo.tech/blog/3d-gunt-solution-to-prevent-3d-printed-ghost-guns">3D GUN'T: Print&amp;Go's solution to prevent 3D printed Ghost Guns</a></li>
<li>Fabbaloo — <a href="https://www.fabbaloo.com/news/washington-bill-would-require-weapon-blocking-software-in-3d-printers">Washington Bill Would Require Weapon-Blocking Software in 3D Printers</a></li>
<li>NY State Assembly — <a href="https://www.nysenate.gov/legislation/bills/2025/A2228">A2228 — background check bill</a></li>
<li>NYS Focus — <a href="https://nysfocus.com/2026/05/29/new-york-final-state-budget-2026-funding-guide-hochul">What's in the 2026 NY State Budget</a></li>
<li>Times Union — <a href="https://www.timesunion.com/state/article/hochul-pushes-ban-3d-technology-used-make-guns-22094029.php">Hochul pushes ban on 3D technology used to make guns</a></li>
</ul>
<div class="pvc_clear"></div>
<p id="pvc_stats_3092" class="pvc_stats total_only  " data-element-id="3092" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F31%2Fnew-york-schvalil-zakon-o-sledovani-3d-tiskaren-a-cnc-stroju%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/31/new-york-schvalil-zakon-o-sledovani-3d-tiskaren-a-cnc-stroju/">New York schválil zákon o sledování 3D tiskáren a CNC strojů</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>NTAG čipy a jak je naprogramovat z iPhonu</title>
		<link>https://www.hardwired.dev/2026/05/18/ntag-cipy-a-jak-je-naprogramovat-z-iphonu/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Mon, 18 May 2026 05:15:47 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[maker]]></category>
		<category><![CDATA[návod]]></category>
		<category><![CDATA[NDEF]]></category>
		<category><![CDATA[nfc]]></category>
		<category><![CDATA[NFC tagy]]></category>
		<category><![CDATA[NFC Tools]]></category>
		<category><![CDATA[NTAG]]></category>
		<category><![CDATA[NTAG215]]></category>
		<category><![CDATA[NXP]]></category>
		<category><![CDATA[programování NFC]]></category>
		<category><![CDATA[rfid]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3088</guid>

					<description><![CDATA[<p>Nálepka za pár korun, telefon, a najednou Vám URL otevírá samo. NFC tagy z rodiny NTAG patří k nejlevnějším způsobům, &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/18/ntag-cipy-a-jak-je-naprogramovat-z-iphonu/">NTAG čipy a jak je naprogramovat z iPhonu</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Nálepka za pár korun, telefon, a najednou Vám URL otevírá samo. NFC tagy z rodiny NTAG patří k nejlevnějším způsobům, jak fyzickému světu přidat softwarovou vrstvu — a přitom na to nepotřebujete pájku, kompilátor ani Arduino. Tenhle článek je hands-on návod, jak zapsat URL na NTAG215 přímo z iPhonu pomocí aplikace NFC Tools. Po cestě vysvětlím, co se v čipu při zápisu skutečně děje, protože pochopit, co máte v ruce, je polovina úspěchu příštího projektu.</p>
<h2>Co je NTAG a proč by Vás měl zajímat</h2>
<p>NTAG je rodina pasivních NFC čipů od firmy NXP Semiconductors. Pracují na 13,56 MHz, splňují standard NFC Forum Type 2 a ISO/IEC 14443-A, a nemají vlastní napájení — energii i hodinový signál si berou z magnetického pole čtečky (typicky Vašeho telefonu). To je důvod, proč Vám tag vydrží roky bez údržby a proč stojí v řádu korun.</p>
<p>Pro makery jsou zajímavé tři varianty:</p>
<table>
<thead>
<tr>
<th>Čip</th>
<th>User memory</th>
<th>Typické využití</th>
</tr>
</thead>
<tbody>
<tr>
<td>NTAG213</td>
<td>144 B</td>
<td>krátké URL, smart home triggery</td>
</tr>
<tr>
<td>NTAG215</td>
<td>504 B</td>
<td>vCard, Amiibo, delší konfigurace</td>
</tr>
<tr>
<td>NTAG216</td>
<td>888 B</td>
<td>rozsáhlejší data, více NDEF záznamů</td>
</tr>
</tbody>
</table>
<p>Čísla v praxi: do NTAG213 se vejde URL do zhruba 130 znaků (po odečtení NDEF režie), do 215 přibližně jeden plnohodnotný kontakt s telefonem a e-mailem, do 216 i krátká Wi-Fi konfigurace plus URL bokem. Nálepky se prodávají od 5 Kč za kus, kvalitní plastové karty od 15 Kč, klíčenky od 20 Kč. Pro experimenty se hodí balíček deseti kusů od českého dodavatele (neven.cz) nebo dvacet kusů z AliExpressu — cenový rozdíl je marginální, ale dodací doba zásadní.</p>
<p>Potkáte je všude. Marketingové nálepky v obchodech, vstupenky na lyžovačku, visačky na zboží proti padělání, Amiibo figurky od Nintenda, párovací tagy bezdrátových sluchátek. NXP udává životnost 10 let retence dat a 100 000 zápisových cyklů, což pro většinu maker projektů znamená „vydrží to déle než zájem o projekt&quot;.</p>
<h2>Anatomie čipu</h2>
<p>Vnitřek NTAG215 si lze představit jako sešit rozdělený na <strong>135 stránek po 4 bajtech</strong>. Některé stránky jsou Vaše hřiště, jiné jsou výrobní data, která nezměníte ani kdybyste chtěl.</p>
<pre><code>Page 0x00 – 0x02   UID a system bytes      (read-only)
Page 0x03          Capability Container    (jednou píšete, OR-uje se)
Page 0x04 – 0x81   User memory             (504 B, zde žije Vaše data)
Page 0x82          Dynamic Lock Bytes
Page 0x83 – 0x84   Konfigurace (AUTH0, ACCESS)
Page 0x85          PWD (heslo, 4 bajty)
Page 0x86          PACK (potvrzení, 2 bajty)</code></pre>
<p><strong>UID</strong> (Unique Identifier) má 7 bajtů a je z výroby spálené v křemíku — žádná aplikace ho nepřepíše. Slouží mimo jiné jako sůl pro výpočet hesla u Amiibo (ale o tom zase jindy).</p>
<p><strong>User memory</strong> je oblast, kam píšete přes NFC Tools. Data se ukládají ve formátu <strong>NDEF</strong> (NFC Data Exchange Format), což je standardizovaná obálka NFC Fora. Bez NDEF by si Váš iPhone se zápisem na Android tagem nerozuměl — díky NDEF rozumí oba.</p>
<p><strong>Configuration pages</strong> určují, jestli je čip chráněn heslem (registry PWD a AUTH0), jestli a od které stránky platí ochrana (AUTH0), a jestli má heslo limit neúspěšných pokusů (ACCESS bit AUTHLIM). Když na ně narazíte v NFC Tools, většinou se jim chcete vyhnout, dokud nevíte, co děláte — špatně nastavený AUTHLIM dokáže udělat z funkčního tagu drahou nálepku natrvalo.</p>
<p>NTAG215 navíc umí pár chytrostí navíc oproti staršímu NTAG203: 32-bitové heslo (PWD_AUTH), digitální podpis pravosti od NXP (ECC originality signature, který odlišuje pravé NTAG od čínských klonů) a tzv. UID mirror, kdy si do NDEF zprávy můžete nechat automaticky zrcadlit UID čipu — užitečné pro per-tag analytiku bez nutnosti programovat každý kus zvlášť.</p>
<h2>Co budete potřebovat</h2>
<p>K tomu, co budeme dělat, stačí překvapivě málo:</p>
<ul>
<li><strong>iPhone 7 nebo novější</strong> s iOS 13 a výš. Starší modely NFC sice mají, ale nepodporují třetí stranou ovládaný zápis. Pokud máte iPhone 13 a novější, bude čtení a zápis jednoznačně rychlejší a spolehlivější díky lepší anténě.</li>
<li><strong>NFC Tools</strong> od vývojáře Wakdev, zdarma z App Store. Existuje i placená „Pro Edition&quot;, ale pro zápis jednoduché URL ji nepotřebujete. Pro varianty jsou navíc plánovací funkce a profily — užitečné, až budete chtít sériově programovat víc tagů najednou.</li>
<li><strong>NTAG215 nálepku, kartu nebo klíčenku</strong>. Pro tento návod používám NTAG215, ale postup je identický pro NTAG213 i NTAG216, lišit se bude jen kapacita.</li>
</ul>
<p>Jedna technická poznámka k platformě: iPhone má NFC anténu v horní části zařízení, kolem objektivu kamery. Android telefony ji mívají vzadu uprostřed nebo dole. Pokud jste zvyklý držet Android telefon plochou stranou na tag, s iPhonem to nepůjde — musíte přiložit horní hranu. Začátečníci se tady často zaseknou na tom, že „tag prostě nefunguje&quot;, přitom jen čtou špatnou částí telefonu.</p>
<p>Druhá poznámka, méně příjemná: iOS je v NFC schopnostech rok zpátky oproti Androidu. Pro zápis NDEF a čtení standardních tagů je vše v pořádku, ale na low-level operace (přímý přístup k jednotlivým stránkám, práce s MIFARE Classic, dump celé paměti) potřebujete buď Android, nebo specializovaný hardware jako Proxmark3 či Flipper Zero. Pro náš úkol je iPhone naprosto dostatečný.</p>
<h2>Hands-on: zápis URL hardwired.dev</h2>
<p>Konečně k věci. Předpokládám, že máte NFC Tools nainstalovanou a v ruce prázdný NTAG215. Postup má pět kroků.</p>
<h3>Krok 1: Přečtěte tag</h3>
<p>Otevřete NFC Tools a v dolním menu zvolte záložku <strong>Read</strong>. Telefon se přepne do skenovacího režimu a nahoře vyskočí systémový dialog „Připraveno ke skenování&quot;. Přiložte horní hranu iPhonu k tagu a držte ji nehnutě zhruba sekundu. Telefon zavibruje a vrátí Vám informace o čipu.</p>
<p>V odpovědi uvidíte něco jako:</p>
<pre><code>Serial Number: 04:A3:B7:12:5F:80:C1
Tag type: ISO 14443-3A (NXP - NTAG215)
Technologies available: NFC A
Manufacturer: NXP Semiconductors
Maximum data size: 504 bytes
NDEF: Yes (writable, 0/504 bytes used)</code></pre>
<p>Tohle je výchozí stav nového čipu. UID začínající <code>04</code> je typické pro NXP. NDEF je deklarováno jako prázdné a zapisovatelné.</p>
<h3>Krok 2: Vytvořte záznam</h3>
<p>Přepněte se na záložku <strong>Write</strong>. Klepněte na <strong>Add a record</strong>. Otevře se seznam typů — vCard, Wi-Fi, Bluetooth pairing, e-mail, telefon, geolokace, a další. Vás zajímá první položka: <strong>URL / URI</strong>.</p>
<p>V dalším okně vyberte schéma. NFC Tools má rozbalovací menu s běžnými prefixy (<code>http://</code>, <code>https://</code>, <code>tel:</code>, <code>mailto:</code> a další), a zbytek URL napíšete do textového pole. Pro náš účel:</p>
<ul>
<li><strong>Schéma:</strong> <code>https://</code></li>
<li><strong>URL:</strong> <code>hardwired.dev</code></li>
</ul>
<p>Aplikace Vám pod políčkem ukáže, kolik bajtů záznam zabere — pro <code>https://hardwired.dev</code> to bude méně než 20 bajtů. Klepněte na <strong>OK</strong>. Vrátíte se na obrazovku Write, kde teď uvidíte jeden NDEF záznam typu <strong>URI</strong> připravený k zápisu.</p>
<h3>Krok 3: Zapište na tag</h3>
<p>Klepněte na velké tlačítko <strong>Write</strong>. Telefon znovu otevře skenovací dialog. Přiložte horní hranu iPhonu k tagu a držte. Zápis NDEF zprávy o 20 bajtech trvá zhruba 200 milisekund — celý dialog ale obvykle zmizí až po vteřině, protože iOS si dává malou rezervu na ověření.</p>
<p>Po úspěšném zápisu uvidíte zelenou hlášku <strong>Write complete</strong>. Pokud místo toho dostanete chybu, nejčastější příčiny jsou tři: tag je zamčený lock bytes (nelze nic dělat), tag má heslo (potřebujete ho zadat ve Security menu), nebo jste ho odtrhli moc rychle (zkuste znovu).</p>
<h3>Krok 4: Ověřte zápis</h3>
<p>Vraťte se na záložku <strong>Read</strong> a tag přečtěte znovu. Tentokrát uvidíte v odpovědi přibyl řádek navíc:</p>
<pre><code>NDEF: Yes (writable, 17/504 bytes used)

Record 0
  Type: URI
  URI: https://hardwired.dev</code></pre>
<p>Tag teď nese Vaši URL. 17 z 504 bajtů využito — zbytek paměti je stále volný a Vy můžete přidat další záznamy (např. WhatsApp link, kontakt, Wi-Fi heslo) bez omezení, dokud nevyplníte kapacitu.</p>
<h3>Krok 5: Otestujte v reálném světě</h3>
<p>A teď to nejlepší. Zamkněte iPhone (jen stisk power tlačítka, do podivných stavů ho dávat nemusíte) a přiložte ho horní hranou k tagu. Na zamčené obrazovce se objeví <strong>banner s URL hardwired.dev</strong>. Klepnutím se otevře Safari.</p>
<p>Tohle je důležitý moment: na iPhonu <strong>funguje background NFC scanning pouze pro NDEF záznamy standardních typů</strong> — URL, telefonní číslo, e-mail, geolokace a několik dalších. Wi-Fi konfigurace nebo vCard se zamčené obrazovce neobjeví, protože iOS je nevyhodnocuje na pozadí (z bezpečnostních důvodů). Pokud chcete, aby tag spustil Wi-Fi připojení, musíte mít NFC Tools otevřenou, nebo využít Shortcuts Automation, kterou iOS k NFC tagům umí přivázat (ale to je téma na samostatný článek).</p>
<p>Gratuluji — máte první funkční NTAG.</p>
<hr />
<div class="pvc_clear"></div>
<p id="pvc_stats_3088" class="pvc_stats total_only  " data-element-id="3088" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F18%2Fntag-cipy-a-jak-je-naprogramovat-z-iphonu%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/18/ntag-cipy-a-jak-je-naprogramovat-z-iphonu/">NTAG čipy a jak je naprogramovat z iPhonu</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>EU nezakáže VPN. Donutí poskytovatele logovat metadata</title>
		<link>https://www.hardwired.dev/2026/05/17/eu-nezakaze-vpn-donuti-poskytovatele-logovat-metadata/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Sun, 17 May 2026 07:36:58 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[age-verification]]></category>
		<category><![CDATA[data retention]]></category>
		<category><![CDATA[eu]]></category>
		<category><![CDATA[regulace]]></category>
		<category><![CDATA[soukromí]]></category>
		<category><![CDATA[vpn]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3085</guid>

					<description><![CDATA[<p>dubna 2026 prolomil bezpečnostní výzkumník Paul Moore oficiální evropskou aplikaci pro ověřování věku za dvě minuty. Snímky obličejů z dokladů &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/17/eu-nezakaze-vpn-donuti-poskytovatele-logovat-metadata/">EU nezakáže VPN. Donutí poskytovatele logovat metadata</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><ol start="15">
<li>dubna 2026 prolomil bezpečnostní výzkumník Paul Moore oficiální evropskou aplikaci pro ověřování věku za dvě minuty. Snímky obličejů z dokladů ukládala nešifrované. Biometrickou autentizaci šlo obejít přepnutím jednoho booleanu v config souboru. Francouzský výzkumník Baptiste Robert to nezávisle potvrdil.</li>
</ol>
<p>O necelý měsíc později, 6. května, sdílela Výzkumná služba Evropského parlamentu na sociálních sítích lednový briefing o VPN. Označila je za „loophole in the legislation that needs closing&quot;. Tedy mezeru, kterou je třeba zacelit, protože děti přes VPN obcházejí ten samý systém ověřování věku, který jiný hacker prolomil v podivně krátkém čase.</p>
<p>A v tuhle chvíli česká média ztratila nervy.</p>
<h2>Anatomie titulkové paniky</h2>
<p>cnews.cz: „Konec anonymního surfování přes VPN&quot;. tiscali.cz: „EU jde po soukromém internetu&quot;. centrum.cz/cdr.cz: „Závažný útok na soukromí&quot;. V překladu: Brusel zítra zatne.</p>
<p>Reálně? EPRS je think-tank Evropského parlamentu. Píše analytické briefy pro poslance, ne zákony. Materiál ze 6. května není legislativní návrh, je to shrnutí debaty, ve které někdo nahodil tezi a publicistika ji zachytila jako fakt.</p>
<p>Nejstřízlivější hlas v ČR má v tomhle Petr Koubský v rozhlasovém Online Plus. „Orgán demokratické Evropy to udělat nemůže,&quot; říká k případnému zákazu. „Drtivá většina podobně radikálních návrhů skončí pod stolem.&quot;</p>
<p>Koubský má pravdu v jedné věci. Plošný zákaz VPN je v EU politicky neprůchodný. Naráží na DSA, GDPR, na ekonomický fakt, že VPN potřebují všechny korporace s remote workery. A pokud by k němu náhodou došlo, technicky by ho šlo vynutit jedině přes deep packet inspection na úrovni ISP. Což je infrastruktura, kterou dnes provozují Čína, Rusko a Írán. EU ne. A nikdo soudný nechce, aby ji EU začala stavět.</p>
<p>Jenže Koubský upozorňuje ještě na něco. Pracovní materiál Rady EU z roku 2025 zmiňuje, že členské státy zvažují přidat VPN na seznam služeb spadajících pod <strong>data retention</strong>. Čili povinné ukládání metadat o připojení. Kdo se kdy odkud kam připojil. Bez obsahu, ale s identitou.</p>
<p>A o tom by se mělo psát. Ne o zákazu, který nepřijde.</p>
<h2>Goodhartův zákon pro internetovou regulaci</h2>
<p>Když cíl regulace prochází přes proxy ukazatel, ten proxy ukazatel se sám stane cílem a celý smysl regulace se rozpadne. Britský Online Safety Act platí od července 2025. Měl chránit děti před pornografickým obsahem. Reálný výstup? Po jeho zavedení vyletěla stahování VPN aplikací v UK o 1 800 % během prvního měsíce. Proton VPN hlásil nárůst registrací o 1 400 až 2 000 procent v hodinách po zapnutí kontrol. Děti se nepřestaly dívat na porno. Naučily se obcházet věkové kontroly v devíti letech místo třinácti. A jejich rodiče si nainstalovali NordVPN spolu s nimi, protože měli pocit, že British Telecom je sleduje.</p>
<p>Britská Children's Commissioner Rachel de Souza na to v BBC Newsnight reaguje předvídatelně. VPN označuje za „absolutely a loophole that needs closing&quot;. Volá po věkovém ověřování pro samotné VPN služby. House of Lords v lednu odhlasoval 207 ku 159 dodatek k Children's Wellbeing and Schools Bill, který by zakázal poskytování VPN dětem. Vrátilo se to do Dolní sněmovny. Není to zákon.</p>
<p>Ale logika je tady jasná. Když ověřování věku funguje špatně, přidej další vrstvu ověřování. Když ani ta nefunguje, přidej třetí. Až nakonec stojí mezi devítiletým dítětem a kdejakým webem tři biometrické skeny, dva systémy national ID a jeden požadavek na verifikaci VPN klienta. Devítileté dítě mezitím používá Tor přes Tails na flash disku, který si vyrobilo podle YouTube návodu.</p>
<p>Goodhart by se bavil.</p>
<p>Děti budou.</p>
<h2>Bezpečnost přes obscurantismus, jen obráceně</h2>
<p>Co EU reálně řeší, není dětská pornografie. Je to nepříjemný fakt, že po dvou desetiletích politiky „internet pro všechny&quot; se objevuje cosi jako digitální nepřehlednost. Lidé používají Signal. Šifrovaný DNS. WireGuard běžící na vlastní VPS za pět euro měsíčně. Self-hosted instance Nextcloudu. Místo Chromu Brave nebo Mullvad Browser. A státní aparát, který si zvykl, že webový provoz teče přes pět velkých korporací s funkčním legal interface, najednou neví, co se mu děje pod nosem.</p>
<p>Místopředsedkyně Evropské komise Henna Virkkunen to 29. dubna 2026 řekla na tiskové konferenci nahlas. VPN by neměly sloužit k obcházení age verification. Tečka. Že VPN ale slouží primárně k něčemu úplně jinému, třeba k tomu, abych se z hotelové WiFi v Bangkoku připojil bezpečně do firemní infrastruktury, to v jejím prohlášení nezaznělo. Já sám používám WireGuard denně pro připojení k vlastní laboratoři přes Tailscale. Sto procent provozu jde tunelem. A je mi naprosto jedno, jestli tam někde v paketu plave packet, který by někoho v Bruselu naštval.</p>
<p>Tedy bylo mi to jedno. Dokud jsem nečetl Council Working Paper, který Koubský zmiňuje.</p>
<h2>Data retention je tichý jed</h2>
<p>Logování metadat má jednu vlastnost, kterou plošný zákaz nemá: nedělá rozruch. NordVPN, Mullvad, Proton, všichni budou dál fungovat. Reklama bude dál slibovat anonymitu. Logo zámku v rohu obrazovky bude dál uklidňovat uživatele. Jenom v server room v Bukurešti nebo v Zürichu poběží daemon, který do databáze ukládá: IP X se v 14:23:11 připojila k serveru Y, který má ven adresu Z. Trvalo to 4 hodiny. Přeneslo se 12 GB.</p>
<p>Žádný obsah. Žádné dešifrované zprávy. Jen kdo, kdy, odkud, kam. Což je v digitální stopě často víc, než je obsah samotný. Metadata mají tu nepříjemnou vlastnost, že přežijí všechno end-to-end šifrování světa. Vědí to v NSA. Vědí to vyšetřovatelé. A teď to ví Rada EU.</p>
<p>Pro VPN poskytovatele to znamená dvě možnosti.</p>
<p>Buď vyhoví, a celá jejich marketingová narativa o no-logs policy se stane fikcí. Mullvad dnes hrdě tvrdí, že nezná IP svých uživatelů. V regulovaném scénáři by ji znát museli. Nebo se z EU stáhnou. Což udělá ten lepší kus z nich, jenže pak zbude uživateli volba mezi statně registrovaným provozovatelem s povinným logováním a turkmenstánskou společností s pochybným whois záznamem. Nebudu hádat, co si vybere medián českého uživatele.</p>
<p>A k tomu se přidá ještě jeden detail, který se v české debatě skoro neobjevuje. Open Dialogue Foundation prezidentka Lyudmyla Kozlovska upozorňuje, že přesně tímhle jazykem se argumentuje v autoritářských režimech. „VPN slouží k obcházení zákonů&quot; je rétorická figura, kterou používá Roskomnadzor v Rusku, Ministerstvo informací v Bělorusku a regulátoři v Číně už dvacet let. Když ji začne používat Brusel, nezíská tím morální převahu. Ztrácí ji.</p>
<h2>Co s tím</h2>
<p>Devatenáct organizací (Mozilla, EFF, Proton, Tor Project, Mullvad a další) poslalo 5. května 2026 britským ministrům otevřený dopis. Cituji volně, protože stojí za to: omezení nástrojů pro ochranu soukromí podkopává schopnost uživatelů pohybovat se po síti bezpečně a budovat digitální gramotnost. Přeloženo do hardwired řeči: vyrobíte děti, které neumí používat HTTPS, ale umí obcházet státní DPI.</p>
<p>V Bruselu se zatím nic neděje. Formálně. EPRS briefing je analytický papír. Council Working Paper je interní pracovní materiál. Henna Virkkunen na jedné tiskovce vyslovila jednu větu. Komise zatím nepředstavila konkrétní návrh.</p>
<p>Jenže když se podíváš na vektory tlaku, na Online Safety Act v UK, Senate Bill 73 v Utahu, australský zákaz sociálních sítí pro děti do šestnácti let, French double-blind verification system, vidíš, že západní demokracie se v posledních dvou letech pomalu přesouvají od regulace obsahu k regulaci samotné infrastruktury anonymity. Není to konspirace. Je to inercie. Každý regulátor řeší svůj malý problém. Skleníkový efekt vznikne sám.</p>
<p>Pokud nás v ČR něco potká, nebude to oznámení „VPN je od dnešního dne zakázána&quot;. Bude to novela zákona o elektronických komunikacích, která rozšíří povinnost ukládání provozních a lokalizačních údajů na poskytovatele VPN služeb. Předloženo poslancem, kterého nikdo nezná. Schválena ve třetím čtení v pátek odpoledne. A v pondělí budeš mít metadata svého WireGuard tunelu uložená v centrální databázi po dobu šesti měsíců.</p>
<p>A teď zkus někomu na Twitteru vysvětlit, proč tě to štve.</p>
<div class="pvc_clear"></div>
<p id="pvc_stats_3085" class="pvc_stats total_only  " data-element-id="3085" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F17%2Feu-nezakaze-vpn-donuti-poskytovatele-logovat-metadata%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/17/eu-nezakaze-vpn-donuti-poskytovatele-logovat-metadata/">EU nezakáže VPN. Donutí poskytovatele logovat metadata</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>GrapheneOS, poznatky z užívání</title>
		<link>https://www.hardwired.dev/2026/05/16/grapheneos-poznatky-z-uzivani/</link>
		
		<dc:creator><![CDATA[Kosieh Barter]]></dc:creator>
		<pubDate>Sat, 16 May 2026 11:50:18 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[3D tisk]]></category>
		<category><![CDATA[alternativní operační systémy]]></category>
		<category><![CDATA[Always-On VPN]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[AOSP]]></category>
		<category><![CDATA[bankovní aplikace]]></category>
		<category><![CDATA[bezdrátové nabíjení]]></category>
		<category><![CDATA[DDNS]]></category>
		<category><![CDATA[de-Googled]]></category>
		<category><![CDATA[Desktop Mode]]></category>
		<category><![CDATA[dlouhodobá podpora]]></category>
		<category><![CDATA[dual SIM]]></category>
		<category><![CDATA[e-waste]]></category>
		<category><![CDATA[GaN nabíječka]]></category>
		<category><![CDATA[Garmin Forerunner 255]]></category>
		<category><![CDATA[Garmin Pay]]></category>
		<category><![CDATA[Google Pixel 10 Pro XL]]></category>
		<category><![CDATA[Google Wallet]]></category>
		<category><![CDATA[grapheneos]]></category>
		<category><![CDATA[kyberbezpečnost]]></category>
		<category><![CDATA[lineageos]]></category>
		<category><![CDATA[mobilní telefony]]></category>
		<category><![CDATA[nfc platby]]></category>
		<category><![CDATA[osobní zkušenost]]></category>
		<category><![CDATA[Pixel 10 Pro XL]]></category>
		<category><![CDATA[profily uživatelů]]></category>
		<category><![CDATA[Qi2]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[recenze]]></category>
		<category><![CDATA[sandbox]]></category>
		<category><![CDATA[soukromí]]></category>
		<category><![CDATA[USB-C DisplayPort Alt Mode]]></category>
		<category><![CDATA[WireGuard]]></category>
		<category><![CDATA[Xiaomi Mi 11 Lite 5G]]></category>
		<category><![CDATA[zabezpečení telefonu]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3068</guid>

					<description><![CDATA[<p>Předmluva OS Operační systém, software, na kterém bezi jiný software. Android Operační systém od společnosti Google, Inc. pro chytré telefony. &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/16/grapheneos-poznatky-z-uzivani/">GrapheneOS, poznatky z užívání</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><h2>Předmluva</h2>
<ul>
<li>OS
<ul>
<li>Operační systém, software, na kterém bezi jiný software.</li>
</ul>
</li>
<li>Android
<ul>
<li>Operační systém od společnosti Google, Inc. pro chytré telefony.</li>
</ul>
</li>
<li>GOS
<ul>
<li>GrapheneOS, zkratka pro tento OS založený na OS Android</li>
</ul>
</li>
<li>LOS
<ul>
<li>LineageOS, zkratka pro tento OS založený na OS Android.</li>
<li>LineageOS je založený na AOSP.</li>
</ul>
</li>
<li>AOSP
<ul>
<li>Android Open Source Project, jedná se o Android, který je &quot;očištěný&quot; od služeb Google a má v sobě pouze licenčně svobodné programy.</li>
</ul>
</li>
<li>Raspberry Pi
<ul>
<li>Raspberry Pi je jednodeskový počítač, zaměřený hlavně pro kutily.</li>
<li>Tento počítač má tzv. GPIO pinout, ke kterému lze připojit čidla a ty poté přímo z OS programovat.</li>
</ul>
</li>
<li>DDNS
<ul>
<li>Dynamic DNS, neboli dynamická domena.</li>
<li>Jedná se o domenu, kterou vam přideli nejaky poskytovatel (třeba freedns.afraid.org), který vam doménu aktualizuje periodicky, což se hodi, kdyz mate dynamickou IP adresu.</li>
</ul>
</li>
<li>Desktop Mode
<ul>
<li>v kontextu OS Android se jedná o funkcionalitu operačního systému, který umožňuje ovládat telefon připojený k počítačovému monitoru (společně s periferiemi jako myš a klávesnice) jako klasicky stolni počítač, byť s jinou filozofií ovládání.</li>
<li>Telefon se tak chová jako klasický stolní počítač, ačkoliv si ponechává své rozhraní pro dodatečnou funkcionalitu.</li>
<li>Jinymi slovy lze říci, že telefon plní funkci stolniho počítače i telefonu zároveň.</li>
<li>Subjektivně si myslim, že budoucnost výpočetní techniky půjde i tímto směrem.</li>
</ul>
</li>
</ul>
<h2>Co předcházelo</h2>
<p>V květnu 2022 jsem se po delší době používání svého tehdejšího telefonu Nokia 5 (Čistý Android) rozhodl k zakoupení nového přístroje, jelikož Nokia přestávala stačit mým potřebam, stejně tak i co se velikosti displeje týče.<br />
Volba tehdy padla na Xiaomi Mi 11 Lite 5G, verze 8G/128G v černé barvě.</p>
<p>Společně s tím jsem pořídil i ochranné prvky, jako je ochranné sklo, pouzdra. Jinymi slovy snaha o to, aby telefon vydržel užívání v dalších letech.</p>
<h3>Nicméně, nebylo to pouze o pozitivech.</h3>
<p>Pomerně rychle jsem si zvykl na nové prostředí, s ním však přišly i věci jinak mě neznámé a kolikrát i &quot;podezřelé&quot;. Jelikož Xiaomi je čínského &quot;návrháře&quot; (rozlišuji zde, že produkt je vyrobený v Číně / ČLR, kdo jej však navrhuje je pro mě subjektivně další entita), byly zde i aplikace, které jsem k dispozici mít nechtěl, místy to bylo i podivné chování OS.</p>
<p>Je pravdou, že krátce po koupi přišla slíbená aktualizace na Android 13, nicméně tím jinak nedůležité aktualizace ze strany výrobce (v tomto případě považuji jak fyzicky výrobce HW, tak i dodavatel OS) ustaly. Vlastně jedinými aktualizacemi - dodám, že pouze akutními, řešícími konkrétní bezpečnostní problém - byly pouze bezpečnostní.</p>
<h3>Příchod Garmin Pay</h3>
<p>Časem jsem se rozhodl si pořídit i chyté hodinky, jelikož jsem v té době rozhodl vyzkoušet si placení právě chytrými hodinkami.</p>
<p>První pokus byl s Xiaomi Watch 2. Paradoxní volba pro tohoto výrobce byla pro &quot;čistý&quot; operační systém s možností Google Wallet/Pay přímo v hodinkách.<br />
Nicméně nepovedlo se mi tohoto docilit, hodinky při pokusu nahlásily chybu a odmítly platební kartu přidat. Původní způsob užití bylo &quot;zpohodlnit&quot; placení (při nástupu do MHD, v obchodě...). Už v té době jsem se snažil najít myšlenku &quot;Jak separovat platby od (relativně permanentně) k datům připojeného telefonu. Dá se říci, že o sledování fyzického pohybu bankovními institucemi jsem tušil, nicméně čím dál více jsem měl potřebu toto oddělit. V této době (duben 2025) mi &quot;stačilo&quot;, kdyz na domácí Wi-Fi jednorázově sesynchronizuji peněženky.</p>
<h4>Ač se mi Xiaomi Watch 2 líbily, vrátil jsem je zpět a rozhodl se jít cestou Garmin Forerunner 255, společně s Garmin Pay.</h4>
<p>Záhy jsem zjistil, že hodinky od Garminu nejenže nabídly styl placení, který jsem hledal, ale také možnost si napsat vlastní program. Garmin jako takový má sice uzavřený systém, nicméně má k němu k dispozici SDK (Software Development Kit, sadu programu na vývoj softwaru pro daný produkt, zjednodušeno), což mi otevřelo cestu časem i k tomu si naprogramovat vlastní &quot;statistiky&quot; k jednomu mému oblíbenému sportu/relaxaci.</p>
<p>Lze tedy říci, že Garmin vyřešil nejen problém v té době pro mě aktuální, ale přidal mi do života i možnost žít aktivněji s možností si to sledovat.</p>
<p>Závěrem, mé současné hodinky mi doporucil člověk jménem Valentino Hesse, čímž mu za doporučení chci poděkovat i formou tohoto textu.</p>
<h3>Nástup VPN</h3>
<p>V pozdějších fázích, asi tak rok před změnou jsem ve zvýšeném měřítku začal užívat domácí VPN. Konkretne jsem na svoji Raspberry Pi 3. generace (verze B) nastavil WireGuard. Jelikož už v té době jsem měl na své DDNS i certifikát přes LetsEncrypt, vlastnictví VPN dávalo smysl, hlavně kvůli bezpečnosti týkající se bankovních aplikací.</p>
<p>S nástupem a nastavením VPN se trochu pojí i nová filozofie užívání telefonu. Na Xiaomi jsem si všiml tzv. &quot;sekundárního prostoru&quot;, přeloženě jde o jiný profil/uživatele na stejném telefonu. Telefon s touto funkcionalitou se chová, jako kdyby byl právě čerstvě nainstalován / zapnut, de facto jde o stejné prostředí. Výhodou tohoto prostředí je možnost mít separované aplikace (takže třeba &quot;normální&quot; profil bez bankovních věcí a &quot;bankovní&quot; profil s bankovními aplikacemi různých bank, aplikace na nákup, popřípadě komunikátory se separovaným účtem).</p>
<p>S tímto se však pojí vyšší nároky na baterii telefonu, jelikož &quot;klasický&quot; Android / LineageOS / AOSP &quot;neumí&quot; ukončit profil, kdyz není potřebný. Znamená to tedy, že profil běží na pozadí i nadále (což není vždy nevýhoda). Nezřídka se stávalo, že i po jedné cestě do obchodu telefon dokázal &quot;propálit&quot; i 20 %. To sice na cestu tam i zpět stačilo, místy bylo však užívání s ohledem na maximální dostupnost náročné, což ne vždy bylo příjemné, zvláště při delších cestách.</p>
<p>Od ledna 2026 jsem začal řešit, čím Xiaomi Mi 11 Lite 5G nahradím.</p>
<h2>Google Pixel 10 Pro XL</h2>
<p>Postupne jsem začal zkoumat specifikace různých telefonu, co by daný přistroj měl umet. V zasade jsem měl tyto požadavky:</p>
<ul>
<li>Profiling (rozšířená forma &quot;sekundárního prostoru&quot; od Xiaomi, alespoň 2 profily), ideálně s možností daný profil ukončit,</li>
<li>Always-On VPN (čili zablokování veškerého provozu, není-li VPN aktivní)</li>
<li>Dual-SIM (historicky mám více SIM karet, které i do dnešního dne udržuji v &quot;provozu&quot;)</li>
<li>větší display (hodně dobré zkušenosti u Xiaomi Mi 11 Lite, který měl velký display)</li>
<li>Na základě zkušeností u Xiaomi i dlouhodobá podpora výrobce/dodavatele OS.</li>
</ul>
<h4>Volbou po cca 4 měsících, rešeršovaného výzkumu i za pomocí jazykových modelů (Gemini, ChatGPT) v několika instancich (tímto mám na mysli opakované využití AI &quot;Jaký telefon? Zde jsou mé požadavky&quot;), tak i dotazování různých diskusních fór jsem dospěl ke konečnému závěru, kterým se stal Google Pixel 10. generace, verze Pro, velikost XL. Formalním jménem &quot;Google Pixel 10 Pro XL 16/256 GB&quot;.</h4>
<p>Telefon jsem se rozhodl po delším váhání objednat a jelikož jsem v té době měl i členství v jednom větším internetovém obchodě, definitivně jsem se rozhodl pro koupi, konkretně zelené verze &quot;Jade&quot;, která mi &quot;zapadala do korporatního stylu&quot;.</p>
<p>Lze říci, že další den mi byl telefon doručen a já se tak mohl začít radovat z nového stroje. Samozřejmě, pro maximalni ochranu nového stroje jsem i jako v případě Xiaomi Mi 11 Lite přiobjednal ochranné prvky.</p>
<h2>GrapheneOS</h2>
<p>Zjednoduším-li to, Pixel jsem si neobjednal pouze jako náhradu, ale i jako cilený důvod. Už asi 2 měsíce před koupí jsem měl povedomí o operačním systému &quot;GrapheneOS&quot;, který oproti standardnímu Androidu nabízel i od základu přeimplementovanou funkcionalitu týkající se bezpečnosti a soukromí.</p>
<p>I to byla součást mého předchozího rešeršovaného vyhledavání, který OS chci použít. Ano, jinymi kandidaty byla i Motorola, nicméně některé funkce jako GrapheneOS nenabízela a byť s autory GrapheneOS uzavřela partnerství na oficiálního dodavatele hardware (tím rozumím telefony), první přístroje od Motoroly mající jako OS GrapheneOS nebudou k dispozici dříve, než v roce 2027.</p>
<h2>Funkcionalita společná a rozdilná</h2>
<p>Jednou z motivaci pro nový telefon byla i funkcionalita tzv. &quot;Desktop Mode&quot;, která se předchozích verzích Androidu objevovala pouze od výrobce Samsung, tzv. &quot;DeX&quot;. Jiná varianta - která hovořila i v prospěch dříve zmíněné Motoroly - byl &quot;Smart Connect&quot;, nicméně důvodem pro Pixel (a později i GrapheneOS) byly aktualizace operačního systému samotného.</p>
<h3>&quot;Zakladní&quot; Android</h3>
<h4>Desktop Mode</h4>
<p>Základní Android - záleží zde i na hardwaru telefonu - funkcionalitu Desktop Mode umí. Předchůdcem jím bylo USB OTG (USB On-The-Go), což je možnost připojit USB flash do telefonu a zacházet s ním podobným stylem, jako kdyby šlo o počítač, stejně tak ovladaní přes klávesnici a myš.<br />
Desktop Mode přidává DisplayPort Alt Mode přes USB-C, která vyjma datového/ovladacího přenosu přenáší i obrazové data možné zobrazit právě na externím monitoru. Je to umožněné tzv. propustností rozhranní, v tomto případě USB-C.</p>
<h4>Aktualizce</h4>
<p>Ač společnost Google má snahu o snižovaní tzv. e-waste (elektronický odpad), ne každý výrobce je tomu nakloneň. Ano, stále jde o výdělek, nicméně funguje-li telefon i po své moralní zastaralosti, výrobce zpravidla nechce poskytovat opravy jinak starým strojům.</p>
<p>Řada Pixel od Google má v tomto případě jinou filozofii, jelikož jde o &quot;vlajkové lodě&quot; pro Android, filozofie aktualizaci je zde jiná a mnohem otevřenější k tomu udržet stroj v aktuálním stavu, jelikož hardware je poměrně schopný.</p>
<h3>Rozdíl GrapheneOS oproti &quot;základu&quot;</h3>
<p>Co se GrapheneOS týče, většína funkcí je v tomto systému oproti zakladnímu OS Android zachována, nicméně GrapheneOS má zaměření hlavně na bezpecnost.<br />
Velkým rozdilem je zde nejen Always-On VPN (formalně dostupná již od verze Androidu 7/8), nicméně společně s profilovaním (které oproti zakladu má funkci cíleného vypnutí) je možnost zablokovat veškerý síťový provoz, neběží-li VPN na pozadí.</p>
<p>Toto je především zajímavé, má-li uživatel domácí VPN.</p>
<p>Základní Android nabízí aplikacím tzv. &quot;pískoviště&quot;, nicméně v GrapheneOS je této funckionalitě věnována mnohem větší pozornost po stránce zabezpečení a soukromí. Lze i v určitých ohledech aplikaci dovolit, kam bude moci pristupovat (což je hodně zajimavé u některých aplikací typu Messenger od Meta, stejně tak WhatsApp).</p>
<p>Dále je hodně zajimavé - především s užitím vypínatelného profilu - právě pro bankovní aplikace, kdy nejenže dovolíte této aplikací běžet explicitně pouze tehdy, kdy je potřeba, ale také donutíte její provoz jít třeba přes vaši domácí síť. Lze tak říci, že telefon máte elektronicky stále připojený přes síťový prvek, kterému důvěřujete (což o &quot;datech&quot; - datovému připojení přímo z telefonu platí dvojnásob).</p>
<p>Jinou variantou jsou i aplikace, které chcete mít &quot;zamknuté&quot; za specialním heslem a dostupné pouze a pouze majiteli přístroje.</p>
<h3>Post Scriptum ke GrapheneOS</h3>
<p>Mám-li v krátkosti udělat výtah, lze říci, že GrapheneOS jsem na svůj Pixel 10 Pro XL nainstaloval v podstatě hned druhý den po přijetí telefonu. Možnost vyzkoušet si zakladní OS přímo od Google jsem zde moc nevyužil, jelikož i přes vlastnictví nového telefonu (a s tím spojenym &quot;WOW&quot; efektem) jsem měl jasný záměr.</p>
<p>Nicméně musím dodat, že byl by nějaký závažnější problém s GrapheneOS, příručka, respektive postup pro instalaci &quot;sériového&quot; Androidu je velmi jednoduchá. V zásadě stačí upravený webový prohlížeč, USB kabel do počítače a trocha času. Je to tedy změna lehce zvrátitelná a dívám se tedy na GrapheneOS s &quot;mentalitou&quot; &quot;Lze to vrátit, bude-li třeba&quot;.</p>
<h2>Vedlejší efekt na předchozím telefonu</h2>
<p>Ač jsem zmínil, že Pixel 10 Pro XL s GrapheneOS se stal hlavním &quot;tažným koněm&quot; mobilního života, otevřelo mi to možnost si &quot;hrát&quot; do té doby s &quot;produkčním&quot; telefonem od Xiaomi.</p>
<p>Měl jsem povědomí, že telefony od Xiaomi - nachází-li se na uzemí Evropské Unie - lze tzv. odemknout a nainstalovat jiný operační systém, v mem případě LineageOS / LOS. Je to forma AOSP, která v sobě nemá predinstalované aplikace od spolecnosti Google a i daného výrobce/návrháře. Jedná se tak o &quot;De-Googled&quot; software, místy i &quot;de-bloated&quot; systém.</p>
<p>Učinil jsem tak a telefon jsem začal užívat jako &quot;záložní&quot;. Ač LineageOS podporu pro vypínání profilů nemá, Always-On VPN funkcionalita je zde také přitomna a lze ji užít podobným způsobem, jako na GrapheneOS.</p>
<p>Kdyz zmíním paradox, že Xiaomi Mi 11 Lite 5G po instalaci LineageOS &quot;ožilo&quot;, nebudu daleko od pravdy. Pominu-li některé funkcionality řešitelné externě, telefon je plně funkční a stačilo by jej prodat s poznamkou &quot;Toto nefunguje, je to záměr nikoliv můj, ale dodavatele systému&quot;.</p>
<h2>Přislušenství k telefonum přidané</h2>
<p>V kratkosti zde zminím i &quot;obnovu&quot; přislušenství pro oba přístroje. Puvodní, originální nabijecí adaptér pro Xiaomi postupně ztrácel na výkonu, rozhodl jsem se tedy - i s ohledem na pracovní Samsung Galaxy S25 - vyzkoušet si bezdrátové nabíjení, které jsem doteď neměl možnost využít.</p>
<p>Postupne volba padla na nejen GaN nabíjecí adaptér (vzhledem k dobrým referencím jsem užil &quot;AlzaPower Ultímate X500 67W&quot;), tak nabíjecí &quot;puk&quot; &quot;AlzaPower WQT110&quot; s podporou Qi2.</p>
<p>Jelikož jsem 3Dtiskař a 3Dmodelář, návrh a 3Dtisk stojánku přímo pro tento puk (zohledňuící proporce i slabší &quot;MagSafe&quot; u Samsungu Galaxy S25) byl logickym krokem.</p>
<h2>Paradox s ohledem na bezpečnost aktualizovaného OS Android</h2>
<p>Dostavám se tímto do poslední kapitoly, kde budu řešit a pokládat otázky, na které nejspíše nedostanu odpovědi.<br />
Jakožto člověk IT-znalý (pro kontext, pracuji jako automation engineer, server administrator a on-call ve větší IT firmě) vnímám paradox, kdy výrobcem dodaný software má &quot;certifikaci&quot; pro určité funkce - v tomto případě třeba Google Wallet. Funkcionalitu Tap-n-Pay zde musím nahrazovat právě Garmin Pay.</p>
<p>Lze se na to i dívat z jiného úhlu pohledu, kdy platba hodinkami je paradoxně bezpečnější (NFC čip v hodinkách je jinak vypnut, zapíná se pouze, když uživatel funkci pro placení explicitně zapne v daný okamžik).</p>
<p>To platí jak pro GrapheneOS, tak pro LineageOS.</p>
<p>Telefony, obecně systémy (jak Android, tak i Debian, Arch Linux) se snažím držet v aktualním stavu a nezřídka si sám zajišťuji i aktualizace / opravy.</p>
<p>Otázka - kterou si kladu - je &quot;Proc je alternativní systém jinak pravidelně aktualizovaný méně bezpečný, než zastaralý systém dodaný výrobcem, který nemá dalšího důvodu se o daný přistroj / hardware starat?&quot;</p>
<p>Narážím tak na paradox, kdy i pravidelně aktualizovaný - ale necertifikovaný - software je bezpečnější, než jinak &quot;certifikovaný&quot; software od výrobce, který se rozhodl od určitého data aktualizace nedodavat. Pokud telefon nadále funguje, proč jeho funkcionalitu ořezávat, když by to samé mohl zvládat i dalších - dejme tomu - 5 let a tím tak ještě více &quot;rozprostřít&quot; náklady na iniciální pořízení?</p>
<h2>Závěrem</h2>
<p>GrapheneOS byl cílem snažení nejen o na to najít soukromí ve světě stále více a více připomínající 1984, ale také i tom, že jinak morálně zastaralé přístroje mají i nadále svůj důvod existovat.</p>
<p>Mým pohledem GrapheneOS - byť s určitými nedostatky, které jsem akceptoval - plní přesně to, co jsem od něj očekával, tedy nabídnout alespoň soukromí ve světě, kdy je každý krok monitorován.</p>
<p>Jako přidaným benefitem i nabídnout funkcionalitu, která by v roce rozmachu informačních technologií na začátku 21. stoleti mohla působit jako sci-fi - mít skoro plnohodnotný počítač ne v batohu, ale přímo v kapse.</p>
<h2>Galerie</h2>
<p>| Nabíjecí stojánek pro Qi2 wireless | &quot;Dockovací&quot; stanice s užitím 3Dtisku  |<br />
| <a href="https://www.hardwired.dev/wp-content/uploads/2026/05/pixel_stand-169x300.avif"><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2026/05/pixel_stand-169x300.avif" alt="Pixel 10 Pro XL on wireless charger stand." /></a> | <a href="https://www.hardwired.dev/wp-content/uploads/2026/05/Screenshot_20260516_133023-171x300.avif"><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2026/05/Screenshot_20260516_133023-171x300.avif" alt="Pixel 10 Pro XL on Alza USB-C dock adapter in Desktop Mode configuration." /></a> |</p>
<div class="pvc_clear"></div>
<p id="pvc_stats_3068" class="pvc_stats total_only  " data-element-id="3068" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img loading="lazy" decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F16%2Fgrapheneos-poznatky-z-uzivani%2F&#038;hashtags=grapheneos%2Clineageos%2Candroid%2Chacking%2C3dprinting&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/16/grapheneos-poznatky-z-uzivani/">GrapheneOS, poznatky z užívání</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MeshCore v praxi: jak v Česku postavit vlastní LoRa uzel a nezapadnout</title>
		<link>https://www.hardwired.dev/2026/05/16/meshcore-v-praxi-jak-v-cesku-postavit-vlastni-lora-uzel-a-nezapadnout/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Sat, 16 May 2026 09:30:13 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[HAM]]></category>
		<category><![CDATA[18650]]></category>
		<category><![CDATA[2-byte path hash]]></category>
		<category><![CDATA[3D tisk]]></category>
		<category><![CDATA[868 MHz]]></category>
		<category><![CDATA[alternativní síť]]></category>
		<category><![CDATA[bastlení]]></category>
		<category><![CDATA[blackout]]></category>
		<category><![CDATA[brno]]></category>
		<category><![CDATA[českou komunita]]></category>
		<category><![CDATA[companion]]></category>
		<category><![CDATA[CZFree.Net]]></category>
		<category><![CDATA[decentralizace]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[FIT VUT]]></category>
		<category><![CDATA[Flatpak]]></category>
		<category><![CDATA[GTK4]]></category>
		<category><![CDATA[ham]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[Heltec V3]]></category>
		<category><![CDATA[Heltec V4]]></category>
		<category><![CDATA[internet věcí]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[Jindřich Skácel]]></category>
		<category><![CDATA[Jiří Eischmann]]></category>
		<category><![CDATA[krizová komunikace]]></category>
		<category><![CDATA[krok za krokem]]></category>
		<category><![CDATA[LiFePO4]]></category>
		<category><![CDATA[LilyGo T-Deck]]></category>
		<category><![CDATA[Linux klient]]></category>
		<category><![CDATA[lora]]></category>
		<category><![CDATA[low power]]></category>
		<category><![CDATA[maker komunita]]></category>
		<category><![CDATA[mesh]]></category>
		<category><![CDATA[mesh síť]]></category>
		<category><![CDATA[MeshCore]]></category>
		<category><![CDATA[Meshtastic]]></category>
		<category><![CDATA[Meshy]]></category>
		<category><![CDATA[návod]]></category>
		<category><![CDATA[off-grid]]></category>
		<category><![CDATA[off-grid komunikace]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[openalt]]></category>
		<category><![CDATA[P2P]]></category>
		<category><![CDATA[packet radio]]></category>
		<category><![CDATA[peer to peer]]></category>
		<category><![CDATA[radioamatérství]]></category>
		<category><![CDATA[Red Hat]]></category>
		<category><![CDATA[repeater]]></category>
		<category><![CDATA[room server]]></category>
		<category><![CDATA[SenseCAP]]></category>
		<category><![CDATA[sítě nezávislé na infrastruktuře]]></category>
		<category><![CDATA[solární napájení]]></category>
		<category><![CDATA[T-Echo]]></category>
		<category><![CDATA[T1000-E]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3070</guid>

					<description><![CDATA[<p>Na střeše budovy Red Hatu v Brně-Medlánkách stojí krabička za pár tisíc, která dokáže to, co před dvěma lety zvládla &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/16/meshcore-v-praxi-jak-v-cesku-postavit-vlastni-lora-uzel-a-nezapadnout/">MeshCore v praxi: jak v Česku postavit vlastní LoRa uzel a nezapadnout</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Na střeše budovy Red Hatu v Brně-Medlánkách stojí krabička za pár tisíc, která dokáže to, co před dvěma lety zvládla jen profesionální infrastruktura: spolehlivě doručit zprávu přes půl republiky bez jediného mobilního operátora. Jmenuje se <em>techpark.meshcore.cz</em> a je to jeden z uzlů, na kterých teď stojí česká MeshCore síť.</p>
<p>V <a href="https://www.hardwired.dev/2025/07/20/meshcore-off-grid-komunikaci-prostrednictvim-lora-mesh-siti/">minulém článku</a> jsme si vysvětlili, <em>proč</em> MeshCore existuje. Tohle je díl o tom, jak se do něj reálně připojit, co koupit, čeho se v české komunitě vyvarovat a proč není dobrý nápad nechávat na síti běžet vlastního pingovacího bota.</p>
<h2>Co se za poslední čtyři měsíce změnilo</h2>
<p>Když jsme o MeshCore psali loni v červenci, byla to spíš čerstvá zajímavost než infrastruktura. Mapa repeaterů byla řídká, návody chyběly, lidi tipovali, jestli se z toho stane další zaprášený meshtasticový pokus, nebo něco trvalejšího.</p>
<p>Stalo se to druhé. Mezi únorem a dubnem 2026 česká síť přerostla sama sebe. Jiří Eischmann, který má na blogu jeden z nejčtenějších českých textů o MeshCore, to popisuje jednoduše: sever Brna je tak hustě pokrytý, že mu na jednu zprávu odpoví klidně šest repeaterů najednou. Spojení Brno–Hradec Králové, které ještě v únoru chodilo jen přes jižní trasu Děvín–Hostýnské vrchy–Praděd, teď chodí severní cestou Babí lom–Orlické hory a zprávu i s potvrzením doručí během několika sekund. A když je někdo na Ještědu, dokáže paket skočit až přes Brdy – jeden hop na víc než sto kilometrů.</p>
<p>Síť se za tu dobu posunula i na úrovni firmwaru. Verze 1.15 vyšla 19. dubna 2026 a přinesla podporu pro Heltec V4.3, OTA aktualizace pro nRF52 desky přes mobilní aplikaci a <a href="https://blog.meshcore.io/2026/04/19/release-1-15-0">pár změn chování</a>, které stojí za přečtení, než člověk začne flashovat. Heltec V4.3 navíc umí ovládat FEM hardware, což komunitní buildy jako EasySkyMesh 14.1 dovedly až na 5,5 mA klidového proudu. Pro solární repeater je to zásadní detail.</p>
<p>A pak je tu jedna věc, která komunitu poslední tři měsíce zaměstnává nejvíc.</p>
<h2>Kampaň 2-byte: proč si po prvním flashi musíš změnit jednu položku v menu</h2>
<p>Když dva uzly v síti vygenerují klíče, jejichž první bajt náhodou koliduje, je problém. Cesty (path) v MeshCore se počítají z hashe veřejného klíče a jednobajtová verze umí adresovat jen 256 unikátních prefixů.</p>
<p>V březnu 2026 už v české síti žádné úplně volné prefixy nebyly. Síť rostla rychleji, než byl protokol původně navržený.</p>
<p>Řešení přišlo s firmwarem 1.14. Dvoubajtový hash sníží počet možných hopů (z 64 na 32), ale dá síti 65 535 unikátních prefixů – tedy řádově dost na to, aby kolize přestaly být problém. Česká komunita to vzala jako koordinovanou kampaň. Provozovatelé repeaterů jeden po druhém aktualizovali firmware a od konce dubna je 2B nastavení reálným standardem.</p>
<p>Pro koncového uživatele to znamená jednu položku v menu. Po prvním flashi otevřeš v aplikaci MeshCore <em>Experimental Settings</em> a <em>Default Path Hash Size</em> přepneš na <strong>2 bytes</strong>. „V experimentálním nastavení si teď nastavte Výchozí velikost hashe cesty na 2b,&quot; stojí přímo na meshcore.cz. Když to zapomeneš, fungovat to bude, ale tvoje zprávy budou v menšině a u některých starších repeaterů by mohly zmizet úplně.</p>
<p>Takhle prozaicky se v praxi řeší škálování decentralizované sítě. Žádný governance token, žádné hlasování přes blockchain. Telegramová skupina, hlasování na Facebooku, postupný rollout.</p>
<h2>Tři role, tři firmwary</h2>
<p>Na rozdíl od Meshtasticu, kde přeposílá víceméně každý uzel, MeshCore strukturu sítě rozdělil na tři role. To je hlavní rozdíl mezi oběma sítěmi a důvod, proč se v reálném provozu chovají úplně jinak.</p>
<p><strong>Companion</strong> je uzel, který si dáš do kapsy nebo na stůl. Přes Bluetooth (případně USB nebo WiFi, podle toho, jaký firmware nahraješ) ho spojíš s mobilem a posíláš a přijímáš zprávy. Provoz ostatních uživatelů nepřeposílá – pokud zpráva není určená tobě, companion ji ignoruje. Tím šetří éter i baterii.</p>
<p><strong>Repeater</strong> je naopak součást infrastruktury, ne relé navíc. Jeho jediným úkolem je předávat pakety smysluplným směrem. Bez Bluetooth, bez displeje, často bez krytu kromě 3D tištěné krabičky. Patří na střechu, komín, vysílač nebo kopec. Solární panel, 18650 nebo LiFePO4 baterie, anténa s rozumným výhledem. Operátor si ho nakonfiguruje přes web config tool ještě před tím, než ho někam pověsí, protože jakmile je nahoře, není kam strčit USB-C.</p>
<p><strong>Room Server</strong> je třetí typ. Něco jako lokální BBS pro region – uzel, který umí ukládat zprávy, sdružovat uživatele do tematických kanálů a fungovat jako store-and-forward, když je adresát zrovna mimo dosah sítě.</p>
<p>Role nejde přepnout konfigurací. Když chceš ze svého companionu udělat repeater, musíš ho znovu flashnout. To zní jako omezení, ale dává smysl: firmware pro každou roli je jinak optimalizovaný a komunita má jistotu, že když má někdo v síti repeater, je to opravdu repeater, a ne mobil, kterému zrovna umřela baterka.</p>
<h2>Hardware: co reálně koupit v polovině roku 2026</h2>
<p>Tabulka, kterou bych si přál mít, když jsem s MeshCore začínal.</p>
<table>
<thead>
<tr>
<th>Typ uzlu</th>
<th>Doporučená deska</th>
<th>Orientační cena</th>
<th>K čemu</th>
</tr>
</thead>
<tbody>
<tr>
<td>Levný companion</td>
<td>Heltec V3 (ESP32)</td>
<td>600–900 Kč</td>
<td>Vstupní úroveň, OLED, BLE, integrovaná nabíječka</td>
</tr>
<tr>
<td>Lepší companion</td>
<td>Heltec V4 / V4.3</td>
<td>900–1200 Kč</td>
<td>Nižší spotřeba, novější LoRa stack</td>
</tr>
<tr>
<td>Kapesní companion</td>
<td>SenseCAP T1000-E</td>
<td>~2500 Kč</td>
<td>Kompaktní, GPS, nRF52, OTA</td>
</tr>
<tr>
<td>E-ink companion</td>
<td>LilyGo T-Echo</td>
<td>~1800 Kč</td>
<td>Displej drží i bez napájení</td>
</tr>
<tr>
<td>Autonomní zařízení</td>
<td>LilyGo T-Deck</td>
<td>~3500 Kč</td>
<td>Vlastní klávesnice, displej, telefon nepotřebuješ</td>
</tr>
<tr>
<td>DIY repeater</td>
<td>Heltec V3/V4 + 18650 + panel</td>
<td>~1500 Kč</td>
<td>Bastlířská varianta, krabička z tiskárny</td>
</tr>
<tr>
<td>Hotový solární repeater</td>
<td>SenseCAP Solar Node P1 Pro</td>
<td>~5000 Kč</td>
<td>Plug and play pro střechu</td>
</tr>
</tbody>
</table>
<p>K hardwaru pár poznámek z praxe, protože tabulka neřekne všechno.</p>
<p>Heltec V3 je pořád nejrozšířenější deska v české síti. Funguje, je levný, návodů na něj je plný Telegram. Pokud začínáš a nechceš řešit detaily, vezmi Heltec V3 nebo V4 v EU variantě (868 MHz, <strong>ne</strong> 915 MHz – ten je pro USA a v české síti nezachytí nic).</p>
<p>T-Deck je jiná liga. Pro lidi, co chtějí mít komunikaci úplně mimo telefon – na hory, do auta na dlouhé tahy, nebo prostě jako koncept „vlastní pager bez internetu&quot;. Pořád stojí kolem 3500 Kč, ale když k tomu přidáš baterii a pořádnou anténu, cena se snadno přehoupne přes pět litrů.</p>
<p>A SenseCAP Solar Node P1 Pro je teď v české komunitě nejcitovanější volba pro hotový repeater. Eischmann o něm píše: „Úplně se mi nechtělo bastlit vlastní řešení, takže jsem zvolil ověřené hotové řešení SenseCAP Solar Node P1 Pro.&quot; Pět tisíc je dost peněz na to, aby ses k nákupu rozhoupal, ale když jde o střechu rodinného domu, kde má mít spojení tvůj soused i ty, je to investice, která se vrátí.</p>
<h3>BOM pro vlastní solární repeater (DIY varianta, ~1700 Kč)</h3>
<p>Pro úplnost, kdyby ti to nedalo a chtěl bys ho postavit.</p>
<p>Zhruba takhle vypadá rozumný DIY repeater postavený na Heltecu, který přežije i bez sítě:</p>
<ul>
<li>Heltec V3 (EU 868 MHz) – 750 Kč</li>
<li>LiFePO4 článek 18650, 1500 mAh – 250 Kč (pozor na firmware ≥ 1.12, kde byly s LFP/LTO články hlášené <a href="https://meshcore.cz/">problémy s napěťovou křivkou</a>)</li>
<li>TP4056 modul s ochranou – 30 Kč</li>
<li>6V/5W solární panel – 200 Kč (zimní slunce v ČR je nízké a krátké, dimenzuj radši s rezervou)</li>
<li>LoRa anténa 868 MHz, zisk 3–5 dBi – 200 Kč</li>
<li>Pigtail SMA / IPEX – 60 Kč</li>
<li>3D tištěná krabička – pár desítek korun za filament</li>
<li>IP65 průchodka pro anténní kabel – 80 Kč</li>
<li>Spojovací materiál, dlaždice, držák – podle situace</li>
</ul>
<p>Cena pohodlně pod dva tisíce, pokud máš tiskárnu doma. Když kupuješ všechno nové a tiskneš v servisu, přidej k tomu pár stovek za filament a držák antény.</p>
<h2>Frekvence a nastavení regionu pro ČR</h2>
<p>Tohle bývá první past pro lidi, co začínají. MeshCore v Evropě obecně jede na pásmu 868 MHz, ale česká komunita se sjednotila na konkrétním presetu, který se ne vždycky shoduje s výchozím nastavením „EU&quot; v aplikaci. Konkrétně: frekvence 869,432 MHz, šířka pásma 62,5 kHz, spreading factor 7, coding rate 5, vysílací výkon 22 dBm.</p>
<p>Co to znamená v praxi: vysíláš na bezlicenčním pásmu, žádné poplatky, žádná registrace. Ale <strong>musíš respektovat duty cycle limit 1 %</strong> – tedy ze sta sekund vysílat nejvýš jednu. Firmware to hlídá sám, ale když si pustíš na síti bota, který každé tři minuty odešle status update, ten limit ti tiše vyžere a tvoje skutečné zprávy se přes něj nedostanou.</p>
<p>A teď k tomu botovi.</p>
<h2>Etiketa: žádné automaty, žádné scrapery</h2>
<p>Česká MeshCore komunita má jedno pravidlo, které visí přímo na úvodní stránce meshcore.cz a v každém druhém příspěvku na Telegramu. „Síť budujeme striktně pro komunikaci mezi lidmi (keyboard to keyboard). Vyvarujte se automatizovanému posílání zpráv, vyčítání repeaterů nebo jiné komunikaci, která není mezi lidmi!&quot;</p>
<p>Důvod je matematický. LoRa síť má reálnou propustnost zhruba tří kilobitů za sekundu. To není opomenutí, to je fyzika daná modulací. Komunita po hlasování konstatovala, že 75 % generovaného provozu tvořili boti, což snižuje pravděpodobnost doručení skutečných zpráv. Vznikla z toho samostatná kampaň: provozovatelé botů se mají vypnout. Jediný, kdo tam má povolení zůstat, je El Pong – komunitní bot s AI a emailem, který si komunita schválně nechala jako experiment.</p>
<p>Když si tedy zapneš svůj první uzel a napadne tě napsat skript, který bude každou hodinu pingovat dosah, prostě to nedělej. Není to vůči nikomu fér.</p>
<p>Totéž platí pro scrapery a „monitory pokrytí&quot;. Existuje <a href="https://meshcore.cz/">veřejná mapa</a> i analyzer, oba běží na backendu, kde tu zátěž nese server, ne LoRa éter. Když si chceš zmapovat vlastní dosah, projdi se s companionem a koukej do aplikace. Žádný autopilot.</p>
<h2>Krok za krokem: od krabičky k první zprávě</h2>
<p>Předpokládejme Heltec V3 v EU 868 MHz verzi, Android telefon a Chrome v notebooku.</p>
<p>Připoj desku přes USB-C k počítači. Pozor na kabel – některé „nabíjecí&quot; mají jen napájení a žádná data, a flasher se ti k čipu nedostane. Když to nepřipojí, zkus jiný kabel dřív, než začneš googlovat ovladače.</p>
<p>Otevři <a href="https://flasher.meshcore.co.uk">flasher.meshcore.co.uk</a> v Chromu (nebo jiném prohlížeči postaveném na Chromiu – Edge funguje, Firefox bohužel ne, protože nemá Web Serial API). Po načtení vyber model desky. Pro Heltec V3 zvol <em>Community Firmware</em> a roli <em>Companion Bluetooth</em>. Stiskni <em>Flash</em>. Asi po půl minutě má deska firmware.</p>
<p>Stáhni si aplikaci <strong>MeshCore</strong> – existuje pro <a href="https://play.google.com/store/apps/details?id=co.meshcore.app">Android</a> i iOS. Po spuštění klepni na „přidat zařízení&quot; a aplikace najde tvůj uzel přes Bluetooth. Spárování chce PIN, který se ti zobrazí na OLED displeji.</p>
<p>První věc, kterou pak v aplikaci uděláš (ano, ještě před tím, než pošleš první zprávu): otevři <em>Experimental Settings</em> a přepni <em>Default Path Hash Size</em> na <strong>2 bytes</strong>. To je ta kampaň, o které jsem psal výš. Pak nastav region – pro Česko buď použij preset <em>EU Recommended</em>, nebo manuálně nastav 869,432 MHz / BW 62,5 kHz / SF 7 / CR 5.</p>
<p>Teď klepni v aplikaci na ikonu vlny (advert) a pošli <em>Flood Routed Advert</em>. To je signál „jsem tady, kdo mě slyší&quot;. V <em>Contacts</em> by se ti během následujících sekund až minut měly začít objevovat repeatery a uživatelé v dosahu. Když ne, vystup na balkon nebo zkus jít k oknu. LoRa není WiFi a na úrovni ulice mezi paneláky se jí obvykle moc nedaří.</p>
<p>Pošli testovací zprávu do kanálu <strong>#test</strong>. Pokud uvidíš v aplikaci „Heard X repeat(s)&quot;, jsi v síti. Hotovo.</p>
<h2>Linuxový klient Meshy: alternativa pro lidi, co nechtějí mobil</h2>
<p>Pokud jsi typ člověka, co radši pracuje na notebooku než na mobilu, je tu pro tebe Meshy. Linuxový klient pro MeshCore, který od února 2026 píše Jiří Eischmann. Aplikace má dokonce funkce, které oficiální klient zatím nemá – třeba vykreslení trasy poslední úspěšné zprávy přímo na mapě v chatu.</p>
<p>Meshy se aktuálně distribuuje přes Flatpak repozitář a každý commit do gitu spouští nový build pro x86_64 i aarch64 (díky Roští.cz za poskytnutí builderu). Eischmann teď cílí na publikaci ve Flathubu – hlavní překážka prý je, že kvůli udev pravidlu pro připojení companionu přes USB potřebuje obejít sandbox pomocí <code>flatpak spawn</code>. Časem to vyřeší. Komunita kolem linuxového klienta roste a Meshy je teď nejstabilnější varianta, pokud chceš MeshCore používat z laptopu.</p>
<p>Pro lidi z radioamatérské scény, kteří už znají RTL-SDR, gpredict a další unixové utility, je Meshy přirozenější než přepínání mezi mobilem a notebookem. V brněnské komunitě je to čím dál jasnější volba.</p>
<h2>Brno jako centrum české MeshCore scény</h2>
<p>Když si zmapuješ aktivitu české komunity, jihomoravský trojúhelník vyčnívá. Většina nejaktivnějších provozovatelů sítě sedí v Brně. Jindřich Skácel měl v únoru 2026 přednášku na 216. srazu spolku OpenAlt na FIT VUT, ukazoval klientská zařízení a praktické nasazení repeateru, video je <a href="https://vhsky.cz/w/eTwu4pMadf6uKUH75AbymD">na vhsky.cz</a>. Na budově Red Hatu v Medlánkách přímo běží repeater techpark.meshcore.cz, který kryje větší část severu Brna.</p>
<p>Není to náhoda. Brno má kombinaci, která MeshCore přeje: hustá technická komunita (Red Hat, FIT VUT, SUSE, NIC.CZ), aktivní open-source scéna kolem OpenAltu, prolínání ham a maker komunity a topologie s viditelností na okolní kopce (Babí lom, Děvín, Hostýn).</p>
<p>Eischmann to v jednom blogu trefil přirovnáním ke CZFree.Netu z přelomu nultých let – komunita, která bere infrastrukturu do svých rukou, protože ji to baví, ne protože musí.</p>
<p>Pokud bydlíš v Brně nebo okolí a chceš se připojit, je to teď nejjednodušší. Telegramová skupina <strong>meshcore_cz</strong> má aktivní topic <em>Wiki</em> a <em>Repeatery</em>, srazy OpenAltu v Red Hat Labu na FIT VUT chodí pravidelně každý třetí pátek v měsíci (i když ne každý je o MeshCore) a v Brně máš největší šanci potkat lidi, kteří síť reálně staví.</p>
<p>Jiné regiony pochopitelně taky fungují. Praha má pokrytí, Hradec a Liberec mají své sysopy, jižní Čechy mají svou skupinku. Ale hustota brněnské sítě v polovině roku 2026 je v republice unikum a kdyby ses chtěl podívat, jak vypadá MeshCore, když má kritickou masu, stojí za to si sem na jeden pátek vyrazit a vidět to z první ruky.</p>
<h2>Co dál</h2>
<p>Když máš companion v kapse a fungující spojení do sítě, je to první krok. Logické pokračování je vlastní repeater. Pokud bydlíš výš nebo máš střechu, je to nejspíš něco, co tvoje okolí ocení. Eischmannovi přes zimu umřely baterky na repeateru ivanovice.meshcore.cz, který byl 300 metrů od něj, a najednou byl bez spojení. Jeho ponaučení: „když závisíte na repeaterech ostatních, měli byste mít spojení alespoň na dva. Nebo mít vlastní.&quot; Síť odolnou proti blackoutu nepostavíš tím, že čekáš na sysopa o tři ulice dál.</p>
<p>Před tím, než si pořídíš hardware na repeater, vygeneruj si přes <a href="https://meshcore.cz/">Key Generator</a> vlastní prefix klíče. V březnu 2026 už volné jednobajtové prefixy nebyly. Při 2-byte hashi je situace lepší, ale stejně si zkontroluj v analyzeru, jestli zrovna tvůj generovaný prefix neběží už ten den někomu přes ulici.</p>
<p>A pokud chceš jít dál než ke klasickým textovkám – existuje <a href="https://github.com/meshcore-dev/MeshCore/releases/tag/companion-v1.15.0">GROUP_DATA</a>, binární typ paketu, který firmware 1.15 přinesl pro pokročilejší aplikace. Telemetrie, řízení vzdálených zařízení, integrace s domácí automatizací. Část komunity tudy už šlape, v Brně víc, v ostatních městech méně.</p>
<p>Co MeshCore není a co se nestane: nikdy z toho nebude bezdrátový internet, nikdy nebude pohánět videohovory, nikdy nezvládne přenášet fotky v rozumném čase. To je v pořádku. Stačí, že umí to, co lidi v Karpatech, na chatě v Beskydech nebo v zatopeném Bohumíně skutečně potřebují: krátkou textovku, která projde, i když všechno ostatní leží.</p>
<p>A taková síť se buduje úplně stejně, jako se před třiceti lety budoval CZFree.Net. Po jednom uzlu, po jedné krabičce, po jedné neděli na střeše.</p>
<div class="pvc_clear"></div>
<p id="pvc_stats_3070" class="pvc_stats total_only  " data-element-id="3070" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img loading="lazy" decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F16%2Fmeshcore-v-praxi-jak-v-cesku-postavit-vlastni-lora-uzel-a-nezapadnout%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/16/meshcore-v-praxi-jak-v-cesku-postavit-vlastni-lora-uzel-a-nezapadnout/">MeshCore v praxi: jak v Česku postavit vlastní LoRa uzel a nezapadnout</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WireClaw: ESP32 jako AI agent, který vám neshodí topení, když spadne internet</title>
		<link>https://www.hardwired.dev/2026/05/12/wireclaw-esp32-jako-ai-agent-ktery-vam-neshodi-topeni-kdyz-spadne-internet/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Tue, 12 May 2026 09:51:29 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[nats]]></category>
		<category><![CDATA[openrouter]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3062</guid>

					<description><![CDATA[<p>Představte si scénář: pošlete přes Telegram zprávu „dej mi vědět, když teplota čipu překročí 28 stupňů&#34;. Bot odpoví, že rozumí. &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/12/wireclaw-esp32-jako-ai-agent-ktery-vam-neshodi-topeni-kdyz-spadne-internet/">WireClaw: ESP32 jako AI agent, který vám neshodí topení, když spadne internet</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Představte si scénář: pošlete přes Telegram zprávu „dej mi vědět, když teplota čipu překročí 28 stupňů&quot;. Bot odpoví, že rozumí. Od té chvíle ESP32 hlídá teplotu sám. Bez cloudu, bez LLM volání, bez WiFi. Spadne vám internet? Hlídá dál. Restartujete ho? Po naběhnutí hlídá dál.</p>
<p>Tohle je WireClaw, open-source firmware od Maria Schallnera (na GitHubu <code>M64GitHub</code>), který vyšel poprvé veřejně 25. února 2026. Z hardware-first myšlení vznikla jedna z mála implementací AI agenta na MCU, která bere vážně otázku, co se stane, když AI selže. Tady si projdeme, jak to funguje, proč to vzniklo a kde to narazí.</p>
<h2>Dvě smyčky, jeden čip</h2>
<p>Klíčový designový trik: WireClaw na ESP32 logicky rozděluje práci na dvě nezávislé části.</p>
<p><strong>Rule loop</strong> běží neustále a nedotýká se sítě. Čte senzory, vyhodnocuje uložená pravidla, spouští akce. Žádný HTTP request, žádná LLM inference. Když teplota přeleze práh, rozsvítí se LED nebo přijde Telegram zpráva, to celé v řádu milisekund, lokálně.</p>
<p><strong>AI loop</strong> se probudí, jen když přijde zpráva přes Telegram, USB sériovku nebo NATS. Tehdy WireClaw udělá HTTPS na OpenRouter (nebo HTTP na lokální Ollamu), nechá LLM zformulovat odpověď a případně vytvořit nové pravidlo. Maximum je pět iterací s nástroji na jednu zprávu, pak se vše zabalí.</p>
<blockquote>
<p><em>„The AI creates the rules. The rules run without the AI.&quot;</em></p>
</blockquote>
<p>Tahle věta z dokumentace shrnuje celou filozofii. LLM se používá jako kompilátor lidského záměru do embedded logiky. Pravidlo, které vznikne, jde do flash paměti a od té chvíle žije svým životem. Reboot? Po načtení z flashe pokračuje, jako by se nic nestalo.</p>
<p>Pro někoho, kdo zkoušel postavit IoT s ChatGPT v hot loopu, je to úleva. Žádný API výpadek vám neshodí topení.</p>
<h2>Co se vejde do ESP32</h2>
<p>WireClaw potřebuje 4 MB flash a tři typy čipů: ESP32-C3, C6 nebo S3. Klasický ESP32 s Tensilica jádrem <strong>není</strong> podporován, kvůli OTA partition table requirementům. ESP8266 je mimo hru kvůli paměti.</p>
<p>Reálná spotřeba zdrojů podle oficiální dokumentace:</p>
<pre><code>RAM:   59,7 %  (196 KB z 320 KB)
Flash: 51,4 %  (1,3 MB z 2,5 MB)</code></pre>
<p>To je dost, ale ne na hraně. Zhruba 40 % RAM zbývá pro vaše vlastní rozšíření. Setup portal a webové GUI sedí v PROGMEM, takže RAM nežerou.</p>
<p>Doporučená volba je ESP32-C6 DevKit. Cena se v Číně pohybuje kolem 5–10 dolarů, RISC-V jádro je rychlé a WS2812B onboard LED rovnou slouží jako vestavěný actuator. ESP32-S3 dává smysl tam, kde plánujete složitější rule chains a chcete víc paměti.</p>
<h2>Pravidla v praxi</h2>
<p>Rule engine je dost expresivní. Pravidlo se skládá ze senzoru, podmínky (<code>gt</code>, <code>lt</code>, <code>eq</code> a další), prahu a akce. Vestavěných virtuálních senzorů je hned několik: <code>chip_temp</code> z interního čidla, <code>clock_hour</code>, <code>clock_minute</code> a chytrý <code>clock_hhmm</code>. Posledně jmenovaný kóduje čas jako <code>hodina × 100 + minuta</code>, takže 10:12 = 1012. Najednou jde plánovat přes prostou <code>eq</code> podmínku bez nutnosti řešit dvě pole zvlášť. Elegantní hack.</p>
<p>Akce zahrnují <code>led_set</code> (RGB LED), <code>gpio_write</code>, <code>telegram</code>, <code>nats_publish</code> a <code>serial_send</code>. V textových akcích funguje placeholder substituce: do zprávy můžete napsat <code>&quot;Teplota čipu: {chip_temp}°C&quot;</code> a engine to vyrenderuje z živých dat. Bez LLM, přímo v rule loopu.</p>
<p>Pokročilejší trik je rule chaining: jedno LLM volání může vytvořit multi-step sekvenci s non-blocking delays. Spustí se Telegram alert, po pěti sekundách se rozsvítí červená LED, po deseti se zhasne a publikuje se zpráva na NATS. Mezitím engine paralelně vyhodnocuje ostatní pravidla.</p>
<p>Co u všech těchto testovaných modelů funguje, a co ne, stojí za pozornost. Gemini 2.5 Flash zvládá chains excelentně za zhruba 4 sekundy. Claude Sonnet 4.5 taky, ale potřebuje 10 sekund. Qwen 2.5 7B selhává: chybějící kroky, špatné delays, někdy přímo syntax errors. Pokud vás zajímá cost/perf pro běžný hobby use, Gemini Flash přes OpenRouter je sweet spot.</p>
<h2>NATS jako páteř</h2>
<p>Tady WireClaw zachází dál než většina podobných projektů. NATS, lehký pub/sub broker, je integrovaný ve třech vrstvách.</p>
<p>První vrstva: <strong>virtuální senzory</strong>. Vytvoříte senzor typu <code>nats_value</code> se subscribe na subject, třeba <code>home.room.temp</code>. Cokoliv, co umí na NATS publishovat (Python skript, Home Assistant, jiný WireClaw, průmyslový PLC), najednou dodává data do rule enginu.</p>
<p>Druhá vrstva: <strong>tool-call protokol</strong>. Externí AI agent (nemusí to být OpenClaw, stačí jakýkoli NATS klient) může volat 19 dostupných nástrojů přímo na ESP32, bez nutnosti budit lokální LLM. Latence se podle landing page pohybuje kolem 30 milisekund. Číslo z marketingu, ale architekturou to dává smysl.</p>
<p>Třetí vrstva, <strong>HAL</strong> (Hardware Abstraction Layer), je nejnižší. Žádný LLM, žádný JSON. Pevně definované subjects typu <code>{device}.hal.gpio.5.set</code> s payloadem <code>&quot;1&quot;</code> a odpovědí <code>&quot;ok&quot;</code>. Pro programy v Pythonu nebo Go, které potřebují deterministickou latenci, je tohle správná vrstva. Tight loop přes ESP32 z notebooku, žádný overhead.</p>
<p>A pak je tu <code>remote_chat</code> — tool, kterým se jeden WireClaw může ptát druhého, jako by si chatovali. Edge AI mesh s federovaným reasoningem. Trochu sci-fi, ale funkční.</p>
<h2>Kde to narazí</h2>
<p>Žádný projekt není bez háčků a u WireClawa stojí za to vědět o pár věcech předem.</p>
<p>Tu hlavní jsem už zmínil: <strong>klasický ESP32 ne</strong>. Pokud máte zásobu starších DevKitů, smůla. Buď port, nebo nákup nových C3/C6/S3 boardů.</p>
<p>Bezpečnost. Setup portal je captive portal <strong>bez autentizace</strong>. Web GUI po setup taky bez autentizace. Kdokoli v LAN si může změnit system prompt (čili jailbreak agenta), upravit persistent memory nebo smazat pravidla. API key sedí na flashi v plaintextu. Pro lab a hobby OK, pro produkci to chce VLAN izolaci a u Telegram bota strict spending limit na OpenRouter účtu.</p>
<p>Conversation history je čtyřtahový kruhový buffer plus 512 bytů persistent memory. Agent si nepamatuje hlubší kontext, jen poslední pár výměn. Pro chat o teplotě dobré, pro komplexnější dialog málo.</p>
<p>A poslední věc: rule loop běží &quot;každou iterací loop()&quot;. Frekvence není v dokumentaci uvedená. Pro motorické řízení, audio nebo cokoli, kde záleží na sub-milisekundové determinističnosti, sáhněte po přímém low-level firmware. WireClaw je orchestrátor, ne real-time kontrolér.</p>
<h2>Komu to dává smysl</h2>
<p>WireClaw cílí na úzkou komunitu: bastlíře, kteří mají ESP32 v šuplíku a chtějí experimentovat s AI agenty bez nutnosti stavět cloudovou infrastrukturu. Pro lab automatizaci, kde Home Assistant je overkill, pro distribuovanou senzor mesh, pro vzdělávací demo.</p>
<p>Komunita je zatím malá. Patnáct hvězdiček, čtyři forky, žádné formální release. Záleží na jediném vývojáři. To se časem může změnit, ale dneska to ovlivňuje, jak hluboko se do toho pouštět.</p>
<p>Pokud máte ESP32-C6 v šuplíku a hodinu času, web flasher na <a href="https://wireclaw.io/flash.html">wireclaw.io/flash.html</a> udělá zbytek. Chrome nebo Edge kvůli WebSerial API, kabel, OpenRouter API key, a za pár minut si můžete přes Telegram říct prvnímu vlastnímu edge agentovi, co má sledovat.</p>
<div class="pvc_clear"></div>
<p id="pvc_stats_3062" class="pvc_stats total_only  " data-element-id="3062" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img loading="lazy" decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F12%2Fwireclaw-esp32-jako-ai-agent-ktery-vam-neshodi-topeni-kdyz-spadne-internet%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/12/wireclaw-esp32-jako-ai-agent-ktery-vam-neshodi-topeni-kdyz-spadne-internet/">WireClaw: ESP32 jako AI agent, který vám neshodí topení, když spadne internet</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Váš Bluetooth čip křičí šifrovací klíče. Slyšet ho jde z parkoviště.</title>
		<link>https://www.hardwired.dev/2026/05/05/vas-bluetooth-cip-krici-sifrovaci-klice-slyset-ho-z-parkoviste/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Tue, 05 May 2026 12:02:35 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[AES-128]]></category>
		<category><![CDATA[automotive bezpečnost]]></category>
		<category><![CDATA[ble]]></category>
		<category><![CDATA[Bluetooth bezpečnost]]></category>
		<category><![CDATA[embedded security]]></category>
		<category><![CDATA[EURECOM]]></category>
		<category><![CDATA[Gnuradio]]></category>
		<category><![CDATA[HackRF]]></category>
		<category><![CDATA[hardware security]]></category>
		<category><![CDATA[IoT bezpečnost]]></category>
		<category><![CDATA[kryptografie]]></category>
		<category><![CDATA[mixed-signal čip]]></category>
		<category><![CDATA[Nordic Semiconductor]]></category>
		<category><![CDATA[nRF52832]]></category>
		<category><![CDATA[penetrační testování]]></category>
		<category><![CDATA[RF side channel]]></category>
		<category><![CDATA[Screaming Channels]]></category>
		<category><![CDATA[SDR]]></category>
		<category><![CDATA[side-channel útok]]></category>
		<category><![CDATA[šifrování]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3043</guid>

					<description><![CDATA[<p>Jak mixed-signal SoC nechtěně vysílá kryptografická tajemství a jak to reprodukovat s HackRF za odpoledne Sedíte v autě, zaparkovaní u &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/05/vas-bluetooth-cip-krici-sifrovaci-klice-slyset-ho-z-parkoviste/">Váš Bluetooth čip křičí šifrovací klíče. Slyšet ho jde z parkoviště.</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p><em>Jak mixed-signal SoC nechtěně vysílá kryptografická tajemství a jak to reprodukovat s HackRF za odpoledne</em></p>
<hr />
<p>Sedíte v autě, zaparkovaní u továrny. Výrobní hala je dvacet metrů za zdí. Spustíte skript na laptopu, nasměrujete anténu a čekáte. Za pár hodin máte AES-128 klíč z komunikace zámkového modulu uvnitř.</p>
<p>Žádné hackování sítě. Žádný fyzický kontakt. Žádné stopy.</p>
<p>Tohle není filmový scénář - je to zdokumentovaný útok, publikovaný akademicky v roce 2018, rozšiřovaný výzkumy až do roku 2024, spustitelný na fakt běžném SDR hardware. Jmenuje se <strong>Screaming Channels</strong> a má přímou relevanci pro každý automotive modul, který na sobě nese BLE čip od Nordic Semiconductor.</p>
<hr />
<h2>Čip, který si sám zesílí vlastní únik</h2>
<p>Mixed-signal SoC je čip, kde digitální logika a rádiový transceiver sdílejí jeden křemíkový die. Zní to jako detail z datasheetu. Ve skutečnosti je to bezpečnostní časovaná bomba.</p>
<p>Digitální logika při výpočtech generuje elektromagnetický šum. Na izolovaném mikrokontroléru to není velký problém - šum je slabý, slyšitelný jen z milimetrů. Ale na mixed-signal čipu se ten šum šíří do analogové části: přes sdílené napájení, substrátové vazby, kapacitní přeslech mezi bloky na die. A v analogové části je PA - výkonnostní zesilovač rádiového vysílače.</p>
<p>Čip si vlastní kryptografický únik zesílí a vyšle anténou do prostoru.</p>
<p>Giovanni Camurati a jeho kolegové z EURECOM tohle v roce 2018 pojmenovali &quot;screaming channels&quot; - v kontrastu ke klasickým EM side-channels, které &quot;šeptají&quot; z centimetrů. Tady čip doslova křičí.</p>
<p>Konkrétní cíl výzkumu: <strong>nRF52832</strong> od Nordic Semiconductor. ARM Cortex-M4 na 64 MHz, integrovaný BLE/ANT transceiver na 2,4 GHz. Používaný v milionech zařízení - wearables, průmyslový IoT, smart home. A automotive.</p>
<hr />
<h2>Proč 2,464 GHz a ne 2,400 GHz</h2>
<p>Tady je fyzika, která útok umožňuje.</p>
<p>CPU nRF52832 taktuje na <strong>64 MHz</strong>. Při AES výpočtu generuje harmonické tohoto taktu - šum s komponentami na 64 MHz, 128 MHz, 192 MHz atd. Ten šum vstoupí do IQ mixeru v rádiovém řetězci, kde se amplitudově namoduluje na nosnou BT kanálu.</p>
<p>Výsledek: útočník neladí na 2,400 GHz (BT kanál 0), ale na <strong>2,464 GHz</strong>:</p>
<pre><code>f(screaming channel) = f(BT kanál) + f(CPU clock)
                     = 2,400 GHz  + 0,064 GHz
                     = 2,464 GHz</code></pre>
<p>V spektrogramu to vypadá jako tenký proužek vedle hlavního BT signálu - vizuálně nenápadný, statisticky informativní. Každé jedno AES šifrování zanechá v zachyceném signálu &quot;otisk&quot; - trace. Jedna trace toho moc neřekne. Ale po 90 000 tracích jde z korelace vytáhnout celý 128bitový klíč.</p>
<p>Zpátky k tomu autu na parkovišti: útočník nepotřebuje dekódovat Bluetooth provoz. Jen passivně naslouchá vedlejšímu šumu. Zařízení ani netuší, že je sledováno.</p>
<hr />
<h2>Sedm let výzkumu v pěti minutách</h2>
<p>Projekt Screaming Channels není jednorázová akademická kuriozita. Vyvíjí se.</p>
<p><strong>CCS 2018</strong> (Camurati et al., EURECOM): Původní demonstrace. Útok na tinyAES implementaci na nRF52832, vzdálenost 10 metrů v anechoické komoře, vzdálenost 1 metr v kancelářském prostředí. Korelační analýza, 180 000 traces. Tři místo na CSAW Europe 2018.</p>
<p><strong>CHES 2020</strong>: Podrobnější analýza kanálu, útok na Google Eddystone beacony (reálný produkt, ne lab firmware), vzdálenost 15 metrů v kancelářské chodbě, spatial diversity s dvěma přijímači, reuse profilu postaveného na jiném zařízení měsíce předem.</p>
<p><strong>ACSAC 2024</strong> (BlueScream, Ayoub et al., EURECOM + Univ. Lille + CNRS + Inria): Útok na reálný BLE stack bez modifikace firmware. Útočník manipuluje BLE protokol tak, aby zařízení leaked Long Term Key při standardní komunikaci. Tohle je z mého pohledu nejzásadnější posun - předchozí práce vyžadovaly speciální firmware na target zařízení. BlueScream funguje na produkčním zařízení s factory firmware.</p>
<p>Musím ale říct, že &quot;funguje na produkčním zařízení&quot; je trochu zjednodušení. BlueScream stále potřebuje, aby útočník mohl ovlivnit BLE session - tedy aby byl v dosahu a mohl komunikovat. Vzdálený pasivní útok bez jakékoliv interakce to zatím není. Ale hranice se posouvají každý rok.</p>
<p>Mimochodem: vedle toho v roce 2025 publikovali Ji et al. ze Stockholm University útok na <em>hardwarový</em> AES akcelerátor (ne softwarovou implementaci) na stejném čipu, s ML-assisted analýzou a 90 000 traces z 1 metru. Hardwarový akcelerátor se dřív považoval za odolnější. Ukázalo se, že ne.</p>
<hr />
<h2>Jak to reprodukovat: hardware</h2>
<p>Celý projekt je open-source. EURECOM zveřejnil firmware, kód, GNURadio bloky a naměřené datasety. Není potřeba nic vymýšlet od nuly.</p>
<p><strong>Minimální setup</strong> pro laboratorní validaci:</p>
<table>
<thead>
<tr>
<th>Komponenta</th>
<th>Model</th>
<th>Cena</th>
</tr>
</thead>
<tbody>
<tr>
<td>Target čip</td>
<td>Nordic nRF52832 PCA10040 DK</td>
<td>~1 000 Kč</td>
</tr>
<tr>
<td>SDR přijímač</td>
<td>HackRF One</td>
<td>máte</td>
</tr>
<tr>
<td>Anténa</td>
<td>WiFi directional 2,4 GHz (TP-Link nebo podobná)</td>
<td>~500 Kč</td>
</tr>
<tr>
<td>Počítač</td>
<td>Linux, GNURadio 3.7+</td>
<td>máte</td>
</tr>
</tbody>
</table>
<p>PCA10040 má onboard J-Link debugger - žádný extra programátor nepotřebujete, stačí USB kabel.</p>
<p>HackRF zvládne útok z 1 až 3 metrů v tichém RF prostředí. Pro 10+ metrů (publikované výsledky) potřebujete USRP N210 s SBX daughterboard a paraboliku s 24 dBi - to je jiný cenový segment (~150 000 Kč za USRP). Pro automotive bezpečnostní testování v laboratoři ale 1 metr odpovídá realistickému scénáři technická diagnostiky u vozidla.</p>
<hr />
<h2>Jak to reprodukovat: software a postup</h2>
<h3>1. Instalace</h3>
<pre><code class="language-bash">sudo apt install gnuradio gr-osmosdr hackrf minicom gcc-arm-none-eabi

git clone https://github.com/eurecom-s3/screaming_channels
cd screaming_channels
git checkout ches20

cd experiments/src
python2 setup.py develop
pip3 install gatt==0.2.7 pyzmq==17.1.2</code></pre>
<p>Repo obsahuje i Dockerfile pro izolované prostředí - doporučuji, závislosti jsou trochu starší:</p>
<pre><code class="language-bash">docker build -t screaming docker/
docker run -it --privileged screaming</code></pre>
<h3>2. Flash firmware</h3>
<pre><code class="language-bash">cd screaming_channels/firmware

# mbedTLS varianta (doporučená pro první pokus)
make GNU_INSTALL_ROOT=$GCC_PATH/gcc-arm-none-eabi-7-2017-q4-major/bin/ \
  -C blenano2_mbedtls/blank/armgcc/

# Flashnout přes J-Link (automaticky při připojení PCA10040 přes USB)
cp blenano2_mbedtls/blank/armgcc/_build/nrf52832_xxaa.hex /media/$USER/DAPLINK/</code></pre>
<p>Po flashnutí se připojte přes UART (<code>minicom -b 115200 -D /dev/ttyACM0</code>) a stiskněte <code>h</code> - uvidíte menu s dostupnými módy.</p>
<h3>3. Vizualizace úniku - první krok</h3>
<p>Než začnete sbírat traces, ověřte, že leak vůbec vidíte.</p>
<p>Naladíte HackRF na offset frekvenci:</p>
<pre><code class="language-bash"># Přímý přístup přes hackrf_transfer (jen pro rychlý test)
hackrf_transfer -r /dev/null -f 2464000000 -s 8000000 -l 40 -g 40</code></pre>
<p>Lépe otevřete GQRX nebo GNURadio Companion, nastavte:</p>
<ul>
<li>Frekvence: <strong>2 464 MHz</strong></li>
<li>Sample rate: 8 MSPS</li>
<li>FFT size: 4096</li>
<li>Gain: začněte na 30 dB, dolaďte</li>
</ul>
<p>Ve firmware spusťte AES smyčku: <code>n</code> (TinyAES mód), <code>n2000</code> (2000 opakování), <code>r</code> (spustit). Ve spektrogramu by se měl objevit periodický proužek kolem +64 MHz offsetu od BT nosné. Když ho vidíte, jste na správné stopě.</p>
<h3>4. Sběr traces</h3>
<pre><code class="language-bash">sc-experiment \
  --radio=HackRF \
  --device=/dev/ttyACM0 \
  collect \
  config/example_collection_plot.json \
  ../traces/ \
  --plot</code></pre>
<p><code>--plot</code> zobrazí live vizualizaci každé trace. Hledáte konzistentní tvar signálu korelovaný se šifrováním - pokud každá trace vypadá jinak a chaoticky, SNR je příliš nízké (zkuste zkrátit vzdálenost nebo zvýšit gain).</p>
<h3>5. Analýza - bez vlastního hardware</h3>
<p>Pokud chcete nejdřív ověřit celý analytický pipeline, EURECOM poskytl veřejné datasety:</p>
<ul>
<li><a href="https://drive.google.com/drive/folders/1bJniDXOroLrWUvazbE5jFU0ETFYVx0Av">Small sample set (56 MB)</a> - útok na 20 cm</li>
<li><a href="https://drive.google.com/drive/folders/1W17IOGQb7uok8H0WvLJOEchrAusZvCW5">CCS18 traces (2,6 GB)</a> - útok na 10 m v anechoické komoře, útok na 1 m v kanceláři</li>
<li>CHES20 traces (15 GB) - vše od 55 cm doma přes 15 m v chodbě po T-test na 34 m</li>
</ul>
<pre><code class="language-bash">export TRACES_SAMPLE=&quot;/cesta/k/datum&quot;

sc-attack \
  --norm \
  --plot \
  attack config/example_attack.json \
  $TRACES_SAMPLE/sample/</code></pre>
<h3>6. Dvě metody key recovery</h3>
<p><strong>Korelační analýza (CPA)</strong> - bez profilování, ~180 000 traces, deterministická. Dobrá pro první pokus, nevyžaduje referenční zařízení se známým klíčem.</p>
<p><strong>Template attack s ML</strong> - vyžaduje profilování (traces se známým klíčem na tom samém modelu čipu), útok pak z ~90 000 traces. Přibližně dvakrát efektivnější.</p>
<pre><code class="language-bash"># Profilování (coaxiální připojení, plný SNR, známý klíč)
sc-attack --norm \
  --data-path ./traces/profile \
  --num-traces 5000 \
  profile \
  --variable p_xor_k \
  --pois-algo r \
  --num-pois 1 \
  /tmp/profile_output/

# Útok (vzdálené traces, neznámý klíč)
sc-attack --norm \
  --data-path ./traces/attack \
  --num-traces 90000 \
  attack \
  --attack-algo pcc \
  --profile /tmp/profile_output/ \
  /tmp/attack_output/</code></pre>
<hr />
<h2>Co s tím dělat: mitigace, která nestačí, a ta, která pomáhá</h2>
<p>Softwarová oprava neexistuje. Problém je fyzický.</p>
<p>Maskovací schémata v AES implementaci (Rivain-Prouff a podobné) zvýší počet potřebných traces, ale útok neumožní - Ji et al. (2025) demonstrovali průlom i přes masking. Jitter v časování šifrování komplikuje synchronizaci traces. Žádná sláva.</p>
<p>Fakticky fungující opatření jsou hardwarová:</p>
<p><strong>RF stínění modulu</strong> - faradayova klec kolem čipu ořízne leak na přijatelnou úroveň. Přidá ale hmotnost, rozměry a cenu.</p>
<p><strong>Čipy s integrovanou ochranou</strong> - Nordic nRF54 série (nástupce nRF52) obsahuje dedikovanou side-channel leakage protection v kryptoakcelerátoru. Pokud navrhujete nový modul, tohle je relevantní volba.</p>
<p><strong>Oddělit napájení</strong> - digitální a RF napájení na PCB oddělené ferritovými korálky a LC filtry sníží substrátovou vazbu, ale neodstraní ji úplně. Pomáhá SNR útoku poškodit, ale nestačí jako jediné opatření.</p>
<p>Pro firemní kontext: výsledky testování vlastních modulů zdokumentujte jako součást threat modelu a bezpečnostní dokumentace. Pokud modul projde CPA testem bez key recovery do 200 000 traces v laboratorních podmínkách, máte datový podklad pro rozhodování.</p>
<hr />
<h2>Zdroje</h2>
<p><strong>Akademické práce (primární zdroje):</strong></p>
<ul>
<li>Camurati et al. (CCS 2018): <a href="http://s3.eurecom.fr/docs/ccs18_camurati.pdf">Screaming Channels: When EM Side Channels Meet Radio Transceivers</a></li>
<li>Camurati et al. (CHES 2020): <a href="https://tches.iacr.org/index.php/TCHES/article/view/8594/8161">Understanding Screaming Channels</a></li>
<li>Ayoub et al. (ACSAC 2024): <a href="https://s3.eurecom.fr/docs/acsac24_ayoub.pdf">BlueScream: Screaming Channels on Bluetooth Low Energy</a></li>
<li>Ji, Dubrova, Wang (IACR ePrint 2025): <a href="https://eprint.iacr.org/2025/559">Is Your Bluetooth Chip Leaking Secrets via RF Signals?</a></li>
</ul>
<p><strong>Kód a datasety:</strong></p>
<ul>
<li><a href="https://github.com/eurecom-s3/screaming_channels">github.com/eurecom-s3/screaming_channels</a> - firmware, experimenty, datasety, Docker</li>
<li><a href="https://github.com/pierreay/bluescream">github.com/pierreay/bluescream</a> - BlueScream (reálný BLE stack, ACSAC 2024)</li>
<li><a href="https://eurecom-s3.github.io/screaming_channels/">eurecom-s3.github.io/screaming_channels</a> - dokumentace, download datasety</li>
</ul>
<p><strong>Prezentace:</strong></p>
<ul>
<li><a href="https://youtu.be/K7wqwOzD1Yw">Black Hat USA 2018 - video</a></li>
<li><a href="https://youtu.be/Xb9xGwiOYkY">CHES 2020 - video</a></li>
</ul>
<hr />
<p><em>Testování technik popsaných v tomto článku proveďte výhradně na vlastním hardware nebo s písemným souhlasem vlastníka zařízení. Útoky na cizí zařízení jsou trestné.</em></p>
<div class="pvc_clear"></div>
<p id="pvc_stats_3043" class="pvc_stats total_only  " data-element-id="3043" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img loading="lazy" decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F05%2Fvas-bluetooth-cip-krici-sifrovaci-klice-slyset-ho-z-parkoviste%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/05/vas-bluetooth-cip-krici-sifrovaci-klice-slyset-ho-z-parkoviste/">Váš Bluetooth čip křičí šifrovací klíče. Slyšet ho jde z parkoviště.</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Multimodal Embedding &#038; Reranker Models with Sentence Transformers</title>
		<link>https://www.hardwired.dev/2026/04/10/multimodal-embedding-reranker-models-with-sentence-transformers/</link>
		
		<dc:creator><![CDATA[Yukiko Hesse]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 20:32:42 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[cross-modal search]]></category>
		<category><![CDATA[embedding models]]></category>
		<category><![CDATA[image retrieval]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[multimodal models]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[RAG]]></category>
		<category><![CDATA[reranker]]></category>
		<category><![CDATA[Semantic search]]></category>
		<category><![CDATA[sentence transformers]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3030</guid>

					<description><![CDATA[<p>Multimodal Embedding &#38; Reranker Models with Sentence Transformers Sentence Transformers is a Python library for using and training embedding and &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/04/10/multimodal-embedding-reranker-models-with-sentence-transformers/">Multimodal Embedding & Reranker Models with Sentence Transformers</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><h1>Multimodal Embedding &amp; Reranker Models with Sentence Transformers</h1>
<p>Sentence Transformers is a Python library for using and training embedding and reranker models for applications like retrieval augmented generation, semantic search, and more. With the v5.4 update, you can now encode and compare texts, images, audio, and videos using the same familiar API. In this blogpost, I'll show you how to use these new multimodal capabilities for both embedding and reranking.</p>
</p>
<p>Multimodal embedding models map inputs from different modalities into a shared embedding space, while multimodal reranker models score the relevance of mixed-modality pairs. This opens up use cases like visual document retrieval, cross-modal search, and multimodal RAG pipelines.</p>
<h2>Table of Contents</h2>
<ul>
<li><a href="#what-are-multimodal-models">What are Multimodal Models?</a></li>
<li><a href="#installation">Installation</a></li>
<li><a href="#multimodal-embedding-models">Multimodal Embedding Models</a></li>
<li><a href="#loading-a-model">Loading a Model</a></li>
<li><a href="#encoding-images">Encoding Images</a></li>
<li><a href="#cross-modal-similarity">Cross-Modal Similarity</a></li>
<li><a href="#encoding-queries-and-documents">Encoding Queries and Documents</a></li>
<li><a href="#multimodal-reranker-models">Multimodal Reranker Models</a></li>
<li><a href="#ranking-mixed-modality-documents">Ranking Mixed-Modality Documents</a></li>
<li><a href="#predicting-pair-scores">Predicting Pair Scores</a></li>
<li><a href="#retrieve-and-rerank">Retrieve and Rerank</a></li>
<li><a href="#input-formats-and-configuration">Input Formats and Configuration</a></li>
<li><a href="#supported-input-types">Supported Input Types</a></li>
<li><a href="#checking-modality-support">Checking Modality Support</a></li>
<li><a href="#processor-and-model-kwargs">Processor and Model kwargs</a></li>
<li><a href="#supported-models">Supported Models</a></li>
<li><a href="#additional-resources">Additional Resources</a></li>
</ul>
<h2>What are Multimodal Models?</h2>
<p>Traditional embedding models convert text into fixed-size vectors. Multimodal embedding models extend this by mapping inputs from different modalities (text, images, audio, or video) into a shared embedding space. This means you can compare a text query against image documents (or vice versa) using the same similarity functions you're already familiar with.</p>
<p>Similarly, traditional reranker (Cross Encoder) models compute relevance scores between pairs of texts. Multimodal rerankers can score pairs where one or both elements are images, combined text-image documents, or other modalities.</p>
<p>For example, you can compare a text query against image documents, find video clips matching a description, or build RAG pipelines that work across modalities.</p>
<h2>Installation</h2>
<p>Multimodal models require some extra dependencies. Install the extras for the modalities you need (see <a href="https://sbert.net/docs/installation.html">Installation</a> for more details):</p>
<div class="codehilite">
<pre><span></span><code><span class="c1"># For image support</span>
pip<span class="w"> </span>install<span class="w"> </span>-U<span class="w"> </span><span class="s2">&quot;sentence-transformers[image]&quot;</span>

<span class="c1"># For audio support</span>
pip<span class="w"> </span>install<span class="w"> </span>-U<span class="w"> </span><span class="s2">&quot;sentence-transformers&quot;</span>

<span class="c1"># For video support</span>
pip<span class="w"> </span>install<span class="w"> </span>-U<span class="w"> </span><span class="s2">&quot;sentence-transformers&quot;</span>

<span class="c1"># Mix and match as needed</span>
pip<span class="w"> </span>install<span class="w"> </span>-U<span class="w"> </span><span class="s2">&quot;sentence-transformers[image,video,train]&quot;</span>
</code></pre>
</div>
<p>VLM-based models like Qwen3-VL-2B require a GPU with at least ~8 GB of VRAM. For the 8B variants, expect ~20 GB. If you don't have a local GPU, consider using a cloud GPU service or Google Colab. On CPU, these models will be extremely slow; text-only or CLIP models are better suited for CPU inference.</p>
<h2>Multimodal Embedding Models</h2>
<h3>Loading a Model</h3>
<p>Loading a multimodal embedding model works exactly like loading a text-only model:</p>
<div class="codehilite">
<pre><span></span><code><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">SentenceTransformer</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">SentenceTransformer</span><span class="p">(</span><span class="s2">&quot;Qwen/Qwen3-VL-Embedding-2B&quot;</span><span class="p">,</span> <span class="n">revision</span><span class="o">=</span><span class="s2">&quot;refs/pr/23&quot;</span><span class="p">)</span>
</code></pre>
</div>
<p>The revision argument is required for now because the integration pull requests for these models are still pending. Once they're merged, you'll be able to load them without specifying a revision.</p>
<p>The model automatically detects which modalities it supports, so there's nothing extra to configure. See <a href="#processor-and-model-kwargs">Processor and Model kwargs</a> if you want to control things like image resolution or model precision.</p>
<h3>Encoding Images</h3>
<p>With a multimodal model loaded, <code>model.encode()</code> accepts images alongside text. Images can be provided as URLs, local file paths, or PIL Image objects (see <a href="#supported-input-types">Supported Input Types</a> for all accepted formats):</p>
<div class="codehilite">
<pre><span></span><code><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">SentenceTransformer</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">SentenceTransformer</span><span class="p">(</span><span class="s2">&quot;Qwen/Qwen3-VL-Embedding-2B&quot;</span><span class="p">,</span> <span class="n">revision</span><span class="o">=</span><span class="s2">&quot;refs/pr/23&quot;</span><span class="p">)</span>

<span class="c1"># Encode images from URLs</span>
<span class="n">img_embeddings</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode</span><span class="p">([</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg&quot;</span><span class="p">,</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg&quot;</span><span class="p">,</span>
<span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">img_embeddings</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
<span class="c1"># (2, 2048)</span>
</code></pre>
</div>
<h3>Cross-Modal Similarity</h3>
<p>You can compute similarities between text embeddings and image embeddings, since the model maps both into the same space:</p>
<div class="codehilite">
<pre><span></span><code><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">SentenceTransformer</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">SentenceTransformer</span><span class="p">(</span><span class="s2">&quot;Qwen/Qwen3-VL-Embedding-2B&quot;</span><span class="p">,</span> <span class="n">revision</span><span class="o">=</span><span class="s2">&quot;refs/pr/23&quot;</span><span class="p">)</span>

<span class="c1"># Encode images</span>
<span class="n">img_embeddings</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode</span><span class="p">([</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg&quot;</span><span class="p">,</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg&quot;</span><span class="p">,</span>
<span class="p">])</span>

<span class="c1"># Encode text queries (one matching + one hard negative per image)</span>
<span class="n">text_embeddings</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode</span><span class="p">([</span>
 <span class="s2">&quot;A green car parked in front of a yellow building&quot;</span><span class="p">,</span>
 <span class="s2">&quot;A red car driving on a highway&quot;</span><span class="p">,</span>
 <span class="s2">&quot;A bee on a pink flower&quot;</span><span class="p">,</span>
 <span class="s2">&quot;A wasp on a wooden table&quot;</span><span class="p">,</span>
<span class="p">])</span>

<span class="c1"># Compute cross-modal similarities</span>
<span class="n">similarities</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">similarity</span><span class="p">(</span><span class="n">text_embeddings</span><span class="p">,</span> <span class="n">img_embeddings</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">similarities</span><span class="p">)</span>
<span class="c1"># tensor([[0.5115, 0.1078],</span>
<span class="c1"># [0.1999, 0.1108],</span>
<span class="c1"># [0.1255, 0.6749],</span>
<span class="c1"># [0.1283, 0.2704]])</span>
</code></pre>
</div>
<p>As expected, "A green car parked in front of a yellow building" is most similar to the car image (0.51), and "A bee on a pink flower" is most similar to the bee image (0.67). The hard negatives ("A red car driving on a highway", "A wasp on a wooden table") correctly receive lower scores.</p>
<p>You might notice that even the best matching scores (0.51, 0.67) aren't very close to 1.0. This is due to the <a href="https://arxiv.org/abs/2203.02053">modality gap</a>: embeddings from different modalities tend to cluster in separate regions of the space. Cross-modal similarities are typically lower than within-modal ones (e.g., text-to-text), but the relative ordering is preserved, so retrieval still works well.</p>
<h3>Encoding Queries and Documents</h3>
<p>For retrieval tasks, <code>encode_query()</code> and <code>encode_document()</code> are the recommended methods. Many retrieval models prepend different instruction prompts depending on whether the input is a query or a document, similar to how chat models might apply different system prompts depending on the goal. Model authors can specify their prompts in the model config, and <code>encode_query()</code> / <code>encode_document()</code> automatically load and apply the correct one:</p>
<ul>
<li><code>encode_query()</code> uses the model's "query" prompt (if available) and sets <code>task="query"</code>.</li>
<li><code>encode_document()</code> uses the first available prompt from "document", "passage", or "corpus", and sets <code>task="document"</code>.</li>
</ul>
<p>Under the hood, both are thin wrappers around <code>encode()</code>, they just handle prompt selection for you. Here's what cross-modal retrieval looks like:</p>
<div class="codehilite">
<pre><span></span><code><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">SentenceTransformer</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">SentenceTransformer</span><span class="p">(</span><span class="s2">&quot;Qwen/Qwen3-VL-Embedding-2B&quot;</span><span class="p">,</span> <span class="n">revision</span><span class="o">=</span><span class="s2">&quot;refs/pr/23&quot;</span><span class="p">)</span>

<span class="c1"># Encode text queries with the query prompt</span>
<span class="n">query_embeddings</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode_query</span><span class="p">([</span>
 <span class="s2">&quot;Find me a photo of a vehicle parked near a building&quot;</span><span class="p">,</span>
 <span class="s2">&quot;Show me an image of a pollinating insect&quot;</span><span class="p">,</span>
<span class="p">])</span>

<span class="c1"># Encode document screenshots with the document prompt</span>
<span class="n">doc_embeddings</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode_document</span><span class="p">([</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg&quot;</span><span class="p">,</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg&quot;</span><span class="p">,</span>
<span class="p">])</span>

<span class="c1"># Compute similarities</span>
<span class="n">similarities</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">similarity</span><span class="p">(</span><span class="n">query_embeddings</span><span class="p">,</span> <span class="n">doc_embeddings</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">similarities</span><span class="p">)</span>
<span class="c1"># tensor([[0.3907, 0.1490],</span>
<span class="c1"># [0.1235, 0.4872]])</span>
</code></pre>
</div>
<p>These methods accept the same input types as <code>encode()</code> (images, URLs, multimodal dicts, etc.) and pass through the same parameters. For models without specialized query/document prompts, they behave identically to <code>encode()</code>.</p>
<h2>Multimodal Reranker Models</h2>
<p>Multimodal reranker (CrossEncoder) models score the relevance between pairs of inputs, where each element can be text, an image, audio, video, or a combination. They tend to outperform embedding models in terms of quality, but are slower since they process each pair individually. The currently available pretrained multimodal rerankers focus on text and image inputs, but the architecture supports any modality that the underlying model can handle.</p>
<h3>Ranking Mixed-Modality Documents</h3>
<p>The <code>rank()</code> method scores and ranks a list of documents against a query, supporting mixed modalities:</p>
<div class="codehilite">
<pre><span></span><code><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">CrossEncoder</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">CrossEncoder</span><span class="p">(</span><span class="s2">&quot;Qwen/Qwen3-VL-Reranker-2B&quot;</span><span class="p">,</span> <span class="n">revision</span><span class="o">=</span><span class="s2">&quot;refs/pr/11&quot;</span><span class="p">)</span>

<span class="n">query</span> <span class="o">=</span> <span class="s2">&quot;A green car parked in front of a yellow building&quot;</span>
<span class="n">documents</span> <span class="o">=</span> <span class="p">[</span>
 <span class="c1"># Image documents (URL or local file path)</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg&quot;</span><span class="p">,</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg&quot;</span><span class="p">,</span>
 <span class="c1"># Text document</span>
 <span class="s2">&quot;A vintage Volkswagen Beetle painted in bright green sits in a driveway.&quot;</span><span class="p">,</span>
 <span class="c1"># Combined text + image document</span>
 <span class="p">{</span>
 <span class="s2">&quot;text&quot;</span><span class="p">:</span> <span class="s2">&quot;A car in a European city&quot;</span><span class="p">,</span>
 <span class="s2">&quot;image&quot;</span><span class="p">:</span> <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg&quot;</span><span class="p">,</span>
 <span class="p">},</span>
<span class="p">]</span>

<span class="n">rankings</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">rank</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">documents</span><span class="p">)</span>
<span class="k">for</span> <span class="n">rank</span> <span class="ow">in</span> <span class="n">rankings</span><span class="p">:</span>
 <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">rank</span><span class="p">[</span><span class="s1">&#39;score&#39;</span><span class="p">]</span><span class="si">:</span><span class="s2">.4f</span><span class="si">}</span><span class="se">\t</span><span class="s2">(document </span><span class="si">{</span><span class="n">rank</span><span class="p">[</span><span class="s1">&#39;corpus_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">0.9375 (document 0)</span>
<span class="sd">0.5000 (document 3)</span>
<span class="sd">-1.2500 (document 2)</span>
<span class="sd">-2.4375 (document 1)</span>
<span class="sd">&quot;&quot;&quot;</span>
</code></pre>
</div>
<p>The reranker correctly identifies the car image (document 0) as the most relevant result, followed by the combined text+image document about a car in a European city (document 3). The bee image (document 1) scores lowest.</p>
<p>Keep in mind that the modality gap can influence absolute scores: text-image pair scores may occupy a different range than text-text or image-image pair scores.</p>
<p>You can also check which modalities a reranker supports using <code>modalities</code> and <code>supports()</code>, just like with embedding models:</p>
<div class="codehilite">
<pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">modalities</span><span class="p">)</span>
<span class="c1"># [&#39;text&#39;, &#39;image&#39;, &#39;video&#39;, &#39;message&#39;]</span>

<span class="nb">print</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">supports</span><span class="p">(</span><span class="s2">&quot;image&quot;</span><span class="p">))</span>
<span class="c1"># True</span>

<span class="c1"># Check if the model supports a specific pair of modalities</span>
<span class="nb">print</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">supports</span><span class="p">((</span><span class="s2">&quot;image&quot;</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)))</span>
<span class="c1"># True</span>
</code></pre>
</div>
<h3>Predicting Pair Scores</h3>
<p>You can also use <code>predict()</code> to get raw relevance scores for specific pairs of inputs:</p>
<div class="codehilite">
<pre><span></span><code><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">CrossEncoder</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">CrossEncoder</span><span class="p">(</span><span class="s2">&quot;jinaai/jina-reranker-m0&quot;</span><span class="p">,</span> <span class="n">trust_remote_code</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>

<span class="n">scores</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">predict</span><span class="p">([</span>
 <span class="p">(</span><span class="s2">&quot;A green car&quot;</span><span class="p">,</span> <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg&quot;</span><span class="p">),</span>
 <span class="p">(</span><span class="s2">&quot;A bee on a flower&quot;</span><span class="p">,</span> <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg&quot;</span><span class="p">),</span>
 <span class="p">(</span><span class="s2">&quot;A green car&quot;</span><span class="p">,</span> <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg&quot;</span><span class="p">),</span>
<span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">scores</span><span class="p">)</span>
<span class="c1"># [0.9389156 0.96922314 0.46063158]</span>
</code></pre>
</div>
<h3>Retrieve and Rerank</h3>
<p>A common pattern is to use an embedding model for fast initial retrieval, then refine the top results with a reranker:</p>
<div class="codehilite">
<pre><span></span><code><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">SentenceTransformer</span><span class="p">,</span> <span class="n">CrossEncoder</span>

<span class="c1"># Step 1: Retrieve with an embedding model</span>
<span class="n">embedder</span> <span class="o">=</span> <span class="n">SentenceTransformer</span><span class="p">(</span><span class="s2">&quot;Qwen/Qwen3-VL-Embedding-2B&quot;</span><span class="p">,</span> <span class="n">revision</span><span class="o">=</span><span class="s2">&quot;refs/pr/23&quot;</span><span class="p">)</span>

<span class="n">query</span> <span class="o">=</span> <span class="s2">&quot;revenue growth chart&quot;</span>
<span class="n">query_embedding</span> <span class="o">=</span> <span class="n">embedder</span><span class="o">.</span><span class="n">encode_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>

<span class="c1"># Pre-compute corpus embeddings (do this once, then store them)</span>
<span class="n">document_screenshots</span> <span class="o">=</span> <span class="p">[</span>
 <span class="s2">&quot;path/to/doc1.png&quot;</span><span class="p">,</span>
 <span class="s2">&quot;path/to/doc2.png&quot;</span><span class="p">,</span>
 <span class="c1"># ... potentially millions of document screenshots</span>
<span class="p">]</span>
<span class="n">corpus_embeddings</span> <span class="o">=</span> <span class="n">embedder</span><span class="o">.</span><span class="n">encode_document</span><span class="p">(</span><span class="n">document_screenshots</span><span class="p">,</span> <span class="n">show_progress_bar</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>

<span class="c1"># Simple cosine similarity retrieval, viable as long as embeddings fit in memory</span>
<span class="n">similarities</span> <span class="o">=</span> <span class="n">embedder</span><span class="o">.</span><span class="n">similarity</span><span class="p">(</span><span class="n">query_embedding</span><span class="p">,</span> <span class="n">corpus_embeddings</span><span class="p">)</span>
<span class="n">top_k_indices</span> <span class="o">=</span> <span class="n">similarities</span><span class="o">.</span><span class="n">argsort</span><span class="p">(</span><span class="n">descending</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">][:</span><span class="mi">10</span><span class="p">]</span>

<span class="c1"># Step 2: Rerank the top-k results with a reranker model</span>
<span class="n">reranker</span> <span class="o">=</span> <span class="n">CrossEncoder</span><span class="p">(</span><span class="s2">&quot;nvidia/llama-nemotron-rerank-vl-1b-v2&quot;</span><span class="p">,</span> <span class="n">trust_remote_code</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>

<span class="n">top_k_documents</span> <span class="o">=</span> <span class="p">[</span><span class="n">document_screenshots</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">top_k_indices</span><span class="p">]</span>
<span class="n">rankings</span> <span class="o">=</span> <span class="n">reranker</span><span class="o">.</span><span class="n">rank</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">top_k_documents</span><span class="p">)</span>
<span class="k">for</span> <span class="n">rank</span> <span class="ow">in</span> <span class="n">rankings</span><span class="p">:</span>
 <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">rank</span><span class="p">[</span><span class="s1">&#39;score&#39;</span><span class="p">]</span><span class="si">:</span><span class="s2">.4f</span><span class="si">}</span><span class="se">\t</span><span class="si">{</span><span class="n">top_k_documents</span><span class="p">[</span><span class="n">rank</span><span class="p">[</span><span class="s1">&#39;corpus_id&#39;</span><span class="p">]]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</code></pre>
</div>
<p>Since the corpus embeddings are pre-computed, the initial retrieval is fast even over millions of documents. The reranker then provides more accurate scoring over the smaller candidate set.</p>
<h2>Input Formats and Configuration</h2>
<h3>Supported Input Types</h3>
<p>Multimodal models accept a variety of input formats. Here's a summary of what you can pass to <code>model.encode()</code>:</p>
<table>
<thead>
<tr>
<th>Modality</th>
<th>Accepted Formats</th>
</tr>
</thead>
<tbody>
<tr>
<td>Text</td>
<td>- Strings</td>
</tr>
<tr>
<td>Image</td>
<td>- PIL.Image.Image objects<br />- File paths (e.g. "./photo.jpg")<br />- URLs (e.g. "https://.../image.jpg")<br />- Numpy arrays, torch tensors</td>
</tr>
<tr>
<td>Audio</td>
<td>- File paths (e.g. "./audio.wav")<br />- URLs (e.g. "https://.../audio.wav")<br />- Numpy/torch arrays<br />- Dicts with "array" and "sampling_rate" keys<br />- torchcodec.AudioDecoder instances</td>
</tr>
<tr>
<td>Video</td>
<td>- File paths (e.g. "./video.mp4")<br />- URLs (e.g. "https://.../video.mp4")<br />- Numpy/torch arrays<br />- Dicts with "array" and "video_metadata" keys<br />- torchcodec.VideoDecoder instances</td>
</tr>
<tr>
<td>Multimodal</td>
<td>- Dicts mapping modality names to values,<br />e.g. <code>{"text": "a caption", "image": "https://.../image.jpg"}</code><br />Valid keys: "text", "image", "audio", "video"</td>
</tr>
<tr>
<td>Message</td>
<td>- List of message dicts with "role" and "content" keys,<br />e.g. <code>[{"role": "user", "content": [...]}]</code></td>
</tr>
</tbody>
</table>
<h3>Checking Modality Support</h3>
<p>You can check which modalities a model supports using the <code>modalities</code> property and <code>supports()</code> method:</p>
<div class="codehilite">
<pre><span></span><code><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">SentenceTransformer</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">SentenceTransformer</span><span class="p">(</span><span class="s2">&quot;Qwen/Qwen3-VL-Embedding-2B&quot;</span><span class="p">,</span> <span class="n">revision</span><span class="o">=</span><span class="s2">&quot;refs/pr/23&quot;</span><span class="p">)</span>

<span class="c1"># List all supported modalities</span>
<span class="nb">print</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">modalities</span><span class="p">)</span>
<span class="c1"># [&#39;text&#39;, &#39;image&#39;, &#39;video&#39;, &#39;message&#39;]</span>

<span class="c1"># Check for a specific modality</span>
<span class="nb">print</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">supports</span><span class="p">(</span><span class="s2">&quot;image&quot;</span><span class="p">))</span>
<span class="c1"># True</span>
<span class="nb">print</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">supports</span><span class="p">(</span><span class="s2">&quot;audio&quot;</span><span class="p">))</span>
<span class="c1"># False</span>
</code></pre>
</div>
<p>The "message" modality indicates that the model accepts chat-style message inputs with interleaved content. In practice, you rarely need to use this directly. When you pass strings, URLs, or multimodal dicts, the model converts them to the appropriate message format internally. Sentence Transformers supports two message formats:</p>
<ol>
<li><strong>Structured</strong> (most VLMs, e.g. Qwen3-VL): Content is a list of typed dicts, e.g. <code>[{"type": "text", "text": "..."}, {"type": "image", "image": ...}]</code></li>
<li><strong>Flat</strong> (e.g. Deepseek-V3): Content is a direct value, e.g. <code>"some text"</code></li>
</ol>
<p>The format is auto-detected from the model's chat template.</p>
<p>Since all inputs get converted into the same message format internally, you can mix input types in a single <code>encode()</code> call:</p>
<div class="codehilite">
<pre><span></span><code><span class="n">embeddings</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode</span><span class="p">([</span>
 <span class="c1"># A text input</span>
 <span class="s2">&quot;A green car parked in front of a yellow building&quot;</span><span class="p">,</span>
 <span class="c1"># An image input (URL)</span>
 <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg&quot;</span><span class="p">,</span>
 <span class="c1"># A combined text + image input</span>
 <span class="p">{</span>
 <span class="s2">&quot;text&quot;</span><span class="p">:</span> <span class="s2">&quot;A car in a European city&quot;</span><span class="p">,</span>
 <span class="s2">&quot;image&quot;</span><span class="p">:</span> <span class="s2">&quot;https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg&quot;</span><span class="p">,</span>
 <span class="p">},</span>
<span class="p">])</span>
</code></pre>
</div>
<h3>Processor and Model kwargs</h3>
<p>You may want to control image resolution bounds or model precision. Use <code>processor_kwargs</code> and <code>model_kwargs</code> when loading the model:</p>
<div class="codehilite">
<pre><span></span><code><span class="n">model</span> <span class="o">=</span> <span class="n">SentenceTransformer</span><span class="p">(</span>
 <span class="s2">&quot;Qwen/Qwen3-VL-Embedding-2B&quot;</span><span class="p">,</span>
 <span class="n">model_kwargs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;attn_implementation&quot;</span><span class="p">:</span> <span class="s2">&quot;flash_attention_2&quot;</span><span class="p">,</span> <span class="s2">&quot;torch_dtype&quot;</span><span class="p">:</span> <span class="s2">&quot;bfloat16&quot;</span><span class="p">},</span>
 <span class="n">processor_kwargs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;min_pixels&quot;</span><span class="p">:</span> <span class="mi">28</span> <span class="o">*</span> <span class="mi">28</span><span class="p">,</span> <span class="s2">&quot;max_pixels&quot;</span><span class="p">:</span> <span class="mi">600</span> <span class="o">*</span> <span class="mi">600</span><span class="p">},</span>
 <span class="n">revision</span><span class="o">=</span><span class="s2">&quot;refs/pr/23&quot;</span><span class="p">,</span>
<span class="p">)</span>
</code></pre>
</div>
<p><code>processor_kwargs</code> controls how inputs are preprocessed (e.g., image resolution bounds). Higher <code>max_pixels</code> means higher quality but more memory and compute. These are</p>
<div class="pvc_clear"></div>
<p id="pvc_stats_3030" class="pvc_stats total_only  " data-element-id="3030" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img loading="lazy" decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F04%2F10%2Fmultimodal-embedding-reranker-models-with-sentence-transformers%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/04/10/multimodal-embedding-reranker-models-with-sentence-transformers/">Multimodal Embedding & Reranker Models with Sentence Transformers</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>NanoQuant: Post-training kvantizace LLM pod hranici jednoho bitu</title>
		<link>https://www.hardwired.dev/2026/04/03/nanoquant-post-training-kvantizace-llm-pod-hranici-jednoho-bitu/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 20:54:15 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ADMM]]></category>
		<category><![CDATA[ADMM optimization]]></category>
		<category><![CDATA[binární faktorizace]]></category>
		<category><![CDATA[binary factorization]]></category>
		<category><![CDATA[binary GEMM]]></category>
		<category><![CDATA[bits per weight]]></category>
		<category><![CDATA[BPW]]></category>
		<category><![CDATA[consumer GPU]]></category>
		<category><![CDATA[CUDA kernely]]></category>
		<category><![CDATA[DBF]]></category>
		<category><![CDATA[edge inference]]></category>
		<category><![CDATA[extreme compression]]></category>
		<category><![CDATA[GGUF]]></category>
		<category><![CDATA[inference na edge]]></category>
		<category><![CDATA[komprese modelů]]></category>
		<category><![CDATA[kvantizace LLM]]></category>
		<category><![CDATA[large language models]]></category>
		<category><![CDATA[LittleBit]]></category>
		<category><![CDATA[llama.cpp]]></category>
		<category><![CDATA[Llama2-70B]]></category>
		<category><![CDATA[LLM quantization]]></category>
		<category><![CDATA[low-rank decomposition]]></category>
		<category><![CDATA[model compression]]></category>
		<category><![CDATA[NanoQuant]]></category>
		<category><![CDATA[nízko-rankový rozklad]]></category>
		<category><![CDATA[on-device AI]]></category>
		<category><![CDATA[Pareto frontier]]></category>
		<category><![CDATA[post-training kvantizace]]></category>
		<category><![CDATA[post-training quantization]]></category>
		<category><![CDATA[PTQ]]></category>
		<category><![CDATA[Samsung Research]]></category>
		<category><![CDATA[sub-1-bit kvantizace]]></category>
		<category><![CDATA[sub-1-bit quantization]]></category>
		<category><![CDATA[velké jazykové modely]]></category>
		<category><![CDATA[weight-only quantization]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2991</guid>

					<description><![CDATA[<p>O čem je řeč V únoru 2026 tým Samsung Research (Hyochan Chong, Dongkyu Kim, Changdong Kim, Minseop Choi) publikoval paper &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/04/03/nanoquant-post-training-kvantizace-llm-pod-hranici-jednoho-bitu/">NanoQuant: Post-training kvantizace LLM pod hranici jednoho bitu</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><hr />
<h2>O čem je řeč</h2>
<p>V únoru 2026 tým Samsung Research (Hyochan Chong, Dongkyu Kim, Changdong Kim, Minseop Choi) publikoval paper popisující NanoQuant — metodu post-training kvantizace (PTQ), která dokáže komprimovat váhy velkých jazykových modelů na 1 bit a méně. Ne jako marketingový trik s hvězdičkou a poznámkou pod čarou, ale jako funkční framework s měřitelnými výsledky na standardních benchmarcích.</p>
<p>Proč je to zajímavé: dosavadní PTQ metody (GPTQ, AWQ, QuIP, AQLM) fungují spolehlivě na 3–4 bitech na váhu. Pod touto hranicí se rozpadají. Kdo chtěl jít níže, musel sáhnout po QAT (quantization-aware training) metodách jako LittleBit nebo DBF, které ale vyžadují výrazně víc dat, výpočetního času a často i přístup k trénovacímu pipeline modelu. NanoQuant tuhle mezeru překlenuje — dosahuje komprese srovnatelné s QAT, ale s efektivitou a jednoduchostí PTQ.</p>
<h1>NanoQuant jednoduše: 70B model na herní grafice</h1>
<p><em>Co je sub-1-bit kvantizace a proč na tom záleží</em></p>
<hr />
<p>Představ si, že máš knihu, která má 138 000 stránek. Je v ní všechno — umí odpovídat na otázky, překládat, psát texty. Problém je, že potřebuješ obrovskou knihovnu, aby se ti tam vešla. Normální člověk si ji domů nedá.</p>
<p>Kvantizace je v podstatě způsob, jak tu knihu přepsat menším písmem. Místo toho, aby každé číslo v modelu (a těch jsou miliardy) zabíralo 16 pozic přesnosti, řeknete — stačí mi 4. Nebo 2. Model je pak menší, ale pořád rozumně funguje. Tohle se dělá běžně a funguje to dobře až do určité hranice.</p>
<p>NanoQuant jde dál. Řekne — stačí mi <em>méně než jedna pozice</em> na číslo. To zní absurdně, protože jedna pozice znamená jen dvě možnosti: plus nebo minus. Méně než jedna pozice by znamenalo, že ani to plus/minus nemáte pro každé číslo zvlášť.</p>
<p>Jak to udělají? Místo toho, aby každé číslo komprimovali samostatně, vezmou celou tabulku čísel a rozloží ji na několik menších tabulek, kde jsou jen jedničky a minus jedničky. Ty menší tabulky se pak vynásobí a dají dohromady přibližně totéž co originál. A protože ty menší tabulky jsou <em>menší</em> než originál, průměrně vychází méně než jeden bit na původní číslo.</p>
<p>Výsledek: model, který normálně zabírá 138 GB a potřebuje dvě profesionální grafické karty za statisíce, se smrskne na 5,35 GB a běží na běžné herní grafice za pár tisíc. A pořád dává rozumné odpovědi.</p>
<p>Háček je v tom, že tohle zatím existuje jen jako vědecký článek. Kód není veřejný, nemůžete si to stáhnout a zkusit. Ale ukazuje to směr — modely, které dnes potřebují serverovnu, by za rok nebo dva mohly běžet na normálním počítači nebo i na telefonu.</p>
<hr />
<p><em>Zdroj: <a href="https://arxiv.org/abs/2602.06694">NanoQuant — arxiv.org/abs/2602.06694</a></em></p>
<hr />
<h2>Problém: proč je sub-1-bit komprese těžká</h2>
<p>Standardní kvantizace funguje tak, že se každá váha zaokrouhlí na nejbližší hodnotu z omezeného počtu úrovní. Při 4 bitech máte 16 úrovní, při 2 bitech 4 úrovně. Při 1 bitu máte dvě: +1 a −1. To je brutální ztráta informace.</p>
<p>Existující PTQ metody na tomhle selhávají ze dvou důvodů:</p>
<ol>
<li>Nemají dostatečně sofistikovaný způsob, jak rozhodnout, která váha bude +1 a která −1, aby výsledný model stále dával smysl.</li>
<li>Některé metody technicky tvrdí, že komprimují na 1 bit, ale pak si &quot;berou zpět&quot; paměť přes pomocné struktury — škálovací faktory, lookup tabulky, metadata — takže skutečný paměťový otisk je výrazně vyšší.</li>
</ol>
<p>QAT metody tenhle problém řeší přetrénováním modelu s kvantizačním šumem jako součástí tréninkového procesu. Funguje to, ale vyžaduje to stovky tisíc až miliony kalibračních tokenů, desítky GPU hodin a přístup k tréninkovému pipeline.</p>
<hr />
<h2>Jak NanoQuant funguje</h2>
<p>NanoQuant reformuluje celý problém kvantizace. Místo zaokrouhlování jednotlivých vah na binární hodnoty rozkládá váhovou matici na součin nízko-rankových binárních matic a škálovacích faktorů. Matematicky: matice vah W se aproximuje jako součin binárních matic (obsahujících pouze +1 a −1) a diagonálních škálovacích vektorů.</p>
<p>Pokud má původní matice rozměr m×n a rank rozkladu je r, potřebujete r×(m+n) binárních hodnot plus škálovací parametry. Při dostatečně nízkém r klesne průměrný počet bitů na váhu pod 1.0.</p>
<h3>Tříkrokový pipeline</h3>
<p>Komprese probíhá po blocích modelu (transformer block po bloku) ve třech krocích:</p>
<p><strong>Krok 1 — Mitigace propagace chyb.</strong> Kvantizační chyba se akumuluje, jak rekonstrukce postupuje sítí. Před kvantizací aktuálního bloku se jeho full-precision váhy doladí tak, aby kompenzovaly chyby zavedené kvantizací předchozích bloků. Tohle není nový nápad — podobný přístup používají i AQLM nebo QuIP — ale NanoQuant ho aplikuje na všechny lineární vrstvy v bloku, ne jen na vybrané.</p>
<p><strong>Krok 2 — Inicializace binární faktorizace (LB-ADMM).</strong> Tady je jádro celé metody. NanoQuant používá ADMM (Alternating Direction Method of Multipliers) pro řešení kombinatorického problému: jaká kombinace binárních matic a škálovacích faktorů nejlépe aproximuje původní váhy? ADMM iterativně střídá řešení dvou podproblémů — optimalizaci spojitých škálovacích parametrů (uzavřená forma, least-squares) a projekci na binární omezení (sign operace). Celý postup je &quot;Hessian-aware&quot;, tedy bere v úvahu citlivost výstupu na jednotlivé váhy.</p>
<p>Autoři experimentálně ukázali, že LB-ADMM inicializace překonává inicializační schémata z LittleBit i DBF. Jejich hypotéza: vyřešit kombinatorický problém binární faktorizace <em>před</em> fine-tuningem poskytuje stabilnější optimalizační krajinu než přístupy, které inicializaci řeší přibližně a spoléhají na to, že ji gradientová optimalizace dotáhne.</p>
<p>Po ADMM následuje magnitude balancing — vyrovnání škálovacích faktorů, aby binární matice měly vyvážený rozsah.</p>
<p><strong>Krok 3 — Zpřesnění faktorizovaných komponent.</strong> Po inicializaci se binární matice a škálovací faktory dolaďují pomocí Straight-Through Estimatorů (STE). STE je standardní trik pro gradientovou optimalizaci přes diskrétní operace — při zpětném průchodu se gradient sign funkce nahradí identitou. Toto zpřesnění probíhá lokálně na úrovni bloku, ne globálně.</p>
<p>Na závěr celého procesu přichází model-level rekonstrukce: lehká kalibrace škálovacích faktorů přes celý model pro lepší globální zarovnání aktivací.</p>
<hr />
<h2>Co znamená &quot;sub-1-bit&quot;</h2>
<p>Pojem sub-1-bit může znít jako protimluv — jak můžete mít méně než jeden bit informace na váhu? Odpověď je v tom, že nízko-rankový rozklad sdílí informaci mezi váhami. Binární matice v rozkladu jsou menší než původní váhová matice, takže celkový průměrný počet bitů na váhu (bits per weight, BPW) klesne pod 1.0.</p>
<p>NanoQuant demonstroval výsledky na 0.8 BPW, tedy méně než jeden bit na váhu v průměru. Při tomhle kompresním poměru samozřejmě dochází k degradaci kvality — ale ta je měřitelná a v kontextu 70B modelů stále překvapivě nízká.</p>
<hr />
<h2>Čísla</h2>
<p>Tady to přestává být akademické cvičení a začíná to být prakticky relevantní:</p>
<ul>
<li><strong>Llama2-70B:</strong> komprese ze 138,04 GB na 5,35 GB — kompresní poměr 25,8×</li>
<li><strong>Inference:</strong> kvantizovaný 70B model běží na spotřebitelské 8GB GPU rychlostí až 20,11 tokenů/s</li>
<li><strong>Kalibrace:</strong> 128 vzorků (~0,26M tokenů), 1 GPU</li>
<li><strong>Čas komprese:</strong> ~13 hodin na jednom H100 pro Llama2-70B</li>
<li><strong>CUDA kernely:</strong> autoři implementovali vlastní binární GEMV/GEMM kernely optimalizované pro datacenter, spotřebitelské i edge GPU</li>
</ul>
<p>Pro srovnání: Llama2-70B v FP16 vyžaduje minimálně 140 GB VRAM, tedy dvě A100 80GB. NanoQuant ho nacpe na jednu RTX 4060 s 8 GB.</p>
<p>Autoři testovali na rodinách modelů Llama2, Llama3, Qwen3 a dalších. Napříč modely NanoQuant vytváří novou Pareto frontu v prostoru komprese vs. kvalita — tedy pro danou úroveň komprese dosahuje lepší kvality než kterákoliv jiná PTQ metoda.</p>
<hr />
<h2>Kontext: co existuje kolem</h2>
<p>NanoQuant není v izolaci. Celá oblast sub-1-bit kvantizace LLM se v posledním roce výrazně zahustila:</p>
<p><strong>LittleBit</strong> (Samsung Research / NeurIPS 2025) — QAT metoda, která jde až na 0.1 BPW. Používá SVD-inspirovanou latentní faktorizaci s multi-scale kompenzací. Dosahuje skvělých výsledků, ale vyžaduje přetrénování.</p>
<p><strong>DBF / Double Binary Factorization</strong> (Boža &amp; Macko, 2025) — Rozkládá váhové matice na součin dvou binárních matic s diagonálním škálováním. Inference je efektivní (jen sčítání místo násobení), ale škálovací parametry jsou příliš omezené — všechny rankové komponenty sdílejí stejný magnitudový profil.</p>
<p><strong>MDBF / Multi-Envelope DBF</strong> (prosinec 2025) — Rozšíření DBF, které nahrazuje jednoduché škálování rank-l obálkou. Zlepšuje perplexitu i zero-shot přesnost oproti DBF při stejném BPW.</p>
<p><strong>BTC-LLM</strong> (květen 2025) — Používá naučitelné transformace a binární codebooky místo přímé binarizace.</p>
<p><strong>HBLLM</strong> — Waveletová dekompozice pro vylepšenou 1-bit kvantizaci s frekvence-aware seskupováním.</p>
<p>NanoQuant se od těchto metod odlišuje tím, že je čistě PTQ — nepotřebuje přetrénování — a přesto dosahuje konkurenceschopné kvality. To je prakticky zásadní rozdíl, protože PTQ můžete aplikovat na libovolný model bez přístupu k trénovacím datům nebo pipeline.</p>
<hr />
<h2>Současný stav projektu</h2>
<p>Na rovinu: k dnešnímu dni (duben 2026) je NanoQuant čerstvý research paper bez veřejně dostupného kódu.</p>
<ul>
<li><strong>Paper:</strong> publikován 6. února 2026 na arXiv, necelé dva měsíce starý</li>
<li><strong>Kód:</strong> zatím nevydaný. Autor na Hugging Face napsal: &quot;We are working on open-sourcing the code, so please stay tuned!&quot;</li>
<li><strong>Kvantizované modely / checkpointy:</strong> nejsou k dispozici. Na otázku po checkpointech autor zatím neodpověděl.</li>
<li><strong>Vlastní CUDA kernely:</strong> zmíněny v paperu, ale rovněž nejsou veřejné</li>
</ul>
<p>Jde o výzkum Samsung Research, takže open-source release může trvat déle kvůli interním schvalovacím procesům. Autor Hyochan Chong se v únoru 2025 vrátil do Samsung Research po dokončení studia a NanoQuant je jeden ze dvou paperů, které publikoval v únoru 2026 (druhý je RaBiT — 2-bit QAT metoda).</p>
<hr />
<h2>Co to znamená pro praxi</h2>
<p>Než se kód uvolní, NanoQuant zůstává akademický výsledek. Ale i jako takový naznačuje směr:</p>
<p><strong>Pro edge nasazení:</strong> Pokud se sub-1-bit formáty dostanou do mainstreamových inference frameworků (llama.cpp, vLLM, TensorRT-LLM), otevírá se možnost provozovat modely třídy 70B na hardware, kde dnes sotva běží 7B. To je relevantní pro kohokoliv, kdo provozuje lokální LLM inference na omezeném hardware — Raspberry Pi, jednočipové GPU, mobilní zařízení.</p>
<p><strong>Pro GGUF ekosystém:</strong> Zatím žádná podpora. NanoQuant vyžaduje vlastní binární CUDA kernely, takže integrace do llama.cpp by znamenala portovat tyhle kernely na CPU/Metal/Vulkan backendy. To není triviální, ale komunita kolem llama.cpp už v minulosti portovala i složitější formáty.</p>
<p><strong>Pro kvalitu vs. komprese trade-off:</strong> NanoQuant ukazuje, že Pareto fronta se posouvá. Před rokem byl sub-1-bit režim terra incognita pro PTQ. Teď máme měřitelné výsledky, které říkají, že 70B model komprimovaný na 5,35 GB stále dává rozumné výstupy. To mění kalkulaci pro deployment.</p>
<p>Stojí za to sledovat autorův profil a Samsung Research na Hugging Face. Jakmile se kód uvolní, bude to jeden z nejzajímavějších frameworků k otestování.</p>
<hr />
<h2>Reference a zdroje</h2>
<ul>
<li><strong>NanoQuant paper (arXiv):</strong> <a href="https://arxiv.org/abs/2602.06694">arxiv.org/abs/2602.06694</a></li>
<li><strong>Hugging Face paper page:</strong> <a href="https://huggingface.co/papers/2602.06694">huggingface.co/papers/2602.06694</a></li>
<li><strong>Samsung Research na Hugging Face:</strong> <a href="https://huggingface.co/SamsungResearch">huggingface.co/SamsungResearch</a></li>
<li><strong>Profil autora (Hyochan Chong):</strong> <a href="https://d7chong.github.io/">d7chong.github.io</a></li>
<li><strong>Blog-style summary (alphaXiv):</strong> <a href="https://www.alphaxiv.org/overview/2602.06694v1">alphaxiv.org/overview/2602.06694v1</a></li>
<li><strong>LittleBit (Samsung Research):</strong> <a href="https://research.samsung.com/blog/LittleBit-Ultra-Low-Bit-Quantization-via-Latent-Factorization">research.samsung.com/blog/LittleBit-Ultra-Low-Bit-Quantization-via-Latent-Factorization</a></li>
<li><strong>DBF — Double Binary Factorization:</strong> <a href="https://arxiv.org/abs/2505.11076">arxiv.org/abs/2505.11076</a></li>
<li><strong>MDBF — Multi-Envelope DBF:</strong> <a href="https://arxiv.org/abs/2512.24545">arxiv.org/abs/2512.24545</a></li>
<li><strong>BTC-LLM:</strong> <a href="https://arxiv.org/abs/2506.12040">arxiv.org/abs/2506.12040</a></li>
<li><strong>RaBiT (další paper od stejného autora):</strong> <a href="https://huggingface.co/papers?search=RaBiT+Residual-Aware+Binarization">huggingface.co/papers — RaBiT: Residual-Aware Binarization Training</a></li>
</ul>
<hr />
<p><em>Dokument vytvořen: Duben 2026</em></p>
<div class="pvc_clear"></div>
<p id="pvc_stats_2991" class="pvc_stats total_only  " data-element-id="2991" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img loading="lazy" decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F04%2F03%2Fnanoquant-post-training-kvantizace-llm-pod-hranici-jednoho-bitu%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/04/03/nanoquant-post-training-kvantizace-llm-pod-hranici-jednoho-bitu/">NanoQuant: Post-training kvantizace LLM pod hranici jednoho bitu</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Phreaking: Vzpomínky ze zlaté éry analogových linek</title>
		<link>https://www.hardwired.dev/2026/03/20/phreaking-vzpominky-ze-zlate-ery-analogovych-linek/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Fri, 20 Mar 2026 20:30:54 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Různé]]></category>
		<category><![CDATA[90. léta]]></category>
		<category><![CDATA[analogová telefonní síť]]></category>
		<category><![CDATA[analogové linky]]></category>
		<category><![CDATA[beige box]]></category>
		<category><![CDATA[black box]]></category>
		<category><![CDATA[blue box]]></category>
		<category><![CDATA[Captain Crunch]]></category>
		<category><![CDATA[česká hackerská scéna]]></category>
		<category><![CDATA[česká scéna]]></category>
		<category><![CDATA[darking]]></category>
		<category><![CDATA[DTMF]]></category>
		<category><![CDATA[hackerský underground]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[historie internetu]]></category>
		<category><![CDATA[linková manipulace]]></category>
		<category><![CDATA[modrá krabička]]></category>
		<category><![CDATA[phreaking]]></category>
		<category><![CDATA[red box]]></category>
		<category><![CDATA[retro computing]]></category>
		<category><![CDATA[retro technologie]]></category>
		<category><![CDATA[SOOM.cz]]></category>
		<category><![CDATA[SPT Telecom]]></category>
		<category><![CDATA[technická historie]]></category>
		<category><![CDATA[technická nostalgie]]></category>
		<category><![CDATA[telefonní budka]]></category>
		<category><![CDATA[telefonní budky]]></category>
		<category><![CDATA[telefonní karty]]></category>
		<category><![CDATA[telekomunikace]]></category>
		<category><![CDATA[underground]]></category>
		<category><![CDATA[Zdeněk Adamec]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2978</guid>

					<description><![CDATA[<p>Phreaking: Vzpomínky ze zlaté éry analogových linek Autor: 3qeX - Hesse Valentino Jsou věci, co se prostě nevytratí. Ani po &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/03/20/phreaking-vzpominky-ze-zlate-ery-analogovych-linek/">Phreaking: Vzpomínky ze zlaté éry analogových linek</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><h1>Phreaking: Vzpomínky ze zlaté éry analogových linek</h1>
<p><em>Autor: 3qeX - Hesse Valentino</em></p>
<hr />
<p>Jsou věci, co se prostě nevytratí. Ani po dvaceti letech. Vůně maziva z rozvaděče telefonní budky. Chlad kovu na šlicu. A ten moment, když po spojení žárovky s linkovými svorkami uslyšíš v improvizovaném sluchátku čistý oznamovací tón SPT Telecom. </p>
<p>Byl jsem phreaker. Tehdy jsem o tom věděl kulový - pár triků z pochybných webů s černým pozadím a bílým textem. Přesto to bylo dobrodružství, jaké dnešní generace asi nikdy nezažije.</p>
<p>Tohle není návod. Je to vzpomínka. Popis historických technik z doby, kdy analogová telefonní síť ještě žila a kdy výzvou bylo přelstít obří státní kolos jménem SPT Telecom.</p>
<hr />
<h2>Co je phreaking a kde se vzal</h2>
<p>Phreaking je manipulace s telefonními sítěmi - zneužívání technických vlastností analogové infrastruktury za účelem bezplatného volání, odposlechu nebo průzkumu skrytých funkcí ústředen. Termín vznikl v USA někdy kolem roku 1957 a jeho kořeny jsou propojeny s postavami, které se staly legendami hackerské kultury.</p>
<p>První slavný phreaker byl Joe Engressia, přezdívaný Joybubbles - nevidomý kluk se schopností dokonalé výšky sluchu. Zjistil, že když zapíská tón 2600 Hz do telefonního sluchátka, resetuje dálkové linkové spoje. Na tohle navázal John Draper - Captain Crunch - který přišel na to, že plastová píšťalka z cornflakes kapsy generuje přesně ten tón. Dálkové volání zdarma kamkoliv po světě bylo najednou možné za cenu cereálií. Absurdní, ale fungovalo to.</p>
<p>Z toho se zrodily legendární &quot;barevné krabičky&quot; - phreakerské přístroje pojmenované podle barev. Systém zavedli američtí phreakeři v 60. a 70. letech. Barvy sloužily jako kódové označení funkce v textových souborech šířených tajně na disketách a přes BBS sítě. Jména jako Steve Wozniak nebo Steve Jobs se v phreakerském undergroundu pohybovala dávno před tím, než spoluzaložili Apple.</p>
<hr />
<h2>Česká scéna: SPT Telecom a divoké devadesátky</h2>
<p>Do Česka phreaking přišel s jistým zpožděním, ale o to živěji. V 90. letech procházela naše telefonní síť schizofrenním stavem - část byla moderní digitální, ale obrovská část, zejména na menších městech a vesnicích, jela na starých analogových systémech Křemíková. </p>
<p>SPT Telecom vlastnil prakticky veškerou infrastrukturu a jeho ceny byly podle tehdejších standardů astronomické. Minuta hovoru do zahraničí stála majlant. Minuty na tehdy čerstvě spuštěné mobilní sítě NMT nebo GSM byly pro kluka ze základní školy naprosto nedostupné.</p>
<p>To byl živný půdorys pro phreaking. Fascinace systémem nebyla jen touha volat zadarmo - byl to pocit, že víte o síti něco, co by neměl vědět nikdo mimo telefonní techniky. Klíč k systému.</p>
<p>Za průkopníka české phreakerské scény se v undergroundu považoval &quot;Subber&quot;, který kolem roku 2006 provozoval weby věnované problematice. Ještě dříve, na přelomu milénia, kolovala jména jako &quot;Flash&quot; nebo &quot;Morpheus&quot;, kteří psali dlouhé manuály - tzv. Guides - formátem naprosto typickým pro dobu: bílý text na černém pozadí, spousta ASCII artu, žádné obrázky.</p>
<p>Zmínit se musí i Zdeněk Adamec, vystupující online pod nickem Satan nebo Satanic. Jeho webové stránky na tehdejším freehostingu byly rozcestníkem pro zájemce o &quot;zakázané vědomosti&quot; - ale jeho těžiště leželo primárně v darkingu, ne v phreakingu. O phreakingu publikoval jen několik málo článků, většinou překlady zahraničních manuálů.</p>
<p>Komunita se sdružovala v různě pojmenovaných skupinách - v undergroundu tehdy figurovala CIA (Czech Illegal Alliance) vedená Kill3rem a Subberem, ale i skupiny navázané na darkerskou scénu jako Darkers Group nebo RJ-11 Security Alliance. SOOM.cz pak od roku 2003 fungoval jako hlavní česky psaný portál věnující se bezpečnosti a phreakingu, a jeho fórum z roku 2005 je dnes historickým dokumentem živé komunity.</p>
<hr />
<h2>Boxy: barevná abeceda phreakingu</h2>
<p>Ústředním nástrojem světového phreakingu byly tzv. boxy - malá elektronická zařízení pojmenovaná podle barev. V Česku se většina z nich přizpůsobovala místní síti, nebo zůstávala spíše teorií. Přesto stojí za to si je projít.</p>
<h3>Blue Box (modrá krabička)</h3>
<p>Nejslavnější phreakerský nástroj vůbec. Generoval tón 2600 Hz, který v americké síti Ma Bell signalizoval volnou dálkovou linku. Po vyslání tohoto tónu do sluchátka mohl phreaker linku &quot;shodit&quot; a pomocí dalších MF tónů řídit přepojení kamkoliv na světě - zdarma.</p>
<p>V Česku fungovalo modré krabičce analogicky na starých tranzitních ústřednách, zejména u mezinárodních hovorů. Vytočilo se bezplatné číslo (linka poruch, operátora), vysílal se tón - a otevřenou linku šlo dále řídit. Se začátkem digitalizace ústředen na systémech EWSD a S12 přestala tato technika fungovat definitivně.</p>
<h3>Red Box (červená krabička)</h3>
<p>Zatímco modrá krabička útočila na dálkové linky, červená mířila na mincovní automaty. Telefonní automat komunikoval s ústřednou sériemi tónů signalizujících vhozené mince - každá nominální hodnota mince měla svou frekvenční signaturu. Červená krabička tyto tóny emulovala.</p>
<p>V praxi stačilo přiložit malý reproduktor ke sluchátku a přehrát nahrávku odpovídajících tónů. Ústředna si myslela, že automat přijal mince, a hovor povolila. SPT Telecom tento problém řešil filtrací - signály z mincovníku přestaly být přenášeny přes sluchátkový okruh a šly přímou servisní linkou.</p>
<h3>Black Box (černá krabička)</h3>
<p>Černá krabička se instalovala u příjemce hovoru, ne u volajícího. Fungovala na principu manipulace s napětím na lince.</p>
<p>Analogové ústředny detekovaly zvednuté sluchátko poklesem napětí na lince: v klidu bylo napětí zhruba -48 V, po zvednutí sluchátka kleslo pod -10 V - to byl signál pro zahájení účtování. Černá krabička vkládala do série s linkou rezistor nebo Zenerovu diodu tak, aby napětí nekleslo pod práh účtování (udržovalo se kolem -36 V). Zvonění se zastavilo, hovor byl navázán, ale ústředna ho nevyhodnotila jako přijatý - volající neplatil nic.</p>
<p>Tato technika fungovala výhradně na ústřednách řízených mechanickými relé. V Česku a ve střední Evropě obecně černé krabičky přežívaly až hluboko do 90. let díky pomalejší digitalizaci sítě.</p>
<h3>Beige Box (béžová krabička) - servisní sluchátko</h3>
<p>Toto byl v českém undergroundu prakticky nejpoužívanější nástroj a ten, se kterým jsem měl osobní zkušenost. Beige box je v podstatě to, co telefonní technici nazývají lineman's handset - servisní sluchátko s krokosvorkami.</p>
<p>Konstrukce byla prostá: starý telefon (ideálně vykuchaný fax), dva krokodýlci připojeni na červený a zelený vodič. Někdy se přidával přepínač mikrofonu pro tichý odposlech. Výsledkem byl přístroj za cenu šrotu, který vám umožnil připojit se přímo na svorkovnici telefonní linky kdekoliv v rozvaděči - bez ohledu na to, co na lince viselo za přístroj.</p>
<p>Výhoda sluchátka z faxu oproti běžnému telefonu: faxy měly v sobě kompletní elektroniku pro vytáčení a přepínač mezi pulzní (analogovou) a tónovou (DTMF) volbou, což bylo v devadesátkách klíčové - mnoho přístrojů ještě umělo jen pulzní volbu, ale ústředny nebo bankovní automaty vyžadovaly DTMF.</p>
<p><a href="https://www.hardwired.dev/wp-content/uploads/2026/03/Homemade_BeigeBox.avif"><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2026/03/Homemade_BeigeBox-225x300.avif" alt="" /></a></p>
<h3>Mauve Box (fialová krabička) - hudba do linky</h3>
<p>Méně známý, ale technicky zajímavý byl tzv. mauve box. Sloužil k přimíchání externího audio signálu - hudby nebo jiného zvuku - do probíhajícího hovoru. Zapojoval se do série s linkou a obsahoval oddělovací transformátor zabraňující poškození elektroniky.</p>
<p>Praktické využití v českém undergroundu bylo dvojí: vytváření primitivních konferenčních hovorů přes propojení kazeťáku s linkou, nebo pouštění hudby do sluchátka volané osoby. Zvláštní využití spočívalo v maskování prostředí - přehrávání nahrávky hluku ulice mělo zakrýt, že voláte z místa, ze kterého volat nemáte.</p>
<hr />
<h2>Žárovka a šlic: technika z telefonní budky</h2>
<p>Tohle byl trik, který mi nedal spát. Přečetl jsem o něm kdesi na webu a nedalo mi to, dokud jsem ho nevyzkoušel. </p>
<p>Spodní část telefonní budky SPT Telecom - tzv. šlic nebo rozvaděč - obsahovala svorkovnici, na které končily linkové vodiče budky ještě před samotným mincovním automatem.</p>
<p>Telefonní linka v klidu nesla stejnosměrné napětí přibližně 48 V. Ve chvíli, kdy ústředna zaregistrovala pokles napětí způsobený zdvižením sluchátka (off-hook stav), otevřela linku a poslala oznamovací tón. Mincovní automat přitom ale měl vlastní elektroniku, která řídila účtování - čekala na vhození karty nebo mince, teprve pak povolila vytáčení.</p>
<p>Trik spočíval v připojení žárovky na 24 V přímo na svorky a a b linky v rozvaděči. Proč zrovna 24V žárovka? Žhavicí vlákno takové žárovky má při provozu odpor přizpůsobený napájení 24 V - při 48 V na telefonní lince jím protéká proud, který způsobí pokles napětí do rozmezí přibližně 20-30 V. Tento pokles byl pro starší analogové ústředny dostačující k detekci off-hook stavu, takže ústředna linku otevřela a zaslala oznamovací tón.</p>
<p>Klíčový detail: automat zůstával fyzicky zavěšen. Jeho vlastní elektronika vůbec nevěděla, že na lince cosi probíhá. Žárovka simulovala zátěž &quot;pro ústřednu&quot; - ale mincovní mechanismus zůstával zcela mimo hru.</p>
<p>Žárovka navíc poskytovala velmi praktickou vizuální zpětnou vazbu: ve chvíli, kdy se linka správně otevřela, začala mírně svítit. To byl váš signál připojit beige box - servisní sluchátko s krokosvorkami - přímo ke svorkám vedle žárovky. Oznamovací tón v sluchátku potvrdil, že máte přístup k lince a můžete vytáčet libovolné číslo. Volal jste přímo přes ústřednu SPT Telecom - na účet té konkrétní linky budky.</p>
<p>Tato technika zanikla s přechodem ústředen na digitální přepínaní (EWSD, S12). Digitální ústředny nestačí oklamat pouhým poklesem napětí - aktivně monitorují stav linky a rozlišují typ připojeného zařízení. Navíc fyzická ochrana šliců se v pozdějších 90. letech výrazně zlepšila.</p>
<hr />
<h2>DTMF dialery a další triky</h2>
<p>Paralelně s hardwarovými boxy existovaly i jednodušší, ale neméně užitečné nástroje.</p>
<p>DTMF dialer - malý kapesní přístroj s klávesnicí - byl původně legální pomůcka pro dálkové ovládání záznamníků. Phreakeři ho přeložili ke sluchátku a pomocí tónové volby ovládali hlasová menu ústředen nebo systémy, které vyžadovaly DTMF, ale dostupný telefon uměl jen pulzní volbu.</p>
<p>Telefonní karty SPT Telecom přinesly vlastní podmnožinu phreakingu. Čipové karty byly terčem pokusů o obejití zápisového kontaktu - fyzickým naříznutím nebo přelepením určitého kontaktu na čipu se znemožnil zápis spotřeby, zatímco čtení jednotek fungovalo normálně. Pokročilejší varianta: mikrokontrolerové emulátory na bázi PIC čipů, schopné simulovat chování originální karty s neomezeným kreditem.</p>
<p>Přesměrování přes firemní ústředny (PBX hacking) bylo kapitolou pro sebe. Špatně zabezpečené firemní ústředny - zejména ty staršího data - umožňovaly přístup z veřejné linky přes servisní tónové příkazy. Phreaker se &quot;vloupat&quot; do ústředny a skrze ni volat na libovolné zahraniční číslo - na účet dané firmy.</p>
<h2><a href="https://www.hardwired.dev/wp-content/uploads/2026/03/40802987091_3fec48466a_h.avif"><img loading="lazy" decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2026/03/40802987091_3fec48466a_h-300x169.avif" alt="" width="300" height="169" class="size-medium wp-image-2982" srcset="https://www.hardwired.dev/wp-content/uploads/2026/03/40802987091_3fec48466a_h-300x169.avif 300w, https://www.hardwired.dev/wp-content/uploads/2026/03/40802987091_3fec48466a_h-1024x576.avif 1024w, https://www.hardwired.dev/wp-content/uploads/2026/03/40802987091_3fec48466a_h-768x432.avif 768w, https://www.hardwired.dev/wp-content/uploads/2026/03/40802987091_3fec48466a_h-1536x864.avif 1536w, https://www.hardwired.dev/wp-content/uploads/2026/03/40802987091_3fec48466a_h.avif 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> </h2>
<h2>Darking: ryze česká odnož</h2>
<p>Phreaking v České republice nelze vyprávět bez zmínky o darkingu - fenoménu, který je ryze českou specialitou a v okolních zemích prakticky neexistoval.</p>
<p>Darking vznikl kolem roku 2001 v prostředí, kde se phreaking prolínal s průzkumem technické infrastruktury. Darkeři se zaměřovali na rozvaděče elektrického vedení, vypínání veřejného osvětlení, průzkum podzemních prostor a obecně na technický vandalismus v hraničních zónách zákona. Výraznou postavou byl Zdeněk Adamec (online alias Satan), jehož web byl komunitním rozcestníkem.</p>
<p>Darkerská komunita se sdružovala ve skupinách jako Darkers Group No. 1 (s buňkami v Ústí nad Labem a Kutné Hoře) nebo RJ-11 Security Alliance. Adamcova tragická smrt v březnu 2003 - sebevražda upálením u Národního muzea jako protest proti stavu světa - symbolicky uzavřela nejintenzivnější kapitolu tohoto hnutí.</p>
<hr />
<h2>Zánik scény a právní aspekty</h2>
<p>Konec tradičního phreakingu přišel ze dvou stran najednou.</p>
<p>Za prvé: technologie. Digitalizace ústředen na systémech EWSD a S12 postupně eliminovala techniky závislé na analogovém chování linek. Čipové telefonní karty s kryptografickým zabezpečením nahradily starší zranitelné typy. Mobilní telefony s předplacenými kartami (Twist, Go, Oskarta) udělaly z hledání funkčních budek naprostou zbytečnost - proč trávit hodinu u rozvaděče, když máte předplacenou kartu za stokorunu?</p>
<p>Za druhé: legislativa. Phreaking je v České republice trestná činnost. Podle §230 trestního zákoníku se jedná o neoprávněný přístup k počítačovému systému a nosiči informací, v širším smyslu pak pod porušení tajemství dopravovaných zpráv (§182). Přesto je zajímavé, že dle dostupných informací nebyl v ČR nikdo za phreaking formálně odsouzen - scéna byla příliš malá (Subber odhadoval počet aktivních phreakerů na cca 50), příliš rozptýlená a způsobené škody nikdy nedosáhly astronomických čísel.</p>
<hr />
<h2>Závěr: klíč, který přestal pasovat</h2>
<p>Pamatuji si ten pocit. Stát u telefonní budky, v kapse mít sluchátko vyrobené ze starého faxu, v druhé ruce žárovku s dvěma vodiči zakončenými krokosvorkami. Celá situace vypadala absurdně - a přece fungovala.</p>
<p>Fascinace phreakingem nikdy nebyla jen o bezplatném volání. Byl to průzkum systému, touha pochopit, jak věci skutečně fungují pod povrchem toho, co běžný uživatel vůbec nevidí. Telefonní síť tehdy působila jako černá skříňka - a přijít na to, jak se dovnitř podívat, byl svým způsobem malý triumf.</p>
<p>Dnes ta síť neexistuje. Měděné páry v zemi stále jsou, ale hovory dávno cestují jako datové pakety přes optiku a internet. Žárovka na 24 V by v šlicu moderní budky způsobila leda poplach v monitorovacím centru operátora. SPT Telecom se proměnil v O2, budky z ulic prostě zmizely.</p>
<p>Zůstávají jen vzpomínky. A možná tenhle článek.</p>
<p><em>— 3qeX</em></p>
<hr />
<p><em>Poznámka: Tento článek popisuje historické techniky z dob analogové telefonní sítě. Phreaking je v České republice nelegální činnost dle §230 a §182 trestního zákoníku. Veškeré popisované techniky jsou dnes nefunkční nebo obtížně aplikovatelné na moderní digitální infrastrukturu.</em></p>
<div class="pvc_clear"></div>
<p id="pvc_stats_2978" class="pvc_stats total_only  " data-element-id="2978" style=""><i class="pvc-stats-icon small" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img loading="lazy" decoding="async" width="16" height="16" alt="Loading" src="https://www.hardwired.dev/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F03%2F20%2Fphreaking-vzpominky-ze-zlate-ery-analogovych-linek%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/03/20/phreaking-vzpominky-ze-zlate-ery-analogovych-linek/">Phreaking: Vzpomínky ze zlaté éry analogových linek</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
