HNHacker News
TopNewBestAskShowJobs

AndrewStephens

3,603 karma · joined April 23, 2015

Blog: https://sheep.horse/

Mastodon: @sheephorse@mastodon.online

submissionscomments
AndrewStephens··on Let's Not Encrypt (2019)
Hey, I only read EmbarrassingFetish.com for the recipes section (I recommend their carrot cake.) I'm not into the rest of the stuff there and you can't prove it thanks to HTTPS.

More seriously, you are not wrong. Site Authentication is still a problem and actually the weakest part of HTTPS but it is also more of a people problem than a technical one. Nothing stops somebody from registering MyB4nk.com but at least HTTPS stops crooks spoofing MyBank.com exactly.

AndrewStephens··on Let's Not Encrypt (2019)
It is a shame that HTTPS is required for sites these days but that doesn't change the fact that it really is necessary, even for the smallest of blogs.

HTTPS does three interrelated things:

Encryption - the data cannot be read by an intermediary, which protects your readers' privacy. You don't want people to know what pages you read on BigBank.com or EmbarassingFetish.com.

Tamper Proofing - the data cannot be changed by an intermediary, which protects your readers' (and your server) from someone messing with the data, say substituting one bank account number for another when setting up a payment, etc.

Site Authentication - ensures that the browser is connected to the server it says it is, which also prevents proxying. Without this an intermediary can impersonate any site.

Before the big push for encrypting everything it was not uncommon to hear of ISPs inspecting all traffic to sell to advertisers, or even injecting ads directly into pages. HTTPS makes this much more difficult.

AndrewStephens··on Novelty Automation
I visited Novelty Automation in London a couple of months ago - it is everything you could wish for and more. Get there when it opens as it is a small space and does fill up quickly.
AndrewStephens··on A competitor crippled a $23.5M bootcamp by becoming a Reddit moderator
I have some bad news for you about news.ycombinator.com or any other web forum. Unless you actually own the web site you can be prevented from posting on a whim.

Of course, most reputable forums have policies and rules but at the end of the day these do not mean much. Who are you going to complain to if you get unjustly banned - the Internet police?

You can always start your own blog/forum/subreddit and post whatever you like.

AndrewStephens··on Resurrect the Old Web
All that is happening on Discord these days. It is a shame that this is not happening over open protocols but I doubt most people care.
AndrewStephens··on Everything that's wrong with Google Search in one image
People are really starting to notice the sharp decline of Google search. I blogged[0] of a very similar experience a few months ago.

I don't even mind the AI Overview (too much) but the search results themselves are noticeably worse. In my example, the best search result and the one that the AI summary is clearly based on is the 6th ranked result.

Is Google doing this deliberately to make the AI Overview seem better?

In an ideal world, Google would use AI to provide better search results. Something like: "Here are the results for your search term A, which was slightly ambiguous. I suggest added term B or C depending on what you meant". It seems like that is not going to happen.

[0] https://sheep.horse/2025/4/yo_google%2C_thanks_for_the_ai_ov...

AndrewStephens··on Choose Your Own Adventure
I loved CYOA books as a child of the early 80s. It was a boom time for choice-based books. CYOA was first but books aimed at more mature (meaning much more gory) audiences were common. Fighting Fantasy was probably the best known, but Lone Wolf and Way of the Tiger were also amazing to my young mind.

This kind of Interactive Fiction is still being developed today. If you like Star Trek you might enjoy my own choice-based game[0] but literally hundreds of games of various level of complexity are being produced every year.

[0] https://sheep.horse/voyage_of_the_marigold/

AndrewStephens··on Making a font of my handwriting
I did this for my old blog back in the 2000s - I used an online service that produced a pretty bad font that I could clean up using FontForge into something reasonable. It was a fun novelty but my penmanship is pretty bad and once in a while I would get flamed in the comments in my own handwriting.
AndrewStephens··on Say Bye with JavaScript Beacon
There are several reasons that you cannot just count the number of times your server has served the page.

The biggest is bots - on my site (and I assume most others), legitimate requests are far, far outweighed by bots. Sometimes you can tell that they are bots but it is very common for bots to pretend to be real users. Oftentimes you can't tell from a single request but only but looking at the pattern of requests.

Some bots do take the trouble of running scripts on the page but thankfully they are in the minority so far.

