HNHacker News
TopNewBestAskShowJobs

billyhoffman

3,831 karma · joined June 10, 2010

Field CTO at a security startup. Previously: Senior Principal something-or-other at public tech company. CTO of web performance SaaS company (acquired 2020). Founder of web performance startup (acquired 2015). Former web security researcher/public speaker.

I'm pretty findable.

submissionscomments
billyhoffman··on 'Baby Bust': Why Fewer Young People Expect to Become Parents (2013)
In the US child-to-teacher ratios have maximum limits usually set and enforced at the State or municipal level. This ratio also varies by age level with lower child to teacher ratios for infants than for toddlers.

In Georgia the ratio is 6:1 for infants. However there is a national daycare certification group NAEYC which has stricter ratios. The daycare where my kids went was NAEYC certified and the ratio was 4:1 for infants.

billyhoffman··on Dean of Engineering at University of Nevada wrote a paper that’s bad
* The entire paper is 278 words, excluding references

* There are 9 references, but no footnotes to show where a referenced work is actually being used.

* The paper provides no data.

* The paper mentions correlation between data that was taken, without providing statistics or graphs to prove said correlation.

* The paper's single photo, of a Drosophila Melanogastert fly, was copied from Pixabay, without proper attribution (Per reverse image search)

* The authors neglected to use a properly licensed image of a Drosophila Melanogastert fly which exists in Wikicommons.

* The paper's last sentence is neither a valid English sentence, nor an accurate summary of the paper. The sentence is "of these age factors when considering these options supply chain procedure for maintaining will be beneficial." That is not a typo. It literally starts with a lowercase letter.

Link to paper: https://isctj.com/index.php/isctj/article/view/250/250

Image on Pixabay: https://pixabay.com/photos/fruit-fly-fly-insect-animal-68310...

billyhoffman··on Laion Took Down Its Datasets After Discovery of Child Sexual Abuse Material
> LAION datasets (more than 5.85 billion entries) are sourced from the freely available Common Crawl web index and offer only links to content on the public web, with no images. We developed and published our own rigorous filters to detect and remove illegal content from LAION datasets before releasing them.

This makes me wonder if CommonCrawl WARC dumps themselves contain CSAM.

billyhoffman··on How are zlib, gzip and zip related?
WARC files (used by the Internet Archive to power the Wayback machine, among others) use this trick too to have a a compressed file format that is seek-able to individual HTTP request/response records
billyhoffman··on Calculator Construction Set
I love Andy's early history of the Mac at Folklore.org. It's a great read.

A few years back, with Andy's blessing, I extracted all the posts and converted them to Markdown, to address a few issue I found with Folklore.org:

* Does not have a mobile friendly layout

* Missing images

* Low res-thumbnails used in articles, requiring links out to high resolution ones. Missing copyright/license information about the images

* Broken links

* Accessibility issues (images without ALT text, etc)

* Formatting issues

* No Metadata

* Table-based layouts with complex and obtuse HTML markup.

I find this an easier reading experience.

Project: https://github.com/acidus99/folklore.org-export

All the posts in Markdown: https://github.com/acidus99/folklore.org-export/tree/main/Po...

billyhoffman··on The product manager role is a mistake
I think most people have an incomplete understanding of what a product manager should do. It's bigger than "project management" or "project management + defining a roadmap + talking to customers."

What you are building, why, how you price it, how you speak to the market about it, how you position yourself in your category, how you partner with others to provide a better solution (either services companies to provide a turn-key solution or other software companies), how should you should allocate your engineering resources to best increase revenue, etc. And these questions touch almost every department in the company, so they have to be great communicators.

Just a few areas I routinely see bad PM's skip:

- Sales / Partner Enablement (awesome, you built something, but it doesn't matter if the field does't understand it or can explain it and its value)

- Market research / segmentation (are you building the right stuff for what you are targeting?)

- Creating new products / SKUs for opportunities within your existing target market/segments (growth)

- Identifying new/adjacent categories to develop products for (growth)

- Balancing building for today's customers vs building to get new customers

