-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
96 lines (91 loc) · 14.7 KB
/
index.xml
File metadata and controls
96 lines (91 loc) · 14.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>@JvmName("Parth")</title><link>https://jvmname.dev/</link><description>Recent content on @JvmName("Parth")</description><generator>Hugo</generator><language>en</language><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Thu, 06 Nov 2025 14:39:15 -0800</lastBuildDate><atom:link href="https://jvmname.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Tailscale device names in Pi-hole</title><link>https://jvmname.dev/posts/2025/11/tailscale-device-names-in-pi-hole/</link><pubDate>Thu, 06 Nov 2025 14:39:15 -0800</pubDate><guid>https://jvmname.dev/posts/2025/11/tailscale-device-names-in-pi-hole/</guid><description><p>I run Tailscale and Pi-hole on a small Odroid C2 SBC<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. While perusing my Pi-hole&rsquo;s DNS query log, I noticed that
all my Tailscale clients (which use
my <a href="https://tailscale.com/kb/1114/pi-hole#step-4-set-raspberry-pi-as-the-dns-server-for-your-tailnet">Pi-hole for DNS</a>)
appeared as IP addresses (<code>100.x.y.z</code>) rather than device names. This makes tracking <em>what actual device</em>
made the query nearly impossible. Fortunately, the solution is pretty uncomplicated!</p>
<h1 id="local-clients-x-pi-hole">Local Clients x Pi-Hole</h1>
<p>If your Pi-hole is already your network&rsquo;s canonical DHCP
server (<a href="https://discourse.pi-hole.net/t/how-do-i-use-pi-holes-built-in-dhcp-server-and-why-would-i-want-to/3026">and it should be!</a>),
then all your local devices will have a hostname within the Pi-hole console. However, that hostname might be useless –
for example, my Google TV announced
itself by the excellent and memorable name <code>HS105</code> 🤦🏾♂️</p></description></item><item><title>Claude's Flattery and Pessimistic Prompting</title><link>https://jvmname.dev/posts/2025/09/claudes-flattery-and-pessimistic-prompting/</link><pubDate>Fri, 12 Sep 2025 11:13:04 -0700</pubDate><guid>https://jvmname.dev/posts/2025/09/claudes-flattery-and-pessimistic-prompting/</guid><description><p>I&rsquo;ve been interviewing for a new role recently! Unlike the last time I was on the market, there&rsquo;s fun new AI
tooling to help me.</p>
<p>I&rsquo;ve been pretty impressed with Claude and Claude Codes (CC) – it&rsquo;s been incredibly helpful for banal things like
debugging a SQL <code>CREATE VIEW</code> and batch-editing 25+ <code>build.gradle</code> files. It&rsquo;s also great for code review, but it&rsquo;s also
dangerous: even when I thought I was being careful, it was easy for a skeptical, vigilant, and strikingly handsome
(Claude said so!) developer like myself to be lulled into a false sense of security about my code.</p></description></item><item><title>Your YAML could be DRYer</title><link>https://jvmname.dev/posts/2021/06/your-yaml-could-be-dryer/</link><pubDate>Thu, 24 Jun 2021 16:09:41 -0400</pubDate><guid>https://jvmname.dev/posts/2021/06/your-yaml-could-be-dryer/</guid><description><p>Github Actions are the go-to continuous integration tool for plenty of reasons - chief among them: first-party support with Github, pretty decent performance, and relatively cheap runner instances.</p>
<p>However, one place Github Actions has fallen short relative to other YAML-based players in the space (namely CircleCI) has been the inability to <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a> up the YAML config files.</p>
<p>However, with a cool new <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> feature called Composite Run Steps, your repeated shell script invocations can now happily live in a separate YAML file!</p></description></item><item><title>Don't Worry, Just Launch</title><link>https://jvmname.dev/posts/2021/01/dont-worry-just-launch/</link><pubDate>Mon, 11 Jan 2021 00:01:19 -0500</pubDate><guid>https://jvmname.dev/posts/2021/01/dont-worry-just-launch/</guid><description><p>I&rsquo;ve been writing Kotlin code for nearly 20% of my professional programming life! I wrote my first scrap of Kotlin in roughly mid-2018, and transitioned to writing full-time production Kotlin in mid-2019. Ever since then, I&rsquo;ve been on the Kotlin train 100%.<br>
Despite all that Kotlin experience, the new <a href="https://play.google.com/store/apps/details?id=com.hatchcard.android">Hatch Credit Android app</a> (launching Q1-2021✨) is the first time I&rsquo;ve used 100% coroutines in production code, so I still write some dumb code sometimes.</p></description></item><item><title>Static in Kotlin</title><link>https://jvmname.dev/posts/2020/06/static-in-kotlin/</link><pubDate>Tue, 23 Jun 2020 16:42:26 -0700</pubDate><guid>https://jvmname.dev/posts/2020/06/static-in-kotlin/</guid><description><hr>
<p><em>ed. note:</em> This blog post was written in June 2020, when Kotlin 1.3.72 was in production. It&rsquo;s possible the Kotlin compiler has gotten smarter since then!</p>
<hr>
<p>My <a href="https://www.hatchcard.com/">current company</a> uses Kotlin for the backend services, so naturally we use the most standard of JVM logging setups: <a href="http://www.slf4j.org/">SLF4J</a> + <a href="http://logback.qos.ch/">Logback</a>.</p>
<p>From my old-timey Java days, I know that the idiomatic way to set up an SLF4J logger is like so:</p>
<div class="highlight"><pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#ff5c57">public</span> <span style="color:#ff5c57">class</span> <span style="color:#f3f99d">Direction</span> {
</span></span><span style="display:flex;"><span> <span style="color:#ff5c57">private</span> <span style="color:#ff5c57">static</span> <span style="color:#ff5c57">final</span> Logger logger <span style="color:#ff6ac1">=</span> LoggerFactory.<span style="color:#57c7ff">getLogger</span>(Direction.<span style="color:#57c7ff">class</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#ff5c57">public</span> <span style="color:#9aedfe">void</span> <span style="color:#57c7ff">navigate</span>() {
</span></span><span style="display:flex;"><span> logger.<span style="color:#57c7ff">info</span>(...)
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>But it&rsquo;s 2020, and we write Kotlin now 🎉 A few websites I found helpfully suggest the most basic-but-functional Kotlin version of this:</p></description></item><item><title>I Go, Hugo, They Go</title><link>https://jvmname.dev/posts/2020/05/i-go-hugo-they-go/</link><pubDate>Mon, 18 May 2020 08:39:55 -0700</pubDate><guid>https://jvmname.dev/posts/2020/05/i-go-hugo-they-go/</guid><description><p>A dump of my experiences getting this blog set up - from Hugo, to GitHub deploy, to Google Domain CNAME entries.</p>
<hr>
<p><strong>Ed. note:</strong> I have no idea how <code>Hugo</code> is intended to be pronounced; it could be <em><code>oo-go</code></em> (á la <em>Hugo Chavez</em>), or <em><code>hyoo-go</code></em>, as the name is pronounced in American English. For the punning purposes of the title, I&rsquo;m assuming it&rsquo;s the latter pronunciation.</p>
<hr>
<h3 id="this-shouldnt-be-so-complicated">This shouldn&rsquo;t be so complicated.</h3>
<p>Somehow, with all the resources online of how to get Hugo + GitHub Pages + Custom Domain set up, I still ran into strange, arcane hurdles.</p></description></item><item><title>Speaking @ Conferences</title><link>https://jvmname.dev/speaking/</link><pubDate>Sun, 17 May 2020 17:57:32 -0700</pubDate><guid>https://jvmname.dev/speaking/</guid><description><h2 id="2023">2023</h2>
<h3 id="hot-take-engineering-managers-arent-useless">Hot Take: Engineering Managers Aren&rsquo;t Useless!</h3>
<p><strong>Droidcon London</strong> - Oct. 2023
<div
style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
<iframe
src="https://player.vimeo.com/video/883946867?dnt=0"
style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allow="fullscreen">
</iframe>
</div>
<a href="https://www.slideshare.net/parth781288/hot-take-engineering-managers-arent-useless">Link to slides</a></p>
<h2 id="2020---2022">2020 - 2022</h2>
<p><em>Remember when we went outside and did things?</em> 😷😭 <figure><img src="https://media.giphy.com/media/WsQvexUecH0jaJ14UV/giphy.gif" width="450">
</figure>
</p>
<h2 id="2019">2019</h2>
<h3 id="your-strengths-include-worklife-balance">Your Strengths Include: Work/Life Balance</h3>
<p><strong>Droidcon San Francisco &lsquo;19</strong> - Nov. 2019
<div
style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
<iframe
src="https://player.vimeo.com/video/380844303?dnt=0"
style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allow="fullscreen">
</iframe>
</div>
</p></description></item><item><title>@JvmName("Parth")</title><link>https://jvmname.dev/about/</link><pubDate>Sun, 17 May 2020 17:12:57 -0700</pubDate><guid>https://jvmname.dev/about/</guid><description><figure><img src="https://jvmname.dev/img/pizza.jpg" width="400">
</figure>
<p>Hi! My name is Parth, and I&rsquo;m an engineering leader and Android developer raised in Arizona☀️ and living in San Francisco🌉</p>
<h3 id="work-now">Work Now</h3>
<ul>
<li>[TBD]</li>
<li>Occasional OSS contributor, <a href="https://github.com/androidx/androidx/commit/15eea2e1593617abaa29f32ec7ad1b394e5975c3">one-time AndroidX contributor</a></li>
</ul>
<h3 id="previously">Previously</h3>
<ul>
<li>Sr. Engineering Manager @ <a href="https://mercury.com">Mercury</a>, <em>making the mobile apps that thousands of startups and other small businesses use to power their banking needs</em></li>
<li>Mobile Engineering Manager and Android engineer @ Nearside - <em>making better, more accessible financial services for micro-small businesses.</em>
(I also dabble in backend services, but don&rsquo;t quote me on that)</li>
<li>Sr. Android Eng @ <a href="https://front.app">Front</a> - <em>better, more collaborative email for businesses</em></li>
<li>Tech Lead &amp; Android Eng @ <a href="https://august.com">August Home</a> - <em>IoT smart locks, doorbell cameras, etc.</em></li>
<li>Android @ <a href="https://www.originate.com/">Originate</a> - <em>partnering with companies to build new streams of revenue through the full product lifecycle</em></li>
</ul>
<h3 id="more-previously">More previously</h3>
<p>B.A. in <a href="https://www.pomona.edu/academics/departments/linguistics-cognitive-science">Linguistics &amp; Cognitive Science</a> from <a href="https://www.cmc.edu/">Claremont McKenna College</a>.</p></description></item><item><title>Tracking Performance in Kotlin Suspending Functions</title><link>https://jvmname.dev/posts/2020/03/tracking-performance-in-kotlin-suspending-functions/</link><pubDate>Sun, 29 Mar 2020 23:14:00 -0700</pubDate><guid>https://jvmname.dev/posts/2020/03/tracking-performance-in-kotlin-suspending-functions/</guid><description><figure><img src="https://images.unsplash.com/photo-1474667689933-0ff72b3d16e9?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=810&amp;q=80"><figcaption>
<h4>Suspended Cups</h4><p><a href="https://unsplash.com/photos/NEc3YEN1FFw">Chris Scott</a></p>
</figcaption>
</figure>
<p>Using <a href="https://firebase.google.com/docs/perf-mon/get-started-android">Firebase Performance Monitoring</a> to track the performance of a plain-ol’ function (Java or Kotlin) is drop-dead simple using the <a href="https://firebase.google.com/docs/perf-mon/custom_traces-metrics?platform=android#add-trace-annotation">@AddTrace annotation</a>:
<div class="highlight"><pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="color:#ff9f43">@AddTrace</span>(<span style="color:#5af78e">&#34;some-trace-name&#34;</span>)
</span></span><span style="display:flex;"><span><span style="color:#ff6ac1">fun</span> <span style="color:#57c7ff">myBoringFunction</span>() {
</span></span><span style="display:flex;"><span> println(<span style="color:#5af78e">&#34;nothing to see here!&#34;</span>)
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></p>
<p>Wait a few moments, and you’ll see <code>some-trace-name</code> in the Firebase Console!</p>
<p>But what if you want to track the performance of a <code>suspend</code> function? Unfortunately, this is not as straightforward.</p>
<h2 id="attempt-1-suspending-disbelief">Attempt #1: Suspending Disbelief</h2>
<p>Let’s say you have some uncomplicated suspending function, like so:</p></description></item></channel></rss>