Caching would certainly break the system as well, in the other direction.

AndrewStephens··on Eels are fish
> out at sea

Surely you mean ASEA, my least favorite crossword non-word.

AndrewStephens··on Say Bye with JavaScript Beacon
The beacon API has exactly one use - reliable analytics. Sending a ping on leaving the page is a pretty contrived example - the beacon API is useful at any time.

I use the beacon API in my homebuilt hit-counter. It means that even if the user navigates away before the hit is registered, the request will still have a fair chance of being received by my server.

Of course there are other ways of doing this, but who wants to muck around with service workers or websockets when there is a simple, well-supported API that does exactly what you want?

AndrewStephens··on Tufte CSS
It's my website and I'll do what I want! :)

More seriously, you bring up a good point about form factors. I imagine you are reading my site on a cell-phone. On these devices I purposely made the page width more-or-less fill the width of the screen to fit more text in at a readable font-size.

This used to be a reasonable choice because cell phones all had bezels. Now that many phones have screens that extend all the way to the edge of the device, pages like mine look weird as the text bleeds underneath the users fingers.

Just another example of how it is difficult to design a page that looks good on the multitude of devices that people use these days.

I'm probably not going to change it though.

AndrewStephens··on Tufte CSS
I have been using (an older version of) Tufte CSS on my blog[0] for years now. I had to tweak it quite a bit before I thought it looked OK on both phones and tablets but I really think it does work well for the longer-form posts I was originally aiming for.

[0] https://sheep.horse/everything.html

AndrewStephens··on Why did dlclose not unload the library? (2023)
This is the way.

As this article details, there are so many circumstances that preclude DLLs being unloaded completely that I was surprised that their design actually worked at all. So many language constructs do not play nicely with the idea that code and static data can just disappear at runtime.

AndrewStephens··on An interactive guide to SVG paths
I really could have used this last year when I was making a web adventure game with randomly created map. SVG is one of those frontend technologies that seem pointless until you really need them. Dynamically creating SVG in response to user actions in the game provided a very nice graphical representation of the adventure.

Unlike the author of this piece, I found the lower-case relative commands extremely useful for creating shapes like arrows (or in my case, sectors of space) that can be translated around later.

AndrewStephens··on Building Bluesky comments for my blog
I like your solution - I think it is perfectly fine for a low traffic blog.

Personally I find comments not worth the bother and purposely did not include them on my site. My blog is an expression of my personality and the idea of other peoples words appearing on my pages seems weird to me.

I know people enjoy feedback, which is why I have taken to emailing bloggers whose work I enjoy instead of leaving meaningless comments.

AndrewStephens··on Tom Lehrer has died
I used his songs as examples in a web audio project a few months ago - as others have mentioned Lehrer generously put all his music in the public domain making it perfect for use in other projects.

Originally I was going to use one of his albums but I found that his humor still hits hard after all these years, to the extent that I thought the songs would detract from my project. In the end I just used my three favorite song: The Elements, We Will All Go Together When We Go, and the absolutely brutal takedown of Werher Von Braun.

AndrewStephens··on MacPaint Art from the Mid-80s Still Looks Great Today
I am not a game purist and modern games are just fine, but I do not see the point of AAA games employing 300 artists to model blades of grass that have no gameplay effect. Sure, the screen shots lot great but unless you are making GrassSimulator2000 it would have been better to use those resources for something else.
AndrewStephens··on Lessons from creating my first text adventure
I used to be a bit of a parser purist but lately I have been coming around to choice-based games. Although choice-based games have traditionally been simpler, there is nothing saying that a choice-based game cannot have a complex model of the world and interesting puzzles.
AndrewStephens··on The Book of Shaders
This is by far the gentlest introduction to shaders I have found. It was a great help when I was working on a toy system to crossfade between images on a web page.

Such a shame it has never been completed.

AndrewStephens··on Brazil's Supreme Court makes social media liable for user content
> But the worse problem is, who decides what's "damaging"? The politicians do.

It is the courts that decide damages.

My argument in the post is that it is really only the widely distributed "viral" posts that cause enough damage to for liability to be an issue. Since the social media companies have a lot of say in what goes viral and closely monitor popularity for advertising reasons, they are in a position to fix the problem and a liable if they do not.

They don't even have to remove posts - just stop pushing them.