- Pricing/packaging (I'm not talking about physical product packaging)

- Build / buy / partner analysis

The Pragmatic Management Framework is a nice framework really shows the breadth of what a PM should be doing:

https://www.pragmaticinstitute.com/product/framework/

billyhoffman··on Apple TV, now with more Tailscale
Sadly an Apple TV can't also be the media server (at least for something like Plex). But just about anything else can run media server, and you can go really low end especially if you don't need it to transcode your media. Some software like Infuse will stream the original media file to the Apple TV, and the transcoding happens on device.
billyhoffman··on Pixel Sea: Search 88x31 badges and 32x32 icons
wow, I was not expecting to fall down a hole of the creator's work for 15 minutes. This was especially fun:

https://textures.neocities.org

billyhoffman··on Google engineers want to make ad-blocking (near) impossible
Because Google pays Mozilla ~$500M dollars a year, nearly 80% of all of Mozilla's revenue, use Google as the default search provider.

https://www.bloomberg.com/news/newsletters/2023-05-05/why-go...

If Google turned off this money faucet, Mozilla would be severely impacted. Unfortunately as Firefox's market penetration gets lower, the value of that deal gets lower, should Google stop paying it and someone like Bing takes over.

billyhoffman··on New in Chrome 115
So they created a new event so people can use JS to create "reading indicators which move as you scroll." You know what else can do that? Scroll bars. In the browser. That don't disappear. Those tell you how far you are in the document as well.
billyhoffman··on Threads isn't ever going to connect to Mastodon, so stop pretending that it is
Because their target is Twitter, and the people fleeing it. So time to market is critical. A PM would be laser focused on shipping a product with the feature set needed to do that as quickly as possible. Integrating with the fediverse doesn't help that, so it probably not high on the priority list, even if they genuinely want do integrate with it.
billyhoffman··on Patrick Nagel's art used in Intel 8086 ads
Patrick Nagel has a distinctive minimalist style, most widely known for creating the cover of Duran Duran's Rio album. I was surprised to learn he created ads for Intel.

More examples here: https://intelalumni.org/historical-item/crush-advertising-ca...

billyhoffman··on Android Games on PC
Open the start menu on a consumer version of Windows today and you mY think this already happened: Candy crush, Bejeweled, Netflix…
billyhoffman··on Beyond Markdown (2018)
JSON won because parsing it on in the browser was just was a call to “eval()”, and then you just access the object using normal JS conventions/syntax (e.g data.foo[0].bar). Whereas XML required creating a DOM parser and document fragment, and then using cumbersome HTML DOM methods like “ getElementsByTagName()” to get each value directly (or worse Xpath). It totally sucked.

Native support for JSON parsing and stringify helped when it came later. The Selector api that also came later made XML parsing a little easier if you didn’t want to use XPath, but by then most things were JSON anyway.

billyhoffman··on The Mac Pro’s biggest problem is the MacBook
Do they? While eGPUs were a thing for Intel macs, I don’t know if any external GPUs they could be used for graphics with Apple silicon, even in a thunderbolt enclosure.
billyhoffman··on The Mac Pro’s biggest problem is the MacBook
I think this is unlikely. All of Apple Silicon is based on a unified memory architecture. GPUs and CPUs share the same, incredibly high-bandwidth memory. In fact, the GPUs CPUs in unified memory are all part of the same chip package.

Whereas All current PCI-E graphics cards include their memory on the card itself. Which means the CPU is having to copy data to, and from the external graphics card to do basic video operations.

In this interview on The Talk Show, John Ternus, vice president of Apple hardware, says he sees no way to incorporate external graphic cards into the Apple Silicon architecture (at 22:48)

https://youtu.be/DgLrBSQ6x7E

billyhoffman··on You can serve static data over HTTP
Reminds me of a funny take from @marginalia: The Static File Startup:

> We’re going to disrupt Internet hosting and serve static files in a novel way through a cloud based SaaS.

https://www.marginalia.nu/log/51-the-file-startup/

billyhoffman··on The Gemini protocol seen by this HTTP client person
> If you bothered writing a spec, it might as well be unambiguous, no?

Sure, people want unambiguous specs. However there is a list of literally dozens of working clients, servers, and libraries that were implemented based on the Gemini spec as is. Perhaps Daniels concerns are, in practice, not as important?

https://github.com/kr1sp1n/awesome-gemini#clients

I would also point out the hell that is the HTTP/1.0 and HTTP/1.1 specs, and that it took ~15 years for the HTTPbis group to remove all the contrary and ambiguous parts of it. This had little impact on the raise of HTTP

> His point is also to criticize the technical choices but that's fair game too.

Sure, but many of his criticisms are false. Full Stop. (servers and clients DO support TLS resumption. Proxying does work and there are multiple working examples, client's do server certificate validation)

Or don't make sense ("Gemini closes a TLS connection after each request? HTTP figured out keeps-alives in 1996! This is bad design." HTTP has different access patterns. If Gemini had those access patterns it would be bad design. It doesn't)

billyhoffman··on The Gemini protocol seen by this HTTP client person
I've built search engines, servers, clients, a Wayback machine, and other things in Gemini, so I have a better-than-average informed view of the protocol. Many of these observations are wrong or don't matter in practice. (Paraphrasing Daniel)

> Short-lived TLS connections bad!

Content served over Gemini doesn't cause a cascade of requests like HTML does. You don't download a page, close the connection, and immediately need to fetch something else. A subsequent request, if it happens, is dozens of seconds later.

> No TLS resumption

This is false. Many servers support TLS resumption, using the typical methods like session tickets. Usually you just get this with the TLS library. Many servers even support TLS/1.3 with 0-RTT resumption options. In fact, here is a service that tests if your client is using TLS resumption:

gemini://gemini.thegonz.net:1956/

> TLS client certificates (!) for keeping state between requests

This sounds odd to someone who only knows client-side certs from HTTP. Think of them as unforgeable session identifiers that you the user are control in. Want the server to know who you are between requests, you client generates a cert and its hash is used to uniquely identify you. Someone rigged up a cool service where you can play Zork and other text adventure games, and the server know what game to send you to based on that certificate hash. Don't want it anymore? Delete the cert. It's like opt-in cookies.

In practice, very view parts of Gemini use Client-side certs (primarily forums). My latest crawls shown less than 0.01% of all URLs in Gemini space use a client-side cert.

> No inline images

This isn't a thing in practice. For most clients, when you click on a link to the image, they display the image inline. Here is Lagrange, perhaps the most popular client, displaying an image inline from a Wired article:

https://github.com/acidus99/NewsWaffle/raw/main/imgs/newswaf...

Oddly Daniel is taking a positive and framing it as a negative. What the positive here is is that Gemini clients don't automatically request anything unless you click it. So there is no way to have a tracking pixel or anything where you are automatically making a request to another, external system. That's a GOOD thing.

> URLs are ambiguous

In practice, this isn't an issue. I run a Wayback machine for Gemini (named Delorean) which has 3M URLs captured. The only odd/malformed URLS or content I've ever encountered are super super old servers, from late 2020 when the protocol was still being developed that send a tab instead of a space in the response line.

> Proxying can't work

This is false. It does! I built and run a Gemini-to-HTTP(s) proxy, lets you. It fetches HTTP(s) content. It converts HTML on the fly to gemtext, RSS into links, and proxies all other content. Duckling Proxy is another popular proxy.

gemini:/gemi.dev/stargate.gmi

> The Gemini protocol reeks of GOPHER and HTTP/0.9 vibes. Application protocol style anno mid 1990s with TLS on top. Designed to serve single small text documents from servers you have a relation to.

Yeah. Exactly. Why are saying this in italics like this is a bad thing?

> TOFU and scare questions about how certificates are stored in a multi-user system

They are stored just like any other data is stored in a multi-user system. Most client's use a dot directory in the user's home. I seriously have no idea why someone like Daniel thinks storing a the TLS fingerprints for a few thousand certificates is hard.

> I strongly suspect that many existing Gemini clients avoid this huge mess by simply not verifying the server certificates at all or by just storing the certificates temporarily in memory.

I have literally never encountered a client that doesn't verify server certificates. Clients aren't just storing them in memory temporarily. Personally my client stores them in a Sqlite database in a dot directory of the user's home folder.

Overall, I think Daniel is missing the point. Gemini isn't an HTTP replacement. These are systems that don't need to scale to solve the C1M problem, or even the C10K problem. I run some of the more popular services and a few hits per minute is a busy time for me. These are fun, hobbyist systems, playing with a protocol that isn't economically practical to commercialize and hence doesn't have to deal with ads, tracking, etc.

Daniel's post kind of reads kind of like the CEO of Coca-cola talking about how the supply chain and economics of a child's lemonade stand won't scale. Stop thinking about it so hard. It's just for fun.

billyhoffman··on Majority of gig economy workers are earning below minimum wage: research
Awesome. My commute time is now 5 hours each way. Please pay me.

Hyberbole aside, how would that even work? The further away from work someone lives, the more "commute time" they get paid? That has perverse incentives:

* I no longer take mass transit because driving myself is slower and I get paid more.

* I move further away, and take longer to get to work, and spend that time listening to audio books. My employer pays all that time, I'm doing a leisure activity, and I'm having a greater negative impact on the environment.

billyhoffman··on An Update on the Lock Icon
> We continued to mark HTTP as insecure in the URL bar.
billyhoffman··on There’s more than one way to write an IP address (2019)
not exploits of the OS, but I've used this to exploit web applications quite a bit. Tricks like these get your past a lot of input filters or validation logic. This allows me to trick these apps into making HTTP requests to internal or private IPs/hosts.

As an example, think of a cloud based web performance monitoring system. I trick it into making HTTP requests to 169.254.169.254, and I get access to data from their AWS metadata service...

billyhoffman··on Play on BSD
Wow, it’s not often I see something posted to HN that also is a Gemini capsule:

gemini://playonbsd.com/

billyhoffman··on Explore Washington DC through the eyes of a spy
If it ends at Ben’s Chili bowl I’m done. That place is delicious
billyhoffman··on We don’t know enough about the Pornhub acquisition
https://help.pornhub.com/hc/en-us/articles/5357457259155-202...

PornHub has transparency reports tracking how many upload there are to the system, where they come from, how many uploads get removed, how the removals were detected (e.g. by your user report, detected by internal tools before anyone saw them, etc.) they also discuss and the automated systems and manual processes they use. It’s all rather sophisticated, including an AI train system that does age estimation to detect, previously unknown, CSAM material.

billyhoffman··on JSON vs. XML
I've met Douglas a few times at JS Conferences, and he is an excellent engineer (read up on his work on the NES version on Maniac Mansion). However this passage about starting a company and trying to raise capital from VCs demonstrates that even excellent software engineers can be surprisingly myopic, dismissive, and naive about software businesses.

> Douglas: For me, the most difficult thing was raising money. You’re constantly going to Sandhill and calling on people who don’t understand what you’re doing, and are looking to take advantage of you if you can, and they’re going to do that, but you have to go on your knees anyway.

> I found that stuff to be really hard, although some of them I really liked. And sometimes I’d be sitting in those meetings and I’d be thinking, “I wish I was rich enough to sit on the other side of the table, because what they’re doing right now looks like a lot more fun than what I’m doing right now.” And it was even more difficult raising money then, because at this point, the.com bubble had popped and all VCs had been hurt really badly by that. So they were only funding sure things at that time, in late 2001, early 2002.

> And I thought we were a fairly sure thing, because we had already implemented our technology. And by this point, Chip and I understood the problem really well. And we had a new server and JavaScript libraries done in just a few months. And we had demonstrations. We could show the actual stuff. So it wasn’t like we were raising money so that we could do a thing. We had already done the thing, we needed the money so that we could roll it out. And that wasn’t enough for them. They wanted to see that we were already successfully selling it. And I was like, “If we could do that, we wouldn’t need you.”

Only they hadn't. They had built a demo of what we would later call a web 2.0 app. It wasn't even an application that solved a business problem or did anything specific. It was just showing the concept. That's not a product and that's not a business. The VC's point was: Show us proof that this idea has tangible benefits people will pay for.

The biggest misconception of VC's is that you raise money to "successfully sell" something you've built. You don't. You raise VC money to scale something that has value. So you need to communicate the business value, and ideally have proof-points (either in the form of sales, or data) that prove the value.

Of course Douglas found raising money difficult. But he doesn't seem to have the self awareness that this was probably due to him, and not the rich suits on the other side of the table.

billyhoffman··on Text only news websites (2022)
For the terminal, I use amfora: https://github.com/makew0rld/amfora

For a GUI, I use Lagrange: https://github.com/skyjake/lagrange

Lagrange is sort of the Netscape of Gemini. It works on all the major desktop and mobile OSes. Personally prefer Elaho (iOS) or Buran (Android) for mobile

billyhoffman··on Text only news websites (2022)
Thanks for letting me know. aldaily works great in raw mode:

gemini://gemi.dev/cgi-bin/waffle.cgi/raw?https%3A%2F%2Fwww.aldaily.com%2F

Clicking on the "more" links which take you to the news articles also works properly as well.

(you can get to raw mode by clicking "Force article view" and then "raw mode." I should probably expose that in other places)

NewsWaffle tries to determine the type of page. Articles get displayed with content run through readability, and then the HTML is stripped down. If its a "links" page, like the home or section page on a news site, it using HTML elements to try and find links to news stories vs navigational links to other parts of the site. Part of that is looking for links with longer text, since link text to news stories tend to be a few words. This helps sort "About Us" from "New Fusion Experiment a Success"). I'll check into why aldaily isn't working properly

