Ironman Training Diary - May 18, 2026
A lot of pushups and dialing back my run pace
A lot of pushups and dialing back my run pace
Protein shake recipe, more running
Stretching, cycling, and pizza
This Saturday (April 25, 2026) I'm running the Ohio health half marathon here in Columbus and unlike past races where I was merely trying to survive, this time I actually have a goal of finishing in approximately two hours and 10 minutes. I'm feeling reasonably confident about meeting this goal despite a rain forecast because I've been training pretty diligently for the past few months and know I can achieve the required pace. However, I’ve noticed anytime I'm out on a run I'm just a very slow starter. For the first maybe 2 to 3 miles my stride tends to be very short, I don't seem to be able to catch my breath, and generally speaking I just feel very uncomfortable. Naturally I've been fretting about this in light of the ambitious desired finish time. Even just a few weeks ago I was on an 8 1/2 mile run with my training partner Charlie and once again during those first 2 to 3 miles I just did not feel good at all, but starting around mile 4 both my pace and comfort level increased significantly to the point that my pace towards the end of the run far exceeded the beginning! So over the weekend I spent some time yesterday talking to our good friend ChatGPT and it actually came up with a pretty good suggestion that's apparently called a negative split strategy. In a nutshell, ChatGPT said I can't hide the fact that I'm a slow starter and so I should just incorporate it into the plan. For the first 3 miles I'm going to run a 10:30/mile pace then starting at mile four I'm going to run a 10:05 pace until I complete mile 8. Starting at mile 9 I'll increase pace again, accelerating to 9:50/mile pace and maintain it through the end of mile 11. Naturally at this point all bets are off but my guess is starting at mile 12 I'll be able to accelerate one final time to 9:30/mile pace through to the finish line. In summary my race pace will be: If I can meet this pace then my finish time will be approximately 2:11:22 (10:02/mile average), which would be a new PR (by far) for me. These days I'm also paying much closer attention to my diet, and want to be particularly diligent in the days ahead of the race. So 48 hours before the race I'm going to focus on eating grilled chicken, rice, vegetables, yogurt, granola, and fruit. The day before the race I'll have oatmeal, a banana, toast and peanut butter. For lunch I'll have a turkey sandwich and fruit, and then for dinner I'll have some pasta and chicken. On Saturday the race starts at 8am. Around 6am I plan on having oatmeal, banana, and coffee. At 7am I'll have another banana. During the race I plan on consuming a gel pack at the following times: My gel pack brand of choice is the Gu pack, specifically the salted caramel flavor. In past races I've worn a fannie pack to carry my phone and gel packs and absolutely hated it so this time around I bought a vest from Amazon. Nothing fancy, it's light and has a few pockets where I can store my phone and Gu packs. Miles 0-3: 10:30/mile pace Miles 4-8: 10:05/mile pace Miles 9-11: 9:50/mile pace Miles 12-13.1: 9:30am/mile pace First pack: start of mile 4 Second pack: start of mile 8 Third pack: start of mile 10
I created a Claude skill creatively called dependabot which once installed you can invoke like this: It will use the GitHub CLI to retrieve open Dependabot alerts and upgrade the relevant dependencies. If you have multiple GitHub accounts logged in via the CLI it will ask which one it should use if it can't figure it out based on how the skill was invoked or based on the repository settings. You can find the skill here: https://github.com/wjgilmore/dependabot-skill To install it globally, open a terminal and go to your home directory, then into and clone there. Then restart Claude Code and you should be able to invoke it like any other skill. Here is some example output of it running on one of my projects:
These days I add MCP support for pretty much every software product I build, including most recently IterOps and SecurityBot.dev . Creating the MCP server is very easy because I build all of my SaaS products using Laravel, and Laravel offers native MCP support . What's less clear is how to configure the MCP client to talk to the MCP server. This is because many MCP servers use to call the MCP server URL. This is easy enough, however if you're running NVM to assist with handling Node version discrepancies across multiple projects, then you might need to explicitly define the npx path inside the file, like this: If you're using Laravel Herd and the MCP client is crashing once Claude loads, it might be because you're using Herd's locally generated SSL certificates. The mcp-remote package doesn't like this and will complain about the certificate not being signed. You can tell mcp-remote to ignore this by adding the environment variable:
I recently added an MCP server to ContributorIQ , using Laravel's native MCP server integration. Creating the MCP server with Claude Code was trivial, however testing it with the MCP Inspector and Claude Desktop was not because of an SSL issue related to Laravel Herd. If you arrived at this page I suppose it is because you already know what all of these terms mean and so I'm not going to waste your time by explaining. The issue you're probably facing is because MCP clients are looking for a valid SSL certificate if https is used to define the MCP server endpoint. The fix involves setting the environment variable to . If you want to test your MCP server using the official MCP Inspector, you can set this environment variable right before running the inspector, like so: If you'd like to test the MCP server inside Claude Desktop (which is what your end users will probably do), then you'll need to set this environment variable inside . I also faced Node version issues but suspect that's due to an annoying local environment issue, but I'll include that code in the snippet just in case it's helpful: Hope this helps.
This article originally published on X . You would be forgiven to believe programming is a white collar job. In fact, given the allure of joining a startup or FAANG and reaping generational wealth, all while seated in front of a keyboard wearing your favorite hoodie, programming may very well be considered by most to be the most white collar of white collar jobs. But that’s confusing the profession with the job. The profession of programming is cushy to be sure (I’ve been one my entire life and have zero calluses to prove it), but the job itself has historically resembled that of an electrician or plumber than, say, an accountant or doctor. If you’ve never worked alongside a team of programmers then this assertion probably sounds absurd, but indulge me for a moment. On any given day, programmers will read and write specifications, patch systems, and hold coordination meetings, often called standups. Companies hire programmers as apprentices, and experienced programmers sometimes refer to themselves as craftsmen. Knowledge is often passed along via a practice known as pair programming in which an experienced developer sits next to a less experienced colleague in order to pass along institutional knowledge and hard-won techniques. Best practices, gotchas, and tips are whispered in hallways and over after-hours drinks. In other words, a guild. Guilds have existed for hundreds of years, and historically, if you were a blacksmith, weaver, or another type of artisan, you probably belonged to one. New members entered as apprentices, progressed to journeymen, and eventually, if they stuck with it long enough, were deemed masters of their craft. Guild members enforced standards, created and codified new techniques, and coordinated learning. And if you were part of the software profession at any point in the last 50 years, that is precisely what you were participating in. But software guilds are now dead. They are being replaced by software factories, and with them both the profession and job of software developer are being transformed into something entirely new. This new type of factory consists of machines that work together to produce not widgets, cars, or airplanes, but code. These machines are what we currently call agents, although I suspect we have not yet settled on the final terminology, let alone on how this factory will ultimately operate. Regardless, early indications suggest this transformation is already underway. Properly tuned and maintained, the factory can produce code at a speed and with a quality no competing guild could match. What’s even more fascinating about this software factory is its input. The inputs come directly from the nontechnical members of the organization, notably subject matter experts. Relieved of the need to translate their ideas through the guild, these individuals can now use AI-powered coding agents (Claude Code seems to be the favorite at our firm) to build useful business applications in less time than it once took just to schedule a requirements meeting. In other words, for many use cases, the translation layer between subject matter expert and machine has evaporated. If this sounds implausible, you probably have not watched a nontechnical person use a tool like Claude Code. As one of many examples I could cite, earlier this week my colleague and BeePurple CEO Stevee Danielle used Claude Code to build an application modeling SAMHSA Peer Support Certification standards across all 50 states. She went from idea to MVP in four hours. Along the way, she imported data from every state and structured the application to address specific reporting gaps identified by industry leaders in published research. This is just one example; I could devote multiple articles to this sort of software which is currently being built within Xenon's portfolio of companies. So what will the guild members do? They will configure the factory so that people like Stevee can move code all the way to production. As factory technicians, they will tune the machines on the floor to ensure inputs are converted into reliable output, maximizing the velocity of code flowing from nontechnical team members through the assembly line. Each agent performs a critical function in the line: one codes, another handles QA, another generates documentation, another reviews pull requests, another deploys, and so on. They will work in unison, much like today’s CI/CD pipelines, with one critical difference: AI, not guild members, will play the central role, not only executing each stage but continuously analyzing and improving the line as it runs. Now I will say out loud the part everyone is probably thinking: this factory will eventually run with almost no technicians. At Adalo, where I serve as CTO, we are already seeing early glimpses of this future. In recent weeks we built an agent that has been running nearly around the clock in either bug fixing or feature creation mode. When operating in the former mode, we do not tell it which bugs to fix. Read that sentence again. It finds, triages, fixes, and verifies bugs on its own. After each run, it updates a persistent memory with lessons learned, optimization ideas, and other improvements so that it can operate even more efficiently the next time. Watching it work has been described by me and my colleagues as mesmerizing. The very idea of this becoming reality is exciting, terrifying, and mystifying. As a lifelong programming nerd and guild member, what is happening right now is the most incredible thing I have ever seen, and I have been leading efforts across the portfolio to ensure these factories are configured to meet this new reality. I am convinced that much of society has not yet begun to grasp the magnitude of what is happening. One way or the other, the factory era of software has begun. The author Jason Gilmore regularly advises investment banks, universities, and other organizations on AI's impact of software development processes. Get in touch with Jason at [email protected] .
Author: Steve Coll Genre: Non-fiction Verdict: What an amazing book. This is the sequel to Coll's 2005 Pulitzer Prize-winning book Ghost Wars. Author: Ruth Ware Genre: Fiction Verdict: This book was sitting on the bookshelf at our post-Christmas Airbnb. I had heard of the author referenced as being the next Agatha Christie. Very happy to have serendipitiously found the book, read it in like 24 hours. Author: Ben H. Winters Genre: Science Fiction Verdict: This book fits nicely into one of my favorite genres which is science fiction meets noir detective meets apocalypse. Loved it, but lost interest reading the sequels. Author: Ernest Hemingway Genre: Fiction Verdict: Love Hemingway and the Sun Also Rises is unquestionably my favorite book of all time. I've even read it in multiple languages (Italian title is Fiesta). But this particular compendium was boring. Author: Ben H. Winters Genre: Science Fiction Verdict: The sequel to the Last Policeman (above). Good but not as good as the first. Author: Alexander C. Karp Genre: Non-fiction Verdict: Great, great book. Author: Blake Mycoskie Genre: Business Verdict: Great book written by somebody who seems to have figured out life. Author: Henry Kissinger Genre: Non-fiction Verdict: Good book but a few chapters too long. Author: Sylvain Neuvel Genre: Science Fiction Verdict: Really loved this book, wildly creative. Author: Anupreeta Das Genre: Biography Verdict: This was a wildly repetitive hit piece. Is Bill Gates an opportunistic genius? Yes. Did Bill Gates change the world? Yes. Is he human and did he sometimes do human things? Also yes. I'm really not sure why people grind axes to the extent this author does. Author: Andrew Cockburn Genre: Non-fiction Verdict: Interesting book about the future of warfare. Author: Ronan Farrow Genre: Crime / Non-fiction Verdict: Had heard of Ronan Farrow before, so picked up this book on a whim at local bookstore. He's one hell of a writer and journalist. Author: Raj Shah Genre: Non-fiction Verdict: Akin to Kill Chain, a great book if you want to understand where the whole war thing is going. Author: Mary Elise Sarotte Genre: Non-fiction Verdict: If I wasn't so into software I'd probably have been a history professor. One related question I've often wondered about lately is why is Russia so obsessed with Ukraine? This book answers that question. Author: Tess Gerritsen Genre: Thriller Verdict: A fun book along the lines of the aforementioned One Perfect Couple . Author: William Gibson Genre: Science Fiction Verdict: Neuromancer will forever be my favorite science fiction book of all time. It also happens to be, by far, his pinnacle of achievement because everything else he's written since has been practically incoherent. Not sure I can add anything more to this summary. Author: David Downing Genre: Fiction Verdict: Amazing historical fiction book! Loved it. Author: George Orwell Genre: Fiction Verdict: The only reason this book is on this list is because I finally finished it after reading it for several years. A terrible slog and I'm sorry I ever started it. That said I love everything else Orwell has written. Author: Chris Nashawaty Genre: Non-fiction Verdict: If you grew up in the 80's you will love this book! Chronicles the making of Tron, E.T., Poltergeist, The Thing, Road Warrior, Blade Runner, Star Trek II, and Conan the Barbarian, all classic movies which came in within a few months of each other in 1982. Author: Reed Albergotti Genre: Non-fiction Verdict: I've always followed the Tour, particularly when guys like Armstrong were competing. This book explains just how deep the rabbithole went with regards to doping. Wow. Author: Will McGough Genre: Non-fiction Verdict: As my 10,000 pushups post explains, in 2025 I got really interested in becoming physically fit and as part of the process read this book. Very funny and informative. Author: James S.A. Corey Genre: Science Fiction Verdict: Wonderful science fiction book. Author: Benjamin Wallace Genre: Non-fiction Verdict: I feel like I've read everything that can be read about attempts to figure out who created Bitcoin and after reading this book have concluded I should stop wasting my time. There is nothing else to be said about the topic; nobody can figure it out and I'm not sure they ever will. Author: Joe Girard Genre: Business Verdict: Picked up this book at some used book store and it is now my favorite business book. I love it because despite what the title says it has very little to do with sales and everything to do with organizing a professional network. The author died a few years ago and for that reason I regret not having read this book earlier because I would have loved to have met him. Author: Arkady Strugatsky Genre: Science Fiction Verdict: This is a famous science fiction book which is little known to Westerners. Written by a citizen of the Soviet Union. I loved it! Author: Ramez Naam Genre: Science Fiction Verdict: Good book, enjoyed it. Author: Blake Crouch Genre: Science Fiction / Apocalyptic Verdict: WOW! One of my favorite books of the year. Terrifying. Read it over Thanksgiving in maybe 48 hours. Author: Robert Harris Genre: Science Fiction Verdict: Great book, I'm surprised this wasn't turned into a TV show. Author: Blake Crouch Genre: Science Fiction Verdict: Another terrifying book by Blake Crouch, who also write Run (above). Loved it! Author: Atul Gawande Genre: Non-fiction Verdict: Interesting book, I've applied some of what I learned from it to my own life in the weeks since. Let's see if it sticks. Author: Lincoln Child Genre: Science Fiction Verdict: Fun book about a deep sea discovery gone wrong. I will have to check out what else Lincoln Child has written.
November 18, 2025: This article was originally published on June 4, 2024 and later updated for clarity after I returned to it and couldn't figure out which file to modify! I've been a Vim user for decades however a few years ago I switched to VS Code and then subsequently Cursor for my web development work. When building modern web apps you'll spend almost as much time running shell commands as coding, so I need to have a terminal within easy reach at all times. In fact I typically keep several terminal tabs open, including one opened to the local MySQL instance, one running a worker, and one to execute various shell commands including those related to managing my Git repository. I want this transition between editor and terminal to be as seamless as possible and so I setup two keyboard shortcuts to help me quickly move back and forth between the two. Furthermore, the transition will always open the terminal in fullscreen mode so I'm not fighting with screen real estate on a laptop. To configure these shortcuts, open the keyboard shortcuts ( ) file in JSON mode and add the following entries: I've used for the toggling shortcut, however you can switch this to whatever you'd like. If you're running Windows I suppose you would change the shortcut to or something like that. Once defined, save the changes and then try using the keyboard shortcut to switch between the two. With the terminal maximized your VS Code enviroment will look like this: If you have any other VS Code screen optimization tips, I'd love to hear about them! Hit me up on Twitter at @wjgilmore .
Headed into 2025 I was fat, out of shape, and lazy. My three young children were running circles around me, and I was increasingly concerned not only about my health in general but about the kind of example I was setting for them. My (very) sedentary job in front of a laptop serving as the CTO of Adalo wasn't helping, nor was the fact that my favorite hobby in the world outside of work is, well, sitting in front of the laptop building SaaS companies like SecurityBot.dev and 6DollarCRM . Adding to the general anxiety was the fact I had spent the last two years watching my parents struggle with devastating health issues. My parents had me in their early 20's, so all said they really weren't that much older than I am. My thoughts regularly turned into worry that I'd eventually wind up with my own serious health problems if I didn't get my act together. I wanted to do something about it, but what? Past attempts to go to a gym weren't successful, and I really did not want to drive any more than I already do serving alongside my wife as a kid taxi. Also, having made half-hearted attempts in the past to get into shape (Orange Theory, P90X, etc) and winding up spending less time exercising than researching the minutiae of max VO2, bicycle construction, and fasting benefits, I knew I had to keep things simple. While on a post-Christmas family vacation down in Florida I concluded it made sense to set a goal that could help me get into better shape but which also could be completed in small chunks over a long period of time. It was also important that I could do the workout at any point in the day and even in my office if necessary. And thus began the quest to complete 10,000 pushups in one year. Almost 10 months later, this harebrained goal and the many positive effects that came from it changed my life in ways I never imagined. While still in Florida I fired up a Google Sheet and added two columns to it: Date and Pushups. And on January 1, 2025 I dropped down and knocked out 30. Well not 30 in a row, mind you. I never could have done that on day 1. It was more like 10, 10, 5, 5 or something like that. Then I wrote it down. On January 2 I upped my game a bit, doing 35 and again immediately logged into the sheet and wrote it down again. In the days that followed, the reward very much became the opportunity to open that sheet. Can't write the pushup number down if I didn't do the pushups, right? I didn't want to break the chain (although you'll later see I did in fact break the chain plenty of times in the months ahead) and so in the first 31 days I did pushups on 24 of 31 days, logging 1,018 in total and averaging 32.84 per day. I even worked up the motivation to run on a treadmill one day in January, logging 2.17 miles in 30 minutes on January 14, 2025. Other than that run and pushups, according to my spreadsheet I did no other notable exercise that month. It was also in January that I stopped eating fast food of any type, and as of the day of this writing I've not reversed course on this decision. Long story short we were driving back from https://codemash.org and pulled through a McDonalds. I had at that point been eating McDonalds all of my life; nothing over the top mind you, but probably twice a month at least for as long as I can remember. Anyway, the food that day was rancid. Legitimately nauseating. I have no idea why it was that way but I was so turned off that right there and then I swore I'd never touch it again. Coincidentally, over this past weekend I was on a walk and reflecting on some of what I'd been writing in this blog post, and my thoughts turned towards diet. When was the last time you heard somebody (including yourself) say they feel better after eating fast food? We all know the answer to this question: never. This stuff is not food and I feel so much better staying away from this poison. Whether it was due to the winter blues or that shiny New Year's resolution already starting to fade, I only logged 848 pushups on 21 of 28 days in February. But I definitely seemed to be getting stronger, averaging 44.63 pushups on those days, and managed to log a daily high of 117 pushups on February 9, 2025. By the end of February I had logged 1,876 pushups. According to my spreadsheet I also managed to lift weights on February 1, 4, and 10. I have a pretty basic weight set in the basement and although I can't recall the specifics, I was probably standing around listening to CNBC on my phone most of the time. I'm not going to sugarcoat it; March was bad, real bad. I only logged 206 pushups on 9 days, averaging 22.9 pushups on those days. It's unclear to me why I'd tailed off so much other than to imagine old man winter was really starting to weigh on me by that point. Even so, those 206 pushups took me to a total of 2,082 pushups for the year. In April my pace picked back up along with the improving weather and increasing sunlight. I completed 375 pushups on 13 days, averaging 28.84 pushups on those days. However I also managed to lift weights on six days in April, went on a run on April 14, and even gave fasting a go for a 28 hour period between April 2-April 3 (not sure I'll do that again). Another lifestyle change unexpectedly happened in April: I basically quit drinking alcohol, wine in particular. This decision was a pretty simple one because as I've gotten older, the hangovers have gotten worse, and my sleep quality has gotten much worse, anytime I drank more than 1-2 drinks. As of this writing (September 28, 2025) I've had maybe 2-3 glasses of wine in almost 5 months. My new alcoholic drink of choice when I feel like having something? Miller Lite. It has low calories, low alcohol content, and you can buy a 12 pack for as much as one bottle of wine. Adding 375 pushups to the pile took me to a total of 2,457 pushups for 2025. Likely due to fear I was going to enter yet another summer rocking the "dad bod", my exercise intensity soared in May. I completed 1,281 pushups over 25 days, averaging 51.24 pushups on those days. On five of those days I completed more than 100 pushups, and on May 18 completed a YTD single day high of 150. I also became mildly obsessed with the idea of doing a split. While browsing Libby as I love to do at night, I found the book Even the Stiffest People Can Do the Splits . The cover showed the author smiling and doing a full split, and I thought well if Eiko says even stiff people can do it then maybe I can too. Over the course of May I did the splits workout 15 times, and undoubtedly became far more flexible although I never did quite reach a complete split. This continued into June and early July however for reasons I'll explain in a moment I stopped doing the regiment out of fear I'd get hurt. However, to this day I stretch daily and of all the different exercise routines I've tried this year I think aggressive stretching has perhaps had the most ROI of them all. On May 15 I ran a 5K with my daughter (well she sped ahead of me after mile 1), completing it in 32:50. Not too bad considering according to my log I ran exactly four times in 2025. Headed into June I had completed a grand total of 3,738 pushups. June is where things really started to get exciting. Every year Xenon Partners runs a friendly intercontinental pushup contest. "Friendly" is a relative term considering I work with numerous combat veterans, retired members of the United States and Australian military services, and a former Mr. Australia contestant. I also spent some time in France with the family, attending the 24 Hours of Le Mans race (amazing btw) and sightseeing around the country, meaning I had to fit pushups in whenever possible, including at Versailles: In June my output soared to 2,014 pushups, and despite all of the traveling managed to do pushups on 24 of 30 days, averaging 91.55 pushups per day. I also set multiple PRs in June, doing 205 pushups on June 1, 222 on June 15, and then 300 on June 27. As of June 30 I had completed a total of 5,752 pushups. Upon returning from Europe I got the bright idea to organize a race called the 5/15/500 Challenge. This involved running 5 miles, biking 15 miles, and then completing 500 body weight exercises. Nevermind that I'd run maybe four times in 2025 and hadn't been on my bike once. Many of my neighbors joined the fun, and we even had t-shirts printed for the occasion. Of course, I also created a website . I did this because I figured having an artificially imposed deadline was going to force me to exercise more often. Mission accomplished. In July I completed 2,002 pushups, ran 48.88 miles, and biked 28.99 miles (this includes the race day numbers). The heat throughout the month was often unbearable, but I pushed through all the same knowing July 26 (race day) was coming up quick. During this period I also really began to dial in my diet, eating little more than fruit, eggs (lots of eggs), chicken, rice, and salad (lots of salad). It was during this period and August that my body began to change. I became noticeably larger and more muscular, and incredibly my abs began to show. In this photo I'm completing race pushup #500. Don't judge the form, it was almost 90 degrees and the exhaustion was real from having already completed the run and bike segments. That said if you squint in the right light you can see I actually have muscles due to all the pushups and running! Due to all of the July training and the 5/15/500 Challenge, my YTD pushup output soared to 7,754. It was around this time that I went down a major rabbit hole regarding microplastics. A successful techie named Nat Friedman funded a study that looked into the prevalency of microplastics in food, vitamins, and other products, and published the results here . I'm not going to call out any products by name here (although I should because they are poisoning us), but take a moment to open this site in a new tab and search for protein for a glimpse into how you are being poisoned every time you take a bite of so-called health food. After spending a few weeks researching this topic I radically changed my diet and eliminated all of this nonsense. If you really want to go down a rabbit hole, look into the relationship between chocolate-infused health products and heavy metals. In August I did exactly 1,000 pushups, and threw in 190 body weight squats just for fun. 525 of these pushups were completed in a single day (August 16) thanks to my neighbor, friend, and fellow 5/15/500 contestant Charlie having the bright idea that we should knock out what was originally supposed to be 400 pushups during our sons' soccer game. Of course, our competitive spirit got the best of us and I quit at 525 while Charlie pushed on to 600. I'll get him the next time! The running sessions continued throughout August, with 37.48 miles completed. I started taking running much more seriously at this point because I signed up for the October 19 Columbus 1/2 Marathon. I've run 1/2 marathons before (poorly - my last finish time was 3:05) so I know what I'm getting into here, but this time around I want to actually finish at what I deem to be a respectable time which is around 2:20 (10:40/mile pace). Of course, in order to train for this I needed to know what pace I'm running in the first place, and so I bought a Garmin Forerunner 55 watch with GPS. As mentioned before my proclivity for going down research rabbit holes hasn't really helped my previous attempts to get into shape so I chose this watch because compared to other watches it is relatively spartan in terms of features. Above all else I wanted a watch that can accurately track my running distance, pace, and route and so far I am so, so happy with this purchase. It is perfect, and the battery life is amazing. On August 2 I received the watch and later that day took my son and his friend up to a local (Alum Creek) mountain bike park and while they were riding I decided to run the trails. I wound up running 4.69 miles on very hilly and bumpy trails, and paid for it dearly over the next week due to terrible foot and knee pain. On August 21 I ran my first training 10K, completing it in 1:12:28. According to my fancy watch I completed the first 5K in 39:11 but then sped up and completed the second 5K in 33:11. On August 25 I repeated the route, this time completing the 10K in 1:05:41. On August 28 I did it a third time, completing it in 1:02:47. Progress! I brought some help to the the August 25 and 28 10K training runs: GU packs . In July I read the book Swim, Bike, Bonk: Confessions of a Reluctant Triathlete , by Will McGough. In this hilarious recounting of training and competing in an Ironman triathlon, the author mentions using these mysterious "gel" pack, of which the most popular is known as a "GU pack". I subsequently picked up a few at the local Walmart and can confirm they unquestionably gave me a boost on these long runs. Now anytime I plan on running a 10K or longer I put one in my running pouch and open it 5K into the route. With another 1,000 pushups in the book my YTD output sat at 8,754 on August 31. Much better endurance aside, the most obvious visible outcome of the last few months is my clothes no longer fit. My polo shirts are so baggy they look like tents, and my t-shirts are too small because I'm so much more... muscular? What in the hell is going on? This seems to be working! With 8,754 pushups complete, I only had 1,246 to go and concluded I'd meet the milestone in September. With the 1/2 marathon around the corner my running workouts picked up and I set multiple PRs, including a 29:51 5K PR on September 8, followed by another 28:10 5K PR on September 11. On September 17 I got one of the biggest motivational boosts possible. I was in Chicago for a quarterly meeting, and one of the fellow board members who I've seen in person once every 3 months (but not 3 months ago because we were on the France trip) walked up to me and introduced himself. I stared back at him completely puzzled, and watched him walk away to greet the person next to me. He suddenly wheeled around with a look of shock on his face and said something to the effect of "Holy shit! I didn't even recognize you! You look amazing!". On September 21 I completed the 10,000th pushup in unceremonious fashion on my living room floor: On September 24 I gobbled up a GU pack and headed outside feeling like I could tear a phone book in half. My goal was to shatter the previous 28:10 5K record, and I was on track to do exactly that, running the first 2.1 kilometers in 18 minutes flat. Then out of nowhere I felt this terrible pain in my left calf and came to an immediate stop. It wasn't until September 29 that I could comfortably run again, and even then I only ran 1 mile because I'm terrified of a nagging injury setting me back for the October 19 1/2 marathon. In September I added 1,501 pushups to the pile, bringing the YTD total to 10,245. Today is October 1, 2025 and the pushups continue. The aforementioned 1/2 marathon is on October 19, and my neighbor Charlie and I have already agreed to walk/run a full marathon (around our neighborhood) on November 29. Although it's almost 80 degrees today, in past years we've seen snow by the end of the month so I'm thinking about getting one of those fancy stationary bikes or maybe even a treadmill so I can keep this party going over the winter. In recent months I have started to look so different that friends have asked me for some diet details. As mentioned, I no longer eat fast food, nor overconsume alcohol. But I've also almost completely cut out processed foods, eating them only very sparingly. A few months ago I did manage to go down the microplastics and heavy metals rabbit hole, and now spend some time researching anything that I plan on eating on a regular basis. Believe me, a lot of the food you think is healthy is pure garbage. Every morning I eat one of two things: either a gigantic fruit smoothie or four scrambled eggs and a salad. I do not deviate from this, only very occasionally eating some protein-powder pancakes made by my wife. My smoothie consists of milk, greek yogurt, 1.5 scoops of Optimum Nutrition protein powder, a huge scoop (probably two cups) of frozen organic berries, and an entire banana: Here is the typical scrambled eggs and salad breakfast: For lunch I eat some combination of chicken, rice, tuna, and salad. I almost never deviate from this. For dinner I eat whatever my wife decides to make, which is always healthy. Obviously we occasionally go out and I'll eat some garbage like wings or pizza, but this is pretty rare compared to the past. I also take a few vitamins and creatine daily. Earlier in this post I mentioned researching the prevalency of microplastics, heavy metals, and other poison in food. This is particularly problematic in ironically protein powder, protein bars, protein shakes, etc. I settled on Optimum Nutrition because it is one of the few powders on the market that has been tested by numerous third-parties, including the Clean Label Project . It's pretty expensive compared to other products, but I'm happy to pay in order to avoid ingesting this garbage. Despite getting myself into incredibly good shape relative to the past, this wasn't really that hard. On 105 of 274 days (38.3%) I did no pushups at all. On 142 of 274 (51.8%) days I did between 1 and 100 pushups. On just 26 of 274 (9.4%) days did I do more than 100 pushups, and on only 8 of 274 (2.9%) days did I do 200 or greater. Interestingly, although I have no hard data to back this up I feel like my strength soared in the 67 days following the 5/15/500 race (July 26). Following that date I did more than 100 pushups on 11 days (16.4% of the days), and became noticeably more muscular. Here's a chart showing the pushup volume throughout the year: Headed into October, I feel like a million dollars and plan on continuing these off-the-wall exercise quests for the rest of my (hopefully long) life. I obviously have no idea what I'm doing, but am happy to answer any questions and help motivate you to get in the best shape of your life. Send me an email at [email protected] or DM me on Twitter/X at @wjgilmore!
We're headed into the tail end of 2025 and I'm seeing a lot less FUD (fear, uncertainty, and doubt) amongst software developers when it comes to AI. As usual when it comes to adopting new software tools I think a lot of the initial hesitancy had to do with everyone but the earliest adopters falling into three camps: don't, can't, and won't: When it comes to AI adoption, I'm fortunately seeing the numbers falling into these three camps continuing to wane. This is good news because it benefits both the companies they work for and the developers themselves. Companies benefit because AI coding tools, when used properly, unquestionably write better code faster for many (but not all) use cases . Developers benefit because they are freed from the drudgery of coding CRUD (create, retrieve, update, delete) interfaces and can instead focus on more interesting tasks. Because this technology is so new, I'm not yet seeing a lot of guidance regarding setting employee expectations when it comes to AI usage within software teams. Frankly I'm not even sure that most managers even know what to expect. So I thought it might be useful to outline a few thoughts regarding MVEs (minimum viable expectations) when it comes to AI adoption: Even if your developers refuse to generative AI tools for large-scale feature implementation, the productivity gains to be had from simply adopting the intelligent code completion features is undeniable. A few seconds here and a few seconds there add up to hours, days, and weeks of time saved otherwise spent repeatedly typing for loops, commonplace code blocks, and the like. Agentic AIs like GitHub Copilot can be configured to perform automated code reviews on all or specific pull requests. At Adalo we've been using Copilot in this capacity for a few months now and while it hasn't identified any groundshaking issues it certainly has helped to improve the code by pointing out subtle edge cases and syntax issues which could ultimately be problematic if left unaddressed. In December, 2024 Anthropic announced a new open standard called Model Context Protocol (MCP) which you can think of as a USB-like interface for AI. This interface gives organizations the ability to plug both internal and third-party systems into AI, supplementing the knowledge already incorporated into the AI model. Since the announcement MCP adoption has spread like wildfire, with MCP directories like https://mcp.so/ tracking more than 16,000 public MCP servers. Companies like GitHub and Stripe have launched MCP servers which let developers talk to these systems from inside their IDEs. In doing so, developers can for instance create, review, and ask AI to implement tickets without having to leave their IDE. As with the AI-first IDE's ability to perform intelligent code completion, reducing the number of steps a developer has to take to complete everyday tasks will in the long run result in significant amounts of time saved. In my experience test writing has ironically one of AI's greatest strengths. SaaS products I've built such as https://securitybot.dev/ and https://6dollarcrm.com/ have far, far more test coverage than they would have ever had pre-AI. As of the time of this writing SecurityBot.dev has more than 1,000 assertions spread across 244 tests: 6DollarCRM fares even better (although the code base is significantly larger), with 1,149 assertions spread across 346 tests: Models such as Claude 4 Sonnet and Opus 4.1 have been remarkably good test writers, and developers can further reinforce the importance of including tests alongside generated code within specifications. AI coding tools such as Cursor and Claude Code tend to work much better when the programmer provides additional context to guide the AI. In fact, Anthropic places such emphasis on the importance of doing so that it appears first in this list of best practices . Anything deemed worth communicating to a new developer who has joined your team is worthy of inclusion in this context, including coding styles, useful shell commands, testing instructions, dependency requirements, and so forth. You'll also find publicly available coding guidelines for specific technology stacks. For instance I've been using this set of Laravel coding guidelines for AI with great success. The sky really is the limit when it comes to incorporating AI tools into developer workflows. Even though we're still in the very earliest stages of this technology's lifecycle, I'm both personally seeing enormous productivity gains in my own projects as well as greatly enjoying seeing the teams I work with come around to their promise. I'd love to learn more about how you and your team are building processes around their usage. E-mail me at [email protected] . Developers don't understand the advantages for the simple reason they haven't even given the new technology a fair shake. Developers can't understand the advantages because they are not experienced enough to grasp the bigger picture when it comes to their role (problem solvers and not typists). Developers won't understand the advantages because they refuse to do so on the grounds that new technology threatens their job or is in conflict with their perception that modern tools interfere with their role as a "craftsman" (you should fire these developers).
Sometimes it is useful to build a demo app using database data that looks realistic but isn't otherwise used for any mission-critical reasons. For this purpose I like to use the "Sakila" database, which you can learn more about here . This database is also known as the "DVD Store" database, because it mimics what might be used to manage a hypothetical DVD store from back in the day. I've personally used this and the MySQL " employee " database for years as part of technical sales demos at both DreamFactory and now, Adalo . These databases are large enough to be realistic yet easily understandable at first glance, making them ideal for sales-related demonstrations. You can download this database in zip or tar.gz format here . Once downloaded, decompress it and then import the schema into your MySQL instance like so: This will create a new database called . If you want to use a different database name, then open and find these three lines: Update each reference to the name of the database you'd like to use, such as . Keep in mind that if you don't modify these lines and already have a database named , it will be destroyed before being recreated by the second line! Next, import the data: Finally, you'll want to create a dedicated user for interacting with the database. The following command will create a user who can connect to the MySQL server from anywhere (the latter defined by the ): The user cannot however do anything. You need to grant it permission (known as privileges in the MySQL world). If you want to give the user full access to the database, you can assign it like so: If instead you want to give the user read-only access, you can execute this instead: If you wanted to restrict access from a specific IP address, you can execute: After creating the user, logout of the root account and confirm you can login with the new user: After confirming you can see the database, connect to it and view the tables:
The Model Context Protocol seems to be ushering in an exciting new type of App Store, and while it's all a bit messy right now, companies should be paying close attention to this topic. There is a scene in the 2002 movie Minority Report where Tom Cruise is standing in front of an impossibly cool monitor. He’s using his hands to control the interface, rotating and swiping to display, move, and dismiss screen elements. The movie premise is pretty interesting, but it was the scenes with these fantastical computers that really left me in awe. At the time, REST APIs were still largely an academic musing found in Roy Fielding’s PhD thesis, Apple was in such a state of financial distress that at year’s end the stock closed at $0.22 (that’s cents, not dollars), and Microsoft’s Internet Explorer browser still dominated the web. Needless to say, the real world of computing looked far different than Minority Report’s fantastical interfaces. I think we’re on the verge of moving a lot closer to my idealized computing environment thanks to an emerging technology called Model Context Protocol (MCP). The official website defines MCP like so: MCP is an open protocol that standardizes how applications provide context to large language models (LLMs). This definition is fine, albeit one that largely only makes sense to programming nerds like me. For everyone else, I prefer to define MCP as such: MCP offers a way to expose all or part of a software application to another computing environment in such a way that the end user can create entirely new interfaces that wouldn’t otherwise be possible to create. Let me show you a concrete example in order to explain my thinking. Check out this infographic: Looks like some slide in a boring sales deck, right? Wrong. It is much more exciting than that. This was generated on-the-fly by Claude Desktop in response to this prompt: Use the DreamFactory MCP to show me the weekend Heroku trial numbers and display it in a Canva chart. Even more impressive, the charted data was pulled from Snowflake. So this data was pulled from a Snowflake database by DreamFactory’s MCP server, pumped into Claude Desktop, and the graphic was built on the fly by Canva’s MCP server. Not to be too dramatic here, but this type of integration wasn’t technically possible even three months ago without involving a programmer. Here’s another example: This dashboard was generated from a PostgreSQL database (also coincidentally retrieved by DreamFactory’s MCP server). The prompt was: Create a chart of recent orders In both cases, imagine a user making these sorts of requests, viewing the output, and then moving on, effectively throwing away (or swiping, in Minority Report speak) the interface. My friend and former colleague and now O'Reilly Director of Content Jon Hassell referred to these throwaway interfaces as "disposable user interfaces", or DUIs. The acronym seems a bit questionable but it is nonetheless a very apt term. How about a Minority Report-themed dashboard? Coming right up: This dashboard was generated from a combination of PostgreSQL data, one of my Google calendars, and an array of random quotes. The clock and date located at the top right are dynamically updated. Go to this link and you’ll be able to see the entire interface because I published it as a Claude Artifact. MCP servers are installable by any software which supports them, known as MCP clients. Claude Desktop is an example of an MCP client, and as the screenshot below shows, Claude is already making it pretty easy to install other MCP servers: If you click the Add Connectors link, you’ll be able to browse several more: This interface is reminiscent of another application that has in recent years been one of the largest revenue generators in the history of the world: The Apple App Store. You know what else this all reminds me of? Citrix Workspace Microapps. If you’ve never used Citrix Workspace, it’s a way for corporations to manage application availability across a workforce. A microapp can be thought of as the extraction of a specific feature within a larger application, such as expense approval. If you’re a manager then it isn’t very fun to constantly login to SAP Concur to approve expenses. The idea behind a microapp is that a mini-app can be created which can for instance send push notifications to the manager whenever expenses require approval, or the manager can open a niche user interface which only contains the minimal data required to review and approve expenses. If you’re interested in this sort of thing, a few years ago I actually co-authored a short e-book about this topic which you can download for free from here . But I digress. Anthropic's desired end state seems pretty clear: they want to build the next generation app store, with the primary difference being this app store is going to make it possible for an entirely new generation of applications to be created by interweaving multiple MCP servers together. And I'm here for it. Furthermore, I think every software company should be actively experimenting with this technology, because it provides an entirely new way to put your product in front of users who might not have otherwise tried it. I’ve been talking a lot about Claude in this post, however Claude is only one of several popular applications that support MCP servers. For instance I regularly use the GitHub and Stripe MCP servers inside the coding IDE Cursor. ChatGPT also supports adding MCP Servers although they’ve managed to bury the option inside a Connectors submenu found in Settings: Interestingly, if you put on your mining helmet and dig deep, deep into the GitHub Settings interface you’ll find that it’s possible to even add MCP servers to Copilot: By the way, any software product that can add and use an MCP server is logically referred to as an MCP client. I predict we’re just a few years away from all mainstream software doubling as an MCP client, and don’t think it is a stretch at all for operating systems to follow suit. At the moment, unless your MCP server is one of the anointed few showing up in Claude and ChatGPT’s directories, you’re going to need another solution that allows users to obtain and install your server. This is at the moment a pretty ugly process, often involving editing a JSON file like this: Yuck. However, progress is being made on several fronts. One of the most interesting developments in this area is a new open format called Desktop Extensions, or DXT . You can use the DXT packaging tool to very easily create a clickable MCP server installer. I’ve already managed to successfully build a DXT-based installer for DreamFactory’s MCP server. If you want to try it out you can download it from GitHub . Cursor has created its own solution for adding MCP servers to their namesake IDE. I don’t think it has an official name, and seems to be generally called the “Add to Cursor” button. That’s right, you just click a button and it will initiate installation of an associated MCP server. You can view a list of available buttons here . MCP server authentication is also pretty messy. At the moment two options are available: API keys and OAuth. If you install any of the MCP servers found in Claude’s connector directory, you’ll see the latter in action. That said, I think there are plenty of convenient opportunities to take advantage of API key-based authentication, particularly since if you use DXT format then the API key will be securely stored in the operating system keychain. I’ve spent 20+ years in the tech sector, and because of it usually find emerging technology to be practically radioactive due to instability. MCP is a rare exception. I think this has the potential to change the way the world uses computers, and because of it I am extraordinarily bullish on it. Whether you’re bullish or not, I’d love to hear your thoughts! Email me at [email protected] .
I've had the opportunity to spend the last several days immersed in researching the Model Context Protocol and the present state of MCP servers. My early conclusion is this technology is for real and has the potential to entirely change how we use the Internet. That said, like any emerging technology it is most definitely in a state of rapid evolution and so I've compiled a few points here that may be useful to others exploring this topic. It is presently a messy and chaotic space, with both server and client implementations unable to keep up with the rapidly evolving spec. A great example of this is Anthropic deprecating and then removing SSE from transport options ( https://modelcontextprotocol.io/specification/2025-06-18/basic/transports ) while simultaneously advertising their partner extensions which are SSE-based ( https://www.anthropic.com/engineering/desktop-extensions ). That said, I don't think anybody cares, including the major tech companies listed in that partner link, whether their extensions are presently SSE- or Streamable HTTP-based. It is just noise in the grand scheme of things, however SSE will eventually unquestionably be phased out, and doesn't even show up in the latest spec version. MCP client support for critical server features remains uneven. What works in VS Code (server Prompts) does not presently work in Cursor. My personal experiments show Prompts to be a fascinating feature which introduce opportunities for user interactivity not otherwise possible using solely Tools. Not for lack of trying, it remains unclear to me (and apparently almost everybody else, including AWS architects , how OAuth is implemented in MCP servers. Claude Desktop seems to have the best support, as evidenced by the directory they launched a few days ago. Other MCP clients have varying support, and require the use of experimental hacks such as mcp-remote for certain use cases. That said, the exploding mcp-remote weekly download chart is indicative of just how strong the demand presently is for at least experimenting with this new technology. And further, given the obvious advantages OAuth has to offer for enterprises it will only be a matter of time before OAuth is standard. You can already see Anthropic moving in this direction thanks to their recent publication of documents such as this . API key-based authentication works very well across popular clients (VS Code, Cursor, Claude Desktop, etc), and when coupled with a capable authorization solution such as DreamFactory it's already possible to build some really compelling and practical extensions to existing products. To see a concrete example of what I'm talking about, check out this great video by my friend and colleague Terence Bennett. While adding API keys (and MCP servers for that matter) to most clients presently requires a minimal level of technical expertise (modifying a JSON file), my experiments with Claude Desktop extensions (next point) shows installation woes will shortly be a thing of the past. Anthropic (Claude) is emerging as the clear leader in all things MCP which is no surprise considering they invented the concept. Among other things their new Desktop extension spec ( https://www.anthropic.com/engineering/desktop-extensions ) is very cool and I've already successfully built one. I'd love to see this approach adopted on a wider scale because it dramatically lowers the barrier-of-entry in terms of installing MCP servers. Somebody has already started an Awesome Claude Desktop Extensions page which is worth a look. The pace of evolution is such that if you're reading this even a few weeks or months after the publication date, then some or possibly all of what is stated above is outdated. Follow me on Twitter for ongoing updates as I expect to remain immersed in this topic for the foreseeable future. It is presently a messy and chaotic space, with both server and client implementations unable to keep up with the rapidly evolving spec. A great example of this is Anthropic deprecating and then removing SSE from transport options ( https://modelcontextprotocol.io/specification/2025-06-18/basic/transports ) while simultaneously advertising their partner extensions which are SSE-based ( https://www.anthropic.com/engineering/desktop-extensions ). That said, I don't think anybody cares, including the major tech companies listed in that partner link, whether their extensions are presently SSE- or Streamable HTTP-based. It is just noise in the grand scheme of things, however SSE will eventually unquestionably be phased out, and doesn't even show up in the latest spec version. MCP client support for critical server features remains uneven. What works in VS Code (server Prompts) does not presently work in Cursor. My personal experiments show Prompts to be a fascinating feature which introduce opportunities for user interactivity not otherwise possible using solely Tools. Not for lack of trying, it remains unclear to me (and apparently almost everybody else, including AWS architects , how OAuth is implemented in MCP servers. Claude Desktop seems to have the best support, as evidenced by the directory they launched a few days ago. Other MCP clients have varying support, and require the use of experimental hacks such as mcp-remote for certain use cases. That said, the exploding mcp-remote weekly download chart is indicative of just how strong the demand presently is for at least experimenting with this new technology. And further, given the obvious advantages OAuth has to offer for enterprises it will only be a matter of time before OAuth is standard. You can already see Anthropic moving in this direction thanks to their recent publication of documents such as this . API key-based authentication works very well across popular clients (VS Code, Cursor, Claude Desktop, etc), and when coupled with a capable authorization solution such as DreamFactory it's already possible to build some really compelling and practical extensions to existing products. To see a concrete example of what I'm talking about, check out this great video by my friend and colleague Terence Bennett. While adding API keys (and MCP servers for that matter) to most clients presently requires a minimal level of technical expertise (modifying a JSON file), my experiments with Claude Desktop extensions (next point) shows installation woes will shortly be a thing of the past. Anthropic (Claude) is emerging as the clear leader in all things MCP which is no surprise considering they invented the concept. Among other things their new Desktop extension spec ( https://www.anthropic.com/engineering/desktop-extensions ) is very cool and I've already successfully built one. I'd love to see this approach adopted on a wider scale because it dramatically lowers the barrier-of-entry in terms of installing MCP servers. Somebody has already started an Awesome Claude Desktop Extensions page which is worth a look.
A few months ago I launched a labor-of-love project called SpiesInDC ( https://spiesindc.com ). It's a subscription-based service which delivers secret packages to your mailbox, yes your real mailbox, containing information about famous events in Cold War history. Also included are stamps, coins, photos, and other memorabilia intended to make for a very fun experience. My friends at the online coding school Treehouse ( https://teamtreehouse.com ) asked if I'd be interested in creating a video explaining how I used a series of artificial intelligence tools to build the marketing site, companion graphics, do market research, and complete other important tasks. The video is now available, and you can watch it here: https://teamtreehouse.com/library/build-a-side-business-with-ai-tools
Some people collect baseball cards, others obsess over video games. I love menubar apps. No clue why, I just really like the convenience they offer, because they provide such an easy way to view and interact with information of all types. I've always wanted to build one, but never wanted to invest the time learning Swift, Objective-C, or ElectronJS. The emergence of AI coding tools, and particularly agents, has completely changed the game in terms of writing software, and so I've lately been wondering how feasible it is to not only create my first menubar app but actually create some sort of software factory that can churn out dozens if not hundreds of menubar-first applications. The first app is called TerraTime . It's a menubar app that shows the current time in a variety of timezones. TerraTime was built with Cursor in about 20 minutes. I spent another 75 minutes or so figuring out how to sign and notarize the app according to Apple requirements. The app is currently for sale on Gumroad , and will soon be available on the Mac App Store. To catalog what I hope will quickly become a collection of useful menubar apps, I've created a new site called Useful Menubar Apps . It was also built with AI, and is hosted on Netlify.
Many years ago I put together this two day itinerary for friends traveling to one of my favorite cities on earth. Today I finally got around to publishing it online. The following items are arranged in order of proximity to one another. If you start at the Colosseum you can methodically walk to the Fori, then to the Vittorio Emanuele monument, and so on. You'll end at Via dei Condotti where some shopping will probably occur, at which point you can just jump on the subway at the end of the street (to the left of the Spanish Steps) and return to your hotel. The Vatican Museum is one of the most extraordinary museums on the planet, and regardless of your religious proclivities is a required stop on the two day tour. The Vatican itself and museum are situated next to one another so I recommend visiting the former first and then going to the museum: If you're feet aren't hurting by day 3, check out the Musei Capitolini and Museo Nazionale Romano, both of which house some pretty amazing Roman artifacts. The Colosseum. Consider taking the tour, it's pretty neat. There is a subway stop named Colosseo which drops you off literally right in front of the Colosseum. Fori Imperiali (within it you can also see the prison where the Romans held Peter and Paul - really amazing). Keep your eyes peeled for the stone maps mounted on the wall, they were placed there by Mussolini as a tribute to the Roman Empire. Monumento di Vittorio Emanuele. Also known as the "birthday cake", it is derided by Italians as being Rome's ugliest monument. It's worth going to the top as the view is pretty nice. The piazza in front of the monument (Piazza Venezia) is somewhat infamous in recent history as both Hitler and Mussolini gave speeches on the monument steps facing this piazza. Trevi fountain The Pantheon. Keep your eyes peeled for Raffaele's tomb. Piazza Navona. I spent New Year's Eve here once! The Fountain of Four Rivers statue was carved by none other than Bernini himself. Chiesa San Luigi dei Francesi (a little known church near Piazza Navona, it is stupendous and a can't miss in my opinion) Museo Doria Pamphili (amazing art museum with Botticelli sculptures among others) Via dei Condotti (probably the most famous shopping street in the world) Spanish steps (oddity: nearby you can visit the largest McDonalds in Italy, it seats 1,200). Walk up to the very top of the steps and you'll see the home where John Keats lived. Vatican / St Peter's Square (you will spend around 90 minutes here). Be sure to visit the catacombs under the basilica. You cannot wear short shorts nor expose shoulders/midriff; they will not let you in. Vatican Museum (you will spend at least 3 hours in here) Use the subway when traveling any considerable distance across the city (for instance from Termini to the Vatican). The subway can get pretty hot depending on the time of year, but is generally easy to get around unless there is a strike. Italians drive on the same side of the street as Americans, however the similarities pretty much end there. I do not recommend driving unless you have an Indiana Jones-like thirst for adventure. You could take the train to various stops along the water, and although the train isn't without its own problems it is going to be far more relaxing than driving in the south. If you ignore this advice and plan on driving in Naples, addio. English is spoken by most shop / restaurant workers within central Rome, your luck will vary if you venture outside of the city. English proficiency will drop as you travel further south.
These days I'm not particularly into video games other than occasionally getting destroyed by my kids in Fortnite or Gang Beasts. But I do like exploring programming- and technology-related games. If you'd like to explore these sorts of games I've compiled a list below. The formatting is pretty messy but this has been sitting in my drafts folder for a while now and so I figured I'd publish it today and come back to it over time. In GNU Robots you use the Scheme programming language to control a robot. http://web.mit.edu/16.410/www/project_fall04/project3.pdf https://mystery.knightlab.com https://sqlpd.com https://gitlab.com/leifhka/datastar https://www.therobinlord.com/projects/slash-escape https://untrustedgame.com http://thefounder.biz https://danielyxie.github.io/bitburner/ https://screeps.com/a/#!/sim/tutorial/1 https://microcorruption.com/debugger/Tutorial https://play.elevatorsaga.com https://swarm-game.github.io https://viewsourcecode.org/snaptoken/kilo/ https://wiki.osdev.org/Introduction https://buildyourownlisp.com/