AndrewStephens··on Brazil's Supreme Court makes social media liable for user content
Sorry, I was imprecise with my comparison. A better analogy would be that the USPS doesn't scan your post to figure out which pieces of mail you are likely to actually look at and then affix stickers to those letters advertising related products.
AndrewStephens··on Brazil's Supreme Court makes social media liable for user content
Personally I think that social media companies should be at least in part liable for content posted by their users. There is a tendency to treat social media as a mere conduit, like the post office, that should not be responsible for content but the post office doesn't decide who sees what or profits from advertising inserted into mail.

I thought about this a few months ago and came up with this <strike>rant</strike>completely reasonable proposal[0] that tries to balance internet freedom with assigning limited responsibility for user content published by web sites.

Summary: under some conditions based on the number of views, whether any money changed hands, and whether the post was widely shared or mostly private, a publisher should be liable for some of the damages caused by a post.

[0] https://sheep.horse/2025/3/section_230_and_internet_freedom%...

AndrewStephens··on Convert photos to Atkinson dithering
Thanks. I originally just wanted pixel-to-pixel dithering (quite difficult with modern browsers and retina class displays) but after I saw the results I knew I needed to add lower resolutions as well. It looks really good with some images, especially photos with lots of details - almost like a high-quality printed magazine. However you are right that the extra detail can be distracting to the eye.
AndrewStephens··on <Blink> and <Marquee> (2020)
This comment is under construction - check back here often to see updates!
AndrewStephens··on Convert photos to Atkinson dithering
This implementation is great and the interface brings back memories.

I was wondering why my Atkinson dithering web-component[0] was getting more hits today - sad news. I’ve always thought that Atkinson dithering produces the nicest images on really crisp monitors like the original Mac - something about it just looks cool and 80s which is why I used it in a game last year.

[0] https://sheep.horse/2023/1/improved_web_component_for_pixel-...

AndrewStephens··on How to post when no one is reading
I have a scattershot blog with infrequent posts and random projects. While I enjoy attention I have found that chasing views is a losing game. Now my goal is to write the posts I would like to see.

One trick I have found to maintain focus is to not announce that you are going to write a particular thing. Somehow publicizing a forthcoming work means that I am less likely to actually complete it.

AndrewStephens··on Learning from the Amiga API/ABI
The differences between the Amiga and Mac are a fascinating study in priorities. The Amiga was orientated around home use so its graphics hardware was designed to be attached to a TV. That design goal affected the entire system, to the point that the system clock changes frequency depending on whether the machine is outputting PAL or NTSC.

Technically the Amiga could display a rock solid hires picture but only on a special monitor that I personally never saw.

The priority on the Mac was to have a high quality monitor for black and white graphics. They put a lot of effort into drawing libraries to make the most of in-built display.

The result was that the Amiga was perfectly fine for playing games or light word processing but if you actually needed to stare at a word processor or spreadsheet for 8 hours a day you really wanted a Mac.

AndrewStephens··on Show HN: Every problem and solution in Beyond Cracking the Coding Interview
I am the OP. Please understand that I am not against coding problems in interviews. Anyone who has done any interviewing will tell you that a surprising number of supposedly qualified applicants cannot code at all (usually because they have been doing project management for too long.)

And if you have a specific industry need to invert a binary tree or fill 8 containers with 32 differently sized boxes or whatever then go nuts. But I have found working through a 30 minute exercise with the candidate, asking them to explain their thought processes, and listening to what questions they ask is much better than just giving them 30 minutes to bash their head against a problem.

It is more effort for the interviewer though because it cannot be automated. But it does allow you to scale the interview by asking things like "What would it take to make your code thread safe? Imagine 4 threads. Now imagine 1000, what would you change?", etc.

AndrewStephens··on Show HN: Every problem and solution in Beyond Cracking the Coding Interview
Cracking the Code Interview is a great book and excellent for practice and brushing up. But I have found leet-code questions terrible for actually interviewing candidates. A lot of them boil down to whether the candidate knows the specific trick or can regurgitate the memorized solution.

(Maybe I am just bitter because I have more than once bombed a leet-code interview myself)

I interview a lot of people and my go-to coding question is actually a pretty simple question that might be found in a 2-year coding course. What I am looking for is production ready code, good error handling, tidy design, and understandable code. All things that leet-coding specifically discourages.

← PreviousPage 3 of 22Next →