Skip to content

Download a CSV of Wealthfront Financial Activity

I use Wealthfront for a portion of my investments. I recently was trying to get a CSV of all my dividends, fees, etc this year and there’s not a way to do this! If you navigate to your activity (homepage > investment account > see recent activity) you can at least generate a CSV from the information on-screen (which does not include your gains/losses from the direct indexing) and copy/paste this into your web console, your browser will spit out a CSV. This is highly tied to the current (as of this writing) Wealthfront HTML structure, so you’ll probably have to ask ChatGPT to fix this in some number of months…

Continue Reading

Notes on Locked Records in NetSuite

In NetSuite, records can be "locked". This is a special state that is poorly documented and introduces some very strange behavior. Hopefully, some of these notes save someone banging their head against the wall to solve this problem! Records can be locked in NetSuite in one of two ways: (1) the accounting period the transaction is in can be locked (2) or the record can be explicitly locked. You cannot determine if the accounting period is locked directly from the record. You’ll need to pull the associated AccountingPeriod posting_period object reference. You cannot "explicitly" lock a transaction in NetSuite via the API. I have not found a way to do this through the GUI either. A workflow can lock a record in NetSuite…

Continue Reading

Executing Multiple SQL Statements in Elixir

Working with raw SQL in the Elixir/Ecto world is not easy. I thought executing a multi-line SQL file in a database migration would be easy; it’s not. Here’s what I learned: The execute function does not support executing multiple statements at once. It’s perplexing that there’s no direct solution for this in Elixir. While AyeSQL claims raw SQL support, it mandates a one-statement-at-a-time approach. This limitation is particularly problematic when importing SQL designed to create triggers spanning multiple lines. For simple SQL tasks, you might consider splitting the raw SQL into multiple lines: But only if your SQL is well-formed and relatively simple…

Continue Reading

Scraping the web with OpenAI

One of the really interesting LLM use cases is extracting structured data from unstructured data. In the old days (6mo ago), extracting structured data from web pages required custom xpath or css selectors for each website that constantly broke as the host changed their page structure. For instance, extracting the price of a house on redfin. This is why Plaid (and similar competitors) break so often: many of their integrations "screen scrape" which means they need a team of people updating xpath and css selectors on various bank sites (TreasuryDirect, for example, is broken constantly). I built a open source database of venture capital firms that used this approach to extract team member information from each firm…

Continue Reading

Git Completions & Tooling on the Command Line

I enjoy tuning my terminal environment. I’ve recently learned tmux, switched to zsh, and constantly incrementally improve my personal dotfiles. I’ve put together a stack of tools for working with git on the command line. I find this much faster than working in a GUI. Here’s what I use: git-fuzzy for generating commits (git patch is especially useful here) forgit for switching branches, viewing logs, stash list, git fixup, etc git (aliased as g) for misc git commands (like cherry-pick, etc) with a handful of config customization custom functions and aliases for various shortcuts, including interacting with the gh-cli command However, one piece of the puzzle for me wasn’t working properly: tab completions on the core git command…

Continue Reading

Bye Stripe, on to the Next Adventure

I sold my bootstrapped startup to Stripe and I’ve worked for them for a couple of years. It’s an amazing company. I learned a tremendous amount and worked with some amazing people. However, the pull to build something new—especially with the massive improvements in AL/ML—was too strong, and I’ve decided to move on and build another technology company. I’m going to blog about the lessons I’ve learned from Stripe—both good and bad—in the coming weeks. I’m looking forward to the constant challenges that building and running a startup brings (including doing this with multiple young kids)…

Continue Reading

Improve motivation and focus with small contexts

I’ve known for years that uncategorized message queues scramble my brain. I think I’m more sensitive to this than most. For instance, a list of unanswered texts from random groups of people (friends, work contacts, randoms, etc) feels exhausting/overwhelming. I’m not sure where to start, and it feels like the amount of effort needed to get to zero is too much. I’m tempted to avoid answering (and often do!) and move on to something else that feels more discrete that I can check off a list. I know intellectually that if I just start answering messages I’ll get through the list, and without too much effort…

Continue Reading

Learning tmux

I’ve tried tmux before for about a day at a time and promptly forgot about it and never learned how it worked deeply. However, a friend recently reminded me about tmux’s copy mode and I was intrigued. I had the time to dig in and try to retrain my muscle memory around it. I use VS Code for my editor, but otherwise, I’m a very terminal-oriented developer. I love interactive REPLs and find that CLI tools generally allow you to move faster than GUI equivalents. Something that always frustrated me about my development loop was the need to put my hands on the mouse in order to interact (select/copy/find/etc) with the contents of my terminal screen…

Continue Reading