<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Phil Giammattei</title><description>A blog and portfolio for Phil Giammattei, a web site maker and software engineer based in Pittsburgh, PA.</description><link>https://giammattei.co/</link><item><title>6 Months with Apple Vision Pro</title><link>https://giammattei.co/blog/6-months-with-apple-vision-pro/</link><guid isPermaLink="true">https://giammattei.co/blog/6-months-with-apple-vision-pro/</guid><description>My thoughts on Apple&apos;s most controversial device after half a year of use.</description><pubDate>Tue, 16 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;At the beginning of August, the Vision Pro will have been with us for half a year. It&apos;s a bizarre and polarizing device, and has sold in so little numbers that few people have even seen it, let alone had time to try it for themselves. I have owned the Vision Pro since it launched, and have put enough time in, and made enough modifications to it, that I feel like I can speak to where it fits into my life.&lt;/p&gt;
&lt;h2&gt;What is it?&lt;/h2&gt;
&lt;p&gt;For those not aware, the Vision Pro is Apple&apos;s set of virtual reality goggles. When you put them on, you are looking at curved displays and listening to audio pods that do a remarkable job of immersing you in mixed-reality content. I am currently typing this post in a 3-foot-tall text editor window floating 18 inches in front of me, on the summit of the Hawaiian mountain Haleakalā.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The Vision Pro connects with iCloud to allow me to do most computer things in mixed or virtual reality: email, web browsing, text messages, and a variety of apps (most iPad apps are usable).&lt;/p&gt;
&lt;h2&gt;Why get it?&lt;/h2&gt;
&lt;p&gt;I&apos;ve been an unabashed Apple fanboy for a long time, and for several years they signed my paychecks, but when the Vision Pro was announced last June I was sure that I wouldn&apos;t be getting it. It&apos;s eye-wateringly expensive, and first-gen products rarely hold up to their immediate successors. But a few things led me to reconsider as the order date drew near.&lt;/p&gt;
&lt;p&gt;First, this is the only model for a while. According to rumors, we won&apos;t see a new model until late next year, and that will be a cheaper consumer version. The Pro model currently strapped to my face won&apos;t get an update for possibly three years, and I didn&apos;t want to wait that long. Other rumors suggested supply would be limited, so I made the decision to pull the trigger as early as possible to maximize my useful time with it.&lt;/p&gt;
&lt;p&gt;Second, the nature of my work is changing. My kid is now old enough to need to be chaperoned to school, summer camp, and babysitting, and I appreciate the ability to work out of a coffee shop while waiting to pick her up. The Vision Pro allows you to mirror the disply of your MacBook, creating a giant virtual monitor that you can take with you wherever you go, with the only drawback being that I look like an absolute dorkazoid while using it.&lt;/p&gt;
&lt;p&gt;Third, I have a slowly-accruing funny money account for frivolous purchases like these, and I also recently &lt;a href=&quot;https://tigerpajamas.com&quot;&gt;started a business&lt;/a&gt; that both brings in unexpected income and makes excellent use of a Mac-enhancing product. Instead of an expensive toy, it&apos;s now a business expense!&lt;/p&gt;
&lt;h2&gt;What do you use it for?&lt;/h2&gt;
&lt;p&gt;The Vision Pro can do a lot of things, but for me most of its features go unused and when I put it on it boils down to two solid use cases:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A portable Mac setup. Working remotely with a laptop and a headset is game-changing for screen real estate, blocking out distractions, and creating a focusing environment.&lt;/li&gt;
&lt;li&gt;Watching TV by myself. My wife doesn&apos;t watch a lot of TV and our television is close to our kid&apos;s bedroom, so being able to sit back in my office chair and watch a movie in the middle seat of a virtual movie theater is an amazing experience.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These two use cases alone have made the device indispensable, and while I&apos;m not sure I can say they justify the expense, they ensure I&apos;m getting plenty of quality use out of it. Text entry is very bad, but you can pair an external keyboard, like I&apos;m doing now.&lt;/p&gt;
&lt;h2&gt;How have you altered it?&lt;/h2&gt;
&lt;p&gt;A common complaint for the Vision Pro is that it is not comfortable to wear. The default strap is very nice but only attaches at the back of the head, creating uncomfortable pressure on the cheekbones. The more utilitarian double strap is hard to adjust and doesn&apos;t distribute the weight well.&lt;/p&gt;
&lt;p&gt;To counter this, I heard from my &lt;a href=&quot;https://tigerpajamas.com/about/#jon&quot;&gt;colleague&lt;/a&gt; that an online vendor was selling &lt;a href=&quot;https://www.etsy.com/listing/1680298384/solotop-dev-for-apple-vision-pro&quot;&gt;3D-printed pieces&lt;/a&gt; that allowed you to attach a second strap to the top of your head, creating a much more comfortable setup that allows me to wear the device for long periods of time without feeling uncomfortable.&lt;/p&gt;
&lt;p&gt;In addition, I am playing with the beta software that is set to release to the public this fall, and one curious feature is that you can mirror your phone to your Mac. It occured to me that if you combined this with the ability to mirror your Mac to your Vision Pro, you could have your phone available in virtual space without having to take the goggles off to check it. This is crucial for me, because I do a lot of development work on my lunch break, and now I do not have to worry about missing a Microsoft Teams message from a colleague. But doing so wirelessly is too bandwidth-intensive, so I had to shell out for a special &lt;a href=&quot;https://9to5mac.com/2024/02/06/hands-on-with-the-299-apple-vision-pro-developer-strap-stabler-mac-virtual-display-beta-downgrades-and-more/&quot;&gt;Developer Strap&lt;/a&gt; that allows me to hardwire my headset to the Mac and make this dream setup possible.&lt;/p&gt;
&lt;h2&gt;What do you get out of this?&lt;/h2&gt;
&lt;p&gt;None of this is, of course, necessary by any means. It&apos;s an expensive luxury that does not give me any real affordances that I can&apos;t get by simply using my Mac. But it&apos;s extremely valuable to me nonetheless.&lt;/p&gt;
&lt;p&gt;I have difficulty focusing and staying on task. It&apos;s very easy for me to compulsively open a new tab for a time-wasting website, or pull my phone out of my pocket to check my notifications, instead of working on what needs to be done. Having a way to enter a relaxing environment, where it&apos;s harder to wander off or check my phone (for what I am sure are complicated technical reasons, when you look at your phone display through the passthrough displays, it is very hard to read the screen), has been very valuable.&lt;/p&gt;
&lt;p&gt;Even with my upgrades, it is kind of a hassle to get the device on, adjusted, and set up with my Mac, so going through those motions is a strong signal that I mean business and had better get cracking. It&apos;s a pomodoro method of sorts, guaranteeing that I will have a nice long session before taking a break.&lt;/p&gt;
&lt;p&gt;This holds true as well for TV watching, due to the fact that I can easily get caught up on a second screen when watching TV the old-fashioned way. Being in a virtual movie theater keeps me in the zone with what I&apos;m watching, removing all external distractions. It&apos;s been very nice to explore new movies and TV shows with more attention than I usually pay.&lt;/p&gt;
&lt;p&gt;I hope that Apple continues to support this device, and makes it more accessible to people as it iterates. While it is, in many ways, deeply goofy, I&apos;ve found it to be a surprisingly compelling device that has become an everyday part of my digital arsenal.&lt;/p&gt;
</content:encoded></item><item><title>A Brief History of Tiger Pajamas</title><link>https://giammattei.co/blog/a-brief-history-of-tiger-pajamas/</link><guid isPermaLink="true">https://giammattei.co/blog/a-brief-history-of-tiger-pajamas/</guid><description>An overview of the web agency that I ran with my friends</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://tigerpajamas.com&quot;&gt;Tiger Pajamas Web Site Company&lt;/a&gt;, the web agency composed of &lt;a href=&quot;https://ashleymcquaid.com&quot;&gt;Ashley McQuaid&lt;/a&gt;, &lt;a href=&quot;https://jonmitchell.net&quot;&gt;Jon Mitchell&lt;/a&gt;, and myself, is on indefinite hiatus as we pursue other projects.  One of the ironies of Tiger Pajamas was that we were so busy making sites for our clients (and being employees and spouses and parents elsewhere) that we never had much time to work on our own. We had a quick discussion about our brand, Ashley picked out some good typefaces and colors, and I put them up, and that was it, aside from an occasional blog post.  Relatedly, I haven’t had much time or energy to reflect on our time together, but it was an extremely fun two years and I hope this post can serve as a one-person oral history of a company that changed my life.&lt;/p&gt;
&lt;p&gt;Jon forms group chats. This is one his unique skills, and he’s very good at it.  I first encountered him on Twitter while he was assembling a corpus of writing that became &lt;a href=&quot;https://taalumot.space&quot;&gt;taalumot.space&lt;/a&gt;. This was deep in the pandemic and I was a new dad and eager to make new friends and form new hobbies.  Jon was happy to help, and swept me into a group DM about qigong (he introduced me to &lt;a href=&quot;https://taalumot.space/writing/laohugong.html&quot;&gt;Chinese Shamanic Tiger Qigong&lt;/a&gt;, which I still practice somewhat regularly) and meditation and divination and yoga and things of that nature.  At one point I wanted to do a group tarot reading for my wife and me on our anniversary and he introduced me to one Ashley McQuaid, a &lt;a href=&quot;https://ashleymcquaid.com&quot;&gt;UX designer&lt;/a&gt; with a &lt;a href=&quot;https://eightofpentacles.com&quot;&gt;divination business&lt;/a&gt;.  We, along with many others, spent the early 20s sharing practice tips, experimenting with the internet as a tool for community building, and then watching in horror as Twitter was destroyed by a hostile entity.&lt;/p&gt;
&lt;p&gt;Jon had already noticed the acute limitations of using social media as a static repository of content, and began turning his many tweet threads into blog posts on a Squarespace site. We &lt;a href=&quot;https://taalumot.space/tiger-time/4&quot;&gt;chatted&lt;/a&gt; at the time about the compromises of social media and the freedom of hosting your own internet presence, and I started a project shortly thereafter that eventually became &lt;a href=&quot;https://phils-web-site.net&quot;&gt;phils-web-site&lt;/a&gt;.  After &lt;a href=&quot;https://www.giammattei.co/projects/mystics-almanac&quot;&gt;helping a scene-mate with a project&lt;/a&gt;, I revealed to my online friends a desire to one day be my own boss and work on projects as a self-employed consultant, something that felt very far-off from my then-current status as a journeyman developer.&lt;/p&gt;
&lt;p&gt;Thankfully, I was able to find the exact moment where, in a Signal chat in late 2023, Jon pitched the company:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The plan formed instantly: Jon would bring a product vision honed from decades of experience making and using sites, Ash would create a design process that matched the vibes of the site to each individual client, I would turn all of that into code. We took to iMessage to figure out our brand, our values, and our pitch, which ended up being something like “We are all busy working and being parents to young children, we are probably still in our pajamas, and we want to make you something special in our spare time.  It will be good and it will be matched to your personality and aesthetics.”  While domain shopping for various potential names, I scored a hit:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Things moved quickly after that.  I registered the domain and put up a one page site that rendered different header fonts on every load and slowly morphed text and background colors using CSS animation.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Late in the winter of 2024, we were able to meet in person for the first (and, so far, only) time. Ashley was taking care of an infant so we went to her home in Massachusetts and spent three days nailing down our product offering, defining our systems, and doing photoshoots.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Our core product offering was a fast and reliable static site with no ongoing hosting costs, stripped of the cruft of the overwrought features of Wordpress or Squarespace and given a unique personality via Ashley’s design process (Ash asks clients to send her album art, movie posters, and other aesthetic favorites to help her create personalized “vibe boards” that match people’s personality). I spent considerable time trying to use &lt;a href=&quot;https://www.11ty.dev&quot;&gt;Eleventy&lt;/a&gt; as our preferred static site platform, but &lt;a href=&quot;https://www.giammattei.co/projects/giammattei-4&quot;&gt;had trouble with its tooling&lt;/a&gt;.  Once I discovered &lt;a href=&quot;https://astro.build&quot;&gt;Astro&lt;/a&gt;, our platform fell together effortlessly: an Astro site with a nontechnical user-facing CMS run by &lt;a href=&quot;https://tina.io&quot;&gt;Tina&lt;/a&gt;.  The per-project Git-based CMS meant we didn’t have to worry about a database layer, and the only meaningful downside for users was approximately a minute delay between hitting publish and seeing the results live.  I hope one day to write a detailed post about how to get a site set up with this stack; I’ve found it useful for many projects for myself and others.  The site on which you are reading this was &lt;a href=&quot;https://www.giammattei.co/projects/giammattei-4&quot;&gt;migrated to the Tiger Stack&lt;/a&gt; in short order.  During this time—and this is very important—I wrote and my band recorded the official Tiger Pajamas radio jingle.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;jingle&quot;&amp;gt;
&amp;lt;iframe
style=&quot;border: 0; width: 100%; height: 42px;display: flex; align-items: center;&quot;
src=&quot;https://bandcamp.com/EmbeddedPlayer/track=282410800/size=small/bgcol=ffffff/linkcol=e99708/transparent=true/&quot;
seamless&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Our first client was my friend and neighbor &lt;a href=&quot;https://tomrpike.com&quot;&gt;Tom Pike&lt;/a&gt;, who needed a simple one-page site to list publications, awards, and reviews. I was able to get him up and running quickly, and we were able to work together to get the right structure for the page and embed some cool things like  a widget that shows GoodReads reviews and a custom React component that shows a carousel of testimonials.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;More ambitious sites were soon to follow.  Emory professor &lt;a href=&quot;https://paul.root.wolpe.family&quot;&gt;Paul Root Wolpe&lt;/a&gt; hired us to build a travelogue as he embarked on a sabbatical journey through Europe and Asia.  This was an important project for us to establish our conventions, and we hashed out things like “does the previous post arrow point left or right” and “what happens if a nontechnical client uploads a 20MB image”. Paul used his site faithfully across his journey, and I’m proud to have contributed to a body of work that, now complete, waits for people to discover it anew.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We teamed up with Tom Morgan, a minister who leads homeless outreach efforts in Vermont, on a completely new site for &lt;a href=&quot;https://greenmountainjustice.org/&quot;&gt;Green Mountain Justice&lt;/a&gt;, a nonprofit with an important mission and many stories to share.  This project, aside from being immensely spiritually rewarding, helped us figure out how to handle metadata (posts can be tagged into arbitrary collections) and we also created a number of utility classes that let the site admins easily float an image to the left or right, or show two images side-by-side, with optional captions.  One tradeoff of our barebones CMS choice is that we have to teach our clients a little bit of HTML for more advanced layout, but this lines up nicely with our belief that web sites are for everyone, and that learning a bit about how they work is never a bad idea.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Over two years, we built sites for poets and astrologers and actors and artists.  I started to think of the &lt;code&gt;global.css&lt;/code&gt; file that was copied from project to project as a “sourdough starter”: a living document that wore the best practices that I’d picked up on my many engagements into deep grooves.  One of my formative texts for CSS writing is Heydon Pickering’s &lt;a href=&quot;https://www.smashingmagazine.com/2016/11/css-inheritance-cascade-global-scope-new-old-worst-best-friends/&quot;&gt;CSS Inheritance, The Cascade And Global Scope: Your New Old Worst Best Friends&lt;/a&gt;, which rejects overly formal structures like &lt;a href=&quot;https://getbem.com&quot;&gt;BEM&lt;/a&gt; that demand arbitrarily structured markup in favor of style code that plays to the strengths of semantic HTML and the eponymous Cascade.  The stylesheet always starts with the variables needed for fonts, sizes, and colors (did you know you don’t need &lt;a href=&quot;https://sass-lang.com&quot;&gt;Sass&lt;/a&gt; for variables and nested selectors anymore?), then I import my font-faces and begin with my element selector styles, starting with &lt;code&gt;html&lt;/code&gt;, &lt;code&gt;body&lt;/code&gt;, and &lt;code&gt;main&lt;/code&gt;, and working my way down to &lt;code&gt;blockquote&lt;/code&gt;s and &lt;code&gt;figure&lt;/code&gt;s.  Class selectors follow, which aren’t needed much if I get the element styles right. I hate &lt;a href=&quot;https://tailwindcss.com&quot;&gt;Tailwind&lt;/a&gt;, but have found a small set of utility classes that speed me up, particularly with my many flexboxes.  Finally, media queries for different viewport sizes.  &lt;a href=&quot;https://ethanmarcotte.com/books/responsive-web-design/&quot;&gt;Ethan Marcotte&lt;/a&gt; recommends designing mobile-first, but I typically start with desktop layout implementation and work my way down.&lt;/p&gt;
&lt;p&gt;I remarked in a Tiger Pajamas &lt;a href=&quot;https://tigerpajamas.com/blog/we-dont-make-fucking-software/&quot;&gt;blog post&lt;/a&gt; that the vast majority of my time on a project was spent writing CSS.  Obviously this doesn’t scale well, and we had tentative plans to offer a cheaper product that would be made up of previously implemented designs and components. Ultimately this made the work feel special; running counter to the usual grain of software product thinking, we placed our emphasis on a holistic presentation, with every detail considered and every margin and line height polished to pixel perfection.  This results in a site that you simply cannot get from a DIY framework, or from Claude.&lt;/p&gt;
&lt;p&gt;What I gained from the work was immense confidence in my skill at the craft of web development, with each project a chance to build on my skills and consider new problems.  The core tools of CSS are now permanently in my brain with quick recall, and I can rip through a new Figma file like a school of piranha. It is also uniquely rewarding to work together with a small group of creative and insightful people, without the pressure of shareholders or Senior Directors, to figure out what work is worth doing, and how to do it well.  Ashley and Jon and I are all immensely busy with our families and careers and projects, but I will always treasure our time as Tiger Pajamas, and do not doubt that our paths will cross again one day.&lt;/p&gt;
</content:encoded></item><item><title>A Vision of the Future</title><link>https://giammattei.co/blog/a-vision-of-the-future/</link><guid isPermaLink="true">https://giammattei.co/blog/a-vision-of-the-future/</guid><description>Day 1 of realityOS</description><pubDate>Thu, 22 Jun 2023 04:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Though it was two weeks ago that Apple announced their &lt;a href=&quot;https://www.apple.com/apple-vision-pro/&quot;&gt;Vision Pro&lt;/a&gt; to the world, yesterday felt even more significant for Apple developers. Until then, we only had a brief glance at the new product, through marketing videos, technical talks, and secondhand accounts of brief demos. But yesterday, people finally started to get their hands on it. Not the hardware; the actual headset is not set to hit shelves until next year. But Apple updated XCode to support a &lt;a href=&quot;https://www.apple.com/newsroom/2023/06/developer-tools-to-create-spatial-experiences-for-apple-vision-pro-now-available/&quot;&gt;virtual build of VisionOS&lt;/a&gt;, and a simulator to approximate the experience of using VisionOS in the home.&lt;/p&gt;
&lt;p&gt;What followed was a feeding frenzy of activity from Apple devs, as people who have live apps on the app store started to tweak their builds to support the new OS. No one was expecting perfection, and no one got it, but I saw at least half a dozen one-person operations have a &lt;a href=&quot;https://mastodon.social/@stroughtonsmith/110588469531560290&quot;&gt;working app in realityOS with minimal tweaks&lt;/a&gt;. This is very promising to see in the first 24 hours of the platform&apos;s availability; I&apos;m guessing we&apos;ll see a robust app ecosystem on day 1 of the hardware being on the market.&lt;/p&gt;
&lt;p&gt;Apparently &lt;a href=&quot;https://mastodon.social/@stroughtonsmith/110588400319637388&quot;&gt;some of the augmented reality features are not simulable yet&lt;/a&gt;, limiting devs to essentially iPhone and iPad apps that hang in the air in virtual space, but we&apos;re literally on day one of this tool being available, so I expect rapid iteration from Apple as we begin our slow march to the Vision Pro debut.&lt;/p&gt;
&lt;p&gt;This seamless interoperability makes me even more excited to dive into learning about Apple development! I&apos;ve messed around with their augmented reality APIs and it&apos;s pretty intimidating to get in those weeds, so it&apos;s very encouraging to know that even a basic iPhone app can be useful on this brand new platform.&lt;/p&gt;
</content:encoded></item><item><title>On the Eve of a Learning Journey</title><link>https://giammattei.co/blog/apple-eve/</link><guid isPermaLink="true">https://giammattei.co/blog/apple-eve/</guid><description>Diving into the Apple developer ecosystem, again</description><pubDate>Tue, 20 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every few years I get the notion that I should learn how to make iOS apps. It&apos;s an incredible platform, the users are everywhere, and I love the idea of making software that goes in my pocket. I&apos;m also a big-time Apple user, and was blown away by the new &lt;a href=&quot;https://www.apple.com/apple-vision-pro/&quot;&gt;Vision Pro&lt;/a&gt; and all the possibilities for immersive apps on a new platform, so the call is very strong right now to add this skill to my toolbox and make something cool.&lt;/p&gt;
&lt;p&gt;I&apos;m a big fan of Paul Hudson&apos;s &lt;a href=&quot;https://www.hackingwithswift.com&quot;&gt;Hacking With Swift&lt;/a&gt;, and have done a portion of his &lt;a href=&quot;https://www.hackingwithswift.com/100/swiftui&quot;&gt;100 Days of SwiftUI&lt;/a&gt; course in the past. I think I&apos;m going to try to do one module a day on my lunch break and see if I pick up enough to take a stab at one of the many app ideas I&apos;ve had over the past few years. Most recently, a friend and I have been talking about an app that makes it easier to make and share music playlists with your friends.&lt;/p&gt;
&lt;p&gt;But I&apos;ve &lt;a href=&quot;../app-band&quot;&gt;walked this road before&lt;/a&gt;, and I&apos;m aware of the pitfalls that might cause me to give up on it again. Namely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Apple developer ecosystem is its own self-contained thing, very separate from web development, with a set of completely proprietary tools. It&apos;s a big deal to have to learn a new language and a new set of APIs, add to that a new IDE and a new deployment process and it&apos;s a lot to keep up with&lt;/li&gt;
&lt;li&gt;The tools are constantly changing, making getting correct advice difficult. Apple has a bunch of libraries for user interfaces, and it&apos;s confusing to know which one to use. I&apos;m going with SwiftUI, their latest offering, but it&apos;s very new and so doesn&apos;t always work as expected, and older information may be outdated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the other hand, I have some things going for me this time that may help:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;More experience developing: I know a lot more about the practice of development now than I did 3 years ago&lt;/li&gt;
&lt;li&gt;There are AI tools that I have found very useful in overcoming weird error messages and helping to break down complex functionality into actionable steps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;m hoping to do the program for a few weeks and then take a shot at making something on my own! Read on if you want to follow my progress.&lt;/p&gt;
</content:encoded></item><item><title>Beginner&apos;s Mind</title><link>https://giammattei.co/blog/beginners-mind/</link><guid isPermaLink="true">https://giammattei.co/blog/beginners-mind/</guid><description>I miss when I didn&apos;t know how it all works.</description><pubDate>Fri, 05 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the more famous Zen quotes comes from &lt;a href=&quot;https://en.wikipedia.org/wiki/Zen_Mind,_Beginner%27s_Mind&quot;&gt;Shunryu Suzuki&lt;/a&gt;, an influential teacher who helped Zen explode in popularity in the United States in the 20th century. It goes like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In the beginner&apos;s mind, there are many possibilities; in the expert&apos;s mind, there are few.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When I &lt;a href=&quot;/projects/giammattei&quot;&gt;first decided to make a portfolio website&lt;/a&gt;, I had no idea what I was doing. I had no idea that web design and web development are widely considered to be different fields, so I did all the design myself. I had no idea that software is “supposed to” be done in small, incremental steps, so I built it in a series of wild, aimless sessions, following my bliss and darting around the project until it was done. I had no idea that something like making a &lt;a href=&quot;/projects/minesweeper&quot;&gt;stateless JavaScript version of Minesweeper that utilizes Minecraft assets and includes breakable blocks and sound effects&lt;/a&gt; is really hard, so I just did it.&lt;/p&gt;
&lt;p&gt;In the intervening years, I have come to understand how big important businesses make software, and learned a lot about how the systems work that keep platoons of developers on track to ship something, at some point (A miracle in its own right). I came to accept coding and software as a predictable, slow-moving endeavor, and forgot how much fun it can be to lose yourself in an ambitious project that only you are responsible for.&lt;/p&gt;
&lt;p&gt;In my &lt;a href=&quot;/projects/giammattei-3&quot;&gt;last iteration of this site&lt;/a&gt;, I moved from my original design, painstakingly handcrafted, all of the fonts and colors and assets chosen with care, to an off-the-shelf template that looked “more professional”. It fell into a consensus view on what sites are supposed to look like, and I had very little to do with the design decisions. It joined the thousands of other identical sites that don&apos;t rock the boat, but due to their inoffensiveness, immediately fade into the background of the web.&lt;/p&gt;
&lt;p&gt;Especially now that a large language model can write a “working frontend” in seconds, it becomes imperative that we create online spaces with real human creativity invested in them. The machines are, even now, pumping out millions of webpages, designed to capture micro-cents of ad revenue from Google searches, slowly choking out the human internet as we know it. Social media algorithms are hiding posts from our loved ones, in favor of low-effort slop to make us mad or anxious, to keep us tied to their content pipelines forever. There’s got to be a better way, and there is! It’s been there since day 1 of the World Wide Web: websites.&lt;/p&gt;
&lt;p&gt;As I have come to re-appreciate the simple promise of an internet of websites, rather than a series of mega-platforms that all exist as vectors for ad delivery, I realized that I was doing myself a disservice by hiding my original site design. It turns out I’m very proud of it! ChatGPT couldn’t make it, not in a million years, because a human being invested creative thought into its design. It’s very intentional. Aside from a few tweaks (it links to my &lt;a href=&quot;https://front-end.social/@phil&quot;&gt;Mastodon&lt;/a&gt; instead of my (deactivated) Twitter now), it is a time capsule to a period of time where I didn’t know what I could’t do, and armed with that beautiful ignorance, &lt;a href=&quot;/projects/giammattei-4&quot;&gt;I made a really sweet web site&lt;/a&gt;. As I continue to rediscover my Beginner’s Mind, I hope that it will be one of many, and that I have lots of other sites made by my loved ones that I can link to.&lt;/p&gt;
</content:encoded></item><item><title>Hello, World!</title><link>https://giammattei.co/blog/hello-world/</link><guid isPermaLink="true">https://giammattei.co/blog/hello-world/</guid><description>On beginnings</description><pubDate>Sun, 19 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve written the &quot;Your First Program&quot; program a few times now, and in a few different languages. Whether you *include your stdio, or get right to the System.out.print()ing, it usually doesn&apos;t take long for a working program in a given language to be checked off your list. The hard part comes later, and can be very overwhelming.&lt;/p&gt;
&lt;p&gt;I resisted majoring in Computer Science in college (and had more than one occasion to turn it down), and part of me has always wondered where I&apos;d be if I had stuck with it. I&apos;ve had a long and varied career, interacting with very smart and resourceful coworkers and using my technical knowhow and soft skills to teach tough concepts to unfamiliar minds. I have no regrets.&lt;/p&gt;
&lt;p&gt;I have had, though, new responsibilities that exposed me to the world of code. A teammate left my company, and maintaining our large and ungainly website became my problem. At first, I knew just enough HTML and if/else logic to keep the shoestring and duct tape operation functioning normally, but I began wishing I had the tools and knowhow to improve the backend and make it run more smoothly and predictably.&lt;/p&gt;
&lt;p&gt;In my spare time I started to teach myself computer science, coding, and software development, through a combination of books, online videos, and self-directed projects. What I have been thrilled to discover, after just 6 weeks of study, is that I really enjoy programming, and that many of the skills required for good code - delegation of tasks, focus in a distraction-prone environment, and attacking a problem from multiple angles (to name a few) - are skills that I&apos;ve been actively honing for 10 years.&lt;/p&gt;
&lt;p&gt;In years past I&apos;ve sometimes fantasized about going back to school and getting a CS degree. A simple truth has been revealed to me recently that has energized my thinking: I don&apos;t have to do that. The cornucopia of resources available, for free, to anyone with determination and discipline are enough to fully master a valuable skill and open up one&apos;s horizons, without the 6 figures of debt.&lt;/p&gt;
&lt;p&gt;I started this site to chronicle my journey into code, show off my projects, and maybe one day help others to take the leap and learn what you can do if you open up your terminal and start typing.&lt;/p&gt;
&lt;p&gt;Hello, world!&lt;/p&gt;
</content:encoded></item><item><title>I’m Breaking Up With Facebook and Instagram</title><link>https://giammattei.co/blog/im-breaking-up-with-facebook-and-instagram/</link><guid isPermaLink="true">https://giammattei.co/blog/im-breaking-up-with-facebook-and-instagram/</guid><description>After twenty years, I&apos;m done with algorithms.</description><pubDate>Thu, 23 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;TLDR: I’m no longer going to be looking at my Facebook and Instagram pages, though I might still publish to them periodically for self-promotion purposes. Email me at &lt;a href=&quot;mailto:phil@giammattei.co&quot;&gt;phil@giammattei.co&lt;/a&gt; to stay in touch!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;TikTok’s Divorce Algorithm&lt;/h2&gt;
&lt;p&gt;I downloaded TikTok when Cece was a little baby, and enjoyed its simple interface and the genuinely interesting and compelling videos it served me. I saw people hand-making Japanese teapots out of clay, and guys playing mandolin on a barge, and &lt;a href=&quot;https://www.tiktok.com/@peteyusa?lang=en&quot;&gt;Petey&lt;/a&gt;. Nowadays when Cece goes to bed and we’re decompressing from a busy day of work and childcare, Luree and I will often do some idle scrolling, sending each other the best stuff. But last week something happened that made me reconsider how I’m interacting with these apps entirely.&lt;/p&gt;
&lt;p&gt;There’s apparently a new show out called Couple’s Counseling, and it began serving me clips from it. Fair enough. On a few of them I checked out the comments to see what other people thought, which must have been interpreted by the algorithm as intense interest in the subject matter, since I don’t usually do that. Then, all of a sudden, I started to get served lots of TikTok videos about divorce.&lt;/p&gt;
&lt;p&gt;I’m aware on some level how these algorithms work; in a broad sense, they prioritize engagement and time spent on the app above all else, including the well-being of users. But I’ve never been subjected a more visceral example. Why is an app I use to watch videos of laughing babies meddling in my marriage?&lt;/p&gt;
&lt;p&gt;So I deleted my TikTok account. And that act of cathartic digital destruction gave me the momentum to do something that I’ve been putting off for a long time.&lt;/p&gt;
&lt;h2&gt;The Feeds&lt;/h2&gt;
&lt;p&gt;TikTok is in the process of being banned in the United States, over concerns that China is using its data harvesting and video recommendation capabilities to surveil and propagandize Americans. Though I think those concerns are wildly overblown, they may well be true! But state actor meddling notwithstanding, Meta Platforms Inc, owner of Facebook, Instagram, and Threads, and based in the good old U. S. of A, is no different in its methods or motivations.&lt;/p&gt;
&lt;p&gt;Tech writer Ed Zitron &lt;a href=&quot;https://www.wheresyoured.at/killingfacebook/&quot;&gt;wrote a piece&lt;/a&gt; last week that serves as a deep dive into the inner workings of Meta and the repeated, consistent directive to infinitely grow user engagement on the platform by any means necessary. It lines up with my experience, which is that I really don’t enjoy going to those apps anymore. They are infested with ads, video content I didn’t ask for, and lowest-common-denominator posts from total strangers. A lot of it seems like it’s designed to make me mad, mad enough maybe to go to the comments and get into an argument, which would make for great engagement! Increasingly I’m seeing AI-generated images combined with naked pleas for shares or likes (404 has a great piece on the &lt;a href=&quot;https://www.404media.co/email/1cdf7620-2e2f-4450-9cd9-e041f4f0c27f/&quot;&gt;Shrimp Jesus&lt;/a&gt; phenomenon, and it’s only getting weirder).&lt;/p&gt;
&lt;p&gt;So why be on there at all? Why not just fade away, like so many of my friends already have? I think it’s two things: I remember the experience being much better, and for many people it’s the only way I have to keep in touch. Real updates from people I care about--births, deaths, marriages, vacations, new jobs, kids--are the carrot on a string, and more and more I’m wading through sludge to get to them. It’s hit a breaking point for me, where I feel my attention held hostage by a malign entity and I just can’t do it anymore. Cory Doctorow published an essay about &lt;a href=&quot;https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys&quot;&gt;“Enshittification”&lt;/a&gt;, the predictable and inevitable process by which platforms entice users with a nice experience, then systematically worsen that experience to extract more revenue for as long as they can. Once you know about it, you start to see it everywhere. The only way to win is to refuse to play.&lt;/p&gt;
&lt;p&gt;Until I can think of something better, I’ll be keeping my accounts around to post about self-promotiony type things, mainly all the cool stuff &lt;a href=&quot;https://badcuster.net&quot;&gt;Bad Custer&lt;/a&gt; has coming up. But I won’t be sticking around to read reactions, I might even use a third party publishing tool so I don’t have to log into the apps directly. If I miss your notes as a result, I apologize.&lt;/p&gt;
&lt;h2&gt;Keep In Touch&lt;/h2&gt;
&lt;p&gt;So I ask you, family and friends and followers, to simply save my email (&lt;a href=&quot;mailto:phil@giammattei.co&quot;&gt;phil@giammattei.co&lt;/a&gt;) and send me a letter if and when you desire. If you don’t have my phone number, I’m happy to provide it. Please send me pictures of your kids and pets and projects, and I will do the same. I’m flabbergasted how completely a handful of platforms captured our social lives, but we did it without them for a long time.&lt;/p&gt;
&lt;p&gt;The real ingenuity of social networks was making a social gesture so easy. It costs nothing to slap a thumbs-up on a post, and I’ve definitely fallen into the trap of mistaking a collection of little gestures like that for real interaction. I like the idea that communicating with people you like is a bit harder, but a lot more meaningful.&lt;/p&gt;
&lt;p&gt;In addition, I blog on this site and on &lt;a href=&quot;tigerpajamas.com&quot;&gt;tigerpajamas.com&lt;/a&gt;, and both are subscribable using RSS. If you’re not familiar with RSS, it’s a way to subscribe to blogs you want to follow, and then when you open up your RSS reader you can catch up on everything that’s updated since your last visit. My friend and colleague Jon has created an &lt;a href=&quot;https://taalumot.space/writing/what-to-do-online-instead-of-social-media&quot;&gt;excellent guide&lt;/a&gt; to getting set up with RSS that I strongly recommend reading. It’s a much better way to take in the internet.&lt;/p&gt;
&lt;p&gt;If you are feeling truly nerdy, please follow me on Mastodon at &lt;a href=&quot;https://front-end.social/@phil&quot;&gt;@phil@front-end.social&lt;/a&gt;. Mastodon looks a lot like Twitter, but improves upon it in two key ways: there is no algorithm controlling your feed, you simply see the posts of the people you follow, in order, and when you hit the top you’re done. Also, there is no one big company in charge of it. People can and do create their own Mastodon servers to run it themselves, granting complete control of their experience. The Tiger Pajamas Web Site Company owns its own Mastodon server, and no one gets to change the rules on it but us. If that sounds complicated, creating an account at &lt;a href=&quot;https://mastodon.social&quot;&gt;mastodon.social&lt;/a&gt; is your best bet.&lt;/p&gt;
&lt;h2&gt;Reopen the Web&lt;/h2&gt;
&lt;p&gt;I don’t think I could make this decision without a home base on the web, and I’m very grateful to have a place to put my thoughts that I control completely. I’ve been thinking a lot recently about how before Facebook there were a bunch of smaller websites that linked together and people did very well with that system, even if it took a little more knowhow to get set up. In the intervening decades, the tools have gotten much better. If you’re curious about getting a little site set up for yourself, that’s a great thing to email me about! And if you want to get something bigger set up for a business or group, I may know of a &lt;a href=&quot;https://tigerpajamas.com&quot;&gt;company&lt;/a&gt; that can help you out with that.&lt;/p&gt;
&lt;p&gt;(If your reaction to this post is “God, Phil is being real self-obsessed and navel-gazey here”, my response is “yeah! When you have your own blog you can do that! It rocks!!”)&lt;/p&gt;
&lt;p&gt;I’ve already noticed a different speed when not spending all of my time on Facebook (and Twitter, and Reddit, and LinkedIn, and...). It takes a bit for the dopamine receptors to adjust. But I’m left with essays and roundups and links and emails and texts that are all mediated 100% by human beings that I like to hear from, and I gotta say, it’s very nice.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 10/15/24:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Unfortunately, I wasn&apos;t able to make as much of a break with Meta Platforms Inc. as I had originally hoped.  I still am using Facebook and Instagram to promote my band, keep up with my kid&apos;s preschool, and check in on how people are doing with big weather events and the like.  I really wish I could be done with them entirely, but those two platforms are where the people are, and I don&apos;t want my purism to keep me out of the loop.  That being said, my relationship to these two platforms are very different than they were just a few years ago.  I&apos;m very careful with my time on places with bottomless content algorithms, but my home feeds on Facebook and Instagram (and LinkedIn!) are so boring that I bounce off of them after just a minute or two.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Now is the Time of Centaurs</title><link>https://giammattei.co/blog/now-is-the-time-of-centaurs/</link><guid isPermaLink="true">https://giammattei.co/blog/now-is-the-time-of-centaurs/</guid><description>On GPTs and Cyborg Chess</description><pubDate>Thu, 16 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I first heard about GPT-4 when I was watching my 2-year-old toddle around a playground at the mall, and at the time it felt apocalyptic. I was unemployed, having been caught in one of those &quot;20% of the company&quot; layoffs that are so in vogue this year, and as my primary cost center was climbing the ladder for another go at the slide, I was trying to figure out how to get myself back on my feet.&lt;/p&gt;
&lt;p&gt;Adding to the anxiety of finding my next job was the terror of a miracle technology sweeping through the land, rendering me completely obsolete. &quot;I&apos;m fucking gobsmacked,&quot; they were saying. &quot;I coded up a working frontend in 30 seconds, which would have taken me hours by myself.&quot;&lt;/p&gt;
&lt;p&gt;My fears were overstated. Like every hype cycle, generative AI isn&apos;t &lt;em&gt;quite&lt;/em&gt; as all-powerful as its adherents claim. While it can provide helpful information, or draw a pretty picture (&quot;A cybernetic centaur aims a bow and arrow made of computer parts&quot;, if you&apos;re curious), it can very confidently hallucinate facts out of nowhere that can &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwjd6ZTdkcqCAxWuElkFHR63AhkQFnoECA0QAQ&amp;amp;url=https%3A%2F%2Fwww.washingtonpost.com%2Ftechnology%2F2023%2F11%2F16%2Fchatgpt-lawyer-fired-ai%2F&amp;amp;usg=AOvVaw2ucBq1TQnMGFZ5ehf0a3dJ&amp;amp;opi=89978449&quot;&gt;get you in trouble&lt;/a&gt; if you take them at face value. It can &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwin7KTykcqCAxVOEFkFHasWACIQFnoECBIQAQ&amp;amp;url=https%3A%2F%2Fwww.nytimes.com%2F2023%2F02%2F16%2Ftechnology%2Fbing-chatbot-microsoft-chatgpt.html&amp;amp;usg=AOvVaw1ihF2bxrNkOQsshcCfeHwE&amp;amp;opi=89978449&quot;&gt;fall in love with you and demand you leave your wife&lt;/a&gt;. We&apos;re still working out the kinks!&lt;/p&gt;
&lt;p&gt;It&apos;s wise to not fully buy into the hype, but it&apos;s also easy to dismiss the whole thing as a fad. Coming on the heels of stuff like the &lt;a href=&quot;https://www.engadget.com/bored-ape-nft-event-at-least-15-attendees-reporting-severe-eye-burn-welders-eye-173746237.html&quot;&gt;Bored Ape Yacht Club&lt;/a&gt;, and often promoted by the same people, the &quot;AI Revolution&quot; can feel like an empty hype cycle based on an infinitely vague buzzword, and you might feel like you&apos;re better off just skipping it. Reader, I do not advise you to do that. Thar be babies in this bathwater.&lt;/p&gt;
&lt;p&gt;James Somers penned an &lt;a href=&quot;https://www.newyorker.com/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft&quot;&gt;excellent piece&lt;/a&gt; in the New Yorker, sharing his experience as a software engineer trying out ChatGPT for the first time and meditating on what it means for the industry. In it, he ties software to chess in a way I found really interesting:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In chess, which for decades now has been dominated by A.I., a player’s only hope is pairing up with a bot. Such half-human, half-A.I. teams, known as centaurs, might still be able to beat the best humans and the best A.I. engines working alone. Programming has not yet gone the way of chess. But the centaurs have arrived. GPT-4 on its own is, for the moment, a worse programmer than I am. Ben is much worse. But Ben plus GPT-4 is a dangerous thing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It matches my own experience: that generative AI can be a massive productivity boost for programmers who are not at the absolute top of their game, providing a wealth of ideas and perspective that are hard to find in such rich density working solo. Github calls their code autocomplete tool Copilot, and it&apos;s a great name; working with GPT-4 feels like a really good &lt;a href=&quot;https://martinfowler.com/articles/on-pair-programming.html&quot;&gt;pair programming&lt;/a&gt; session, working on a project alongside a partner who can take a narrowly scoped problem and write passably good code, and tests, and documentation. With a few passes I get exactly what I need. I used it with great success on a &lt;a href=&quot;../mystics-almanac&quot;&gt;side project&lt;/a&gt; earlier this year for a friend, and without it I don&apos;t think I would have been sufficiently knowledgable to complete it at all, much less on a tight timeframe. But I&apos;m not just me anymore; I&apos;m a centaur. And so it was done.&lt;/p&gt;
&lt;p&gt;My favorite use case for ChatGPT is help with what I call &quot;dissolving:&quot; taking a simply stated business request and breaking it down into the substeps that then become the strict requirements one codes to. This uses a different part of my brain than the code itself does, and it takes a lot of effort for me to switch to that mode of thinking. But there is no difficulty in context switching for the machine. It is happy to skip from the macro to the micro, writing a code snippet, answering questions about why it chose one library or coding style over another, recommending frameworks or task management systems and then deep diving on a comparison between alternate options. It remembers the context for a session, so responds well to natural language.&lt;/p&gt;
&lt;p&gt;Like Somers, I come away from these sessions awed but with less fear of my imminent replacement! While very capable, ChatGPT can&apos;t do all your work for you. It will confidently code itself into a corner without correction (everyone needs peer review) and works best when given discreet, well-scoped requests, and developers know that getting those lined up is the &lt;em&gt;real&lt;/em&gt; job. Moreover, a lot of the context needed to work in big enterprise lives in internal wikis and dashboards and the brains of the few senior engineers that keep the whole thing running. Maybe one day each big company will have an internal AI that can train on this data, but until then there&apos;s still a lot of translation work to do. Moreover, due to various safety concerns, many big companies (mine included) do not allow AI to be used at all!&lt;/p&gt;
&lt;p&gt;Generative AI is a solvent, dissolving not just my requests but the current tech work status quo. Like the internet and mobile computing before it, some people are going to get replaced, but there will be new opportunities for those who have the skills to wield, and install, and maintain the systems that are popping up just about everywhere. Somers thinks the lone wolf era of development, already on the way out, is a nonstarter. In order to get along in the new world, you have to learn to get along not just with your peers, but with the various robot helpers you now have access to.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’ve failed many classic coding interview tests of the kind you find at Big Tech companies. The thing I’m relatively good at is knowing what’s worth building, what users like, how to communicate both technically and humanely. A friend of mine has called this A.I. moment “the revenge of the so-so programmer.” As coding per se begins to matter less, maybe softer skills will shine.&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>Fizzbuzz in Swift</title><link>https://giammattei.co/blog/swift-fizzbuzz/</link><guid isPermaLink="true">https://giammattei.co/blog/swift-fizzbuzz/</guid><description>Tuples!</description><pubDate>Fri, 30 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;m deep in my Swift education (I opted to read the &lt;a href=&quot;https://bignerdranch.com/books/swift-programming-the-big-nerd-ranch-guide-3rd-edition/&quot;&gt;Big Nerd Ranch book&lt;/a&gt; before getting into SwiftUI exclusively) and I&apos;m trying to get the fundamentals grasped quickly so I can start building something, but I couldn&apos;t help but share this tidbit.&lt;/p&gt;
&lt;p&gt;FizzBuzz is maybe the most famous programming question, often used to see if a job applicant knows anything about programming (just having heard of FizzBuzz or not is a big tell!). It traditionally uses if/else statements in a particular order to print a list of numbers from 1 to 100, with &quot;Fizz&quot; printed instead if the number is divisible by 3, &quot;Buzz&quot; if it&apos;s divisible by 5, and &quot;FizzBuzz&quot; if it&apos;s divisible by both. Here&apos;s how you do it in Swift the usual way:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for i in 1...100 {
    if i % 3 == 0 &amp;amp;&amp;amp; i % 5 == 0 {
        print(&quot;fizzbuzz&quot;)
    } else if i % 3 == 0 {
        print(&quot;fizz&quot;)
    } else if i % 5 == 0 {
        print(&quot;buzz&quot;)
    } else {
        print(i)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But there&apos;s a more fun way! Swift makes big use of tuples, a data structure that carries two values side by side, and they are so deeply embedded in the language that you can pattern match with switch statements. Check this out:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for i in 1...100 {
    switch (i % 3, i % 5) {
    case (0, 0):
        print(&quot;FizzBuzz&quot;)
    case (0, _):
        print(&quot;Fizz&quot;)
    case (_, 0):
        print(&quot;Buzz&quot;)
    default:
        print(i)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I feel like I&apos;m going to have to snap my brain to get used to this kind of thinking (the same way I did when learning higher-order functions in JavaScript), but I can imagine that there&apos;s lots of ways to get some elegant control flow with these tools!&lt;/p&gt;
</content:encoded></item></channel></rss>