HNHacker News
TopNewBestAskShowJobs

zemo

3,233 karma · joined March 19, 2010

engineer at Whatnot, working on the discovery team. Previously: some games stuff, went to grad school for game design, worked on a bunch of startups. I wrote the multiplayer server for all of the Jackbox games.

Hacker School (recurse center) batch[1]. My great grandfather was a clown named Zemo.

[ my public key: https://keybase.io/jorelli; my proof: https://keybase.io/jorelli/sigs/qfLefSRzpZuCMRmTbonOu98s-GSF80avwYxBcf7K-84 ]

submissionscomments
zemo··on Ask HN: What game do you wish existed?
yes, the second one, the first one I'm not familiar with
zemo··on Ask HN: What game do you wish existed?
disclaimer: I worked at Jackbox for four years.

That’s kinda what The Jackbox Party Pack games are designed for. Think Pictionary, but you doodle from your phone and it shows up on your TV and there’s nothing to clean up.

zemo··on Ask HN: What game do you wish existed?
have you tried Umurangi Generation?
zemo··on Ask HN: What game do you wish existed?
I’m pretty excited for Palia, an upcoming cozy MMO, although I don’t think there’s much in the ways of combat planned. https://palia.com/
zemo··on Ask HN: What game do you wish existed?
I too wish for Sim Ant II, what a cool game. I tried playing Sim Ant the other day, the UI does not hold up at all.
zemo··on Ask HN: What game do you wish existed?
for 1, some games that I haven’t seen mentioned here are Manifold Garden and Superliminal. Neither are very difficult but both are very satisfying and well-crafted.
zemo··on Ask HN: What game do you wish existed?
have you played Proteus?
zemo··on Ask HN: What game do you wish existed?
a lot of that is a function of the matchmaking system. Your MMR (matchmaking rating) goes up or down only based on win/loss, not any characteristics of how you played that game. If you do phenomenally well but your teammates are terrible and your team loses, you lose the same amount of rank they do. The idea that the culture of a game is influenced by the rules of the game is explored in Nick Yee’s book “The Proteus Paradox”.
zemo··on Ask HN: What game do you wish existed?
hmm, maybe City of Gangsters?
zemo··on Ask HN: What game do you wish existed?
you might like Wargroove but I'm not sure if anyone is still playing the multiplayer. It's a turn-based tactics game.
zemo··on Logitech MX Mechanical Keyboard
> someone who has heard mechanical keyboards are cool but is daunted by doing any research into what mechanical keyboard options exist out there.

honestly I was into mechanical keyboards for a while, I put together a few kits, I bought into group buys on individual hand-crafted keys, group buys on keysets, and bought a HHKB to try topre switches. After a while I just stopped, because the scene is incredibly disorganized and constantly shifting (e.g., I was into mechanical keyboards for a year or two and /r/budgetkeebs didn't even exist, but lots of my friends still know me as the keyboard enthusiast guy so they always ask me where to get a keyboard). The barrier to entry is very substantial. There are a lot of people who would like a nicer keyboard who don't want to have to deal with that nonsense.

Take that whole concept, and now think about webcams. People have money to burn and spent a lot of time on video chat because of Covid. How many people sat around and did hours and hours of research to buy the perfect webcam? How many people heard the Logitech 1080p webcam (the C920x I think?) was pretty good, bought it, plugged it in, had a good product and literally never thought about it again? I'm willing to bet that second group is easily ten times as large as the first group. And alllllllll those people see "Logitech" and all they think is "it's a peripheral that will probably work well that I don't have to think about". That's an enormous market.

anyway I can't figure out if the MX means the switches have Cherry MX stems or not, which is annoying. Not something I would buy, but definitely a frustratingly underserved market segment.

zemo··on Success in Canada means moving to America
> what is the US gaining here handing out jobs to Canadians?

workers? Finding good engineers is hard and most people don't care where they come from.

zemo··on I want off Mr. Golang’s Wild Ride (2020)
it's probably the fourth time this article has been posted and people are tired of it
zemo··on I want off Mr. Golang’s Wild Ride (2020)
ZZzzZzzz I'm so bored of this article and I'm so bored of this author picking out extremely specific arguments about how things aren't exactly perfect for exactly his need, but moreso than anything I'm so bored of this culture of takedown posts being taken super seriously just because they're takedown posts, articles that are thirty pages long when they could be three or four, and the back-and-forth with cartoon characters blog posts.

> I've been suffering Go's idiosyncracies in relative silence for too long, there's a few things I really need to get off my chest.

this notion that because someone designed a tool in a way that is not exactly the way you wanted it to be is a form of suffering is ridiculous. You're not suffering, you are at best mildly inconvenienced.

> Most of Go's APIs (much like NodeJS's APIs) are designed for Unix-like operating systems.

This whole angle of attack is frankly absurd. Go's APIs (and the APIs of countless other ecosystems) are Unix-like because the Unix-like ecosystem is structured around interoperability. The reason that Go's APIs for dealing with Windows aren't as good as for other systems is that Microsoft has at every turn made their environments subtly different from other things often for no good reason at all.

This whole thing with making a file path with arbitrary byte strings that aren't representable in utf-8 is frankly embarassing. He's spinning a yarn about filesystem APIs and then goes on a tangent about string handling and how great it is that Rust displays one thing and Go displays another, but here's the rub: he used the `%s` format string operator, whose entire function is to print the uninterpreted bytes; if you want to print something quoted in a string-safe manner, you use `%q`. That entire section can be summarized in three lines of code:

    s := "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98"
    fmt.Printf("Hello, %s\n", s)
    fmt.Printf("Hello, %q\n", s)
https://go.dev/play/p/NVbLMhb7UkV

His examples are always like this: long, convoluted, and so complicated that people who know what's going on don't bother to interject because it's an impossibly tedious waste of time.

zemo··on Atlassian products have been down for 4 days
Jira requires a person to tailor it to your org. It can be pretty good if you have people who configure it correctly and have a workflow that suits your team/org, but that's kinda the problem: making Jira be good is a full time job. Confluence is just a terrible experience overall. Terrible editing, terrible browsing, terrible search. I've used both at multiple orgs, I've seen Jira be good, I've never seen Confluence be good.
zemo··on Thoughts on the Witness (2016)
It’s just fine. I’ve grown weary of how it seems to be the only game that gets discussed on HN.
zemo··on Thoughts on the Witness (2016)
I played 40 or so hours of the Witness, I think it’s one of the most beautiful and beautifully rendered video game environments, but as a whole found the message of the game to be unconvincing and juvenile. It tries to be deep but in the end the message seems to be, simply, “there are many ways of looking at things, but only one of those ways is right”. I got more joy out of Manifold Garden in less time, and found the puzzles in Stephen’s Sausage Roll more intriguing. The Witness has a lot of puzzles in the way that a sudoku book has a lot of puzzles. At some point, the stateless constraint-fitting puzzles of line-drawing started to feel like a chore. I loved the environments so kept playing, but didn’t actually enjoy the majority of the puzzles.
zemo··on Sam Altman’s Worldcoin promised them free crypto for an eyeball scan
dogecoin was invented as an intentionally inflationary currency as a joke on financial speculation; it was literally designed to stay worthless. THAT was the joke. The doge was a reflection of laughing at overly serious people. Dogecoin at its outset was a really fun and entertaining project and scene, because the entire thesis was about removing the get-rich part of crypto to just play around and experiment. It has, over time, warped into something else entirely.
zemo··on Ask HN: Who operates at scale without containers?
ah so you're very in the weeds.

I considered getting rid of nginx and writing the proxy layer myself but found nginx to be good enough for my needs so I avoided it. I might have been better served by HAProxy, which to my understanding has better semantics around connection draining, which nginx reserves for the pro edition.

My project didn't have auth, all clients used websockets, and all clients could retry. Haven't messed with systemd sockets myself. Using unix domain sockets and the filesystem to do dynamic sockets worked pretty well for me.

> Once a new service has started, we can signal the old service to shutdown for however long it needs by no longer listening on the socket and letting connections drain naturally. We're thinking about changing to dynamically allocated ports/sockets which is pretty natural in the container orchestration world.

this sounds pretty reasonable to me, what sort of problems are you having that make you want to change?

zemo··on Ask HN: Who operates at scale without containers?
you don't. That requires new nodes, so you have to drain nodes and replace them with new nodes that have the upgrade installed before adding them to the pool that hosts games. That process sucked but how often are you upgrading nginx?
zemo··on Ask HN: Who operates at scale without containers?
> it seems like redeploying a server without machinery to do things like dynamically allocate ports/service discovery for an upstream load balancer would be tricky

like most things with running servers, it's not that hard, there's just an industry dedicated to making people think it's hard (the tech industry).

Every game has a room code to identify the game, and a websocket open handshake has a URL in it. Every room listens on a unix domain socket and nginx just routes the websocket to the correct domain socket based on the URL.

zemo··on Ask HN: Who operates at scale without containers?
when I was at Jackbox we ran the multiplayer servers without containers and handled hundreds of thousands of simultaneous websocket connections (a few thousand per node). The servers were statically compiled Go binaries that took care of their own isolation at the process level and didn't write to disk, they were just running as systemd services. Game servers are inherently stateful, they're more like databases than web application layer servers. For large audience games I wrote a peering protocol and implemented a handful of CRDT types to replicate the state, so it was a hand-rolled distributed system. Most things were handled with chef, systemd, terraform, and aws autoscaling groups.
zemo··on US Senate votes unanimously to make daylight savings time permanent
huh? For people that actually experience seasonal affective disorder, the damage is already done by 4pm, your day has already been ruined. People who actually deal with this typically use a SAD lamp first thing in the morning.
zemo··on US Senate votes unanimously to make daylight savings time permanent
> I am not sure I know a single person whose morning wake-up time is dictated by the rise of the sun.

people with dogs. Dogs don't care about clocks and they will totally wake you up so they can poop and have breakfast.

zemo··on Go 1.18
people hate Go because Go is unapologetically designed from the framing of programmers being members of a labor class having differing levels of expertise. It's not the design itself; it's the design goals themselves that people are opposed to.

This Rob Pike quote gets bandied around in these discussions:

> The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt.

Ten years ago when I learned Go at the Recurse Center, I was early in my career and I picked Go as my language of study because I believed it was a good bet for my career prospects. I said to myself "I bet this is the next Java, and I bet that people who learned Java very early did very well for themselves". This bet proved correct; Go has been enormously useful to me in my career. Many people who go to RC pick languages like Haskell or a Lisp instead; things that are more interesting and challenging. While Haskell is well known for being mentally stimulating and very enriching, it is also well known for not seeing much industry adoption. You can sub a handful of other languages here, but basically just think of any very beautiful cutting edge experimental language that doesn't have a lot of industry jobs. I'm stick to Haskell for consistency in this post but you could just as easily say Lisp or Scala or arguably Rust these days; it's not about a specific language, it's about a specific grouping of languages that prioritize the beauty of the language and the effectiveness of the solo developer.

People get upset at Pike's framing that Go should be learnable by people with less-than-expert experience. As a person sees technology's ability to serve as a vehicle of class mobility, I see this as a great and noble design goal, because I think class mobility is fundamentally good. Ask yourself this: why do people consider it bad that a language acknowledge that it should help not only people with lots of experience, but also people with very little experience, and teams with mixed levels of experience?

My experience of programming Go for ten years and for being in these spaces for that time frame is that criticism of Go almost uniformly comes from people who can afford to invest heavily in things that have a low expected ROI; great and beautiful languages that don't have a lot of job prospects. Most people on Earth cannot afford the time commitment it takes to learn programming at all, let alone learning aspects of programming that they can't monetize.

I have never met a Go programmer that is bothered by the existence of Haskell. I have met many, many Haskell programmers that are bothered by the existence of Go. Ask yourself why that is. Ask yourself why someone would be so angry about something so wildly successful and useful to people. It's not even remotely a two-way street; the hatred goes one way.

This leaves us with the final problem: why can't people acknowledge that different people have different goals, and that those people's goals are just as legitimate as their own? Why are other people's goals threatening? It's because the existence of Go and the massive success of Go causes people to confront some aspect of class consciousness. It is impossible to witness the enormous success of Go and not confront the idea that programmers are laborers, and for some people, the idea of being a member of the labor class is simply not acceptable; criticizing Go thus becomes not merely an act of design criticism, but also as vehicle through which the critic can express something about their own socioeconomic class. There are many valid criticisms of Go, but there is also a category of Go criticism that exists more as a form of class signaling than anything else, and in these public forums, those two forms of criticism often get entangled in complex and opaque ways.

zemo··on Reddit can't build a better search engine
> Reddit posts are good because the people who create these posts or make comments are doing it to share their knowledge.

people post to Reddit (and here) not to share their knowledge but because they get a little squirt of dopamine from upvotes and downvotes and replies.

zemo··on Go’s Version Control History
I've been using git for twelve or so years. In the last few years I've been working on more projects with non-programmers and more projects involving media and it has made me dislike git more and more with every passing day. I really hope git is not where version control stops seeing innovation; there are a lot of projects for which it is ill-suited.
zemo··on Fetch API has landed into Node.js
node js is a web software platform over a decade old that does not include a stable API for making a web request so there are a bunch of community libraries for making a web request, and which one is "best practice" has changed like four or five times through the years. this is a new api for making a web request. yayy progress.
zemo··on €2.6M spent for a book at auction, believed they would own the IP
> in the last ten years, something seems to have arrested this direction of travel and reinstated local bubbles of thought, insulated from outside challenge.

...you are using one right now

zemo··on Using HTTP Basic Auth in 2022
if all the client needs is to see a 401, can't you just make a static /logout page that always renders a 401?
← PreviousPage 8 of 27Next →