unicorn experiments

I recently started reading Co-Intelligence: Living and Working with AI by Ethan Mollick. I’m generally leery of AI books, for a number of reasons, but I picked this one up for my Kindle recently, when it was on sale for $2.

There’s a mention, in the chapter I’m currently reading, to an experiment where somebody asked an AI chatbot to “draw a unicorn in TikZ.” I guess the source is this paper. I decided to experiment with this idea a bit myself. The results are in this GitHub repo.

I didn’t specify TikZ, but I asked a few AI tools to write a program to generate a vector illustration of a unicorn, just to see what I’d get.

I started with Claude Code, run via CLI on my Mac, using the default Sonnet model. I was surprised by one thing there: initially, it created and ran its Python code in an ‘artifact’ rather than on my local machine. I hadn’t seen it do that before, at least when I was running from CLI. So that was interesting. I had to, at one point, explicitly tell it to save the Python script to my local folder. I probably need to learn more about that.

The actual result from Claude Code Sonnet was pretty bad. You can see it here. (This is after I asked it to make some tweaks.) And, weirdly, it took quite a lot of “work” from Claude to get this done.

Next, I asked Copilot to give it a try. This wasn’t GitHub Copilot, this was just the web browser interface at copilot.microsoft.com. That gave me an XML file that I could save as an SVG, but no meaningful program code. That SVG is here. It’s not great. I didn’t push Copilot to make it better or anything; I was just curious.

After that, I gave Kagi Assistant a try. As with Copilot, Kagi Assistant isn’t really a coding tool, so I didn’t expect much. But it spat out a Python script pretty quickly, and the resulting SVG looks pretty good. Honestly, better than the previous tests.  This was with Kagi’s “quick” mode, which I think was using Kimi 2.6. As with Copilot, Kagi didn’t give me a ‘real’ meaningful program to generate the SVG. It just gave me a Python program with the SVG in there as a big old string literal, and a couple of lines to write it out.

Finally, I went back to Claude Code, but switched the model to Fable. Rob Conery wrote a post a few days ago, encouraging folks to play with Fable while it was still available. (He was specifically talking about using it against your Obsidian vault, which I also tried, and might write about later.) Fable did a really nice job of writing a good-looking Python script, which output the best unicorn SVG I got out of any of these experiments.

Does any of this mean anything? Probably not. Who knows which of these AI bots is really doing the work, vs. just regurgitating stuff that’s in its training data and/or out on the web. But I learned a few things, and got a few nice unicorn pictures out of it.

an overdue post

Well, I haven’t posted here since May. I’ve had a bunch of stuff I wanted to post about, but I just haven’t had the time (and/or energy).

Tomorrow is July 4th, and a Saturday, so today is the official day off from work for Independence Day. We’re in a bit of a heatwave right now, so I’m not doing anything much for the long weekend. So I thought I’d spend some time writing a blog post today, and trying to catch up on some stuff I wanted to write about.

WordPress 7.0

Well, I didn’t actually intend to write about WordPress 7.0 today, but when I went into my blog admin page, I saw that it was available. So I’m currently upgrading my test site, and will update my actual blog site later, if all is well with the test site.

It seems like the big feature in WP 7 is AI integration. I guess I shouldn’t be surprised about that. Not too long ago, I probably would have rolled my eyes at the idea of having AI integration in my blog site, but, today, I can think of some semi-valid uses for it. Yes, some people are going to use it to create terrible AI slop, but I’ve got a few ideas about how I could use it in a positive way.

Here are a few links related to it:

I haven’t read any of this stuff too closely yet. I’m not even sure how much of it works with the open source WordPress software, vs. how much of it is specific to WordPress.com. Anyway, I guess that researching this stuff and playing around with it is yet another little project for me.

Robot Assistant Field Guide

I mentioned the Robot Assistant Field Guide a couple of posts back. The main part of that class is all done now, but there’s a series of “Robot Builder’s Club” meetings that’s continuing, and those are fun. I learned a bit from this series, though I’m still not really on board with the full robot lifestyle, I guess you could say. I did about 2 hours of busywork this morning (or “donkey work” as David Sparks would say), and I really haven’t automated any of that. But I have gotten in the habit of keeping Claude open while I’m doing work, and using it for little tasks here and there. Here’s some stuff I did today:

  • I had it read all of the 2026 statements for a bank account I have, and create an Excel file summarizing performance YTD, including charts. It did a pretty good job. I didn’t get any new insights out of it, but it was nice. I then also had it create a CLAUDE.md file in the folder with the statements, so I can repeat the exercise, updating the Excel file regularly.
  • I asked it to read and summarize a mutual fund prospectus that I had just downloaded. It called out one upcoming change that’s kind of important: the fund is converting to an ETF next year. I’d stopped reading prospectuses at all, some years ago, but now I’m trying to get into the habit of downloading them and asking Claude to summarize them for me. There’s often nothing big in them, but sometimes, there’s something important.

