< Back to the archive

Like what you see? Subscribe here and get it every week in your inbox!

Issue #293 - October 20, 2024

Here are the top threads of the week, happy reading!

Top comment by buf

I'm a founder of 3 small saas companies that I run by myself, generating about $1M ARR.

1. First one I started 10 years ago. I built a bot that auto DMed people in various internet forums. My first 100 users came from that. The product is highly shareable, so it quickly grew. Now it's 1.6M users (most of them free).

2. Second started 3.5 years ago. My first 100 users came from simply emailing the newsletter list from my first company. This product has no free plan, so it became profitable instantly.

3. Third started 1 month ago. And it's been a struggle. I got 10k free users just by emailing my list, but 0 paying users. So I tried ads and had similar results from the ads. Now I'm taking a step back and understanding why they aren't paying, which involves just emailing them.

Summary: once you have an email list and viral social loops built-in, marketing gets easier.

Top comment by mamcx

> but everything I create or try to do seems like there are already dozens of other solutions doing the same thing

The major lesson I have after +20 years doing this: WHO CARES.

This concern is valid for a huge company or anybody that wanna get like 70% of the whole market.

For solo/small teams? Think of yourself as a street cart vendor that sells hamburgers, and is located on the front of mac donalds.

They still sell.

What you has but not others is that you are small, and is the actual person other person can , FOR REAL, talk about your product.

That is the whole thing of working as a freelancer, solo, small business. You can, FOR REAL, provide personal training/consulting/support, etc.

And that works even if you just take the product made by the big corporation and just know how to use it. There is business in being the guy who knows Excel well.

Top comment by bityard

I self-host my own email server (against The Greater Internet's better judgement, it feels) and one of the neat things I can do with Postfix is set any arbitrary character as a username/junk separator.

Gmail has supported this for a long time with the '+' character, but this has some major problems. Many things that accept email addresses don't recognize '+' as a valid email username character and won't let you submit the form. I hypothesize that some of this is poor awareness of what constitutes a valid email address, and some of it is intentional to force users to input their "real" email address. I have also run across a few systems that stripped off the '+' suffix off my gmail address.

My solution is to use the '.' as the separator because 'firstname.lastname' is a VERY common email username and I'm happy to not allow it in a "real" username on my tiny mail host.

So every new site or company I interact with gets user.acme@example.com instead of my "real" email address. I can filter incoming emails based on the To header. And I even have a list of companies (a couple well-known) that have leaked or sold my email address to spammers. Some day I'll write a blog post about that.

Top comment by simonw

I have yet to find a code assistant that's more generally useful than copying and pasting code back and forth from https://claude.ai and https://chatgpt.com

I use Copilot in VS Code as a typing assistant, but for the most part I find copy and paste into the chat interfaces is the most valuable way to use LLMs for coding.

Even more so with the Claude Artifacts feature, which lets me see an interactive prototype of frontend code instantly - and ChatGPT Code Interpreter, which can run, test, debug and rewrite Python snippets for me.

Top comment by simonw

It's interesting to explore https://where.durableobjects.live/ - a tool that maps where Cloudflare's worker scripts actually run.

Notably, while Cloudflare has CDN edge locations in countries like China and Russia they don't appear to run workers there.

EDIT: I was wrong - I misinterpreted the map. A solid border circle around a location indicates "Worker-only Datacenter" (see the map legend) and there are indeed locations with those solid borders in Russia (including Moscow and Yekaterinburg) and China (Haidong, Lanzhou and more).

I doubt we could get them on the record for this, but I suspect this may be very deliberate. Maybe CDN edge locations can be run completely securely with forwarded encrypted traffic, while workers are at a higher risk of physical attack.

Top comment by Benjamin_Dobell

Hacking TVs was a favourite pasttime of mine. There's nothing quite like flashing a TV with AOSP such that it thinks it's 55" smartphone. Lock screen and all.

See if you can find a service manual for your TV. You'll want to get UART as soon as possible.

Just remember crashes are for chumps: https://gist.github.com/Benjamin-Dobell/bb13f6169aaa48625453...

PS. I think that may be my favourite piece of code I've ever written. Mostly because it's completely absurd but worked just fine.

Top comment by runjake

Recent similar Ask HNs with discussion: https://hn.algolia.com/?dateRange=pastMonth&page=0&prefix=fa...

I think it'd best to just stay. I see one of two likely things happening:

1. Matt comes to his senses and formally secedes his control of the WordPress Foundation and WordPress OSS to a qualified group of people.

2. He doesn't and the project gets forked to something that gets traction and will be immediately compatible.

Top comment by barrkel

What is coding?

Actively typing in code, maybe 30 minutes long term average, with spikes up to 8 to 10 hours when the road ahead is clear and what to do is obvious, which happens about once a year for a few weeks. It's quite rare outside of greenfield, which itself is rare. It's much more common in hobby projects.

Debugging? Sometimes I can spend several days debugging a problem, not actively writing any code which goes into production, but creating harnesses, ad-hoc logging, verification / assertion routines and so on. The amount this averages to depends heavily on the maturity of the product and the health of the code. A mature product with a gnarly codebase means a lot more time debugging.

Reading code? I spend a fair amount of time reading and analyzing code before a chunky task, figuring out where the seams are, where the data I need comes from, what the best places to add code are, figuring out data flow. When I'm at the start of a task like that, I can do that for 3 or 4 hours a day. But long term average, it's more like 10 to 20 minutes?

Reviewing code: this is similar but different to reading code. I don't do as in-depth reading as I do for a task, but if I find something suspicious and I want to make sure I'm right, I can go for an hour or two on research, to prevent something problematic hitting production. But I guess this averages about 20 to 30 minutes a day long-term. I don't do as much code review as I used to when I was more senior roles before. Expect a lot more code review with more seniority.

Top comment by colinwilyb

I hope you'll address a few points:

1.Job hunting is dehumanizing: Most of the time you will receive no response to a carefully worded cover letter. There is no option to speak with a human, or point of contact. (I dub this /Throwing hope into the void and see what sticks/.)

2.Job hunting is primarily online. From searching job posts to application, the reach of an open position is literally world-wide.

3.Due to Covid, remote work is now in the zeitgeist, opening up remote work to many who otherwise wouldn't have considered it.

4.Digital tools for resume writing and bulk sending.

5.The stagnation of salaries, increased cost of living, and poor investment options has forced many into living paycheck to paycheck. In order to /get ahead/ the only option is to constantly seek new positions.

The deluge recruiters are feeling is merely the tip of a iceberg.

Top comment by CharlieDigital

If it's the problem I think it is, the solution is to run two concurrent prompts.

First prompt validates the input. Second prompt starts the actual content generation.

Combine both streams with SSE on the front end and don't render the content stream result until the validation stream returns "OK". In the SSE, encode the chunks of each stream with a stream ID. You can also handle it on the server side by cancelling execution once the first stream ends.

Generally, the experience is good because the validation prompt is shorter and faster to last (and only) token.

The SSE stream ends up like this:

    data: ing|tomatoes
    
    data: ing|basil
    
    data: ste|3. Chop the
I have a writeup (and repo) of the general technique of multi-streaming: https://chrlschn.dev/blog/2024/05/need-for-speed-llms-beyond... (animated gif at the bottom).