Category: Coding

  • 5 Ways AI Helped Me Handle My Mother’s Passing

    5 Ways AI Helped Me Handle My Mother’s Passing

    AI and End of Life

    This article is not about Skynet and AI ending all life on Earth. šŸ˜‚

    I recently lost my mother. And my job. It’s been a stressful and difficult time, and something I had never really prepared for. I had lots of questions and tasks: managing her estate, dealing with her taxes, dealing with my taxes, organizing her contacts, planning a celebration of life, preparing to livestream the celebration, and even figuring out what I wanted to say for a eulogy.

    As an AI enthusiast I instinctively turned to AI to help me navigate these many activities and challenges. I found AI to be an invaluable tool. I’m going to detail how I have been using it over the past few months to assist with end of life tasks.

    Data Mining for Contacts šŸ—ƒļø

    As I began planning a celebration of life I wanted to make sure I invited all of my mother’s friends and connections. She wasn’t very organized about her contacts and addressbook—some were in her phone, some were in an email account she shared with my late father, and others were in her gmail account. Still more were scribbled on various notes throughout her office šŸ¤¦ā€ā™‚ļø.

    She corresponded with many people who weren’t recorded in her contacts/addressbook, so I knew I needed to scan her emails to find email addresses of personal contacts. I exported and downloaded all of her emails from both accounts, and exported her iPhone contacts. Her MBOX files were gigabytes of data so I knew I couldn’t just upload them to ChatGPT and expect AI to data mine it for me.

    I’ve been a Python developer since before the turn of the century, and it’s one of my favorite tools for processing and transforming data. MBOX files and email headers aren’t that complicated to parse, but I wanted to experiment with AI and see if it could speed up my development process.

    I asked ChatGPT for its help to write a Python script to process the MBOX files, look for email addresses and store them in a SQLite DB. I also wanted to record some contextual metadata with each occurrence of an email address. Was it from a sender or to a recipient? Were there telltale signs of a listserv in the email headers? How many interactions were there with each email address? I chose SQLite because it’s simple and fast for querying the data (and I wasn’t yet sure what I wanted to query).

    I then made a second script to process the SQLite DB and filter for email addresses that matched certain criteria. The script was able to parse a separate list of contacts from an addressbook CSV file, cross reference any email address with it and fill in the person’s name if it wasn’t parsed from the email. And then it output a new CSV with each contact, their first and last name, how many occurrences were found, and whether the address was categorized as personal or listserv. The script also had some filtering parameters to limit the output to only personal addresses, or require a minimum number of occurrences.

    Along the way I found discrepancies and anomalies in the output. I worked with ChatGPT to refine the scripts, for instance when I discovered a pattern of email addresses that were re-sent through yahoogroups.com (eg: someone%40comcast.net@yahoogroups.com).

    Eventually I arrived at a tool that worked pretty well for my needs. It was able to sort through gigabytes of data and arrive at a list of about 160 contacts which appeared to be real people with whom my mom had interacted with online over the past 25 years. This list became the basis for the invitations I would later send out for her celebration of life.

    I’ve published my ContactsScraper on GitHub in case anyone else may find it useful.

    Financial Planning šŸ’ø

    DISCLAIMER: Talk to your attorney and accountant/tax preparer. Do not rely on AI to make any legal or financial decisions.

    I inherited a small IRA from my mother, so had lots of questions about what to do here. What is a required minimum distribution? How much is it? What would this do to my taxes? How much debt could I afford to pay off without bumping myself into another tax bracket? Can I afford a new roof for my house? ChatGPT helped me answer a bunch of these questions and model several different scenarios. Then I called my accountant and discussed my plans with her and she confirmed what I had modeled.

    I provided as much specific information as I could about my finances and my mother’s IRA to ChatGPT. I’m not going to post any of that information here or any of the results, for obvious reasons. However, I found this to be a valuable process.

    As I iterated on the financial models new questions and considerations came to mind. How much interest am I paying on this chunk of credit card debt? How much in additional taxes will I pay by taking a larger IRA distribution, and how does that compare to the interest saved? What if I underpay my taxes? Below are some examples of prompts that I used to figure out how best to use this modest windfall.

    Prompt 1: Basic IRA Withdrawal vs.Ā Credit Card Debt Tradeoff šŸ’¬

    ā€œI have an inherited IRA worth $100,000 and $50,000 in credit card debt at 19% interest. I’m considering taking a distribution from the IRA to pay off the debt. What are the tax consequences of taking out $50,000 in a single year? Should I spread the withdrawals over multiple years to reduce the tax impact?ā€

    Prompt 2: Modeling Partial Withdrawal Strategy šŸ’¬

    ā€œAssume I’m in the 22% federal tax bracket. If I take $25,000 from my inherited IRA this year and another $25,000 next year, how does that compare (in terms of taxes and interest saved) to taking the full $50,000 this year to eliminate my high-interest debt immediately?ā€

    Prompt 3: Safe Harbor and Withholding Adjustments šŸ’¬

    ā€œIf I take a $40,000 distribution from my inherited IRA and don’t adjust my withholding, could I owe an underpayment penalty? What’s the safe harbor threshold for avoiding a penalty, and how might I adjust my estimated tax payments to stay in the clear?ā€

    This sort of financial modeling is something I usually try to do myself with spreadsheets. Depending on the complexity and my familiarity with the topic it might require an hour of research before I even start writing the spreadsheet. Then as I enter data and model the answer I’ll spend hours more tweaking the spreadsheet columns, cell formatting, formulas, and trying to build a model that would help me visualize and understand different financial scenarios.

    In less than half the time it would have taken me to build a bunch of custom spreadsheets by hand ChatGPT helped me by generating charts and graphs, as well as asking clarifying questions that helped me provide better input. ChatGPT was like a financial planner that helped me get hands on with exploring various options.

    Creative Support āœļø

    ā€œA eugoogalizor, one who speaks at funerals. Or did you think I’d be too stupid to know what a eugoogoly was?ā€ – Derek Zoolander

    I’ve never written a eulogy before. I spoke at my dad’s funeral but aside from an anecdote I had thought of the day before it was largely spontaneous and I didn’t write it down. I wanted to plan a more comprehensive and heartfelt eulogy for my mother’s celebration of life.

    Let me be clear: I did not use generative AI to write my mom’s eulogy. I did use it to give some broad examples of how to approach it, and what elements to incorporate. It helped me establish an outline and plan to fill 5-10 minutes of time. At a high level:

    • Welcome & Thanks
      • acknowledge out of town family and those who couldn’t be here
      • special thanks to volunteers and key providers of support
    • A Difficult Year
      • talk about some of the struggles she’d been fighting through
      • acknowledge her grace and cheerful disposition through it all
    • Her Favorite Things
      • talk about some of the decor and memorabilia and how it relates to her
      • walk through the themes and give an anecdote or two–aim for some levity
    • Who She Was to Others
      • mention her career and impact
      • mention her volunteer work
    • Personal Reflection
      • talk about what she did for our family
      • the values I learned from her
      • how I will remember her
    • Closing
      • toast to her memory
      • invite others to speak

    It’s very personal so I won’t share exactly what I wrote, but the above outline really helped me focus my thoughts. It gave my speech a good cadence/flow, and helped me cover many of the essential memories and stories about her that I wanted to share.

    One thing I will share is my mom’s love of the Mona Lisa. She collected all sorts of artwork and knicknacks featuring that famous smile. I was planning a livestream of the celebration of life and knew I wanted to feature the Mona Lisa. I used Dall-E to generate a version of the Mona Lisa aiming a DSLR camera at the viewer, upscaled it to a large size and then added a speech bubble and disclaimer text, as you can see below.

    I then had this blown up into a 24ā€ x 36ā€ mounted poster and propped it up next to the livestream station, which I will elaborate on in the next section.

    Livestream Planning šŸ“¹

    I knew many of my mother’s family wouldn’t be able to travel and join us in person at the celebration of life, so I decided to do a livestream and recording of the event. I had never done a livestream before and figured I’d need some near-professional equipment in order to do it right. My kids are interested in becoming YouTubers, so I figured I could invest in some quality equipment for this event and work with them later on their own video streaming content.

    Naturally I turned to ChatGPT to help me plan the livestream.

    I could probably write an entire article about the hardware, software, various accessories, setup, and event planning. I probably will someday, perhaps the next time I use this equipment to livestream an event. This event was a success and the final edited video of the event was greatly appreciated by many people.

    I started by setting a clear goal for ChatGPT: create a professional, reliable livestream setup for your mother’s celebration of life that would both honor her memory and make the event accessible to remote guests. I wanted to not only broadcast and record the eulogies, but also set up a ā€œgreeting stationā€ where guests could see a preview of themselves on an iPad and leave a message, story, or greeting for remote guests.

    I gave ChatGPT a list of hardware I already had (like my MacBook Pro and iPad Pro), but asked for assistance choosing a good camera, indoor lighting options, microphone(s), tripod, video encoder, and other equipment. For each item ChatGPT usually offered a few different options and recommendations depending on budget and needs.

    I definitely spent a few hours researching many of the options (particularly the big ticket items like the camera), but eventually settled on a list of semi-pro equipment that I felt would give me the best bang for my buck:

    On the software side of things ChatGPT recommended OBS, an open-source streaming/recording tool which was a breeze to set up and connect to YouTube. For post-production and editing the recorded footage into a polished video I used iMovie. It’s pretty basic, but is free with macOS. I think next time I do something like this I may invest in Final Cut Pro, but as I’m not a pro who does this for a living I think Adobe Premiere Pro is probably overkill.

    ChatGPT even offered to make a ā€œday ofā€ checklist for me to help me configure the whole end-to-end livestream setup. I didn’t bother with this but did ask a few troubleshooting questions (eg: about XLR to TRS microphone conversion) while setting up at the event.

    Overall the event was a wonderful gathering of people and sharing of memories and stories about my mother. I don’t know that many remote relatives tuned in to the livestream, but they definitely appreciated the edited recording I eventually created and shared.

    Post-Production Challenges šŸŽ›ļø

    A few days later I sat down in front of my MacBook intending to do a little editing and create a version of the celebration of life which I would post to YouTube and share with family and friends. This is when I discovered the audio was terrible.

    I thought I had correctly connected to the in-house AV system using a jury-rigged XLR to TRS converter for the microphone. However it sounded like the only audio that was picked up was from the camera’s built in mic. It captured the sound from the house speakers–as well as any nearby chit-chat, laughter, or applause from guests.

    With a few suggestions from ChatGPT I was able to manually clean up the audio enough that the eulogizers were mostly intelligible:

    • Apply the ā€œEnhance Audioā€ feature
    • Use the ā€œVoice Enhanceā€ filter
    • Reduce Background Noise (40% worked pretty well in my case)
    • Lower Gain or Volume on Peaks (manually select moments of applause or laughter and reduce the gain)

    I also came up with a shopping list of additional microphones and equipment (like a good XLR to TRS converter) so that next time I livestream an event I would be prepared.

    Final Thoughts

    What I found during this whole process was that AI can not only be a valuable resource for dealing with the variety of unexpected questions and issues that may come up when you have lost someone, but surprisingly I think it helped me cope with the grief.

    I spent a lot of time on my computer working on the tasks detailed in this article–and through it all AI appeared to lend a supportive and sympathetic ear. AI helped me stay focused on the tasks I needed to get done and create a wonderful memorial for my mother.

    What surprised me the most about AI’s capabilities was how natural it felt. It almost felt like a friend on the other side of a chat app who was there to help me figure out how to manage anything that came up–whether it was finances, tech, or how to write a eulogy. Other times AI was simply there to cheer me on and celebrate a small success.

    AI is being incorporated into everything, but I don’t think I’ve seen it used for end of life planning and services. It makes me wonder if there is an opportunity here for a startup.


    I’d love to hear how you have used AI to navigate end of life issues. Do you know of a startup that works in this space? I think this is an interesting and possibly untapped area for AI.

  • Markdown Writing Workflow: How I Write 3x Faster

    Markdown Writing Workflow: How I Write 3x Faster

    The Power of Writing Everything in Markdown First

    I’ve been writing tons of resumes, cover letters, and blog posts lately. Word processors felt cumbersome—too much time formatting, too much repetitive work. Then I realized: why not approach writing like an engineering project?ā€ Instead of jumping straight into WordPress, Google Docs, or Apple Pages, I now write everything in VSCode using markdown.

    Blog posts, resumes, cover letters, interview notes, writing assignments… they all go into markdown first. Then I use Pandoc to convert them to whatever format I need.

    The results? I’m faster, more focused, and my content is way more portable.

    Why Markdown Makes Sense šŸ“

    I find writing in a word processor to be distracting—there are so many formatting choices. I just want to focus on the content and have a standard format for the output. This is why markdown appeals to me. It’s simple and consistent.

    Perhaps it’s the engineer in me, but I feel like I have more power and control over the structure of my writing. It’s easier to ā€œrefactorā€ the structure of my prose and move ideas around for a better flow.

    Markdown gets all the formatting out of the way. You focus purely on content and structure. The syntax is dead simple: **bold**, *italics*, # headers, - lists, and [links](url) — but nothing more.

    Why VSCode? ⚔

    VSCode helps keep my files organized, easy to find, easy to search, and fast to switch context. It’s a fast, flexible text editor, and extension support for Markdown and other formats is a huge time saver.

    All of my files are organized into folders in a single project. When I’m done writing a resume I can quickly switch to my cover_letters folder, create a new markdown file, copy/paste my boilerplate contact info, salutation, and start writing.

    Also VSCode has a great built-in preview that lets you see how the markdown will render. The stroke of a few keys (Cmd + shift + V on macOS) and you can see the results instantly.

    The Secret Sauce: Pandoc šŸ”§

    I use Pandoc to do my conversion. It’s a simple command line tool that you can run from the terminal inside VSCode. I used to keep Terminal windows open all over the place to run command line tools, but using the terminal integrated into VSCode helps keep everything organized and in one place.

    Project Structure šŸ“‚

    I mentioned using VSCode to keep my files organized. Here’s a rough sketch of my project structure:

    writing/
    ā”œā”€ā”€ blog/
    │   └── formatted/
    ā”œā”€ā”€ assignments/
    │   └── company_x/
    │   └── company_y/
    ā”œā”€ā”€ resumes/
    │   └── formatted/
    ā”œā”€ā”€ cover_letters/
    │   └── formatted/
    └── interviews/
        └── company_x/
        └── company_y/

    I keep the markdown organized into top-level folders (blog posts, assignments, resumes, interviews, etc.) and for interviews and assignments I use sub-folders for each company. Any place I want to generate a formatted version from markdown I use a formatted sub-folder.

    On occasion if I feel the need to do some custom formatting in a wordprocessor I add some notation to the edited filename (eg: resume_company_x_edited.docx) as a reminder not to blow it away by re-generating from the markdown.

    Version Control with Git šŸ“‹

    Since I’m treating writing like an engineering project, I use Git to track all my markdown files. This gives me powerful revision history, the ability to see exactly what changed between drafts, and easy restoration if I mess something up.

    VSCode’s Git integration makes this even better—I can see at a glance which files have changes, view diffs right in the editor, and commit directly from the IDE without switching to the terminal.

    I keep a .gitignore file that excludes the generated content:

    # macOS
    .DS_Store
    ._*
    
    # Ignore generated formatted files
    */formatted/
    *.pdf
    *.docx
    *.html
    
    # But keep the reference template(s)
    !reference.docx

    This way my repository stays clean with just the source markdown files, but I can still track my reference templates. The formatted outputs are disposable since I can regenerate them anytime with pandoc.

    The Workflow šŸš€

    Here’s what my typical workflow looks like now:

    1. Open VSCode and create a new .md file in the appropriate folder
    2. Write the entire piece without worrying about final formatting
    3. Preview the markdown in VSCode and make sure it looks good
    4. Convert to whatever format I need (HTML for WordPress, DOCX for resumes, etc.)
    5. Proofread the formatted version (check fonts, margins, spacing, etc.)
    6. Upload the formatted version to WordPress, a job application, or anywhere you need it

    I have a bunch of aliases for pandoc that make the conversion process a breeze. Add these to your ~/.bashrc or ~/.zshrc file to make them available in your terminal.

    # HTML for blog posts (clean, WordPress-friendly)
    md2html() {
        pandoc --no-highlight --wrap=none -t html -o "./formatted/$(basename "$1" .md).html" "$1"
    }
    
    # DOCX with reference template
    md2docx() {
        pandoc --reference-doc=reference.docx -o "./formatted/$(basename "$1" .md).docx" "$1"
    }
    
    # PDF via LaTeX
    md2pdf() {
        pandoc -o "./formatted/$(basename "$1" .md).pdf" "$1"
    }

    Each format serves a specific purpose: HTML works perfectly for pasting into WordPress or web platforms, DOCX is what most job applications expect for resumes and cover letters, and PDF is ideal for sharing finalized documents that need to look identical everywhere. You can use PDF for resumes and cover letters, but I have read that some ATS scanners can choke on it, which is why I stick to DOCX.

    Making a Reference DOCX Template āš™ļø

    To create a reference DOCX template, start by generating a basic one from any markdown file: pandoc sample.md -o reference.docx. Then open this file in Microsoft Word (or your favorite word processor which can export to DOCX) and customize all the styles you care about: fonts, margins, headings, paragraph spacing, etc. The key is to modify the actual Word styles (like ā€œHeading 1ā€, ā€œNormalā€, ā€œStrongā€) rather than just formatting individual text, since pandoc maps markdown elements to these named styles. Save the file, and now every time you use --reference-doc=reference.docx, your converted documents will inherit this formatting. You only need to set this up once, and it works great for making professional-looking resumes and cover letters that maintain consistent branding across all your materials.

    You can also put this file somewhere central like ~/.pandoc/reference.docx so you can easily access it from anywhere. However, for my workflow I like to keep a separate reference.docx in each project folder so I can easily customize the formatting depending on the type of content.

    The Portability Game-Changer šŸŽÆ

    The portability of using markdown and Pandoc is incredible. I usually generate my resumes into DOCX format because I think ATS scanners sometimes choke on PDF, but if you want it in PDF it’s just a one line command.

    The learning curve for Markdown is minimal too (although if you’re an engineer you’re already probably familiar with it). If you can remember that # makes headers and **text** makes things bold, you’re 90% there. GitHub has a great tutorial on using Markdown. It’s very handy if you need a quick reference or refresher.

    Future Automation Ideas šŸ”®

    I’m planning to automate this even further. Git hooks could automatically regenerate formatted versions whenever I commit changes. Imagine pushing a blog post update and having the HTML automatically ready for WordPress!

    I’m also thinking about a simple script that can create new WordPress posts directly from my markdown files and leveraging WP-CLI.

    The best workflows are the ones that get out of your way and let you focus on what matters: the actual work.


    Have you tried writing in markdown? I’d love to hear about your workflow experiments.