Overall, I’ve started using Claude as a way to help me analyze my finances and surface trends and opportunities. It’s working better than I would have expected.

The AI Pro

I’m starting to look at something called The AI Pro, from Rob Conery. I signed up for a free account, and I might talk myself into the $300/year paid membership, though I’m not sure about that. I’ve watched one of the free videos, and it’s pretty good. And the material is definitely aimed at folks like me: senior engineers who are getting curious about getting better at AI-assisted programming.

But he uses a service called Circle to host it, and my company (for some reason) blocks that. So I wouldn’t be able to access any of the content from my work computer. In theory, I could ask work to unblock it, but I’m a little hesitant about requesting an unblock for anything that isn’t strictly work-related. I mean, this is clearly a tool that would help me do my job better, but who knows what the powers-that-be at work would think about me bettering myself on company time. (Yes, I know that sounds cynical, but that’s where we are these days.)

Books

I’m currently reading the first book in the Marlow Murder Club series. I’d previously watched (and enjoyed) the PBS series based on the book. I’m enjoying the book too. And I finished the first book in the Thursday Murder Club series earlier this year. Both of these “murder club” books were (presumably) named in reference to Agatha Christie’s “Tuesday Night Club” from The Thirteen Problems, featuring Miss Marple. So that’s another book I need to read, one of these days.

I went on a Kindle book buying binge during the Prime Day sale a week or two ago. I just counted them up, and it looks like I bought… 15 books. Yikes. They were mostly on sale for $2 or $3, so I didn’t break the bank here. But my “want to read” shelf on Goodreads is now up to 928 books.

I’ve also been wanting to switch more of my book buying over from Amazon Kindle to Kobo, but I haven’t been terribly successful at that. Kobo recently announced integration with StoryGraph. I haven’t set that up, but this could be a nudge in the direction of moving away from Amazon/Goodreads over to something else. So I guess that’s yet another little personal project for a rainy day.

Well, I have more stuff I could write about, but I feel like that’s about it for me today. I’ve spent most of the morning doing busy work, writing this post, and generally not doing the kind of things one should do on a holiday. So I think my next stop is the couch, for a quick afternoon nap.

Time tracking and more random experiments

It’s been a busy couple of weeks for me, since my last post. Lots of stuff going on at work, which I won’t get into, since most of it just stresses me out, and it’s Saturday, and I want to think about fun stuff.

One work-related thing that (on the one hand) is kind of stressful, but (on the other hand) gives me an excuse to mess around with some stuff I like to mess around with: time sheets. Yes, after not having to track my time for more than a decade, it looks like I’m going to have to start filling out a time sheet again. The fun part of time sheets is that it gives me an excuse to play around with Sri’s Downloadable Productivity Tools again. I used their “Emergent Task Timer” at my previous job (2010-2012), which was the last time I had to worry about tracking hours. This week, I tried experimenting with their “Emergent Task Planner” form. I printed one out on Thursday, and tried filling it out over the course of the day.

It worked out OK, but the results are kind of depressing. I started the day listing two major projects I wanted to work on. By the end of the day, I had about 30 minutes on the first, and zero time on the second. Then I had about 90 minutes on various support issues, 3 hours worth of meetings, 90 minutes I called “misc admin,” and (the one fun bit) 90 minutes for the “robot club” meeting for the Robot Assistant Field Guide. Technically, I guess I could have skipped that and done some project work, but it was the end of the day, and I was too tired to try to start on “real” work.

For Friday, I wanted to try it again, but Friday descended into chaos so fast I gave up pretty early. For next week, I bought one of these notebooks and will give it a try. I have no idea if I’ll stick with it, but it’ll be a fun thing to play with.

Tracking my time on paper has some plusses and minuses. Since I’m WFH two days and in the office three days, anything paper-based needs to get carried around. That’s not a problem with a small notebook, though I could see myself forgetting it occasionally. My other problem is that my eyesight is so bad these days that paper can be hard for me to deal with. I think the Mini ETP notebook will be fine, but we’ll see. The other dumb problem is that my desk (in the office) is so small that there’s not much room on it to keep a notebook handy. Again, though, I think I’ll be fine, but we’ll see how it works out.

I’ve also been experimenting with creating something kind of like the ETP form in OneNote, so that I can track my time there. That eliminates the various problems with a paper-based system, but it’s somehow not as fun.

