<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: otsaloma</title><link>https://news.ycombinator.com/user?id=otsaloma</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 17 Apr 2026 10:07:52 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=otsaloma" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by otsaloma in "Two Years of Emacs Solo"]]></title><description><![CDATA[
<p>> Partly because I wanted my config to survive without breakage across Emacs releases. Partly because I was tired of dealing with package repositories, mirrors going down in the middle of the workday, native compilation hiccups, and the inevitable downtime when something changed somewhere upstream and my job suddenly became debugging my very long (at the time) config instead of doing actual work.<p>Picking on this detail, what I've found works nicely is that when a new major Emacs version flows into my Debian, I also update all packages to their latest versions and then freeze those versions until the next major Emacs release. And those versions are locked in my emacs.d git repo, so I have a reproducible Emacs at home and work both.  There's a little iteration to adapt to changes in Emacs and packages, but after that, it's stable and reliable for a year or two.<p><a href="https://github.com/radian-software/straight.el" rel="nofollow">https://github.com/radian-software/straight.el</a></p>
]]></description><pubDate>Tue, 10 Mar 2026 13:32:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47323045</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=47323045</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47323045</guid></item><item><title><![CDATA[New comment by otsaloma in "Ask HN: What Are You Working On? (March 2026)"]]></title><description><![CDATA[
<p>Yeah, the frontend is from scratch. Each bullet is just a div contenteditable. The DOM is the state (Claude Code suggested the usual frontend pattern of separate state and rerenders, but I rejected that). Apart from the DOM, content is dumped to local storage. Bullet folding and zooming work mostly just by showing and hiding the bullet divs i.e. the whole note tree is all the time in the DOM. It's conceptually quite simple and Claude Code is good at writing code that traverses the DOM. There's of course a lot of operations like indent/dedent, copy-paste, undo/redo etc. but they've been quite painless to add.</p>
]]></description><pubDate>Mon, 09 Mar 2026 13:08:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47308554</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=47308554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47308554</guid></item><item><title><![CDATA[New comment by otsaloma in "Ask HN: What Are You Working On? (March 2026)"]]></title><description><![CDATA[
<p>Trying out vibe-coding (so mostly not even reading the code) a note-taking web app that's essentially a simplified and dirt-cheap to host Workflowy clone. That seems to me like an easily disruptible SaaS in the sense that note-taking is a very generic app, I only use a small part of the feature set of Workflowy and find the price far too high given that. A lot of other vibe-coding around me I see is throw-away junk, but my intention is to actually use this. The frontend is mostly done and working quite nicely already. Sync is then more crucial to get right to avoid data loss and I think I'll review and rewrite myself more of that.</p>
]]></description><pubDate>Mon, 09 Mar 2026 09:26:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=47306671</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=47306671</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47306671</guid></item><item><title><![CDATA[New comment by otsaloma in "I found a useful Git one liner buried in leaked CIA developer docs"]]></title><description><![CDATA[
<p>I recently revised my script to rely on (1) no commits in the last 30 days and (2) branch not found on origin. This is obviously not perfect, but it's good enough for me and just in case, my script prompts to confirm before deleting each branch, although most of the time I just blindly hit yes.<p>To avoid losing any work, I have a habit of never keeping branches local-only for long. Additionally this relies on <a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-the-automatic-deletion-of-branches" rel="nofollow">https://docs.github.com/en/repositories/configuring-branches...</a></p>
]]></description><pubDate>Fri, 20 Feb 2026 18:57:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=47092242</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=47092242</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47092242</guid></item><item><title><![CDATA[New comment by otsaloma in "Show HN: Otters – A Pandas-style DataFrame library written in pure Go"]]></title><description><![CDATA[
<p>How do you handle missing values (NA)?</p>
]]></description><pubDate>Tue, 17 Feb 2026 18:43:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47051287</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=47051287</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47051287</guid></item><item><title><![CDATA[New comment by otsaloma in "Ask HN: What are you working on? (January 2026)"]]></title><description><![CDATA[
<p>No, it's been working without problems so far. I'm using Anthropic for what it's worth. I ask the LLM to first do some reasoning and then return a JSON array on the final line. Sometimes I've seen some Markdown backticks there, but no irregularities more than that.</p>
]]></description><pubDate>Sun, 11 Jan 2026 21:58:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=46580678</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=46580678</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46580678</guid></item><item><title><![CDATA[New comment by otsaloma in "Ask HN: What are you working on? (January 2026)"]]></title><description><![CDATA[
<p>Looking at the console messages with the LLM reasoning, it does seem to work quite nicely for deduplication. Your example is probably even a lot easier than news articles, where you can have many articles from different viewpoints about the same event.<p>I don't actually plan to run this as a service so there's some things hard-coded and the setup is a bit difficult as you need an API key and a proxy. Currently it's just experimentation, although if it works well, I'll probably use it personally.</p>
]]></description><pubDate>Sun, 11 Jan 2026 20:41:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46579790</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=46579790</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46579790</guid></item><item><title><![CDATA[New comment by otsaloma in "Ask HN: What are you working on? (January 2026)"]]></title><description><![CDATA[
<p>I've been experimenting with using LLMs for a content recommender system. Specifically I've built a news reader app that fetches news articles from multiple RSS feeds, uses an LLM to first deduplicate and then score them. The user can then rate the articles and those ratings are used as few-shot examples in the LLM scoring prompt. Any resulting low score articles (uninteresting to the user) are hidden by default and visible ones scaled by their score on a dynamic CSS grid like on a traditional newspaper front page. Looking good so far, but still testing and tweaking.<p><a href="https://github.com/otsaloma/news-rss" rel="nofollow">https://github.com/otsaloma/news-rss</a></p>
]]></description><pubDate>Sun, 11 Jan 2026 20:05:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46579414</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=46579414</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46579414</guid></item><item><title><![CDATA[New comment by otsaloma in "Ask HN: What did you read in 2025?"]]></title><description><![CDATA[
<p>My favorite of the year would be Maxim Gorky's three-part autobiography: I read "Childhood" and "In the World" (a.k.a. "Amid Attendants") and just started the last part "My Universities". Gorky drifted as an orphan from house and job to another and describes an interesting array of characters he came across, mostly poor and misfortunate, but many of them good as well.<p>"He took me under the arms, lifted me up, kissed me, and placed me firmly on the jetty. I was sorry for him and for myself. I could hardly keep from crying when I saw him returning to the steamer, pushing aside the porters, looking so large, heavy, solitary. So many times since then I have met people like him, kind, lonely, cut off from the lives of other people."</p>
]]></description><pubDate>Fri, 26 Dec 2025 22:42:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46397164</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=46397164</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46397164</guid></item><item><title><![CDATA[New comment by otsaloma in "Show HN: Parqeye – A CLI tool to visualize and inspect Parquet files"]]></title><description><![CDATA[
<p>It's unfortunate that Python and R don't really have any out-of-the-box means of opening data files from arguments, but if you do this kind of stuff on a daily basis it's something that you can set up. My not directly usable examples below.<p>Python (uv + dataiter, but easy to modify for pandas or polars):
<a href="https://github.com/otsaloma/dataiter/blob/master/bin/di-open" rel="nofollow">https://github.com/otsaloma/dataiter/blob/master/bin/di-open</a><p>R (as per comment, requires also ~/.Rprofile code, nanoparquet in this case):
<a href="https://github.com/otsaloma/R-tools/blob/master/r-load" rel="nofollow">https://github.com/otsaloma/R-tools/blob/master/r-load</a></p>
]]></description><pubDate>Tue, 18 Nov 2025 17:35:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=45969405</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=45969405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45969405</guid></item><item><title><![CDATA[New comment by otsaloma in "Old Eight Eighty"]]></title><description><![CDATA[
<p><a href="https://archive.ph/MLJHu" rel="nofollow">https://archive.ph/MLJHu</a></p>
]]></description><pubDate>Sun, 09 Nov 2025 18:22:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=45867753</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=45867753</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45867753</guid></item><item><title><![CDATA[Old Eight Eighty]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.newyorker.com/magazine/1949/08/27/old-eight-eighty-i">https://www.newyorker.com/magazine/1949/08/27/old-eight-eighty-i</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45867752">https://news.ycombinator.com/item?id=45867752</a></p>
<p>Points: 1</p>
<p># Comments: 1</p>
]]></description><pubDate>Sun, 09 Nov 2025 18:22:03 +0000</pubDate><link>https://www.newyorker.com/magazine/1949/08/27/old-eight-eighty-i</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=45867752</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45867752</guid></item><item><title><![CDATA[New comment by otsaloma in "You should write an agent"]]></title><description><![CDATA[
<p>Agreed! It's easy understand "LLM with tools in a loop" at a high-level, but once you actually design the architecture and implement the code in full, you'll have proper understanding of how it all fits and works together.<p>I did the same exercise. My implementation is at around 300 lines with two tools: web search and web page fetch with a command line chat interface and Python package. And it could have been a lot less lines if I didn't want to write a usable, extensible package interface.<p>As the agent setup itself is simple, majority of the work to make this useful would in the tools themselves and context management for the tools.</p>
]]></description><pubDate>Fri, 07 Nov 2025 09:44:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=45844911</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=45844911</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45844911</guid></item><item><title><![CDATA[New comment by otsaloma in "Show HN: A macOS clock that stays visible when coding or binging in fullscreen"]]></title><description><![CDATA[
<p>Something similar for GNOME: <a href="https://github.com/ghi59/floating-mini-panel">https://github.com/ghi59/floating-mini-panel</a><p>Been using it for a couple weeks now and find it really nice. Tried some auto-hide panel extensions before, but this is much better.</p>
]]></description><pubDate>Sat, 26 Jul 2025 18:00:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=44695885</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=44695885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44695885</guid></item><item><title><![CDATA[New comment by otsaloma in "Ask HN: Do you create data visualizations often?"]]></title><description><![CDATA[
<p>I used to hate matplotlib because of its awful API and awful API documentation. These days I just ask an LLM "add thousand separators on the y-axis", "add a vertical line ar zero" etc. and now I never need to look at the API documentation and it feels somewhat tolerable.<p>LLMs feel to me a nice fit here because there's just so much users might want to do with the chart styling. Past approaches that I've seen offer some kind of "quick selections" of common stuff and while they can help you get started, they quickly become annoying when you need to add some final tweaks not covered by the tool/API/whatever.</p>
]]></description><pubDate>Tue, 01 Jul 2025 21:18:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=44438095</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=44438095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44438095</guid></item><item><title><![CDATA[New comment by otsaloma in "FireDucks: Pandas but Faster"]]></title><description><![CDATA[
<p>I think the choice of using functions instead of classes + methods doesn't really fit well into Python. Either you need to do a huge amount of imports or use the awful `from siuba import *`. This feels like shoehorning the dplyr syntax into Python when method chaining would be more natural and would still retain the idea.<p>Also, having (already a while ago) looked at the implementation of the magic `_` object, it seemed like an awful hack that will serve only a part of use cases. Maybe someone can correct me if I'm wrong, but I get the impression you can do e.g. `summarize(x=_.x.mean())` but not `summarize(x=median(_.x))`. I'm guessing you don't get autocompletion in your editor or useful error messages and it can then get painful using this kind of a magic.</p>
]]></description><pubDate>Wed, 20 Nov 2024 21:20:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=42198236</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=42198236</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42198236</guid></item><item><title><![CDATA[New comment by otsaloma in "FireDucks: Pandas but Faster"]]></title><description><![CDATA[
<p>I don't quite agree, but if this was true, what would you tell a junior colleague in a code review? You can't use this function/argument/convention/etc you found in the official API documentation because...I don't like it? I think any team-maintained Pandas codebase will unavoidably drift into the inconsistent and bad. If you're always working alone, then it can of course be a bit better.</p>
]]></description><pubDate>Wed, 20 Nov 2024 20:29:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=42197792</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=42197792</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42197792</guid></item><item><title><![CDATA[New comment by otsaloma in "FireDucks: Pandas but Faster"]]></title><description><![CDATA[
<p>Building on top of Pandas feels like you're only escaping part of the problems. In addition to the API, the datatypes in Pandas are a mess, with multiple confusing (and none of them good) options for e.g. dates/datetimes. Does redframes do anything there?</p>
]]></description><pubDate>Wed, 20 Nov 2024 16:10:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=42195287</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=42195287</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42195287</guid></item><item><title><![CDATA[New comment by otsaloma in "FireDucks: Pandas but Faster"]]></title><description><![CDATA[
<p>Agreed, never had a problem with the speed of anything NumPy or Arrow based.<p>Here's my alternative: <a href="https://github.com/otsaloma/dataiter">https://github.com/otsaloma/dataiter</a> <a href="https://dataiter.readthedocs.io/en/latest/_static/comparison.html" rel="nofollow">https://dataiter.readthedocs.io/en/latest/_static/comparison...</a><p>Planning to switch to NumPy 2.0 strings soon. Other than that I feel all the basic operations are fine and solid.<p>Note for anyone else rolling up their sleeves: You can get quite far with pure Python when building on top of NumPy (or maybe Arrow). The only thing I found needing more performance was group-by-aggregate, where Numba seems to work OK, although a bit difficult as a dependency.</p>
]]></description><pubDate>Wed, 20 Nov 2024 15:10:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=42194544</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=42194544</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42194544</guid></item><item><title><![CDATA[New comment by otsaloma in "Show HN: FTWA – Turn any website into an app"]]></title><description><![CDATA[
<p>Two questions:<p>1. Does this make the apps show up as separate windows in Alt+Tab and a Dock etc? (FWIW I use GNOME + Dash to dock + Wayland)<p>2. Let's say you have a mail app and you click a link. Does that link open in the separate default browser?<p>I remember trying these command line options for Brave/Chrome, but I couldn't find a way where both of the above were working and thus they didn't feel like proper apps. I've only been using this for something like Apple Music, where I never click on any link that takes me outside. For everything else, like mail and notes, I've been using pinned tabs, but that feels suboptimal too.</p>
]]></description><pubDate>Wed, 16 Oct 2024 14:06:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=41859179</link><dc:creator>otsaloma</dc:creator><comments>https://news.ycombinator.com/item?id=41859179</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41859179</guid></item></channel></rss>