Sorry I can't seem to reproduce the Techmeme issue. It works for me:

gemini://gemi.dev/cgi-bin/waffle.cgi/view?https%3A%2F%2Fwww.techmeme.com

billyhoffman··on Text only news websites (2022)
I too was using text-only versions of sites like CNN, Reuters, or Christian Science Monitor[1], and they were fine. But what I really wanted was to turn any news website into a text-only website.

So I build NewsWaffle, which for any website:

https://github.com/acidus99/NewsWaffle

* Automatically builds a list of news stores, separate from the navigational hyperlinks.

* Detects RSS/Atom feeds to provide a more accurate list of news stories.

* Uses Readability to show only article content on article pages.

* Uses meta data like OpenGraph or Twitter cards to provide richer formatting, and to determine page type.

It regularly converts 900 KB home pages or 1.2 MB news articles into into 3KB for links to news stories and 5K of text

It does this by:

* Using semantic tags like <header>, <footer>, and <nav> to determines which hyperlinks are navigational and which ones are likely links to news articles.

* OpenGraph meta data to determine page type news stories and extra metadata.

* A Aggressive HTML parser that strips out a ton of tags, CSS, JS, etc

* Readability library to extract out the text of news articles

I built this as a service in Gemini, so if you have a gemini browser you can try it. Otherwise, here is a HTTP-to-gemini proxy showing you what a NYT article looks like:

Gemini link: gemini://gemi.dev/cgi-bin/waffle.cgi/

NYT Homepage: https://portal.mozz.us/gemini/gemi.dev/cgi-bin/waffle.cgi/li...

NYT Article: https://portal.mozz.us/gemini/gemi.dev/cgi-bin/waffle.cgi/ar...

[1] https://www.csmonitor.com/text_edition

billyhoffman··on SQLite the only database you will ever need in most cases (2021)
Only you can’t copy it if it’s in the middle of a transaction or you corrupt it and have to roll back the Journal. And coping the journal, WAL, and DB itself directly and trying to backup from that isn’t recommended. In fact SQLite itself has a purpose built backup API.

https://www.unixsheikh.com/articles/sqlite-the-only-database...

Yes, technically a SQLite database is just a file on disk. And for the most part, you can treat it like other files on disk. Except for when you can’t. The GP’s questions are valid

← PreviousPage 2 of 21Next →