HNHacker News
TopNewBestAskShowJobs

kristjan

162 karma · joined September 11, 2009

Building light-hearted software at https://hahamoment.dev

[ my public key: https://keybase.io/kristjan; my proof: https://keybase.io/kristjan/sigs/aYrFyl1PfytMbNCEJCbVl0cfwmoxTSwcGzwCyR48i9Y ]

submissionscomments
kristjan··on Ask HN: What are you working on? (September 2026)
Just launched an endless Mad Libs style fill-in-the-blank story generator. My kiddos (and we parents) love the format, but we never carried around the paper booklets, and this way we can write them about whatever we want (obviously mostly spaceships and farts). I built out a family library so everything's synced regardless of which parent drove to practice that day.

Getting all the product right (ish) around multiple devices, family invites, installing on kid devices, etc. was way more difficult than the actual generator. But I get darn-near furious when I'm just trying to get an app on a kid's iPad and I have to manually type passwords four different times, so making that smooth was worth it.

https://tellmeapenguin.com/

kristjan··on Show HN: Needle2: 14MB agentic LLM for phones, wearables, smart home and robots
It seems to love locking doors. I was hoping this would dim the lights.

> I'm hungover

{ "function_calls": [ { "name": "lock_door", "arguments": { "door": "front door" } } ], "reasoning": "User wants to lock the door. 'hungover' implies a security door. No specific door named, so use 'front door' as default.", "confidence": 0 }

kristjan··on Ask HN: What are you working on? (August 2026)
More things than I meant to, but one's live and three are landing soon. I quit someone else's work a little while back, spent some time building a game that I'll get back too to the extent I can support myself, and then started a things-I-want-and-others-might-want-too studio.

https://sponder.app (Live) - an RSS and podcast mutator. Filter feeds for what you want, merge, time-delay, and drip articles on a cadence (I like to start from feeds' beginnings). For podcasts, detect similar metadata to previous releases so you can skip reruns.

https://tellmeapenguin.com (Close! Come help test it) - Endless mad libs about whatever you want, and if it's a good story, you can keep writing more chapters. The kiddos love it, and you can share back and forth with grandparents and whatnot to keep sillily in touch.

https://nounogram.com/ (Web is live, apps soon) - Hybrid nonogram and crossword puzzles. Shade the grid to find the layout, then add the words where they fit. I built it to make the kiddo practice handwriting, and then it was more fun than I expected.

https://getyarnt.com (Free until I ship the Stripe integration) - A task tracker that's actively hostile towards you having tasks. Started as a joke, but I'm using it to track my own stuff and really enjoying it. If you have a manager who likes assigning you work, tell them to get Yarnt!

All of it's on https://hahamoment.dev/ in the likely event you don't need any of this but do want to turn on a light.

kristjan··on Distributing Mac software is increasing my cortisol levels
I spent the better part of a week failing to create an Apple account using my studio domain - not even a dev account yet, just any account at all. In large part because of the "I got frozen out and can't talk to anyone" horror stories that pop up here monthly, and the fact that my personal account already needs to go through the "your account is locked" dance on a daily basis. My best guess is constant credential stuffing plus lack of any Apple mobile device.

The main creation flow wouldn't send a verification email, and there are hints around to try through Apple Music, which got me a little farther. At phone verification, I receive the code fine (on both numbers I tried), type it in, and get an inscrutable "error" that prevents finalization.

But it turns out it was final enough that even though I can't log in at all, they felt fine sending me Mother's Day email spam. Thanks. I'll be sure to FaceTime her.

kristjan··on Okmain: How to pick an OK main colour of an image
I've been doing something similar! I've got a Home Assistant dashboard on my desk and wanted the media controls to match the current album art. I need three colors: background, foreground, and something vibrant to set my desk lamp to [1].

The SpotifyPlus HA integration [2] was near at hand and does a reasonably good job clustering with a version of ColorThief [3] under the hood. It has the same two problems you started with though: muddying when there's lots of gradation, even within a cluster; and no semantic understanding when the cover has something resembling a frame. A bit swapped from okmain's goal, but I can invert with the best of them and will give it a shot next time I fiddle. Thanks for posting!

[1] https://gist.github.com/kristjan/b305b83b0eb4455ee8455be108a... [2] https://github.com/thlucas1/homeassistantcomponent_spotifypl... [3] https://github.com/thlucas1/SpotifyWebApiPython/blob/master/...

kristjan··on Ask HN: What Are You Working On? (March 2026)
I've wanted to read some long-form RSS feeds from the beginning, and friends had use cases for feed filtering, so I built https://sponder.app.

The filtering was easy, but RSS doesn't do "from the beginning" (RFC 5005 exists, but is mostly unused), so scope crept into a webpage-to-RSS tool that lets me convert favorite.site/s/archive - autodetection of the article structure was a fun side quest.

The whole thing is a little function engine (Yahoo Pipes called), so the final goal is `merge(archive, live_feed) | drip(N items per D days)` to have the archive transition seamlessly into current content. I expect I can push that live tomorrow or so.

And of course Podcasts are just RSS, so hey, let's skip reruns. That's doable with filters on the episode description, but with history in place I'll add title similarity checking. I'm trying to think how to recognize cross-promoted episodes too, without having to crawl every podcast.

Importantly, Sponder's _not_ a client. There are enough clients, any many are great. Each implements some subset of features, so Sponder's an intermediary that consumes and publishes pure RSS for us to use anywhere we want.

Project two started over the weekend and is the NYTimes' Pips, but colors. You're building a stained glass window with regional constraints, and the big difference from using dominos is colors can mix. Also, triangles! The engine works, and I'm designing the tutorial and first handful of puzzles now.

kristjan··on Ask HN: What are you working on? (February 2026)
Sponder - Filter and transform RSS feeds or Podcasts (https://sponder.app)

Different RSS clients provide different filtering options, and lots of them limit you to a few keywords and/or put them behind a $7-12/mo subscription. I'm building Sponder so you can curate what you see, and it just presents another RSS feed, so you can keep using your favorite client but fill in the feature gaps.

Right now it can merge and filter by string or regex, and next I'm building (because it's what I want) history replay and smarter podcast rerun detection. it's new and I'm very open to feedback and feature requests.

kristjan··on Ask HN: What language-agnostic programming books should I read?
Correction: Jon Bentley

https://en.wikipedia.org/wiki/Jon_Bentley_(computer_scientis...

kristjan··on KeepassXC – A cross-platform community fork of KeepassX
You may also dig https://www.passwordstore.org/
kristjan··on Show HN: Git alias commands and shortcuts
Certainly everything in moderation - I only give letters to commands I literally type hundreds of times daily. Over the past 10 years, I've accumulated 5:

    b=`bundle exec`, though this is becoming less often used and I may remove it
    d=dotenv to easily wrap a command in environment variables 
        (https://github.com/bkeepers/dotenv)
    g=git
    h=hub (GitHub's extensions to Git)
    j=autojump to move to common directories using just a few characters
        from their name (https://github.com/wting/autojump)
kristjan··on Show HN: Git alias commands and shortcuts
But you're still typing `git` every time!

    alias g=git
I've got my Git configs up at https://github.com/kristjan/.dotfiles/blob/master/.gitconfig if you'd like to sift through them. The very most common, like `git status`, get their own Bash aliases too (https://github.com/kristjan/.dotfiles/blob/master/.aliases#L...). Who can be bothered to type a space?
kristjan··on Amazon Web Services terms of use: run far away, run fast
https://tosdr.org/
kristjan··on Ask HN: How to Be a Good Technical Lead?
There's some amount of zen to it. Your job is no longer to be the best coder yourself, it's to make everyone else the best coders they can be. I don't have kids yet, but I can imagine some similarities.

On the other hand, once a month or so I hide from the office for an afternoon/night and replace some infrastructure or build an internal tool that's never going to get prioritized. Everyone's happy about it, and you get to feel like a bit of a hero :)

kristjan··on Complexity theory isn’t required to be a programmer
Complexity theory had been explored, if not deeply, somewhat before what we'd consider "typical days of programming": https://en.wikipedia.org/wiki/Computational_complexity_theor...
kristjan··on Ask HN: What Android Wear apps would you like to see?
Google Authenticator voice action to display the current 2FA code for some account
kristjan··on Ask HN: What Android Wear apps would you like to see?
Tag song button for Soundhound/Shazaam/GooglePlay/etc. Use the watch microphone.
kristjan··on A "Hacker's" Guide to the Bay Area
On housing, I'm happy to report that Craigslist isn't the only option. http://apartmentlist.com is somewhat more pleasant to use and less full of duplicates / other nonsense.

Disclosure: I work at Apartment List. Since someone already mentioned LiveLovely, I suppose I'll recognize them too :-D

kristjan··on Registration for Google I/O 2013 will open on March 13, 2013 at 7:00 AM PDT
Opening google.com/+ shows the cookie is still intact. There's also a ping every 30 seconds to https://developers.google.com/events/register/waitlist/statu... that returns {"status":"waiting"}. Trying that URL from a remote console returns {"status":"reregister"}, so the Sign In header appears spurious.
kristjan··on Causes Acquires Votizen To Democratize Democracy
[Former Causes employee]

I always liked the term not-just-for-profit.

Congrats on the merge, guys!

kristjan··on Review my startup idea: One API to rule them all.
Singly's working on this, especially as it applies to personal and social data: http://singly.com.

[Disclosure: I work at Singly]

kristjan··on Singly Launches “App Fabric” Platform For Developers
Hours?! I want that to be minutes. Lemme know anything that could be smoother at k@singly.com :)
kristjan··on D3 - Languages and Color
Don't forget XKCD's take! http://blog.xkcd.com/2010/05/03/color-survey-results/
kristjan··on Login vs Log In
Daily dose of irony for ya: https://img.skitch.com/20120716-kxcbgabsha7mi6nwxnd4w48wfw.p...
kristjan··on Ask HN: How do you decide which skills to list on a resume?
If I see more than a few things listed, I assume the applicant is just writing down anything they've ever touched. Unless they make up for it with something really cool in their work history or various online profiles (I stalk quite a bit), it's pretty much an autofail.
kristjan··on Ask HN: Who Is Hiring? (July 2012)
If it's not too late for you to edit, "Burlingame"
kristjan··on Ask HN: Who Is Hiring? (July 2012)
San Francisco, CA - https://singly.com/jobs: Full-time Platform Engineers and Lead Developer Evangelist

Singly is hiring a lead developer evangelist and horde of generalist engineers to build a cross-service API that provides merged, normalized and deduplicated data from all of your personal sources (Facebook, Foursquare, Fitbit, email, text messages, you name it). We recently closed $7MM in funding, which we're using to expand the team and ramp up developer outreach, as well as put on huge events like our app challenge last month[1]. Mega bonus points if you've got tons of experience building or heavily consuming APIs, but if you're smart and like burritos, let's chat. Apply through https://singly.com/jobs or kristjan@singly.com. Or, just come hang with us in #singly on irc.freenode.net and at our monthly happy hours [2].

Happy hunting!

[1] http://blog.singly.com/2012/06/13/our-first-big-hack-event-w... [2] http://www.meetup.com/Singly-Happy-Hour/

kristjan··on Loading half a billion rows into MySQL
Lots of reasons :)
kristjan··on Loading half a billion rows into MySQL
Maybe this is more consumable as "remove as much complexity as possible from the code". In this case, both the code and the DB become considerably simpler, and it doesn't sound like there was anything fancy at all going on in the end result. I think derwiki just meant the DB will handle this, so you can leave the implementation there, not in custom sharding code.
kristjan··on Loading half a billion rows into MySQL
It's just an estimate for the query engine, not a true row count. But good enough for a progress bar.

From http://dev.mysql.com/doc/refman/5.0/en/tables-table.html:

> For InnoDB tables, the row count is only a rough estimate used in SQL optimization.

kristjan··on Singly10k People's Choice Award
Link: http://www.jashsayani.com/together/
Page 1 of 2Next →