<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: jeeybee</title><link>https://news.ycombinator.com/user?id=jeeybee</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 04 Apr 2026 09:22:03 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jeeybee" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jeeybee in "Show HN: Pglens – 27 read-only PostgreSQL tools for AI agents via MCP"]]></title><description><![CDATA[
<p>No config step, the tools discover everything from pg_catalog at call time. list_schemas → list_tables → describe_table is the typical agent workflow, and there's a query_guide prompt baked in that suggests that progression.<p>On query guardrails: every query runs in a readonly transaction and results are capped at 500 rows via a wrapping SELECT * FROM (...) sub LIMIT 500. There's also explain_query which returns the plan without executing, so agents can check before running something expensive. That said, there's no cost-based gate that blocks a bad plan automatically; that's an interesting idea worth exploring.</p>
]]></description><pubDate>Mon, 30 Mar 2026 18:37:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47578003</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47578003</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47578003</guid></item><item><title><![CDATA[New comment by jeeybee in "Show HN: Pglens – 27 read-only PostgreSQL tools for AI agents via MCP"]]></title><description><![CDATA[
<p>Thanks! Read-only felt like the obvious constraint; agents shouldn't need write access to understand a database.</p>
]]></description><pubDate>Mon, 30 Mar 2026 17:00:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47576853</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47576853</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47576853</guid></item><item><title><![CDATA[New comment by jeeybee in "Show HN: Pglens – 27 read-only PostgreSQL tools for AI agents via MCP"]]></title><description><![CDATA[
<p>Most Postgres MCP servers expose query and list_tables. Agents end up guessing column values, enum casing, and join paths - then retrying until something works.<p>pglens gives agents the context to get it right the first time: column_values shows real distinct values with counts, find_join_path does BFS over the FK graph and returns join conditions through
intermediate tables, describe_table gives columns/PKs/FKs/indexes in one call. Plus production health tools like bloat_stats, blocking_locks, and sequence_health.<p>Everything runs in readonly transactions, identifiers escaped via Postgres's quote_ident(), no extensions required. Works on any Postgres 12+ (self-hosted, RDS, Aurora, etc.). Two dependencies:
asyncpg and mcp.<p><a href="https://github.com/janbjorge/pglens" rel="nofollow">https://github.com/janbjorge/pglens</a><p>pip install pglen</p>
]]></description><pubDate>Sun, 29 Mar 2026 16:31:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47564630</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47564630</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47564630</guid></item><item><title><![CDATA[Show HN: Pglens – 27 read-only PostgreSQL tools for AI agents via MCP]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/janbjorge/pglens">https://github.com/janbjorge/pglens</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47564620">https://news.ycombinator.com/item?id=47564620</a></p>
<p>Points: 13</p>
<p># Comments: 7</p>
]]></description><pubDate>Sun, 29 Mar 2026 16:30:36 +0000</pubDate><link>https://github.com/janbjorge/pglens</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47564620</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47564620</guid></item><item><title><![CDATA[Show HN: Pglens – Postgres MCP server that lets agents look before they query]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/janbjorge/pglens">https://github.com/janbjorge/pglens</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47494195">https://news.ycombinator.com/item?id=47494195</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 23 Mar 2026 19:43:21 +0000</pubDate><link>https://github.com/janbjorge/pglens</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47494195</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47494195</guid></item><item><title><![CDATA[Show HN: GYML – YAML syntax, JSON semantics, zero runtime dependencies]]></title><description><![CDATA[
<p>YAML keeps surprising people in production. The Norway Problem (`NO` parsed as `False`). Silent duplicate key overwrites. The spec has 211 grammar productions. Most of that complexity exists to support features nobody wanted in a config file.<p>GYML is a strict subset of YAML. Valid GYML is always valid YAML. It keeps the block indentation syntax and pairs it with JSON's type semantics: one spelling for each type, no anchors, no aliases, no tags, duplicate keys are a hard error. From-scratch parser, no runtime dependencies, fully typed Python.<p><a href="https://github.com/janbjorge/gyml" rel="nofollow">https://github.com/janbjorge/gyml</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47302509">https://news.ycombinator.com/item?id=47302509</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 08 Mar 2026 22:55:51 +0000</pubDate><link>https://github.com/janbjorge/gyml</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47302509</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47302509</guid></item><item><title><![CDATA[Show HN: PgQueuer – A PostgreSQL job queue that works without PostgreSQL]]></title><description><![CDATA[
<p>PgQueuer turns PostgreSQL into a background job queue using LISTEN/NOTIFY and FOR UPDATE SKIP LOCKED. v0.26.0 adds an in-memory adapter so you can run the same code in tests and CI without a database. Internally it's now built on port protocols, so you can swap the persistence layer entirely.<p>EDIT; HN trims the full url to readme about in-memory <a href="https://github.com/janbjorge/pgqueuer?tab=readme-ov-file#in-memory-adapter" rel="nofollow">https://github.com/janbjorge/pgqueuer?tab=readme-ov-file#in-...</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47210945">https://news.ycombinator.com/item?id=47210945</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 01 Mar 2026 21:38:06 +0000</pubDate><link>https://github.com/janbjorge/pgqueuer</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47210945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47210945</guid></item><item><title><![CDATA[Show HN: Jqueue: A job queue that runs on a single JSON file]]></title><description><![CDATA[
<p>I built a Python job queue that stores its entire state in one JSON file on S3, GCS, or your filesystem. No Redis, no RabbitMQ, no Postgres. Just object storage.<p>How it works<p>Read the JSON file, modify it in memory, write it back with compare-and-set. If two workers race, one wins. The loser retries with fresh state. No locks needed.<p>Inspired by; <a href="https://turbopuffer.com/blog/object-storage-queue" rel="nofollow">https://turbopuffer.com/blog/object-storage-queue</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47144842">https://news.ycombinator.com/item?id=47144842</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 24 Feb 2026 23:14:45 +0000</pubDate><link>https://github.com/janbjorge/jqueue</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47144842</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47144842</guid></item><item><title><![CDATA[PGQueuer for High-Performance Job Queues]]></title><description><![CDATA[
<p>Article URL: <a href="https://alexdewey.github.io/AlexDeweyGiovanniniBlog/2026/02/20/PGqueuer.html">https://alexdewey.github.io/AlexDeweyGiovanniniBlog/2026/02/20/PGqueuer.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47094172">https://news.ycombinator.com/item?id=47094172</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 20 Feb 2026 21:24:08 +0000</pubDate><link>https://alexdewey.github.io/AlexDeweyGiovanniniBlog/2026/02/20/PGqueuer.html</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=47094172</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47094172</guid></item><item><title><![CDATA[New comment by jeeybee in "Using PostgreSQL as a Dead Letter Queue for Event-Driven Systems"]]></title><description><![CDATA[
<p>I maintain a small Postgres-native job queue for Python called PGQueuer: <a href="https://github.com/janbjorge/pgqueuer" rel="nofollow">https://github.com/janbjorge/pgqueuer</a><p>It uses the same core primitives people are discussing here (FOR UPDATE SKIP LOCKED for claiming work; LISTEN/NOTIFY to wake workers), plus priorities, scheduled jobs, retries, heartbeats/visibility timeouts, and SQL-friendly observability. If you’re already on Postgres and want a pragmatic “just use Postgres” queue, it might be a useful reference / drop-in.</p>
]]></description><pubDate>Mon, 26 Jan 2026 11:03:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=46764198</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=46764198</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46764198</guid></item><item><title><![CDATA[New comment by jeeybee in "Kafka is Fast – I'll use Postgres"]]></title><description><![CDATA[
<p>If you like the <i>“use Postgres until it breaks”</i> approach, there’s a middle ground between hand-rolling and running Kafka/Redis/Rabbit: PGQueuer.<p>PGQueuer is a small Python library that turns Postgres into a durable job queue using the same primitives discussed here — `FOR UPDATE SKIP LOCKED` for safe concurrent dequeue and `LISTEN/NOTIFY` to wake workers without tight polling. It’s for <i>background jobs</i> (not a Kafka replacement), and it shines when your app already depends on Postgres.<p>Nice-to-haves without extra infra: per-entrypoint concurrency limits, retries/backoff, scheduling (cron-like), graceful shutdown, simple CLI install/migrations. If/when you truly outgrow it, you can move to Kafka with a clearer picture of your needs.<p>Repo: <a href="https://github.com/janbjorge/pgqueuer" rel="nofollow">https://github.com/janbjorge/pgqueuer</a><p><i>Disclosure: I maintain PGQueuer.</i></p>
]]></description><pubDate>Wed, 29 Oct 2025 21:58:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=45753628</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=45753628</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45753628</guid></item><item><title><![CDATA[New comment by jeeybee in "Slack has raised our charges by $195k per year"]]></title><description><![CDATA[
<p>I’ve always loved Slack. It’s been core to how we work, and I’ve recommended it to countless others.<p>But seeing how they just treated Hack Club — sudden 40x price hike, almost no notice, threatening to cut off access and delete 11 years of history — makes me wonder if we should rethink where we build our work.<p>I don’t want to leave Slack. But I also don’t want to wake up one day with our team’s history held hostage.</p>
]]></description><pubDate>Thu, 18 Sep 2025 11:27:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=45288302</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=45288302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45288302</guid></item><item><title><![CDATA[New comment by jeeybee in "Ask HN: What are you working on? (July 2025)"]]></title><description><![CDATA[
<p>pgqueuer turns vanilla PostgreSQL into horizontally-scalable job queue with zero extra infrastructure. If you’re running Postgres and want to ditch extra queue clusters, give it a spin and let me know how it holds up.<p><a href="https://github.com/janbjorge/pgqueuer">https://github.com/janbjorge/pgqueuer</a></p>
]]></description><pubDate>Mon, 28 Jul 2025 12:35:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=44710219</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=44710219</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44710219</guid></item><item><title><![CDATA[Ask HN: How Do You Approach Public Docs for Small Open-Source Projects?]]></title><description><![CDATA[
<p>Hi HN,<p>I’m the maintainer of PGQueuer, a minimalist job queue for Python that runs entirely on PostgreSQL—no Redis, brokers, or additional infrastructure required. It’s designed to offer solid concurrency with low overhead and fit seamlessly into projects that already use Postgres.<p>I’ve been working on improving the public documentation [1], and I’m looking for feedback from others who’ve gone through this process—especially those maintaining small, technical open-source projects where <i>all</i> the important knowledge lives in the docs. There’s no internal documentation and likely never will be, so clarity and accessibility are essential.<p>I’d especially appreciate your thoughts on:<p>* How do you decide what’s worth documenting for a technical audience who might just read the source anyway?<p>* How do you balance being thorough without overwhelming the reader?<p>* I’m currently using Read the Docs [2], but I’m considering switching to a self-hosted MkDocs site. What have your tradeoffs been between Read the Docs and self-hosting?<p>* What practices have helped you keep your docs in sync with your codebase?<p>* What’s worked well (or poorly) for encouraging contributions and getting users to help improve the docs?<p>If you have time to browse the current docs [1], I’d love to hear what’s missing, what’s confusing, or what stands out as helpful.<p>I’m here to learn from your experience—tools, workflows, hosting decisions, contributor strategies, anything. Thanks in advance!<p>---<p>[1] https://pgqueuer.readthedocs.io/en/latest<p>[2] https://readthedocs.org/<p>[3] https://github.com/janbjorge/pgqueuer</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44087090">https://news.ycombinator.com/item?id=44087090</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Sun, 25 May 2025 11:29:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=44087090</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=44087090</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44087090</guid></item><item><title><![CDATA[Someoen accidentally saved half a million-dollars]]></title><description><![CDATA[
<p>Article URL: <a href="https://ludic.mataroa.blog/blog/i-accidentally-saved-half-a-million-dollars/">https://ludic.mataroa.blog/blog/i-accidentally-saved-half-a-million-dollars/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43780520">https://news.ycombinator.com/item?id=43780520</a></p>
<p>Points: 48</p>
<p># Comments: 4</p>
]]></description><pubDate>Thu, 24 Apr 2025 08:45:12 +0000</pubDate><link>https://ludic.mataroa.blog/blog/i-accidentally-saved-half-a-million-dollars/</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=43780520</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43780520</guid></item><item><title><![CDATA[New comment by jeeybee in "Ask HN: Can You Prompt an LLM to Solve a Simple Puzzle Clearly?"]]></title><description><![CDATA[
<p>I've observed something interesting: my toddler can quickly and somewhat effortlessly solve a simple physical puzzle, yet when I try to prompt large language models (LLMs) to guide me clearly through the solution, they struggle.<p>Even with clear photographs and detailed instructions, LLMs tend to give general advice or indirect methods rather than precise, actionable steps that clearly demonstrate correctness.<p>Have you tried something similar? Have you successfully "prompt-engineered" an LLM into giving clear, precise, step-by-step solutions for physical puzzles? If yes, what's your approach?</p>
]]></description><pubDate>Sun, 13 Apr 2025 11:24:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=43671967</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=43671967</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43671967</guid></item><item><title><![CDATA[Ask HN: Can You Prompt an LLM to Solve a Simple Puzzle Clearly?]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/janbjorge/puzzle-prompt-challenge">https://github.com/janbjorge/puzzle-prompt-challenge</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43671966">https://news.ycombinator.com/item?id=43671966</a></p>
<p>Points: 1</p>
<p># Comments: 1</p>
]]></description><pubDate>Sun, 13 Apr 2025 11:24:29 +0000</pubDate><link>https://github.com/janbjorge/puzzle-prompt-challenge</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=43671966</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43671966</guid></item><item><title><![CDATA[New comment by jeeybee in "Performance of the Python 3.14 tail-call interpreter"]]></title><description><![CDATA[
<p>Kudos to the author for diving in and uncovering the real story here. The Python 3.14 tail-call interpreter is still a nice improvement (any few-percent gain in a language runtime is hard-won), just not a magic 15% free lunch. More importantly, this incident gave us valuable lessons about benchmarking rigor and the importance of testing across environments. It even helped surface a compiler bug that can now be fixed for everyone’s benefit. It’s the kind of deep-dive that makes you double-check the next big performance claim. Perhaps the most thought-provoking question is: how many other “X% faster” results out there are actually due to benchmarking artifacts or unknown regressions? And how can we better guard against these pitfalls in the future?</p>
]]></description><pubDate>Mon, 10 Mar 2025 07:31:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43317836</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=43317836</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43317836</guid></item><item><title><![CDATA[Gitlab: Account Takeover via Password Reset]]></title><description><![CDATA[
<p>Article URL: <a href="https://hackerone.com/reports/2293343">https://hackerone.com/reports/2293343</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43194537">https://news.ycombinator.com/item?id=43194537</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 27 Feb 2025 14:12:55 +0000</pubDate><link>https://hackerone.com/reports/2293343</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=43194537</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43194537</guid></item><item><title><![CDATA[New comment by jeeybee in "Why young parents should focus on building trust with their kids"]]></title><description><![CDATA[
<p>This post is a perfect reminder of Gandhi’s advice: "Be the change you want to see in the world." We can’t expect kids to trust or wait for better outcomes unless we first model consistency and patience ourselves. Our everyday actions—keeping promises, showing reliability—are the real lessons that shape their future.</p>
]]></description><pubDate>Thu, 13 Feb 2025 10:45:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=43034662</link><dc:creator>jeeybee</dc:creator><comments>https://news.ycombinator.com/item?id=43034662</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43034662</guid></item></channel></rss>