I’ve always created weekly notes in OneNote, and made a bullet list for each day, with all of my meetings and all of the projects I’ve worked on. So switching to a daily note isn’t too big a stretch. But then I need to figure out if I want to keep the weekly notes too, or just have the daily notes. I always put a few lists at the end of my weekly notes, for projects I need to work on in that week, stuff I’m waiting on, stuff for next week, and so on. So if I make the daily note my main thing instead of the weekly note, do I move those lists from day to day? Or keep them on a separate weekly note?

One other option is to use daily notes each day, and then have a separate “sprint” note. Our sprints are two weeks long, so that would give me something like the weekly note, but I wouldn’t need a new one every week, just every two weeks. And it makes sense, since our work is (theoretically) supposed to be happening in sprints. But our sprints start mid-week, on Wednesdays, and I’ve never really been able to switch my brain over to thinking about time that way. To me, the standard Mon-Fri work week is still the way I think about things.

One of my problems with doing all of this in OneNote is that I can’t really automate anything there. The Copilot integration for OneNote keeps telling me that it can edit notes for me, but then it keeps failing to do that.

I’ve asked my boss to see if we can get somebody to OK me to use Work IQ CLI, which I think might allow me to do some cool stuff from the command line, though I’m pretty sure it still won’t allow me to automate much in OneNote. I’m definitely starting to think about switching from OneNote to Markdown files, at least for my daily/weekly time tracking. But of course I can’t use Obsidian at work, so that makes it a little harder to justify a Markdown-based system.

I’m not really sure when they’re going to ask us to start entering our time into a system, so I don’t need to start doing this yet, but I always feel like it’s good to get a jump on things, if I can.

On a different topic, I don’t have much to report on the Claude front. I recently switched from using a third-party Fastmail MCP to using the new official MCP. It works well, though I haven’t had a chance to do much with it yet.

I’ve gotten some good ideas out of the Robot Assistant workshops and “Robot Builder’s Club” meetings, though I haven’t actually done much with any of these big ideas. It’s a process, I guess.

I keep finding little things to do with Claude Cowork. Recently, I created an Obsidian note for the upcoming primary election, and asked Claude to add some information to it, based on what it could find on the internet. That worked OK, but then I got the idea to scan in my ballot, and asked Claude to add more information based on that. And that got me a much more complete note. So that was cool.

Well, this post has gotten a bit scattershot, so maybe I should tie things up. Saturday is about half done, but I’ve got all of my chores done, and I think I can spend the rest of the day goofing off.

Claude and Kobo

It’s a quiet rainy Sunday, and I’m pretty tired, so I thought now would be a good time to write up a little blog post.

The first thing on my mind: more experimenting with Claude Cowork. My most recent mini-project was to see if I could hook Claude up to my email. Claude has a built-in connector for Gmail, but of course that’s not what I use. I use Fastmail. I spent a fair bit of time looking at various MCP options. In in end, I went with this one. There are a few ways to get it working, but I went with the simplest one (I think): adding it into Claude Desktop as a Claude Desktop Extension (DXT). That worked well.

I haven’t really done much with it yet. I have a few ideas though. I keep coming back to the idea of some kind of “daily briefing” out of Claude, combining info from my Obsidian vault (tasks), email (newsletters), and news pulled from the web. But I haven’t really gotten far with that.

I just tried this prompt: “Please look at the Receipts folder in my email and find all emails from Kobo. Then make me a list of all the books I’ve bought from Kobo, including title, author, and purchase date. Also, indicate which ones are audiobooks.

That took a while, but worked pretty well. If I didn’t already have a list of all those books in Obsidian, I could have dumped it into there. I do note that the search took longer than I think it should have; it may be that the MCP I’m using isn’t terribly efficient? Or Claude isn’t using it efficiently? I don’t know.

One thing I’m noticing in my efforts to find good use cases for Claude Cowork: A lot of the stuff that would qualify as “quick wins” doesn’t really help me, because it’s all about information organization, and I’m already really fussy about that stuff. I started watching a video the other day showing how Claude Cowork could sort out a folder full of random documents. The example input folder was full of files named “document.pdf” and “document (2).pdf” and “attachment (3).pdf”. Useless file names, basically. I wouldn’t be able to sleep at night if I had a folder like that! My bank statements for the last ten years are all stored in folders by year and consistently named like “statement-yyyy-mm-dd.pdf”. Same with credit card statements, phone bills, and so on. So Claude can’t help me there!

