AOL Underground Podcast Interview about AOL-Files.com

A screenshot of AOL-Files.com circa 2001

Back in 1998 when I was 13 years old I got heavily involved in the AOL hacking scene, originally building add-on software called progs (Revolution, Meridian), publishing code libraries called bas files (Alpha32), and later co-founding AOL-Files.com (where I went by the hacker alias Tau), which became a massive community and educational resource for folks interested in that scene.

These experiences got me hooked on programming and building products which has had a huge impact on my life that continues to this day.

Recently Steve Stonebraker, creator of the AOL Underground podcast, reached out to see if I was interested in being interviewed about that time period. I jumped at the chance.

For anyone interested in hearing me reminisce about the good ‘ol days of AOL hacking, you can listen to the full interview here: Tau – Co-creator of AOL-Files.com. We cover how I got started building progs, co-founding AOL-Files, many of the major exploits that followed, and much more.

Updates: Preceden Trends, Training Help Scout’s New Analytics Engineer, Don’t Look Up, and Ray Dalio’s Principles

Photo by Ivana Cajina

Preceden

  • Recurring Revenue: In January 2021 I introduced automatically recurring annual plans to Preceden. Prior to that the annual plans did not renew automatically which was an intentional (but bad) choice I had made because most users did not user Preceden for more than a year. However, the lack of recurring revenue made it really hard to grow the business because each year I’d basically be starting from zero (though some customers did manually renew). The changes I made last January were meant to address this: annual plans automatically renew by default, but users can easily disable that. I also email them a reminder 15 days prior to renewal, and a receipt when the charge happens, and also offer a 15 day refund window. This has worked well: most users who have no intent to use it long term wind up cancelling prior to renewal, those that forget can get a refund, and those that want to maintain their access can let their subscription automatically renew. Needless to say, this month (January 2022) has been stellar for renewal revenue.
  • New Revenue: This has been a challenge recently and is what I’m primarily focused on at the moment. Despite my best efforts, Preceden has languished at the top of page 2 for years for most key search terms. While I very much prefer product work over marketing work, I also recognize that marketing work to drive more quality to the site can move the needle much more than product improvements at this point. I have a few projects in the work that should help here.
  • Balance: This raises an important question though: how much of my day do I spend on potentially high impact marketing work (which I don’t terribly enjoy) vs low impact product work (which I do enjoy). This goes towards the question of what my goals are: do I want to grow the business as much as possible or enjoy my day as much as possible? Of course there’s some healthy middle ground, but I’ve been thinking a lot about how to balance the two.

Help Scout

We recently hired a new Analytics Engineer and I’ve been spending a good chunk of my contract work at Help Scout getting him spun up on everything. That brings Help Scout’s data team to 3 folks: a full time lead, a full time Analytics Engineer, and me (a contractor). We’re also work on hiring a full time product analyst which should round out our team very well.

Solana

In my last update I mentioned I was diving into Solana application development.

I’m glad I played around with it, but it just didn’t hold my attention very long. It would have helped if I had come up with some interesting use case for it besides speculation, gambling, DeFi, and NFTs, but that’s 99+% of what crypto is these days.

Plus, splitting my professional work between Preceden, Help Scout, and Solana was just too much to juggle well.

What I’m Watching

One movie I keep thinking about is Don’t Look Up on Netflix:

Of course there’s the obvious and important climate change metaphor, but it has me also thinking a lot about the shortness of life and not focusing on trivial things.

What I’m Reading

Ray Dalio’s Principles for Dealing with the Changing World Order. It’s a brilliant book where he looks at various long term economic and political cycles and how they explain in part the dynamics happening in the world today, especially with respect to US and China.

That’s it for now, hope y’all are doing well.

Nick Kolenda Reviews Preceden

Nick Kolenda is an author, teacher, and consultant who specializes in the psychology of marketing and related topics like pricing optimization, sales psychology, and website behavior. He’s also happens to be a regular in a poker game I host each week.

A few months back he mentioned that he was starting a new business to provide psychology-focused website reviews. With his large 50k+ mailing list audience and 13k+ YouTube subscribers he frequently gets asked to do these type of reviews and so turning it into a business made a lot of sense.

And so when he graciously offered for Preceden, my timeline maker software, to be his first review, I jumped at the opportunity.

Today he’s officially launching his business and with it his review of Preceden:

I highly recommend checking out the video: it’s packed with optimization insights covering the marketing copy, the design, the presentation of the example timelines, and more, all of which will help you see your own site in a new light. Even if you don’t have a site of your own, the review is worth watching anyway just to marvel at its production quality and Nick’s unique style.

If you’re interested in having Nick performa similar review for your site and having it shared with his audience, you can read more about the various services he offers on the Submit Your Business section of his site. And if you want to see more reviews like this one, you can subscribe to his mailing list.

Understanding Solana’s “instruction modified data of an account it does not own” error

In my ongoing attempt to understand Solana program development better, I’m trying to do unexpected things to see what happens.

For example, with Solana’s example Hello World program, what happens when you try to have the program modify an account it does not own? After all, the client can provide any account(s) to the program. Normally this would be an account the program owns, but what if it isn’t?

In theory the program should be confirming ownership and indeed the example program does:

if account.owner != program_id {
msg!("Greeted account does not have the correct program id");
return Err(ProgramError::IncorrectProgramId);
}
view raw check.rs hosted with ❤ by GitHub

But if you leave that out, what happens?

Fortunately the Solana network rejects the attempt to modify the data in the other account:

'failed to verify account ...: instruction modified data of an account it does not own'

The docs explain:

The runtime grants the program write access to the account if its id matches the owner… If an account is not owned by a program, the program is only permitted to read its data and credit the account.

I’d argue the wording of the error message could use improvement: “instruction modified data” implies the it successfully modified the data, but in reality it attempted to and the network rejected it.

We can search for the error message above to find where it’s being used:

/// Program modified the data of an account that doesn't belong to it
#[error("instruction modified data of an account it does not own")]
ExternalAccountDataModified,

And digging in more, we can find where that error is thrown:

// For accounts unassigned to the program, the data may not change.
if *program_id != account.owner
&& !system_program::check_id(&program_id)
&& pre_data != &account.data[..]
{
return Err(InstructionError::ExternalAccountDataModified);
}

Given that the network will reject attempts to modify accounts that the program doesn’t own, it doesn’t seem 100% necessary to have the account ownership check in this Hello World program, but it’s still good practice to check before attempting to modify the data. The reason is that other programs may read the data from the account and do something with that data, so if you don’t verify ownership those programs could wind up doing something unintentional because it’s using data from an account it does not own. Again the docs explain:

This is because a malicious user could create accounts with arbitrary data and then pass these accounts to the program in place of valid accounts. The arbitrary data could be crafted in a way that leads to unexpected or harmful program behavior.

Therefore, leave the ownership check in place because you don’t want to forget to include it in a program where it actually matters.