November 7th, 2020
🎉🇺🇸 Maybe democracy has a chance.
It’s nice to see thousands of people celebrating something positive. It’s been a while.
November 6th, 2020
November 5th, 2020
turbolinks-prefetch #NPM #Packages
Extends Turbolinks to prefetch links on hover.
Looks similar to this gist that I currently use.
November 3rd, 2020
Happy Election Day Week 🇺🇸
Twitter strikes again
I routinely block Twitter and other social media while on vacation. It’s a great way to reset. Having just returned from two weeks off, my Twitter habit is under control, and thus I find myself getting work done.
Just a little bit ago, by impulse—while waiting for the tests to pass—I opened Twitter. 10 minutes later I’m reading some guy’s blog post about why he’s a Christian Trump voter.
Touché, Twitter.
October 24th, 2020
📄New blog post: Make Customer Support Your Competitive Advantage
October 21st, 2020
October 20th, 2020
📕 Book notes from Radical Candor by Kim Scott
October 18th, 2020
Voted 🇺🇸
October 16th, 2020
I use and recommend Fathom Analytics for privacy-first, GDPR and CCPA-compliant website analytics. If you use this link to sign up, I’ll get a commission, and you’ll get a $10 discount on your first invoice.
Moved my Diet notes into my new public notes system.
October 15th, 2020
October 14th, 2020
Nice early voting reminder from HelpScout:
(Displayed after all support tickets have been responded to.)
Thoughts on Prepaying your mortgage
Added more RSS feeds
(In the process I fixed some issues with my articles feed—sorry if you got some duplicate updates.)
October 13th, 2020
You guys feel like you operate more “in my space”. As a solo consultant I need an easygoing friend to help me catch errors before customers blow up my email/phone/etc. #Honeybadger #Quotes
Working on refactoring middleman-roam and moving my notes into my main Jekyll blog, and it’s going really well. I think overall I prefer Middleman, but this way is easier since my blog is more developed, and I want my notes on the same subdomain.
October 12th, 2020
test && commit || revert
test && commit || revert
(TCR) is a new programming workflow introduced by Kent Beck in 2018. In a normal TDD (Test-driven Development) workflow, the goal is to write a failing test before writing the code to make it pass. TCR flips the TDD paradigm upside down, with a twist:
Not only must your tests always pass (on every file save, no less), but if they don’t pass, your code is automatically reverted.
I must admit: when I learned about TCR, I hated the idea. Coming from a TDD background, it’s so counter-intuitive. It’s funny, though, the more I think about my initial reaction, the more I want to try it.
October 9th, 2020
A Honeybadger customer replied to one of my onboarding emails:
“I don’t know if I watch too much stand up comedy but this email was a fucking epic opener and I loved it. Bravo!” #Honeybadger #Quotes
This made my day <3
Another Honeybadger testimonial (emphasis added):
As far as how it compares to Sentry, I have had a great experience with Honeybadger. The UI is much much easier to navigate than Sentry. It is less cluttered, and gives me the information I need right away, all in one place. The setup in Elixir was so much easier than Sentry too! I haven’t explored all the options in Honeybadger yet, but I’m excited about uptime tracking as I’ve been using Pingdom for that, but I’d rather consolidate as many tools as I can.
If I had to summarize my experience in one sentence, it would be: Honeybadger does more of what I need while keeping the interface simple enough that I don’t need a degree in error tracing just to use it. #Honeybadger #Quotes
Taking a break from FounderQuest for a few months. Don’t worry, we’ll be back for season 3 with fresh episodes (and fresh attitudes?) Time off is important, but I’m already looking forward to recording again. 🤙
source-map-explorer looks like a useful tool for troubleshooting JavaScript Source Maps
October 5th, 2020
Deploying some changes to middleman-roam. Oof, that’s some gnarly code. I’m surprised it works.
Added permalinks on hover
Only H1 headings generate separate pages (instead of creating a page for every block). This is an alternate approach to a previous idea:
I just had a thought about middleman-roam (which I guess is what I'll call the Middleman project that builds this site for now). This may help me reduce the build time and the number of pages.
Added blockquote styles
Updated middleman
October 2nd, 2020
Matestack Looks like a Rails framework for configuring Vue.js components in Ruby:
Matestack enables you to craft interactive web UIs without JavaScript in pure Ruby with minimum effort. UI code becomes a native and fun part of your Rails app.
There was an HN discussion about it late last year.
What a strange year.
September 30th, 2020
September 28th, 2020
Hiten Shah explains Roam’s product strategy:
“To be anti is to spend one’s energy as opposed to something.” —Nilofer Merchant in the forward to The Tiny MBA #Quotes
September 24th, 2020
Cobra Kai is an allegory of America, right?
My ideal work day
Or what I like best
I like to keep my head down,
making progress on challenging problems.
Not passively engaging on Twitter
It’s bad when the water cooler is attached to your desk
Working with people, yes—
but towards meaningful goals
really helping them move forward
…not shouting empty advice
I don’t want to be a thought leader
I just want to make cool stuff
September 23rd, 2020
In Federalist 84, Hamilton argues against the inclusion of a Bill of Rights in the Constitution (and a few other misc. things).
In Federalist 85, Hamilton concludes The Federalist Papers with an argument for ratifying the Constitution now and amending it later.
The framers knew that the Constitution wasn’t perfect, and they anticipated that there would be unknowns as the nation grows and develops. That’s why there’s an amendment process.
September 22nd, 2020
In Federalist 83—the last of a series of six essays on the judicial branch—Hamilton examines the constitutional provision for trial by jury in criminal cases.
September 21st, 2020
In Federalist 82—the fifth of a series of six essays on the power and limitations of the judicial branch—Hamilton further discusses the jurisdiction between the State and Supreme Courts.
September 18th, 2020
In Federalist 81, Hamilton examines the distribution of the judicial authority, including the role of the Supreme Court as an appellate court, its limited original jurisdiction, the inferior district courts, and the relation of the courts to State legislatures.
This was a weird day to lose RBG. What a career. RIP.
September 17th, 2020
Hamilton continues his analysis of the powers and limitations of the judicial branch in Federalist 80.
Hey, it’s Constitution Day. How fitting. :)
September 16th, 2020
In Federalist 79, Hamilton continues the discussion from Federalist 78 regarding provisions for US judges.
TFW you deploy a change to a complex system and IT WORKS!!!
Josh Pigford wants a Calm Companies directory:
A listing of companies that don’t desperately email and call you constantly saying “Remember us! Please use our tools! Check us out! Hey hey hey!
No lifecycle emails. No sales calls. No contact with you outside of the product itself.
If you have the choice, write a book, teach a course, build an app… just don’t start an infrastructure monitoring company. 😂 Link
I just had a thought about middleman-roam (which I guess is what I’ll call the Middleman project that builds this site for now). This may help me reduce the build time and the number of pages.
Currently Middleman builds a page for every Roam block (including nested blocks) in the export.
Being able to link directly to blocks is really nice if I want to write a short blog post in Daily Notes, for example, but then link to it on its own page. I.e., here’s this post.
I will rarely want to link to more than one or two levels deep, however. I could add a setting for that, so that it only generates pages N-blocks deep.
I could also add an option to skip creating pages for blocks without children.
September 15th, 2020
In Federalist 78, Hamilton examines the judiciary.
Political Fatigue
I sent an email to my newsletter today that used a (humorous) hacked Trump tweet as an example of a link hijacking vulnerability. I only got two angry replies (not bad), but the click rate is more telling… So far 2.4% compared to the normal 4-10%.
The content itself is really interesting, so I’m thinking people have Trump fatigue. Come to think of it, so do I. Lesson learned moving forward. 😂
Throw away your todo lists
Alex tweeted about todo lists: “I don’t like todo lists because I don’t like being told what to do, even by past me.”
My favorite todo lists are the ones that are easy to throw away. It’s why I prefer 3x5 cards.
I also like contextualizing todos, which is something most apps do poorly. For instance, I write my home maintenance todos on a whiteboard in my garage.
September 14th, 2020
In Federalist 77, Hamilton concludes an 11-part series of essays on the Executive branch.
I too have mixed feelings about Sales and Marketing.
Marketing should not be manipulative. Good marketing should stand on its own, and the user should be better for it regardless of whether they end up buying today. That rules out much of advertising. We do some advertising at Honeybadger, but try to direct it towards providing legitimate value to the audience, not just our users.
Seth Godin’s This Is Marketing has helped me reconcile my thinking about ethical marketing.
September 12th, 2020
Started a Website todo list
To whoever needs to hear this: stop reading the Twitter feed.
An old->new mapping of renamed and merged pages in Roam’s JSON export schema
Information about list style (view as numbered list, view as document, etc.) in Roam’s JSON export schema
This site is now deployed to Amazon S3
Netlify has been having issues for me lately; today, the fetch-roam
script I use to export my database when building this website began timing out, even though I’ve had no issues with it locally.
Build times have also been a problem. I can build this site in around 25 seconds on my 16” MacBook Pro, including the database download. Netlify was routinely taking 3-5 minutes—Ruby in particular seems to be very slow on Netlify.
So I deployed the site to s3 instead, which actually seems to fit this project better:
I can run deploys locally or via any CI system (I’m planning to use GitHub Actions)
I’m using
aws s3 sync
, so files which haven’t changed since the last build don’t need to be uploaded.If I can figure out how to keep the build directory around between CI runs (using a shared volume, maybe?), Middleman generation may also run faster, as it skips unchanged files. This would sort of give me incremental builds.
I’m not totally sure on this one, since it does need to generate the file contents to know what changed.
Normally I’d miss some of the niceties that come with Netlify such as branch previews and functions, but in this case I think the tradeoff is worth it.
September 11th, 2020
Fires rage across the West Coast. It feels like Chernobyl in the US rn.
“At least it’s not radioactive” pretty much sums up 2020 at this point. It’s true, though. At least it’s NOT radioactive.
Federalist 76 covers the appointment power of the Executive.
“Honestly, it seemed like a great alternative to some of the enterprise-focused monitoring/error apps that I deal with at the $DAYJOB.” #Quotes #Honeybadger
Derrick Reimer launched his new scheduling SaaS today. https://savvycal.com/
That was a smooth onboarding flow, Derrick. 👌
The garden is alive*: https://notes.joshuawood.net/
*assuming DNS has propagated for you
Here’s the code: https://github.com/joshuap/notes
I never thought I would use the meyerweb CSS reset again.
September 10th, 2020
Here’s my summary of Federalist 75
I’m looking to use Middleman to generate a static site for this Digital Garden. Middleman is particularly appealing because it’s easy to create dynamic pages.
The source of the data is Roam’s JSON export, which is what gatsby-digital-garden uses. There is some JavaScript in fetch-roamresearch that could be used to download the database when building in CI.
I can’t get past how much overhead Gatsby adds to a project.
19:38 Cool, I have a working project with all the basics (inbound/outbound linking, block references, etc.) That was easier than I thought.
September 9th, 2020
Good morning! It’s Wolf Shirt Wednesday
Here’s a summary of Federalist 74
“I like that you are a small caring team of devs. Or so I’ve been told by random internet strangers.” #Quotes #Honeybadger
Thank you, random internet strangers. <3
Using the Daily Notes section in Roam as a journal seems like a nice alternative to a blog feed, and serves as a place to re-surface content as it grows. #Digital Garden
Reminds me of Scripting News
I’m already starting to see why generating a static site from Roam will be important: Roam loads the entire database locally, which isn’t ideal for sharing (also, page previews would be nice). #Digital Garden
14:19 Thinking about TypeScript and how it can help keep bad data out of a system when you have data coming in from many different sources (users, browsers, 3rd-party integrations).
If you define the edges of the system, you can receive
any
typed data and sanitize it before allowing it to cross the boundary—from that point on you’re working with typed data.For instance, given a
Client
API, methods which are exposed to non-TS users receive input as typeunknown.
These methods have tests to verify type conversion (to whatever type the data should be).
Beyond the public API, the rest of the (internal) system is strictly typed.
Number of calling arguments in public methods should also be tested, since outside of TS it’s easy to introduce
undefined
values by omitting arguments.
Thanks to Julio for helping me think about TypeScript data structures
Love this “Enterprise” sales page: https://ghost.org/enterprise/
I speculated about whether companies were adding positions to oversee remote benefits on last week’s FounderQuest. It turns out they are: Hot new job title in a pandemic: ‘Head of remote work’
September 8th, 2020
Welcome to my Digital Garden
For more on digital gardens, see Joel’s post.
A few notes on this project:
It must be easy to tend, otherwise it will wither
Therefore it must be a Roam database
I want to publish it to garden.joshuawood.net
I’m looking at gatsby-digital-garden (which can publish from Roam)
Not in love with the stacking pages theme. The plugins look good.
The content is more important than the site
Hence, I’m shipping the public Roam database first
I’ll document the site as I build it. Thoughts on that tomorrow.