Another semi-useful thing  I did recently was to pull the annotations from a a book I just finished on my Kobo and reformat them into a nice Markdown file and save it into Obsidian. I use the annotations plugin for Calibre to pull annotations from Kobo books. For Kobo books purchased from the Kobo store, you can export annotations from your account, but for EPUBs that you load yourself, there’s no supported way to pull them. For those, the annotations plugin works, but it’s far from perfect. The annotations show in the book’s metadata in Calibre. They’re in an HTML format, and they’re shown in semi-random order. So that’s frustrating. Claude managed to convert the HTML into clean Markdown, and sort the annotations back into proper order. So I think I’ll be doing that again.

I’ve thought about turning that into a skill, so I can keep using it and get consistent results, but I asked Claude if I should, and it said not to bother. So we’ll see how it works next time. If I see any inconsistency or I can think of stuff I want to tweak with it, I’ll give the skill thing another thought.

So that’s it for random Claude stuff for today. I had to work late on Friday, then all day Saturday, on a server virtualization project, so I should really just be relaxing today and not thinking about computers.

Happy Easter, still messing with Claude, and some work overwhelm

It’s a quiet Sunday here in Somerville, and hopefully, it’ll stay that way. It’s drizzling a bit, so that helps.

I had a pretty stressful week at work, mostly around fixing a critical issue with TLS 1.2 and SMTP email. (To be clear, I did not create this problem. I’m just the idiot who volunteered to solve it.) There was also stress around trying to help out on a few support tickets, and around a couple of my own support tickets that no one seems to be able to solve. I had some after-hours work Wednesday, Thursday, and Friday, and a little morning work on Saturday. (Not a lot of work, to be honest, but enough that I couldn’t just “unplug” at the end of the day, which can be a problem.)

So today (Sunday) is the first day this week where I haven’t had to turn on my work laptop at all, or think about work. Of course, this hasn’t stopped me from thinking about work, and I will admit that I just sent myself an email to remind myself to check some stuff tomorrow morning.

My other area of work stress this week is that everyone else in my group has been making progress with Palantir Foundry, while I just haven’t had enough time to do anything with it, aside from the very basic “speed run” training. And there seems to be a lot of management enthusiasm around that product, so I’m worried about seeming out of touch or lagging behind. And it doesn’t help that Palantir is a, shall we say, problematic company: Our product is used, on occassion, to kill people.
See also: Palantir Controversies: A Deep Dive into Privacy, Surveillance, and Ethical Concerns.
But anyway, it’s really great software and I should definitely learn it! 😵

What I’ve been trying to do in my spare time (🤣) is to continue learning Claude. To that end, I bought David Sparks’ Robot Assistant Field Guide this week, and started working on it. I can’t really make use of a lot of the stuff he does there, since our setups and use cases are fairly different. But I’m getting some ideas from it, and trying out a few things.

One idea I’m starting to like: using my Obsidian vault as a kind of “home base” for Claude Cowork. I added a fairly simple CLAUDE.md to the vault recently, and I have some ideas for skills I can add, and stuff I can do, with it.

First up will be adding Kepano’s Obsidian skills, I think. That seems like a pretty straightforward thing to do. (Of course, I’m trying to do it now, and hitting some issues, but I’m sure I’ll get it right eventually.)

I’m stumbling through stuff I can do with various plugins, MCPs, experimental features, and so on. There’s a lot of stuff that’s almost there, but not quite. Or it’s there, but not in the way I want it to be. For instance, it would be useful if Claude could control Firefox. There’s a Claude in Chrome extension, but no equivalent Firefox extension. I’ve found that the Chrome extension works in Microsoft Edge, and I have Edge, of course, so I enabled it there and tried it out. Short version: it works, but it doesn’t work on every site, and it doesn’t always work right, so I’m not sure if it’s worth the effort at this point.

And it would be great if Claude could read and write to my Fastmail account. (I have some ideas about using it to help me clean up and manage my email.) So Claude has GMail integration, but no generic IMAP/JMAP integration or specific Fastmail integration. There’s more than one third-party Fastmail MCP project, so I could try one of those, but I don’t have the time to do that right now.

Similarly, it would be useful if Claude could plug in to my iCloud contacts and calendar, but that’s not easy either. I did set up a BusyCal integration on my Mac, and that’s cool, but of course it only works on my Mac and not my PC (or my iPhone or iPad).

So, at this point, I need to zero in on one or two things to concentrate on, and make some progress on. Right now, I should probably sign off and relax. The Phillies game is about to start. ⚾

 

Mermaid, Copilot, Claude Code, Project Euler, and some other stuff

