<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Notes on MDT - Personal site</title><link>https://detafti.ir/en/notes/</link><description>Recent content in Notes on MDT - Personal site</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://detafti.ir/en/notes/index.xml" rel="self" type="application/rss+xml"/><item><title>Liveness is not health</title><link>https://detafti.ir/en/notes/k8s-liveness-vs-readiness/</link><pubDate>Fri, 11 Sep 2026 17:20:00 +0330</pubDate><guid>https://detafti.ir/en/notes/k8s-liveness-vs-readiness/</guid><description>&lt;p>The worst Kubernetes outage I keep seeing is not a node dying. It is a slow database, a liveness probe that talks to that database, and a cluster that then kills every pod that was still doing useful work.&lt;/p>
&lt;p>Liveness does not mean “the app is healthy.” It means “this process is so stuck that Kubernetes should shoot it.” If you point that gun at a dependency, you will shoot the fleet.&lt;/p></description></item><item><title>Spring @Transactional does not mean what you think</title><link>https://detafti.ir/en/notes/spring-transactional-in-production/</link><pubDate>Fri, 11 Sep 2026 17:10:00 +0330</pubDate><guid>https://detafti.ir/en/notes/spring-transactional-in-production/</guid><description>&lt;p>In review I still see &lt;code>@Transactional&lt;/code> used as a blessing: put it on a method, and the database will behave. It will not. Spring starts a transaction when a &lt;strong>proxy&lt;/strong> intercepts an incoming call. If the call never hits the proxy, you have no transaction, no rollback, and a very confusing production bug.&lt;/p>
&lt;h2 id="what-i-believed--what-i-do-now">What I believed → what I do now&lt;/h2>
&lt;p>I used to sprinkle &lt;code>@Transactional&lt;/code> on every service method “to be safe.” I now put it on the one method that is the use-case boundary, I write a test that proves rollback, and I treat same-class private calls as a smell.&lt;/p></description></item><item><title>Java, Spring, Kubernetes</title><link>https://detafti.ir/en/notes/java-spring-kubernetes/</link><pubDate>Fri, 11 Sep 2026 17:00:00 +0330</pubDate><guid>https://detafti.ir/en/notes/java-spring-kubernetes/</guid><description>&lt;p>A map of how I actually run backend software: Java on the JVM, Spring as the application layer, Kubernetes as the place it lives. Start here, then open the note that matches the problem in front of you.&lt;/p>
&lt;p>This is not a tutorial index. It is the order I would walk a teammate through after an incident.&lt;/p>
&lt;h2 id="if-you-are-new-here">If you are new here&lt;/h2>
&lt;ol>
&lt;li>&lt;a href="https://detafti.ir/en/notes/spring-transactional-in-production/">Spring &lt;code>@Transactional&lt;/code> does not mean what you think&lt;/a> — where transactions actually start, and why a method calling another method on &lt;code>this&lt;/code> silently does nothing.&lt;/li>
&lt;li>&lt;a href="https://detafti.ir/en/notes/k8s-liveness-vs-readiness/">Liveness is not health&lt;/a> — the Kubernetes outage that looks like a crash loop but started as a slow dependency.&lt;/li>
&lt;li>&lt;a href="https://detafti.ir/en/notes/reliability-lessons-from-sqlite/">Reliability lessons from SQLite&lt;/a> — why a tool that solves more problems than it creates stays in production.&lt;/li>
&lt;/ol>
&lt;p>The &lt;a href="https://detafti.ir/en/courses/java/">Java course&lt;/a> is the longer path if you want to write this stack with me, not only read about it.&lt;/p></description></item><item><title>Reliability Lessons From SQLite</title><link>https://detafti.ir/en/notes/reliability-lessons-from-sqlite/</link><pubDate>Fri, 28 Aug 2026 10:56:00 +0330</pubDate><guid>https://detafti.ir/en/notes/reliability-lessons-from-sqlite/</guid><description>&lt;p>Talk from &lt;a href="https://www.youtube.com/watch?v=V_qzqY1bb7I">SSW 2026&lt;/a>.&lt;/p>
&lt;h2 id="takeaways">Takeaways&lt;/h2>
&lt;ul>
&lt;li>SQLite is used so much because it solves more problems than it creates.&lt;/li>
&lt;/ul>
&lt;h2 id="notes">Notes&lt;/h2>
&lt;ul>
&lt;li>DO-178B
Software considerations in Airbone Systems and Equipment Certification&lt;/li>
&lt;/ul>
&lt;p>it leads to create Fossil: Better Project Management
MC/DC&lt;/p></description></item><item><title>Example: video note</title><link>https://detafti.ir/en/notes/example-video/</link><pubDate>Fri, 28 Aug 2026 10:00:00 +0330</pubDate><guid>https://detafti.ir/en/notes/example-video/</guid><description>&lt;p>This is a starter video note. Copy it, or delete it once you add your own.&lt;/p>
&lt;p>Use &lt;code>note_type = &amp;quot;video&amp;quot;&lt;/code> and put the YouTube URL in &lt;code>source&lt;/code> so the video embeds at the top. Headings like &lt;code>12:40&lt;/code> make timestamped notes easy to scan.&lt;/p>
&lt;h2 id="takeaways">Takeaways&lt;/h2>
&lt;ul>
&lt;li>The browser event loop is a queue: JavaScript runs one thing at a time, then picks the next callback.&lt;/li>
&lt;li>Rendering and I/O are not the same queue as your JS callbacks.&lt;/li>
&lt;li>&lt;code>setTimeout(fn, 0)&lt;/code> does not run immediately; it waits until the current stack is clear.&lt;/li>
&lt;/ul>
&lt;h2 id="notes">Notes&lt;/h2>
&lt;h3 id="0115--call-stack">01:15 — Call stack&lt;/h3>
&lt;p>JS is single-threaded. Each function call is pushed onto the stack and popped when it returns.&lt;/p></description></item><item><title>Example: book note</title><link>https://detafti.ir/en/notes/example-book/</link><pubDate>Thu, 27 Aug 2026 10:00:00 +0330</pubDate><guid>https://detafti.ir/en/notes/example-book/</guid><description>&lt;p>This is a starter book note. Copy it, or delete it once you add your own.&lt;/p>
&lt;p>Use &lt;code>note_type = &amp;quot;book&amp;quot;&lt;/code>, &lt;code>creator&lt;/code> for the author, and one heading per chapter. Set &lt;code>status&lt;/code> to &lt;code>in-progress&lt;/code> while you are still reading.&lt;/p>
&lt;h2 id="takeaways">Takeaways&lt;/h2>
&lt;ul>
&lt;li>Reliability, scalability, and maintainability are the three reasons we bother with data systems.&lt;/li>
&lt;li>There is no single storage engine that is best for every access pattern.&lt;/li>
&lt;li>Replication and partitioning are separate problems; most systems need both.&lt;/li>
&lt;/ul>
&lt;h2 id="chapter-1--reliable-scalable-and-maintainable-applications">Chapter 1 — Reliable, Scalable, and Maintainable Applications&lt;/h2>
&lt;p>Reliability means the system keeps working when things go wrong, not only in the happy path.&lt;/p></description></item></channel></rss>