<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: napsterbr</title><link>https://news.ycombinator.com/user?id=napsterbr</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 02 Sep 2026 09:26:23 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=napsterbr" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by napsterbr in "Ask HN: Who is hiring? (August 2026)"]]></title><description><![CDATA[
<p>I worked at Distru a few years back; I have nothing but positive things to say about the team. Good culture, great people, solid engineering principles. This is a good opportunity, especially if you are into Elixir.</p>
]]></description><pubDate>Tue, 04 Aug 2026 10:36:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=49166676</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=49166676</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49166676</guid></item><item><title><![CDATA[New comment by napsterbr in "Workers Cache"]]></title><description><![CDATA[
<p>There is a world of difference between well-written human text and sloppy walls of AI-generated text. There's nothing wrong in using hyphenations or emdashes -- I use them myself! That's not the point of my comment.</p>
]]></description><pubDate>Mon, 06 Jul 2026 14:02:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48804726</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=48804726</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48804726</guid></item><item><title><![CDATA[New comment by napsterbr in "Workers Cache"]]></title><description><![CDATA[
<p>One of the recent AI tells other than em dash is the excessive usage of hyphenated words:<p>> multi-tenant-safe cache keys<p>> on a server-rendered app<p>> byte-for-byte identical (classic)<p>> gets a cache-speed response<p>> cached-file-extensions list<p>Honestly, this is terrible. I had to add a "use simple words only, don't hyphenate unnecessarily" warning to my Claude config. After a full day of work, having to read these Claudisms all the time make a noticeable difference on how tired you get. It gets even worse when Claude starts to make up its own vocabulary.</p>
]]></description><pubDate>Mon, 06 Jul 2026 13:52:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48804597</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=48804597</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48804597</guid></item><item><title><![CDATA[New comment by napsterbr in "Anthropic's open-source framework for AI-powered vulnerability discovery"]]></title><description><![CDATA[
<p>Or hacked them...</p>
]]></description><pubDate>Fri, 05 Jun 2026 00:51:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48406687</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=48406687</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48406687</guid></item><item><title><![CDATA[New comment by napsterbr in "Cloudflare Global Network experiencing issues"]]></title><description><![CDATA[
<p>Took me ~30 minutes but eventually I was able to log in, get past the 2FA screen and change a DNS record.<p>I surely missed a valid API token today.</p>
]]></description><pubDate>Tue, 18 Nov 2025 14:11:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45966253</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=45966253</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45966253</guid></item><item><title><![CDATA[New comment by napsterbr in "Campfire: Web-Based Chat Application"]]></title><description><![CDATA[
<p>Reminds me of Ash (Elixir framework).<p>Seems great on paper, but quickly turns into a nightmare. Magic is great to get you up to speed, but as soon as you find yourself having to bend the magic, good luck.</p>
]]></description><pubDate>Sun, 07 Sep 2025 17:20:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=45160157</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=45160157</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45160157</guid></item><item><title><![CDATA[New comment by napsterbr in "I let LLMs write an Elixir NIF in C; it mostly worked"]]></title><description><![CDATA[
<p>This is clearly low quality, non-idiomatic AI-generated Elixir code. So the likely answer is that "you" did not use this at all; AI did.<p>I review this kind of AI-generated Elixir code on a daily basis. And it makes me want to go back to ~2022, when code in pull requests actually made sense.<p>Apologies for the rant, this is just a burnt out developer tired of reviewing this kind of code.<p>PS: companies should definitely highlight "No low-quality AI code" in job listings as a valid perk.</p>
]]></description><pubDate>Fri, 15 Aug 2025 20:20:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=44916890</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=44916890</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44916890</guid></item><item><title><![CDATA[New comment by napsterbr in "Shardines: SQLite3 Database-per-Tenant with ActiveRecord"]]></title><description><![CDATA[
<p>Coincidentally I'm working on FeebDB[0], which is similar but for Elixir instead. It can be seen as a replacement to Ecto (which won't work well when you have thousands of databases).<p>Mostly as a fun experiment, but also from the realization that every place I worked at in the past (small/medium-sized B2B startups) would greatly benefit from such architecture.<p>Yes, there are massive trade-offs to this approach, and the concerns raised in the comment section are valid. This doesn't mean the database-per-tenant is never worth it. There's a sweet spot for it, and if it fits your business/application, I personally would consider it a technical advantage over competitors.<p>My goal with FeebDB is to eliminate or reduce the common pain points of database-per-tenant, including:<p>- ensure there is a single writer per database.<p>- improved connection management across all tenants (e.g. only keep open at most 1000 DB connections, similar to an LRU cache).<p>- on-demand migration (all shards are migrated on application startup, but if a shard that hasn't migrated yet receives a request, it will first perform the migration and then serve the request),<p>- on-demand backups and replication (e.g. the library knows which shards were updated in the last X minutes, so it can trigger Litestream or similar on demand).<p>- support for enumeration of databases (performing map/reduce/filter operations across multiple DBs)<p>- support for clustered deployment with "pinned" tenants (for now I'm assuming the IOPS of a single beefy server should be enough for all use cases, but once that's no longer sufficient you can have "shards of shards")<p>[0] - <a href="https://github.com/renatomassaro/FeebDB/">https://github.com/renatomassaro/FeebDB/</a></p>
]]></description><pubDate>Sun, 27 Apr 2025 19:43:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=43814554</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=43814554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43814554</guid></item><item><title><![CDATA[New comment by napsterbr in "OpenAI asks White House for relief from state AI rules"]]></title><description><![CDATA[
<p>I think we are beyond the "theory" phase by now. Just yesterday I saw the president of a country advertising the products of a private company (Trump making an obvious marketing ploy for Tesla).<p>How can this ever be acceptable?</p>
]]></description><pubDate>Thu, 13 Mar 2025 18:03:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=43355793</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=43355793</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43355793</guid></item><item><title><![CDATA[New comment by napsterbr in "Self hosted FLOSS fitness/workout tracker"]]></title><description><![CDATA[
<p>Another interesting self-hosted tracker is <a href="https://ryot.io/" rel="nofollow">https://ryot.io/</a>.<p>Demo: <a href="https://demo.ryot.io/_s/acl_vUMPnPirkHlT" rel="nofollow">https://demo.ryot.io/_s/acl_vUMPnPirkHlT</a><p>Code: <a href="https://github.com/IgnisDa/ryot">https://github.com/IgnisDa/ryot</a><p>(PS: they opted to go in a direction where it also includes some media-related features -- like tracking movies or books you've seen/read -- but this can be disabled).</p>
]]></description><pubDate>Thu, 13 Feb 2025 13:25:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=43035554</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=43035554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43035554</guid></item><item><title><![CDATA[New comment by napsterbr in "Ask HN: Why buy domains and 301 redirect them to me?"]]></title><description><![CDATA[
<p>Whatever their play, detect and drop the redirects. Good job on noticing it early on!</p>
]]></description><pubDate>Fri, 24 Jan 2025 13:36:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=42812870</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=42812870</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42812870</guid></item><item><title><![CDATA[New comment by napsterbr in "How do interruptions impact different software engineering activities"]]></title><description><![CDATA[
<p>Sure, and I agree with you, but what you described is just a break, not an interruption.<p>These breaks were taken at a "natural" time, when you felt one was needed. By definition, an interruption is a "break" when you don't want one.</p>
]]></description><pubDate>Mon, 20 Jan 2025 15:30:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=42769650</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=42769650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42769650</guid></item><item><title><![CDATA[New comment by napsterbr in "Database mocks are not worth it"]]></title><description><![CDATA[
<p>The entire project is open source, so sure! :D<p>I actually have two projects that use this approach, FeebDB (which is the library I wrote to manage a "one SQLite database per client" approach) and HackerExperience (a game under development that uses FeebDB).<p>The overall idea is simple:<p>1. Before tests start running, create a prop of each database.<p>2. The prop contains the "starting database" for each test. It may contain seed data (optional).<p>3. For each test, copy the prop and assign it a unique shard identifier (say, cp /props/user.db /test_data/user/874125.db).<p>4. The test knows the `shard_id` and can do whatever it wants with it; no one else will bother it.<p>5. Once ExUnit is finished, delete all shards.<p>Both projects follow a similar approach (I wrote it first in FeebDB and copied into HackerExperience, which has some sections commented out -- I need to clean up this part of the codebase).<p>For both projects, you will find steps 1/5 in `test/support/db.ex`, step 2 in `test/support/db/prop.ex` and steps 3/4 in `test/support/case/db.ex`.<p>- FeebDB: <a href="https://github.com/renatomassaro/FeebDB/">https://github.com/renatomassaro/FeebDB/</a><p>- HackerExperience: <a href="https://github.com/HackerExperience/HackerExperience/">https://github.com/HackerExperience/HackerExperience/</a><p>Email is in profile in case you have follow up questions/comments :)</p>
]]></description><pubDate>Tue, 31 Dec 2024 09:23:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=42557565</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=42557565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42557565</guid></item><item><title><![CDATA[New comment by napsterbr in "Database mocks are not worth it"]]></title><description><![CDATA[
<p>A hobby project of mine (in Elixir) uses SQLite as primary database. Each test runs in its own fully isolated SQLite database. No mocking (or transaction rolling back) needed. Most of these tests take less than 1ms to run (and when they take longer, it's because of something else).<p>This kind of setup makes the usual Ecto Sandbox approach feel slow, but I do agree that the way Elixir approaches this is great!</p>
]]></description><pubDate>Mon, 30 Dec 2024 21:16:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=42553641</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=42553641</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42553641</guid></item><item><title><![CDATA[Does the AGPL Work?]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.jefftk.com/p/does-the-agpl-work">https://www.jefftk.com/p/does-the-agpl-work</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42354054">https://news.ycombinator.com/item?id=42354054</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 08 Dec 2024 00:39:56 +0000</pubDate><link>https://www.jefftk.com/p/does-the-agpl-work</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=42354054</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42354054</guid></item><item><title><![CDATA[Functional Programming Self-Affirmations]]></title><description><![CDATA[
<p>Article URL: <a href="https://norikitech.com/posts/functional-affirmations/">https://norikitech.com/posts/functional-affirmations/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42244851">https://news.ycombinator.com/item?id=42244851</a></p>
<p>Points: 118</p>
<p># Comments: 113</p>
]]></description><pubDate>Tue, 26 Nov 2024 11:44:54 +0000</pubDate><link>https://norikitech.com/posts/functional-affirmations/</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=42244851</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42244851</guid></item><item><title><![CDATA[Avoiding recompilation hell in Elixir with mix xref]]></title><description><![CDATA[
<p>Article URL: <a href="https://r.ena.to/blog/avoiding-recompilation-hell-in-elixir-with-mix-xref/">https://r.ena.to/blog/avoiding-recompilation-hell-in-elixir-with-mix-xref/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42017312">https://news.ycombinator.com/item?id=42017312</a></p>
<p>Points: 40</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 01 Nov 2024 14:35:47 +0000</pubDate><link>https://r.ena.to/blog/avoiding-recompilation-hell-in-elixir-with-mix-xref/</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=42017312</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42017312</guid></item><item><title><![CDATA[New comment by napsterbr in "Starship Flight 5: Launch and booster catch [video]"]]></title><description><![CDATA[
<p>And here I thought nothing would top the double landing view from Falcon Heavy...</p>
]]></description><pubDate>Sun, 13 Oct 2024 12:39:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=41827472</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=41827472</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41827472</guid></item><item><title><![CDATA[New comment by napsterbr in "1 bug, $50k in bounties, a Zendesk backdoor"]]></title><description><![CDATA[
<p>It's unbelievable that he received no bounty from Zendesk on this one. If it was out of scope, then surely he could have published it anywhere?</p>
]]></description><pubDate>Sat, 12 Oct 2024 14:03:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=41819161</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=41819161</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41819161</guid></item><item><title><![CDATA[New comment by napsterbr in "PostgreSQL Streaming Replication (WAL); What It Is and How to Configure One"]]></title><description><![CDATA[
<p>> Do I need 2 replicas to avoid the split brain scenario? my brain hurts already.<p>It will hurt even more.<p>The recommended way is to set up a witness server. Yet another thing to manage in a properly designed Postgres cluster. Certainly not an easy/trivial thing to do, ops-wise.<p>From [0]:<p>> By creating a witness server in the same location (data centre) as the primary, if the primary becomes unavailable it's possible for the standby to decide whether it can promote itself without risking a "split brain" scenario: if it can't see either the witness or the primary server, it's likely there's a network-level interruption and it should not promote itself. If it can see the witness but not the primary, this proves there is no network interruption and the primary itself is unavailable, and it can therefore promote itself (and ideally take action to fence the former primary).<p>An interesting acronym you'll hear is STONITH (in order to fence the former primary).<p>[0] - <a href="https://www.repmgr.org/docs/current/repmgrd-witness-server.html" rel="nofollow">https://www.repmgr.org/docs/current/repmgrd-witness-server.h...</a></p>
]]></description><pubDate>Sat, 12 Oct 2024 13:47:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=41819049</link><dc:creator>napsterbr</dc:creator><comments>https://news.ycombinator.com/item?id=41819049</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41819049</guid></item></channel></rss>