Once again, I’ve been meaning to write up a bunch of stuff here on my blog, but just haven’t gotten around to it. In my last post, from about two weeks ago, I blogged about the nightmare that was Main St overnight construction. Well, the good news is that there’s hasn’t been any more over the last couple of weeks. The bad news is that they haven’t been able to do it because the weather has been so bad. We had a big snowstorm, followed by very cold temperatures, so a lot of the snow is still on the ground. I won’t get into all of the inconvenience that’s caused. I have other stuff I want to blog about. Let’s just say that a combination of stuff, staring with the construction, then the weather, has really put a dent in my productivity and equanimity this year.

So on to the next thing. One thing I’ve actually managed to learn and enjoy playing around with this year has been Mermaid, a language for creating diagrams programmatically. I’ve always hated creating diagrams with drag & drop tools like Visio and Lucid. I’m just not good at it. I never get things quite right. With Mermaid, I just describe the diagram in code and let the system render the diagram. It might not always look as pretty as a carefully handmade Visio or Lucid diagram, but it’s good enough for me!

I stumbled across Mermaid via a reference to it in David Sparks’ Obsidian Field Guide. I learned it by reading a book called Creating Software with Modern Diagramming Techniques, which also discussed the C4 model, which is a simple framework for thinking about how to use diagrams to describe a given computer system. None of this was really planned; it was just serendipity, but it turned out to be fun and useful. I’d recommend looking into it, if you have to create diagrams, and like the idea of doing it through code.

Topic number three: AI-assisted programming. I’ve been messing around with GitHub Copilot for a while. I passed an exam on it late last year. I’ve been using it at work, for my C# work. (A lot of my work is in AX 2012, using X++, so it’s not easy to use AI assistants for that.) I’ve found Copilot to be a mixed bag, in practice. I do use it, but it’s often more trouble than it’s worth.

I keep hearing good things about Claude Code, though. We’re not allowed to use it at work (sigh), but I eventually felt I had to give in and try it. This article about Microsoft not just allowing, but encouraging, their employees to try Claude Code was the thing that really pushed me to dive in.

So I’ve spent some time this week trying to figure it out. First, I had to sign up for a Claude Pro subscription, at $20/month. (I actually decided to go all-in and pay for a full year, at $200.) That money was another thing that was holding me back with Claude Code. Since I already have access to Copilot, I didn’t want to pay for another AI subscription. But, yeah, I gave in.

The next stumbling block for me was knowing that Claude Code is oriented more towards Linux and Mac developers, vs. Windows. It relies on Node.js and npm, which are… not my favorite tools. GitHub Copilot is integrated right into Visual Studio and VS Code, so you can get started with it quite easily, if those are the tools you’re using. (And, for me, they are!)

After some weeping and gnashing of teeth, I finally decided to set it up in WSL on my Windows 11 laptop. That wasn’t too hard. I initially used it in conjunction with a repo I had on my Windows drive, and which I was trying to work on in Visual Studio 2026. But that’s not a great way to work. Claude Code needs to be able to build and run your project, and if I’m doing that on the Windows side, it’s going to leave Claude crippled.

So, then, I took the leap and set myself up for .NET development under WSL. (That, also, wasn’t too hard.) So the setup I settled on is, basically, opening a WSL prompt in Windows Terminal, changing into my project folder (now in the WSL filesystem), running “code .” to open my project in VS Code, then running “claude” from the prompt to set up the Claude Code environment. (Using VS Code from WSL is described here.) So I switch back and forth between Claude Code running in the terminal and VS Code.

Once I started doing that, I was surprised to see that I could chat with Claude Code from a chat window in VS Code. Honestly, I’m not even sure how that happened, since I didn’t install the Claude Code extension in VS Code. I’m going to have to figure that out at some point.

But my main way of working was to chat with Claude in the terminal session, let it change stuff in my project, then review it in VS Code, and build and test it there. (I did let Claude build and test it a bit, too. That worked.)

The project I choose to use for my Claude Code experiment was my Project Euler repo. (I last messed around with it back in 2023.) I’ve found that Claude Code can easily solve Euler problems by just typing “implement a solution for problem XX” and then letting it go. That’s probably because so many other people have solved the problems, then blogged about them. So Claude probably has a bunch of solutions and information about the older problems in it’s training data, so it’s all baked in. But I wanted to use trial and error, and actually learn some stuff, so I figured out how to prompt it to work with me rather than just doing the work itself. Part of that was explaining my intentions in my CLAUDE.md file. (I’m not sure how much that helped, but I think it did.)

So, at this point, I know I’m only using about 10% of the power of Claude Code. Maybe less. There’s a lot more I could try. Small steps for now. I’m making progress!