Category: Cursor

  • The Architect of My Own Reality

    The Architect of My Own Reality

    I’ve spent the day vibe coding an app that has allowed me to create something that mirrors my unbridled enthusiasm and creativity. I know that sounds stupid, but I realized there’s no one around to tell me this isn’t possible.

    And since I’ve yet to reach my $20 a month limit in Cursor, and the app works as I’ve designed it to work, I’m happy. So, I decided to write about why vibe-coding is so much better than my day job. But instead of writing it myself, I let Gemini 3.1 Flash Lite do it for me, based on my prompt, of course.

    I also edited it a bit:

    In my day job, I am a professional software tester. My life is defined by the friction of the “No.”

    I spend my hours documenting elegant solutions, identifying critical edge cases, and proposing features that would make the user experience seamless. I send these tickets off into the void, only to have them return with a status update that feels like a cold splash of water:

    Won’t Fix. Out of Scope. Resource Constrained.

    In the real world, software is a compromise. It’s a series of negotiations between what is ideal and what is budget friendly. I am the person who sees the potential, but I’m not the person who holds the purse strings.

    Then, I close my work laptop and open my personal terminal. I start to “vibe code.”

    The Infinite Canvas

    When I vibe code, the dynamic shifts entirely. The hierarchy of the corporate office dissolves. There is no product manager to tell me that my vision is “not on the roadmap.” There is no lead developer to sigh and tell me that the architecture won’t support the change.

    When I am vibe coding, I am the business analyst, the coder, and the user all at once.

    If I decide that a button should glow when hovered, it glows. If I decide that the data should flow through a custom-built pipeline that defies standard conventions, I build it. And if I hit a wall—if the laws of physics or the limitations of a specific library make a feature technically impossible, I deal with it.

    The Absence of “No”

    The beauty of vibe coding isn’t that everything is easy; it’s that the intent is never rejected.

    When I encounter a limitation, the programmer, the version of myself that exists in the flow state, never says “No.” Instead, the conversation becomes a creative pivot.

    • The Real World: “We can’t implement that feature because the legacy database doesn’t support real-time updates.” (The conversation ends.)
    • Vibe Coding: “The database doesn’t support real-time updates? Okay, let’s build a middleware cache or switch to a different engine. Let’s find a way to make it happen.” (The conversation evolves.)

    In this space, a limitation is not a dead end; it is simply a prompt for a different path. I am never told that my idea is invalid. I am never told that my curiosity is a waste of time. I am never told that the project is “good enough” as it is.

    The Joy of Unrestricted Creation

    There is a profound, almost meditative joy in this autonomy. Vibe coding allows me to reclaim the agency I lose during the nine-to-five. It turns the act of programming from a chore of compliance into an act of pure expression.

    When I am vibe coding, I am not just testing the work of others; I am manifesting my own. I am learning that while the world may have its constraints, my imagination does not. And as long as I am the one at the keyboard, the answer to “Can we do this?” will always be the same:

    Let’s see how we can make it work.

  • AI Can Be Useful

    AI Can Be Useful

    Artificial intelligence is a much hated technology and for good reason. Like all the advances before it, it’s being leveraged by big tech as the be-all, end-all solution for all the world’s problems. It can lower costs, drive revenue, prevent fraud, and do it all cheaply. 

    Or so we’re led to believe.

    To be honest, though, AI isn’t bad. It’s the people who use it poorly and worsen our lives with it, they are the problem.Fortunately, we too can use it, and we can use it wisely.

    There are hundreds of uses for AI, but here are a few I find it particularly good at.

    Building Software

    Proficient coders will tell you AI is a superpower, but only if you know what you’re doing. I agree that’s the case when creating production software, but I create software for myself. 

    In my case, I vibe-code the entire project, and I never look at the source code. I ask Cursor Agents, my IDE of choice, to write the code and tests, investigate issues, etc., and I serve as the business analyst and software tester. 

    It does the rest.

    I also create and configure the GitHub repo, but Cursor Agents handles creating branches, committing the code, and pushing it. 

    And it does an excellent job. None of my projects are huge, and all the coding is done with either the Auto model or using Grok 4.5 High, but it very inexpensively serves the role as code creator and maintainer. 

    Recommending

    I recently chatted with Gemini about books. I told it the kinds of books I like to read, giving it several examples of ones I have enjoyed, as well as some basic information about what I like and dislike. I then uploaded a list of all the Kindle books I hope to one day buy, and asked Gemini to review the list.

    It pointed out how many of them didn’t meet the criteria I had outlined, because they were too technical, or written poorly, or there was some other issue with them. And it recommended several other books. I let it know which I’d already read and liked, added a few it suggested to my list, and now I have a pinned conversation in Gemini I can use anytime I need a book recommendation.

    This is an activity that AI is custom-made for. You could, for example, give it a list of TV shows or movies or video games that you like, and several you don’t, and ask for suggestions. And if you’re already familiar with ones it suggests, go back and forth with it until it understands your preferences and suddenly you have a valuable recommendation machine.

    Sorting Thoughts

    There are days when I feel upset, or have questions on my mind, or maybe I’m just wondering how something in the world works. In these cases I often turn to AI. I tell it what I’m thinking, what my problem is, or what my question is. We chat, exchanging comments, suggestions, and questions until I’m satisfied.

    This is another one of those situations AI is good at. No, it can’t solve all my problems, but it’s excellent as a sounding board, and it has a vast array of knowledge. I do this often, most of the time using the interactive feature in Gemini, where it’s always on, listening for my input, then it responds.

    We chat until I’m satisfied.

    Teaching Me

    I always have lots of questions. 

    I’m constantly wondering about technology, products, gardening, and more. I often turn to AI in these situations, providing it with pictures or other information. It almost always provides solid answers that help me understand the world we live in.

    I’ve gone from knowing almost nothing about how to set up a repo in GitHub properly to actually understanding the difference between CodeQL and Dependabots. I now understand better how to care for the plants in my yard. I have a better understanding about how smart phones, versus bridge cameras or full-frame cameras, work.

    AI encompasses the world’s knowledge, and if you are careful enough, and aren’t too naive, it can help you understand it.

    Reminding Me

    I couldn’t survive without the reminders I keep on my Android phone, or the calendar events I have for appointments. They keep me from forgetting all of the various things I need to do.

    But sometimes I just need a quick way to remember something. With Gemini, I can tell it things, and later, ask it to remind me about a fact I committed to it. I can do the same with notes in Google Keep, or in Google Drive, and Gemini can find those too. 

    It’s a persistent memory store that I can turn to at any point on my phone or computer and retrieve information I would otherwise lose to my aging mind.

    Assisting with Video Games

    Video games are an important aspect of my life, and have been for over 40 years. But my middle-aged brain, eyes, and hands don’t work like they used to. 

    Enter AI.

    Not only can I ask for game recommendations, but it also helps with understanding how accessible and/or difficult a game is, how long a game is, where I’m currently at in the game, and occasionally, it helps me get through a game. 

    In those cases though, my personal opinion is, if I need a walkthrough to complete a game, it’s not worth playing.

    Since chatbots like Gemini have access to all of the FAQs, reviews, opinion pieces, walkthroughs, and other information on video games, it’s the perfect place to answer all my questions.

    And So Much More

    This of course isn’t all AI can do. 

    I use it constantly, and while there are times it’s frustrating, where maybe I say, “Hey, Google,” to my smart watch or smartphone and it doesn’t respond, or I ask it a question and it returns something that doesn’t resemble an accurate response.

    But when it works, it’s like magic. It provides access to so much information, and does it so well so much of the time, it has become indispensable.

  • Cursor Continues to Save My Life

    Cursor Continues to Save My Life

    I’m a middle-aged man who has worked in the software development industry for 35 years and has been computing for 45. I’ve learned a lot, but I’ve also forgotten a lot. I can honestly say that something I work on one day, week, or month, is forgotten the next.

    That’s where Cursor comes in.

    Not only can it review, edit, and write code for me, but it can also search through my documents and find information I often forget. Case in point, I was revisiting some UI automation I had worked on in June, and although it had only been about six weeks, I had completely forgotten the name of a SQL script I had written to reset data.

    I knew I had written it, but wasn’t sure if I had completed it, if it worked, where it resided, or anything else about it, so I asked Cursor:

    “I created a sql script earlier this year to reset the document designer changes in the associated databases. look for references to that work”

    It found it!

    I opened it in Notepad++ and didn’t recognize it, and it was clear it had been generated by AI (most likely by Gemini). It took me a few minutes to prove it was the correct one, but when I found a copy of it in a virtual machine, it looked promising.

    I asked Cursor a follow-up question:

    “If I remember correctly, what the script DeleteDocumentLayouts (latest) does is wipe out all the documents and then you have to reimport them. Are there notes specifically mentioning that?”

    And it confirmed exactly that. Now I was sure this was THE script I had used successfully in June.

    This isn’t an isolated incident. There are numerous occasions I’ve relied on Cursor to search documents, to confirm that a branch has been merged into Github, and more. It’s not just a coding tool; it is a universal AI tool especially focused on activities having to do with the file system or code.

    When I get a chance I’ll write about how I used Cursor at home to vibe code a patching tool for The Sims 3. Initially it didn’t work quite right, so I installed Cursor on my daughter’s computer, and it helped troubleshoot and update the patcher and got The Sims 3 working. This is a notoriously difficult old video game that Electronic Arts has failed to patch for modern systems, but Cursor figured it out.

  • The Long Road Back to Amiga: A MiSTer FPGA Post-Mortem

    The Long Road Back to Amiga: A MiSTer FPGA Post-Mortem

    Return to the Amiga

    I am a huge Commodore fan and have been since the very early 1980s. I bought an Amiga 1000 the fall of 1985, and an Amiga 500 a few years later. The Amiga was my sole personal computer until around 1983, and I played hundreds of amazing games on it in the 8 years I owned it.

    When I bought a MiSTer FPGA a month or two ago, it was mostly so I could play many of those old Amiga games again. Little did I know the amount of work it would take to get the games onto the MiSTer.  This post mortem details at least some of the steps I took to fruitlessly try to get Amiga games working as .hdf files on the MiSTer FPGA. 

    AI as the Sole Source of Truth

    I have relied on AI, Gemini in this case, every step away. Interestingly, it has proven to be a double-edged sword. It’s been invaluable in some respects, and downright stupid in others. It’s often provided incorrect information, or led me down pathways that didn’t work. It was also sometimes unwilling to provide any information, which forced me to coax it out of it. 

    I admit I rely heavily on Gemini for most things nowadays, and I relied on it here, to my detriment. Had I been more knowledgeable about these matters, I might have had a better outcome.

     The Journey

    • Amiga Vision – I read that Amiga Vision provided an all-in-one solution with hundreds of games. I just had to download and copy some folders to my SD-CARD. I either downloaded the wrong version (I don’t think that was the case) or it somehow didn’t copy over correctly because it didn’t work. I got errors on the MiSTer FPGA when I tried to use it.
    • Conversion – I downloaded .lha files from WHDLoad and was directed by Gemini to use a Bash script to convert them to .hdf files.This didn’t work even though I was using Git Bash, AmiTools, and some GnuWin32 utilities. In the end I had Cursor fix the script to get it working..
    • Bash –  A critical failure occurred where the script logic, likely due to improper variable handling or file path iteration, effectively mapped the same game file into every generated .hdf file, resulting in a batch of corrupted or redundant images. This was resolved, or at least partially so, by adding a line to the Bash script to delete the tmp folder before copying new game files.
    • Amiga Forever – Attempting to create a boot hard drive (DH0) in Amiga Forever failed because that environment is unable to create SCSI hard drives that are compatible. In the end, I could create the initial .hdf file in Amiga Forever, then had to copy it to the SD-CARD, and boot it in MiSTer FPGA, and from there, set the drive information, partition it, format it, and install Workbench 3.1.
    • WHDLoad – Once I got my Workbench 3.1 hard drive working, I attempted to mount a game .hdf file, but found it was missing WHDLoad. Gemini directed me to use a PowerShell script it created to inject WHDLoad into the .hdf files.
    • WHDLoad Continued – I abandoned the automated batch approach in favor of manually injecting files into a master .hdf. This required using the Amiga shell to manually handle the installation of the WHDLoad package. This was difficult because I had to copy the WHDLoad files to the boot drive, and install it. In the end, I created a floppy disk in Amiga Forever, copied the necessary files to it, then copied that to the SD-CARD, and was able to copy it to the hard drive and install it.
    • Mismatched Files – A recurring issue involved the game .slave file on the .hdf. When the .lha was initially unpacked, the internal naming conventions in the .hdf file didn’t match the expected launch parameters, forcing me to manually rename the slave files within the Amiga environment. Potentially, this would have to be done for every .hdf game file, or maybe the Bash script could be altered to do it for me, which would require converting all of the .lha files again.
    • Amiga Vision Again – Finally, after many false starts, Gemini directed me to again install the AmigaVision structure to source the necessary Kickstart ROMs and .RTB files manually, validating them against the requirements of the specific Workbench 3.1 setup.
    • It Works! –  Bewilderingly, when I mounted Amiga Vision in the MiSTer FPGA, it worked, providing a list of hundreds of games I could play. I tried running a couple, and they just worked!

    Final Thoughts

    This whole experience has been illuminating and frustrating, and I’ve felt helpless while Gemini continued to pump out information that I wasn’t knowledgeable enough to refute. I often got upset with Gemini, raised my voice at it, letting it know how displeased I was with it. This of course made no difference to it.

    I have working games via Amiga Vision and my old floppy images, and I’m happy about that. I’ve also spent more time using AmigaDOS and WorkBench in the last several days than I have in 35 years, which has been fun and interesting. It’s also a bit bewildering to see how antiquated yet perfectly functional this old operating system is.

    The worst part is how much time this has taken. I was fortunate to have a few days off work and spent most of several days doing nothing but this. Of course, I could have spent the time playing games, but this is all new to me, since I have never had a MiSTer FPGA before. Also, I’ve been buying new versions of Amiga Forever for probably 20+ years, but I’ve never spent that much time using it.

    My recommendation if you decide to buy a MiSTer FPGA or similar just to play Amiga games is go with Amiga Vision and hopefully it works for you. Playing games from floppy images works fine, but it’s nice to have a unified launcher and a list of hundreds of games to play.

  • I Abandoned Obsidian for Google Docs

    I Abandoned Obsidian for Google Docs

    My note-taking journey started with Evernote in the early 2000s. Back then, there were no smartphones, so Evernote was only available as a desktop app. I soon switched to OneNote, which was superior in most ways. I stuck with the desktop version of OneNote for 20 years, although I tried a lot of different note-taking apps on mobile devices.

    A couple of years back I settled on Obsidian as my main note-taking app, but it didn’t take long to tire of it. While I loved the clean text, the solid markdown editor, and the expansive plug-in ecosystem, search was a mess, and using an AI plug-in like Gemini Scribe only partially solved the problem.

    In the end, I couldn’t reliably find my notes in Obsidian, and I got tired of using plug-ins as a band-aid for a fundamentally broken application. After hearing about a project at work to migrate notes from OneNote to Google Drive, I did some testing and found that Google Docs works well as a repository for my notes. And even better, it’s simple to reliably search those docs using Gemini.

    Also, Google Docs is fully integrated with Gemini, allowing me to leverage the technology as a writing assistant, something Obsidian doesn’t natively support. All of the solutions it offers are via plug-ins, which require creating API keys in platforms like Google AI Studio. 

    The big hurdle was determining how to migrate my existing Obsidian vault to Google Drive. For this task I used Cursor to write a Python script that leverages Google Cloud and the Google Docs API to seamlessly take the notes, convert the markdown and images, and create folders, docs, and tabs to correspond to every note.

    After some trial and error, I migrated all my notes into Google Drive, and I’m happy with the outcome. Using Google Docs on my phone isn’t quite as convenient as a phone app, but it works. And Google Docs works well on the desktop.

    If you’re interested in migrating your Obsidian vault to Google Drive and Docs, I open-sourced two scripts:

    Obsidian-Vault-2-GoogleDocs-Migration

    Obsidian-Folder-2-Google-Document-Migration

    The first script migrates an entire Obsidian vault to Google Drive. The second migrates only the .md files in a single folder to a folder in Google Drive.

    I created the second script because I want to continue creating notes in a single folder in Obsidian, and then migrate those notes to Google Drive. The script only moves notes that don’t already exist in Google Drive, and it creates a new doc for each new note.

    This differs from the first script. Its main focus is to take each folder of .md files from the vault and create a corresponding doc in Google Drive, with each appearing as its own tab. Folders in the vault that don’t contain files are still recreated in Google Drive if they contain subfolders with notes. 

    If you have questions about my journey, or about using either script, feel free to reach out.