<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Build-Logs on Alexey Panfilov — Product, AI, Systems</title><link>https://dzarlax.dev/rs/tags/build-logs/</link><description>Recent content in Build-Logs on Alexey Panfilov — Product, AI, Systems</description><generator>Hugo</generator><language>rs</language><lastBuildDate>Sat, 23 May 2026 14:19:10 +0200</lastBuildDate><atom:link href="https://dzarlax.dev/rs/tags/build-logs/index.xml" rel="self" type="application/rss+xml"/><item><title>Pokušao sam da napravim prevodilac za blog. Na kraju sam napravio sistem provera.</title><link>https://dzarlax.dev/rs/articles/poku%C5%A1ao-sam-da-napravim-prevodilac-za-blog.-na-kraju-sam-napravio-sistem-provera./</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/poku%C5%A1ao-sam-da-napravim-prevodilac-za-blog.-na-kraju-sam-napravio-sistem-provera./</guid><description>&lt;p&gt;Počeo sam sa jednostavnom željom: imao sam engleske članke na dzarlax.dev, i želeo sam rusku i srpsku verziju bez toga da svaki post pretvorim u projekat za vikend.&lt;/p&gt;
&lt;p&gt;Na prvi pogled sve je delovalo kao nešto što može da se automatizuje. Izvorni tekst je već bio u Markdown formatu. Sajt je već imao rutiranje prilagođeno jeziku. Pišem u Obsidian vaultu. Paketi članaka su predvidivi:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;articles/&amp;lt;slug&amp;gt;/index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;articles/&amp;lt;slug&amp;gt;/index.ru.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;articles/&amp;lt;slug&amp;gt;/index.rs.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Zato je početno pitanje zvučalo tehnički: koji model za prevođenje da koristim?&lt;/p&gt;</description></item><item><title>Health Dashboard, 1. deo: ocena kojoj mogu da verujem</title><link>https://dzarlax.dev/rs/articles/health-dashboard-1.-deo-ocena-kojoj-mogu-da-verujem/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/health-dashboard-1.-deo-ocena-kojoj-mogu-da-verujem/</guid><description>&lt;p&gt;Ovo je prvi deo serije o izgradnji mog self-hosted Health Dashboard-a. Prva verzija nije bila metodološki projekat. Bila je to cev: uzmi podatke iz Apple Health-a, pošalji ih POST zahtevom na moj server i ujutru prikaži ocenu.&lt;/p&gt;
&lt;p&gt;Zvuči čisto i jednostavno — sve dok prva loša noć podataka ne završi u Postgres-u. Ocena zdravlja je pouzdana samo onoliko koliko je pouzdana ingestion putanja ispod nje. Rana verzija ovog sistema uglavnom me je toj lekciji učila na teži način.&lt;/p&gt;</description></item><item><title>Health Dashboard, 2. deo: izvan granica Health Auto Export-a</title><link>https://dzarlax.dev/rs/articles/health-dashboard-2.-deo-izvan-granica-health-auto-export-a/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/health-dashboard-2.-deo-izvan-granica-health-auto-export-a/</guid><description>&lt;p&gt;U 1. delu server je naučio da prima merenja bez gubitka podataka i da ponovo izgradi svaku izvedenu tabelu iz sirovih podataka. To je bilo dovoljno da dashboard postane koristan. Ali nije bilo dovoljno da podaci postanu pošteni.&lt;/p&gt;
&lt;p&gt;Ovaj deo govori o trenutku kada eksterni exporter više nije bio dovoljan kao samostalan ingestion path, i o dve regresije koje su se pojavile kada sam pored njega dodao sopstveni iOS klijent. Health Auto Export i dalje šalje podatke na server. Endpoint &lt;code&gt;/health&lt;/code&gt; prima oba izvora, a code path koji parsira HAE payload-e i dalje se održava. „Izlazak iz granica“ u naslovu odnosi se na ograničenja HAE-a, a ne na njegovo slanje u penziju.&lt;/p&gt;</description></item><item><title>Health Dashboard, 3. deo: moji nosivi uređaji lagali su prećutkivanjem</title><link>https://dzarlax.dev/rs/articles/health-dashboard-3.-deo-moji-nosivi-ure%C4%91aji-lagali-su-pre%C4%87utkivanjem/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/health-dashboard-3.-deo-moji-nosivi-ure%C4%91aji-lagali-su-pre%C4%87utkivanjem/</guid><description>&lt;p&gt;Posle 2. dela ingestion sloj izgleda čisto. Server prima payload-e, nativni iOS klijent radi uz Health Auto Export, šema zna za san po segmentima, dashboard prikazuje pet faza sna. Deluje kao da je gotovo. Nije.&lt;/p&gt;
&lt;p&gt;Sledeća klasa problema postala je vidljiva tek pošto su podaci postali tehnički korektni. Svake noći imam &lt;strong&gt;tri uređaja&lt;/strong&gt; koja mogu nešto da kažu o mom snu: Apple Watch na zglobu, RingConn&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; na prstu i iPhone pored kreveta, koji koristi Apple-ovu procenu Sleep Schedule. Svaki zna nešto što ostali ne znaju. I nijedan se ne slaže sa ostalima oko toga šta je tačno izmerio.&lt;/p&gt;</description></item><item><title>Health Dashboard, 4. deo: kada readiness prestane da bude jedan broj</title><link>https://dzarlax.dev/rs/articles/health-dashboard-4.-deo-kada-readiness-prestane-da-bude-jedan-broj/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/health-dashboard-4.-deo-kada-readiness-prestane-da-bude-jedan-broj/</guid><description>&lt;p&gt;U 1. delu opisao sam originalni readiness score:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;readiness = HRV_score * 0.40 + RHR_score * 0.30 + Sleep_score * 0.30
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bio je to koristan broj. Svakog jutra mi je govorio da li nešto u podacima od prethodne noći izgleda neobično u odnosu na moj lični baseline. A onda se ispostavilo da meri pogrešnu stvar.&lt;/p&gt;
&lt;p&gt;Ovaj deo je o auditu koji je to otkrio, redizajnu koji je iz njega nastao i trenutku kada se Faza 1 zatvorila bez ijednog modela koji bi pobedio svoj naivni baseline po kriterijumu postavljenom unapred.&lt;/p&gt;</description></item><item><title>Health Dashboard, 5. deo: problem EnergyBank-a</title><link>https://dzarlax.dev/rs/articles/health-dashboard-5.-deo-problem-energybank-a/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/health-dashboard-5.-deo-problem-energybank-a/</guid><description>&lt;p&gt;U 4. delu audit je oborio readiness formulu i izvukao paralelni nalaz: EnergyBank v1 je imao pogrešan znak korelacije sa HRV&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; sledećeg dana (r=−0.149) i RHR&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; sledećeg dana (r=+0.212) na 387 uparenih dana.&lt;/p&gt;
&lt;p&gt;Pogrešan znak korelacije je jaka tvrdnja. To znači da je sama ideja živa, ali je target bio pogrešno postavljen: ono što je v1 merio verovatno je bilo &lt;em&gt;productive strain&lt;/em&gt;, a ne &lt;em&gt;recovery deficit&lt;/em&gt;. Ta dva pokazatelja koreliraju mnogih dana i razilaze se upravo tamo gde je najvažnije: tokom tihog, ali anksioznog dana, tokom bolesti ili kada sat nije na zglobu.&lt;/p&gt;</description></item><item><title>Health Dashboard, 6. deo: meriti stres bez samozavaravanja</title><link>https://dzarlax.dev/rs/articles/health-dashboard-6.-deo-meriti-stres-bez-samozavaravanja/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/health-dashboard-6.-deo-meriti-stres-bez-samozavaravanja/</guid><description>&lt;p&gt;U 5. delu redizajn EnergyBank-a ostavio je placeholder: &lt;code&gt;drain = α · active_kcal + β · sustained_hr_load&lt;/code&gt;, gde je &lt;code&gt;β = 0&lt;/code&gt; dok per-user validation rubric ne vrati &lt;code&gt;validated&lt;/code&gt;. Taj član jednačine — drain od autonomic load — pripada v2.2. I upravo sa njim sam želeo da budem posebno oprezan, jer je „stres“ najviše preobećavana metrika u consumer health-u.&lt;/p&gt;
&lt;p&gt;Ovaj deo je o tome šta stres uopšte znači fiziološki, šta moji podaci mogu i ne mogu da kažu o njemu, zašto je očigledna formula bila pogrešna i čemu služi validation rubric.&lt;/p&gt;</description></item><item><title>Health Dashboard, 7. deo: aplikacija koja je prestala da računa</title><link>https://dzarlax.dev/rs/articles/health-dashboard-7.-deo-aplikacija-koja-je-prestala-da-ra%C4%8Duna/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/health-dashboard-7.-deo-aplikacija-koja-je-prestala-da-ra%C4%8Duna/</guid><description>&lt;p&gt;Prvih šest delova ove serije bilo je o tome kako server uči da ima sopstvena mišljenja. Ingestion gates, identitet izvora, eligibility za sub-scores, granice verzija formula, validation rubrics — svaki sloj zaslužio je pravo da izda broj. Kada je taj posao bio završen, sa druge strane žice otvorilo se novo pitanje: šta iOS klijentu uopšte sme da radi sa tim brojevima?&lt;/p&gt;
&lt;p&gt;Odgovor je ispao uži nego što sam očekivao na početku. Najzanimljiviji deo izgradnje mobilne aplikacije nije bio ono što je u nju dodato. Bio je ono što je iz nje iznova i iznova &lt;em&gt;brisano&lt;/em&gt;, dok je server učio da svaku stvar radi bolje.&lt;/p&gt;</description></item><item><title>Health Dashboard, 8. deo: prvo pitati, pa govoriti</title><link>https://dzarlax.dev/rs/articles/health-dashboard-8.-deo-prvo-pitati-pa-govoriti/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/health-dashboard-8.-deo-prvo-pitati-pa-govoriti/</guid><description>&lt;p&gt;U 6. delu formulisano je pravilo: subjective input ne može da potvrdi formulu za stres. To pravilo ostaje na snazi. Formula koja se automatski podešava na user self-report postaje zatvorena petlja bez spoljne reference. Korisnik racionalizuje post-hoc, formula se ažurira ka toj racionalizaciji, a sledeći krug samoizveštavanja biva iskrivljen prethodnim rezultatom formule. Lek je držati rubric spoljašnjom: HRV sledećeg jutra, pomeraj RHR, arhitektura sna. Brojevi koje korisnik ne zapisuje svesno.&lt;/p&gt;</description></item><item><title>Kako sam zamenio menadžer obeleživača od 1,3 GB alatom od 17 MB</title><link>https://dzarlax.dev/rs/articles/kako-sam-zamenio-menad%C5%BEer-obele%C5%BEiva%C4%8Da-od-13-gb-alatom-od-17-mb/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://dzarlax.dev/rs/articles/kako-sam-zamenio-menad%C5%BEer-obele%C5%BEiva%C4%8Da-od-13-gb-alatom-od-17-mb/</guid><description>&lt;hr&gt;
&lt;p&gt;Neko vreme sam zatvarao oči pred tim: svaki put kada bih pogledao &lt;code&gt;docker stats&lt;/code&gt; na svom Hetzner VPS-u, Karakeep je ubedljivo bio najteži kontejner. Mašina sa 7,6 GB RAM-a, 25 servisa — i jedna Node aplikacija koja drži &lt;strong&gt;1,32 GB&lt;/strong&gt; rezidentne memorije za ono što je, u mom slučaju, bio samo nabudženi spisak linkova sa screenshotovima.&lt;/p&gt;
&lt;p&gt;Dostupne memorije ostalo je &lt;strong&gt;1,4 GB&lt;/strong&gt;, swap je bio zakucan na 2,0 / 2,0 GB, a Postgres sa limitom od 768 MB stizao je do 61% iskorišćenosti. Ništa nije gorelo, ali rezerva je prestala da deluje kao rezerva.&lt;/p&gt;</description></item></channel></rss>