<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>quigs.blog</title>
    <link>https://wf.quigs.blog/</link>
    <description>WriteFreely preview — text imported from Ghost</description>
    <pubDate>Tue, 25 Aug 2026 19:34:17 +0000</pubDate>
    <item>
      <title>I created a 365 Project Lightroom Plugin</title>
      <link>https://wf.quigs.blog/i-created-a-365-project-lightroom-plugin</link>
      <description>&lt;![CDATA[A screenshot of a calendar grid with photo thumbnails placed over each day. For days that are missing a photo the day number of the month is visible.&#xA;&#xA;Version 1&#xA;&#xA;On December 25, 2025 I started a 365 Project where I take one photo every day for a year. Because I shoot a lot of film photos I ran into an organization problem because the day I take a photo and the day I can post the developed photo are often spread out pretty far. And while a Light Room Classic collection can sort by capture date, it&#39;s not easy to identify which photos were taken when and what day number of the challenge they belong to.&#xA;&#xA;So with the help of Claude I built a little calendar view for Lightroom which not only shows you the gaps in the calendar where a photo needs to be placed, but also tells you what day of the challenge the photo belongs to.&#xA;&#xA;I released it on GitHub and I hope you find it useful. Installation and usage instructions are in the project README.&#xA;&#xA;  🤖 Note, unlike my other AI-assisted software efforts this tool is 100% vibe coded and not human reviewed. I felt safe doing so because this is a read-only data viewing tool that performs no actions and works &#34;good enough&#34;. I did dogfood it by testing it against my own library and photos and making sure it doesn&#39;t &#34;write&#34; but that is the extent of my testing.&#xA;&#xA;#usefultool #photography #announcement #release #software #plugin]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://quigs.blog/content/images/2026/04/Screenshot-2026-04-22-at-17.05.29.png" alt="A screenshot of a calendar grid with photo thumbnails placed over each day. For days that are missing a photo the day number of the month is visible."></p>

<p><em>Version 1</em></p>

<p>On December 25, 2025 I started a <a href="https://365project.org/support/howitworks">365 Project</a> where I take one photo every day for a year. Because I shoot a lot of film photos I ran into an organization problem because the day I take a photo and the day I can post the developed photo are often spread out pretty far. And while a Light Room Classic collection can sort by capture date, it&#39;s not easy to identify which photos were taken when and what day number of the challenge they belong to.</p>

<p>So with the help of Claude I built a little calendar view for Lightroom which not only shows you the gaps in the calendar where a photo needs to be placed, but also tells you what day of the challenge the photo belongs to.</p>

<p>I <a href="https://github.com/josephquigley/365-project-lightroom">released it on GitHub</a> and I hope you find it useful. Installation and usage instructions are in the project README.</p>

<blockquote><p>🤖 Note, unlike my other AI-assisted software efforts this tool is 100% vibe coded and not human reviewed. I felt safe doing so because this is a read-only data viewing tool that performs no actions and works “good enough”. I did dogfood it by testing it against my own library and photos and making sure it doesn&#39;t “write” but that is the extent of my testing.</p></blockquote>

<p><a href="https://wf.quigs.blog/tag:usefultool" class="hashtag"><span>#</span><span class="p-category">usefultool</span></a> <a href="https://wf.quigs.blog/tag:photography" class="hashtag"><span>#</span><span class="p-category">photography</span></a> <a href="https://wf.quigs.blog/tag:announcement" class="hashtag"><span>#</span><span class="p-category">announcement</span></a> <a href="https://wf.quigs.blog/tag:release" class="hashtag"><span>#</span><span class="p-category">release</span></a> <a href="https://wf.quigs.blog/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://wf.quigs.blog/tag:plugin" class="hashtag"><span>#</span><span class="p-category">plugin</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/i-created-a-365-project-lightroom-plugin</guid>
      <pubDate>Wed, 22 Apr 2026 22:04:17 +0000</pubDate>
    </item>
    <item>
      <title>Two Years Without An Apple Watch: A Retrospective</title>
      <link>https://wf.quigs.blog/two-years-without-an-apple-watch-a-retrospective</link>
      <description>&lt;![CDATA[In 2024 I lost my watch, my ID and other important things to a volcano. Due to the politics and stupidity surrounding the removal of the blood oxygen sensor feature caused by a patent dispute between Masimo and Apple I decided to not replace it.  &#xA;  &#xA;It&#39;s not like I needed the O2 sensor (although it did come in handy while hiking at 12,000ft / 3657 meters above sea level to see how much I should rest to get my numbers back up). It was more the principle of the thing. Two extremely rich companies fighting over something that really shouldn&#39;t be patentable.  &#xA;  &#xA;I&#39;m now approaching almost two full years without an Apple Watch and life has never been better. At first I started missing meetings, phone calls, and reminders like crazy. Having notifications on my wrist is a massive help. It&#39;s also a hindrance. I was more easily distracted, less present in conversation, and usually would react to the notification by pulling my phone out anyway.&#xA;&#xA;Since then I&#39;ve gotten re-accustomed to my pocket vibrating, and pro-actively checking my calendar before taking a walk (to make sure I don&#39;t accidentally miss anything). I use the timer or alarm feature on the phone to alert me to critical time sensitive things.&#xA;&#xA;As someone who is relatively fit and healthy, the health features of the Apple Watch just aren&#39;t worth it to me to justify the price of the watch and the cellular plan for it to be truly useful to me. Apple may have restored the O2 monitor (but in a way that makes it almost useless to me climbing a volcano again since you can&#39;t view the results on the watch--the patent workaround), and with Masimo suing Apple as a result of that workaround, we could be looking at this feature being removed again in a future model.&#xA;&#xA;So instead of spending $500 dollars on a smart watch I don&#39;t need, I bought some overpriced headphones that I don&#39;t need which quickly switch between my personal laptop, my phone, my TV, my iPad and my work computer without having to unpair from any of them! An actual useful feature that Apple was sued for, and won.&#xA;&#xA;Patents make consumers&#39; lives so needlessly complicated. At this time the Masimo patent is making neither Masimo nor Apple any money from me. Y&#39;all should kiss and make up or something.&#xA;&#xA;#apple #electronics #patents]]&gt;</description>
      <content:encoded><![CDATA[<p>In 2024 I lost my watch, my ID and other important things <a href="https://quigs.blog/i-lost-my-apple-watch-to-a-volcano/">to a volcano</a>. Due to the politics and stupidity surrounding the removal of the blood oxygen sensor feature caused by a patent dispute between Masimo and Apple I decided to not replace it.</p>

<p>It&#39;s not like I needed the O2 sensor (although it did come in handy while hiking at 12,000ft / 3657 meters above sea level to see how much I should rest to get my numbers back up). It was more the principle of the thing. Two extremely rich companies fighting over something <a href="https://arstechnica.com/gadgets/2025/08/redesigned-blood-oxygen-monitoring-returns-to-apple-watch-following-patent-dispute/">that really shouldn&#39;t be patentable</a>.</p>

<p>I&#39;m now approaching almost two full years without an Apple Watch and life has never been better. At first I started missing meetings, phone calls, and reminders like crazy. Having notifications on my wrist is a massive help. It&#39;s also a hindrance. I was more easily distracted, less present in conversation, and usually would react to the notification by pulling my phone out anyway.</p>

<p>Since then I&#39;ve gotten re-accustomed to my pocket vibrating, and pro-actively checking my calendar before taking a walk (to make sure I don&#39;t accidentally miss anything). I use the timer or alarm feature on the phone to alert me to critical time sensitive things.</p>

<p>As someone who is relatively fit and healthy, the health features of the Apple Watch just aren&#39;t worth it to me to justify the price of the watch and the cellular plan for it to be truly useful to me. Apple may have restored the O2 monitor (but in a way that makes it almost useless to me climbing a volcano again since you can&#39;t view the results on the watch—the patent workaround), and with Masimo suing Apple as a result of that workaround, we could be looking at this feature being removed again in a future model.</p>

<p>So instead of spending $500 dollars on a smart watch I don&#39;t need, I bought some <a href="https://www.macstories.net/news/in-a-surprise-move-apple-announces-airpods-max-2/">overpriced headphones</a> that I don&#39;t need which quickly switch between my personal laptop, my phone, my TV, my iPad and my work computer without having to unpair from any of them! An actual useful feature that Apple <a href="https://9to5mac.com/2023/08/15/bluetooth-pairing-patent-case/">was sued for</a>, and won.</p>

<p>Patents make consumers&#39; lives so needlessly complicated. At this time the Masimo patent is making neither Masimo nor Apple any money from me. Y&#39;all should kiss and make up or something.</p>

<p><a href="https://wf.quigs.blog/tag:apple" class="hashtag"><span>#</span><span class="p-category">apple</span></a> <a href="https://wf.quigs.blog/tag:electronics" class="hashtag"><span>#</span><span class="p-category">electronics</span></a> <a href="https://wf.quigs.blog/tag:patents" class="hashtag"><span>#</span><span class="p-category">patents</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/two-years-without-an-apple-watch-a-retrospective</guid>
      <pubDate>Tue, 21 Apr 2026 19:41:58 +0000</pubDate>
    </item>
    <item>
      <title>What Film Taught Me About My Outdated Digital Camera</title>
      <link>https://wf.quigs.blog/what-film-taught-me-about-my-outdated-digital-camera</link>
      <description>&lt;![CDATA[Last month I re-learned something that is obvious to any seasoned photographer: What you already own is usually perfectly good enough. Back in 2016, I bought a Panasonic Lumix GX8 and while I loved its video capabilities, I was consistently disappointed by the photos. Despite owning both a zoom and a prime lens, every image came out frustratingly soft.&#xA;&#xA;The real kicker came with the arrival of the iPhone XR which took sharper photos (although at a lower resolution). I gave up on &#34;real&#34; camera photography for years due to making an amateur mistake of blaming sensor technology for my image quality problems. My assumption was that if my phone&#39;s tiny sensor could outperform my dedicated camera, my Panasonic must be outdated. Yet when I started film photography in January, I had a completely different mindset. I knew right away that the lens mattered more than the &#34;sensor&#34; (the film) did. I focused (pun intended) on purchasing the best lenses my budget could afford. For some reason, this fact didn&#39;t register for my digital setup until a few weeks ago.&#xA;&#xA;What I failed to realize over four years of using the Panasonic was that gear mattered–but in my case it wasn&#39;t the camera body that mattered so much as it was the lens. Sensing my renewed interest in gear, the almighty YouTube algorithm suggested a 2018 review of a Panasonic Leica lens for Micro 4/3 cameras and I was intrigued. Was the cause of my dissatisfaction due to buying budget lenses? Needing the answer, I went to eBay to buy a used Panasonic Leica 15mm (30mm equivalent) and as soon as it arrived I took some test shots.&#xA;&#xA;Wow! This is exactly what I&#39;ve wanted from this camera since I bought it in 2016! Sure, I&#39;ve taken some great photos with it but there have been times when I needed to crop or wanted to show some detailed textures and been frustrated with the soft results from the budget lenses.&#xA;&#xA;I&#39;m so grateful to have had the experience of shooting film because it has taught me so much about the basics of photography that digital can often cover up–particularly that new isn&#39;t always better–quality is. I never questioned that film photography was all about the lens, yet somehow convinced myself that digital photography was all about the sensor. Sometimes the best upgrade isn&#39;t replacing your digital camera with one that has 8 stops of IBIS and more megapixels; just like a good film camera, your old digital body simply requires a lens it deserves.&#xA;&#xA;#technology #photography #reflection #gear]]&gt;</description>
      <content:encoded><![CDATA[<p>Last month I re-learned something that is obvious to any seasoned photographer: What you already own is usually perfectly good enough. Back in 2016, I bought a Panasonic Lumix GX8 and while I loved its video capabilities, I was consistently disappointed by the photos. Despite owning both a zoom and a prime lens, every image came out frustratingly soft.</p>

<p>The real kicker came with the arrival of the iPhone XR which took sharper photos (although at a lower resolution). I gave up on “real” camera photography for years due to making an amateur mistake of blaming sensor technology for my image quality problems. My assumption was that if my phone&#39;s tiny sensor could outperform my dedicated camera, my Panasonic must be outdated. Yet when I started film photography in January, I had a completely different mindset. I knew right away that the lens mattered more than the “sensor” (the film) did. I focused (pun intended) on purchasing the best lenses my budget could afford. For some reason, this fact didn&#39;t register for my digital setup until a few weeks ago.</p>

<p>What I failed to realize over four years of using the Panasonic was that gear mattered–but in my case it wasn&#39;t the camera body that mattered so much as it was the lens. Sensing my renewed interest in gear, the almighty YouTube algorithm suggested a 2018 review of a Panasonic Leica lens for Micro 4/3 cameras and I was intrigued. Was the cause of my dissatisfaction due to buying budget lenses? Needing the answer, I went to eBay to buy a used Panasonic Leica 15mm (30mm equivalent) and as soon as it arrived I took some test shots.</p>

<p><img src="https://quigs.blog/content/images/2025/05/P1200105-full.jpg" alt=""></p>

<p><img src="https://quigs.blog/content/images/2025/05/P1200144.jpg" alt=""></p>

<p>Wow! This is exactly what I&#39;ve wanted from this camera since I bought it in 2016! Sure, I&#39;ve taken <a href="https://quigs.photo/tag/panasonic-gx8/">some great photos with it</a> but there have been times when I needed to crop or wanted to show some detailed textures and been frustrated with the soft results from the budget lenses.</p>

<p>I&#39;m so grateful to have had the experience of shooting film because it has taught me so much about the basics of photography that digital can often cover up–particularly that new isn&#39;t always better–quality is. I never questioned that film photography was all about the lens, yet somehow convinced myself that digital photography was all about the sensor. Sometimes the best upgrade isn&#39;t replacing your digital camera with one that has 8 stops of IBIS and more megapixels; just like a good film camera, your old digital body simply requires a lens it deserves.</p>

<p><a href="https://wf.quigs.blog/tag:technology" class="hashtag"><span>#</span><span class="p-category">technology</span></a> <a href="https://wf.quigs.blog/tag:photography" class="hashtag"><span>#</span><span class="p-category">photography</span></a> <a href="https://wf.quigs.blog/tag:reflection" class="hashtag"><span>#</span><span class="p-category">reflection</span></a> <a href="https://wf.quigs.blog/tag:gear" class="hashtag"><span>#</span><span class="p-category">gear</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/what-film-taught-me-about-my-outdated-digital-camera</guid>
      <pubDate>Sat, 03 May 2025 17:53:07 +0000</pubDate>
    </item>
    <item>
      <title>One Hour&#39;s Drive</title>
      <link>https://wf.quigs.blog/one-hours-drive</link>
      <description>&lt;![CDATA[March was filled with various photography explorations about one hour&#39;s drive from home. It&#39;s been really fun to see things differently now that I&#39;m actually trying to notice minor details. It&#39;s also pretty crazy how much interesting stuff is within a one hour radius of where you live.  &#xA;  &#xA;I&#39;ve gotten to the point where I notice small things completely passively now. I no longer have to concentrate on looking at my surroundings–I just notice the small things automatically now. Speaking of which, there&#39;s some work that needs to be done on the house this spring...&#xA;&#xA;I discovered Pyrocat-HD and I think it&#39;s my new favorite black and white film developer. My development costs are coming down now that I&#39;ve developed 23 rolls of film by myself. I&#39;ve gotten pretty good at the whole thing and have yet to make any developing mistakes. (If only that could be said for capturing the photo and loading the film correctly...)  &#xA;  &#xA;Continuing the photography obsession in another genre--I&#39;ve been playing around with some code for an app. I&#39;m not sure if anything will come from it, but maybe in a few months I&#39;ll have something I can show off.&#xA;&#xA;March was pretty much entirely work, cooking tons of lamb, loads of photography, and family life. I did manage to squeeze in a movie--something I rarely make time for any more.&#xA;&#xA;#photography #exploration #film #darkroom]]&gt;</description>
      <content:encoded><![CDATA[<p>March was filled with various photography explorations about one hour&#39;s drive from home. It&#39;s been really fun to see things differently now that I&#39;m actually trying to notice minor details. It&#39;s also pretty crazy how much interesting stuff is within a one hour radius of where you live.</p>

<p>I&#39;ve gotten to the point where I notice small things completely passively now. I no longer have to concentrate on looking at my surroundings–I just notice the small things automatically now. Speaking of which, there&#39;s some work that needs to be done on the house this spring...</p>

<p>I discovered Pyrocat-HD and I think it&#39;s my new favorite black and white film developer. My development costs are coming down now that I&#39;ve developed 23 rolls of film by myself. I&#39;ve gotten pretty good at the whole thing and have yet to make any developing mistakes. (If only that could be said for capturing the photo and loading the film correctly...)</p>

<p>Continuing the photography obsession in another genre—I&#39;ve been playing around with some code for an app. I&#39;m not sure if anything will come from it, but maybe in a few months I&#39;ll have something I can show off.</p>

<p>March was pretty much entirely work, cooking tons of lamb, loads of photography, and family life. I did manage to squeeze in <a href="https://letterboxd.com/josephwquigley/film/poor-things-2023/">a movie</a>—something I rarely make time for any more.</p>

<p><a href="https://wf.quigs.blog/tag:photography" class="hashtag"><span>#</span><span class="p-category">photography</span></a> <a href="https://wf.quigs.blog/tag:exploration" class="hashtag"><span>#</span><span class="p-category">exploration</span></a> <a href="https://wf.quigs.blog/tag:film" class="hashtag"><span>#</span><span class="p-category">film</span></a> <a href="https://wf.quigs.blog/tag:darkroom" class="hashtag"><span>#</span><span class="p-category">darkroom</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/one-hours-drive</guid>
      <pubDate>Tue, 08 Apr 2025 18:23:01 +0000</pubDate>
    </item>
    <item>
      <title>A Bit Overwhelmed</title>
      <link>https://wf.quigs.blog/a-bit-overwhelmed</link>
      <description>&lt;![CDATA[I have fallen deep into the photography rabbit hole, especially this past February. Since my last post in January I&#39;ve shot the St. Joseph, MI lighthouse twice in drastically different conditions, developed three rolls of film at the lab and 12 rolls at home. Yes the film bug bit me hard.&#xA;&#xA;But that&#39;s not the overwhelming part. No, what&#39;s overwhelming is culling and editing the 298 photos of Lake Michigan I took a few weeks ago on my iPhone after I ran out of film. It turns out less is more and thanks to a stupid mistake of mis-rating a roll of film, I had even fewer actual film shots, making it quite easy to pick the ones I liked.&#xA;&#xA;I spent $1.78 per shot on the film photos I kept, and $0.00 on the digital and while I got some really great photos with my phone for free, they feel less thoughtful to me and I enjoy them less as a result.&#xA;&#xA;---&#xA;&#xA;You can check out my otherworldly photos from Lake Michigan or a walkabout in an industrial area at my photo blog at https://quigs.photo or follow me on Pixelfed, Glass or Instagram.&#xA;&#xA;A photo from my walkabout in early February, 2025.]]&gt;</description>
      <content:encoded><![CDATA[<p>I have fallen deep into the photography rabbit hole, especially this past February. Since my last post in January I&#39;ve shot the St. Joseph, MI lighthouse twice in drastically different conditions, developed three rolls of film at the lab and 12 rolls at home. Yes the film bug bit me hard.</p>

<p>But that&#39;s not the overwhelming part. No, what&#39;s overwhelming is culling and editing the 298 photos of Lake Michigan I took a few weeks ago on my iPhone after I ran out of film. It turns out less is more and thanks to a stupid mistake of mis-rating a roll of film, I had even fewer actual film shots, making it quite easy to pick the ones I liked.</p>

<p>I spent $1.78 per shot on the film photos I kept, and $0.00 on the digital and while I got some really great photos with my phone for free, they feel less thoughtful to me and I enjoy them less as a result.</p>

<hr>

<p>You can check out my <a href="https://quigs.photo/2025-lighthouse-in-winter-st-joseph-mi/">otherworldly photos from Lake Michigan</a> or a <a href="https://quigs.photo/2025-walkabout-industrial-area/">walkabout in an industrial area</a> at my photo blog at <a href="https://quigs.photo">https://quigs.photo</a> or follow me on <a href="https://pixelfed.social/@quigs">Pixelfed</a>, <a href="https://glass.photo/quigs">Glass</a> or <a href="https://www.instagram.com/quigsphoto">Instagram</a>.</p>

<p><img src="https://quigs.blog/content/images/2025/03/img20250207_22580398.jpg" alt=""></p>

<p><em>A photo from my walkabout in early February, 2025.</em></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/a-bit-overwhelmed</guid>
      <pubDate>Sun, 02 Mar 2025 17:51:14 +0000</pubDate>
    </item>
    <item>
      <title>I Don&#39;t Do New Year Resolutions But 2025 Chose One For Me</title>
      <link>https://wf.quigs.blog/i-dont-do-new-year-resolutions-but-2025-chose-one-for-me</link>
      <description>&lt;![CDATA[I hate New Year Resolutions. They always seem too grand, too vague, or just... weird to me. So imagine my surprise when I kickstarted a new project in December of 2024 that suddenly shaped into a resolution or theme for 2025.&#xA;&#xA;Just over a year ago, I bought a Chevy Bolt EV and have been taking it road tripping—which is, frankly, a terrible idea. It&#39;s a first-generation EV that charges slower than a glacier taking a coffee break. Unlike modern EVs, in the Bolt you drive for 2.5 hours, then charge for 20-45 minutes. It charges even slower in the winter, yet despite this limitation, I&#39;ve covered several thousand miles over various road trips these past twelve months. Then, this month, after four years of &#34;window shopping&#34; on eBay, I finally took the plunge into medium format film cameras and bought a 1954 Yashicaflex A2 film camera.&#xA;&#xA;Both the slow-charging EV and the camera pictured above reflect a concept I&#39;ve been gradually embracing over the past 12 months—one I only recognized this week: I enjoy being more deliberate and more aware.&#xA;&#xA;My last road trip was only about 160 miles away, but took almost four hours each way, thanks to winter temperatures and tires reducing my range and slowing my charge rate. My first twelve shots ever on the Yashicaflex were with black and white film and they each took me 5-10 minutes to calculate exposure, apply the settings to the camera, compose, and wait for the right moment to snap the shutter. I won&#39;t get the shots back from the film development lab for at least another week, and I have no idea if they turned out well.&#xA;&#xA;It seems that even though I didn&#39;t pick a resolution or theme for 2025, my interests have chosen it for me. Here&#39;s to designing intentional slow downs in life, and paying attention to what is around us as we move through the arrow of time. 🥂&#xA;&#xA;#travel #lifestyle #ev #mindfulness #newyear #photography]]&gt;</description>
      <content:encoded><![CDATA[<p>I hate New Year Resolutions. They always seem too grand, too vague, or just... weird to me. So imagine my surprise when I kickstarted a <a href="https://quigs.quest">new project</a> in December of 2024 that suddenly shaped into a resolution or <a href="https://www.youtube.com/watch?v=NVGuFdX5guE">theme</a> for 2025.</p>

<p>Just over a year ago, I bought a Chevy Bolt EV and have been taking it road tripping—which is, frankly, a terrible idea. It&#39;s a first-generation EV that charges slower than a glacier taking a coffee break. Unlike modern EVs, in the Bolt you drive for 2.5 hours, then charge for 20-45 minutes. It charges even slower in the winter, yet despite this limitation, I&#39;ve covered several thousand miles over various road trips these past twelve months. Then, this month, after four years of “window shopping” on eBay, I finally took the plunge into medium format film cameras and bought a 1954 Yashicaflex A2 film camera.</p>

<p>Both the slow-charging EV and the camera pictured above reflect a concept I&#39;ve been gradually embracing over the past 12 months—one I only recognized this week: I enjoy being more deliberate and more aware.</p>

<p>My <a href="https://quigs.quest/nordhouse-dunes-winter-camping-2025/">last road trip</a> was only about 160 miles away, but took almost four hours each way, thanks to winter temperatures and tires reducing my range and slowing my charge rate. My first twelve shots ever on the Yashicaflex were with black and white film and they each took me 5-10 minutes to calculate exposure, apply the settings to the camera, compose, and wait for the right moment to snap the shutter. I won&#39;t get the shots back from the film development lab for at least another week, and I have no idea if they turned out well.</p>

<p>It seems that even though I didn&#39;t pick a resolution or theme for 2025, my interests have chosen it for me. Here&#39;s to designing intentional slow downs in life, and paying attention to what is around us as we move through the arrow of time. 🥂</p>

<p><a href="https://wf.quigs.blog/tag:travel" class="hashtag"><span>#</span><span class="p-category">travel</span></a> <a href="https://wf.quigs.blog/tag:lifestyle" class="hashtag"><span>#</span><span class="p-category">lifestyle</span></a> <a href="https://wf.quigs.blog/tag:ev" class="hashtag"><span>#</span><span class="p-category">ev</span></a> <a href="https://wf.quigs.blog/tag:mindfulness" class="hashtag"><span>#</span><span class="p-category">mindfulness</span></a> <a href="https://wf.quigs.blog/tag:newyear" class="hashtag"><span>#</span><span class="p-category">newyear</span></a> <a href="https://wf.quigs.blog/tag:photography" class="hashtag"><span>#</span><span class="p-category">photography</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/i-dont-do-new-year-resolutions-but-2025-chose-one-for-me</guid>
      <pubDate>Sat, 18 Jan 2025 23:55:04 +0000</pubDate>
    </item>
    <item>
      <title>I Lost My Apple Watch To A Volcano. I Am Not Sure If I&#39;ll Buy A Replacement.</title>
      <link>https://wf.quigs.blog/i-lost-my-apple-watch-to-a-volcano</link>
      <description>&lt;![CDATA[A few months ago, I climbed the volcano Acatenango in Guatemala with four of my best friends. It was a disaster of a trip on so many levels, but thanks to being able to spend quality time with people I love, I had a good time. I did, however, lose my Apple Watch, AirPods, my wallet with my ID and all my credit cards, and some additional camping equipment when I accidentally kicked them off a cliff during the worst tropical rainstorm I&#39;ve ever seen. It appears that Guatemalan adventures and I are developing an expensive electronics destruction habit.[1]&#xA;&#xA;As soon as I regained internet, I re-ordered and re-purchased replacements for everything I lost, except the Apple Watch. My reasoning at the time was that it was silly to buy a watch in June when new ones were going to come out in September. But as September 9 approaches, I am no longer certain I&#39;ll replace my watch at all.&#xA;&#xA;This surprised me because I was an Apple Watch early adopter. I woke up at 5 a.m. to place an order for the very first Series 0 watch in 2015. That piece of crap was barely fast enough to tell the time (let alone any &#34;smart&#34; activities), but at the same time it was absolutely amazing to have a tiny computer on my wrist. I began to rely on the watch as a notification proxy and then quickly as a health-tracking device.&#xA;&#xA;My previous watch (may it rest in pieces under the landslide we narrowly avoided becoming caught in) had cellular capability, allowing me to go without my phone for walks or errands and still stay connected. I even wrote an entire blog post about traveling internationally with just a watch and no phone after my previous Guatemala fiasco.[1:1]&#xA;&#xA;But living without a watch for two months has caused me to have second thoughts about buying a new one.&#xA;&#xA;| A cloudy view from the slopes of Acatenango with dead trees sticking up in the foreground. |&#xA;| --- |&#xA;| Great views at 3569m (11,709ft) on almost any day except the one I climbed. 😆 |&#xA;&#xA;One of the two reasons why I brought the watch on the volcano was to measure my blood oxygen during the high-altitude climb and track the GPS coordinates so that I could animate my climb, matching photos and videos to the position on the volcano on a map. Neither of those features actually worked on the volcano.&#xA;&#xA;Because I was climbing for 5 hours in the rain, the O2 sensor was unable to get a reading. And because I was tracking my heart rate via a workout, I put the watch in battery-saving mode. Unbeknownst to me, that disables the GPS even during workouts, and my watch did not rely on my phone&#39;s massive battery to associate GPS coordinates with the workout as I expected. This would be such a simple thing to do--Apple can detect if I&#39;m working out and automatically start tracking it, and yet Apple didn&#39;t fall back to my phone&#39;s GPS.&#xA;&#xA;Despite the hiccups from using the watch in an extreme environment, I find a lot of value in knowing my O2 levels on a day-to-day basis. However, due to Apple&#39;s legal issues with Masimo, the replacement watch I’m considering is unlikely to include the blood oxygen feature I want, and it might not be available until 2028.&#xA;&#xA;As a consumer, I feel irritated that a feature I enjoyed was removed from the watch. I know patent disputes are complicated, but I paid a premium to be taken care of, and the richest company in the world can&#39;t seem to work out a solution that benefits me as a consumer here. Apple used to have my back, but now it feels like that’s no longer the case. Given how they have behaved recently with the EU and with the App Store over the last 15 years, I&#39;m hesitant to give them the benefit of the doubt that it&#39;s not a &#34;we don&#39;t want to lower our margins, so we&#39;ll fight it out in court&#34; reason. But I will admit the legal system is most likely to blame here.&#xA;&#xA;Another reason I&#39;m hesitant to buy another watch is that I have noticed that I feel less distracted overall. One benefit of not having notifications on my wrist 22 hours a day[2] is that I miss a lot of notifications. If I do get a replacement watch, I&#39;m going to disable almost all the notifications I can and use the watch primarily as a health device. Sure, the focus modes are great, and you can disable notifications for various apps, but after 9 years of watchOS, I still haven&#39;t found a solution I&#39;m happy with.&#xA;&#xA;I am also tired of paying 10-15 US Dollars a month to my carrier for the privilege of having a cellular function that I rarely ever use. I&#39;m not convinced that the monthly cost and the additional $100+ dollars to buy the cellular model is worth the money.&#xA;&#xA;So what are my next steps? After the September 9 announcement I am going to compare the latest Apple Watch to an Oura Ring. Although the Watch appears to be a better fitness tracker in every way, well... quite simply the Oura Ring has a blood oxygen sensor and costs $100 less. Its monthly subscription is half of what my watch&#39;s cellular plan, and the Oura doesn&#39;t have a screen to distract me.&#xA;&#xA;Apple&#39;s strongpoint has always been hardware, and their iOS/iPad/watchOS software would benefit from a lot of quality of life improvements that don&#39;t move the stock price the way &#34;AI&#34; does. After all it took Apple 17 years to finally let us arrange our home screen the way we want to.&#xA;&#xA;The watch may be a superior device over other fitness trackers, but I have been going against the grain trying to get Apple&#39;s software to behave the way I want it to for 9 years now. I suspect this early adopter and power user might be calling it quits on September 9.&#xA;&#xA;---&#xA;&#xA;Traveling internationally with only an Apple Watch and no phone ↩︎ ↩︎&#xA;I charged my watch twice a day for about an hour at a time after waking up and before bed. ↩︎&#xA;&#xA;#travel #apple #technology #disappointment #fitness]]&gt;</description>
      <content:encoded><![CDATA[<p>A few months ago, I climbed the volcano Acatenango in Guatemala with four of my best friends. It was a disaster of a trip on so many levels, but thanks to being able to spend quality time with people I love, I had a good time. I did, however, lose my Apple Watch, AirPods, my wallet with my ID and all my credit cards, and some additional camping equipment when I accidentally kicked them off a cliff during the worst tropical rainstorm I&#39;ve ever seen. It appears that Guatemalan adventures and I are developing an expensive electronics destruction habit.<a href="#fn1">[1]</a></p>

<p>As soon as I regained internet, I re-ordered and re-purchased replacements for everything I lost, except the Apple Watch. My reasoning at the time was that it was silly to buy a watch in June when new ones were going to come out in September. But as September 9 approaches, I am no longer certain I&#39;ll replace my watch at all.</p>

<p>This surprised me because I was an Apple Watch early adopter. I woke up at 5 a.m. to place an order for the very first Series 0 watch in 2015. That piece of crap was barely fast enough to tell the time (let alone any “smart” activities), but at the same time it was absolutely amazing to have a tiny computer on my wrist. I began to rely on the watch as a notification proxy and then quickly as a health-tracking device.</p>

<p>My previous watch (may it rest in pieces under the landslide we narrowly avoided becoming caught in) had cellular capability, allowing me to go without my phone for walks or errands and still stay connected. I even wrote an entire blog post about traveling internationally with just a watch and no phone after my previous Guatemala fiasco.<a href="#fn1">[1:1]</a></p>

<p>But living without a watch for two months has caused me to have second thoughts about buying a new one.</p>

<table>
<thead>
<tr>
<th><img src="https://quigs.blog/content/images/2024/09/BF05C530-C229-4B4D-A14A-6042810EE420_1_105_c.jpeg" alt="A cloudy view from the slopes of Acatenango with dead trees sticking up in the foreground."></th>
</tr>
</thead>

<tbody>
<tr>
<td><em>Great views at 3569m (11,709ft) on almost any day except the one I climbed. 😆</em></td>
</tr>
</tbody>
</table>

<p>One of the two reasons why I brought the watch on the volcano was to measure my blood oxygen during the high-altitude climb and track the GPS coordinates so that I could animate my climb, matching photos and videos to the position on the volcano on a map. Neither of those features actually worked on the volcano.</p>

<p>Because I was climbing for 5 hours in the rain, the O2 sensor was unable to get a reading. And because I was tracking my heart rate via a workout, I put the watch in battery-saving mode. Unbeknownst to me, that disables the GPS even during workouts, and my watch did not rely on my phone&#39;s massive battery to associate GPS coordinates with the workout as I expected. This would be such a simple thing to do—Apple can detect if I&#39;m working out and automatically start tracking it, and yet Apple didn&#39;t fall back to my phone&#39;s GPS.</p>

<p>Despite the hiccups from using the watch in an extreme environment, I find a lot of value in knowing my O2 levels on a day-to-day basis. However, due to Apple&#39;s legal issues with Masimo, the replacement watch I’m considering is unlikely to include the blood oxygen feature I want, and it might not be available <a href="https://www.macrumors.com/2024/03/12/apple-watch-blood-oxygen-sensor-software/">until 2028</a>.</p>

<p>As a consumer, I feel irritated that a feature I enjoyed was removed from the watch. I know patent disputes are complicated, but I paid a premium to be taken care of, and the richest company in the world can&#39;t seem to work out a solution that benefits me as a consumer here. Apple used to have my back, but now it feels like that’s no longer the case. Given how they have behaved recently with the EU and with the App Store over the last 15 years, I&#39;m hesitant to give them the benefit of the doubt that it&#39;s not a “we don&#39;t want to lower our margins, so we&#39;ll fight it out in court” reason. But I will admit the legal system is most likely to blame here.</p>

<p>Another reason I&#39;m hesitant to buy another watch is that I have noticed that I feel less distracted overall. One benefit of not having notifications on my wrist 22 hours a day<a href="#fn2">[2]</a> is that I miss a lot of notifications. If I do get a replacement watch, I&#39;m going to disable almost all the notifications I can and use the watch primarily as a health device. Sure, the focus modes are great, and you can disable notifications for various apps, but after 9 years of watchOS, I still haven&#39;t found a solution I&#39;m happy with.</p>

<p>I am also tired of paying 10-15 US Dollars a month to my carrier for the privilege of having a cellular function that I <em>rarely</em> ever use. I&#39;m not convinced that the monthly cost and the additional $100+ dollars to buy the cellular model is worth the money.</p>

<p>So what are my next steps? After the September 9 announcement I am going to compare the latest Apple Watch to an Oura Ring. Although the Watch appears to be a better fitness tracker in every way, well... quite simply the Oura Ring has a blood oxygen sensor and costs $100 less. Its monthly subscription is half of what my watch&#39;s cellular plan, and the Oura doesn&#39;t have a screen to distract me.</p>

<p>Apple&#39;s strongpoint has always been hardware, and their iOS/iPad/watchOS software would benefit from a lot of quality of life improvements that don&#39;t move the stock price the way “AI” does. After all it took Apple 17 years to finally let us <a href="https://www.macrumors.com/2024/06/10/ios-18-home-screen/">arrange our home screen the way we want to</a>.</p>

<p>The watch may be a superior device over other fitness trackers, but I have been going against the grain trying to get Apple&#39;s software to behave the way I want it to for 9 years now. I suspect this early adopter and power user might be calling it quits on September 9.</p>

<hr>
<ol><li><a href="https://quigs.blog/traveling-internationally-with-only-an-apple-watch/">Traveling internationally with only an Apple Watch and no phone</a> <a href="#fnref1">↩︎</a> <a href="#fnref1:1">↩︎</a></li>
<li>I charged my watch twice a day for about an hour at a time after waking up and before bed. <a href="#fnref2">↩︎</a></li></ol>

<p><a href="https://wf.quigs.blog/tag:travel" class="hashtag"><span>#</span><span class="p-category">travel</span></a> <a href="https://wf.quigs.blog/tag:apple" class="hashtag"><span>#</span><span class="p-category">apple</span></a> <a href="https://wf.quigs.blog/tag:technology" class="hashtag"><span>#</span><span class="p-category">technology</span></a> <a href="https://wf.quigs.blog/tag:disappointment" class="hashtag"><span>#</span><span class="p-category">disappointment</span></a> <a href="https://wf.quigs.blog/tag:fitness" class="hashtag"><span>#</span><span class="p-category">fitness</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/i-lost-my-apple-watch-to-a-volcano</guid>
      <pubDate>Wed, 04 Sep 2024 03:19:16 +0000</pubDate>
    </item>
    <item>
      <title>Happy 18th Anniversary, Serenity</title>
      <link>https://wf.quigs.blog/happy-18th-anniversary-serenity</link>
      <description>&lt;![CDATA[It may seem silly to celebrate the anniversary of my first Mac purchase, which I named Serenity) (after the Firefly-class vessel from the TV show) by the same name). But it is not silly, because without that machine which I unboxed 18 years ago today, I would not be who I am.&#xA;&#xA;The author as a teen sitting in a chair with the laptop, Serenity, open on his lap.&#xA;&#xA;Without Serenity I would not:&#xA;&#xA;Have made a video game in the-then-Mac-only Unity Game Engine with my best friend (the demo was downloaded over 1 million times), which&#xA;Taught me to code in the Apple ecosystem (foreshadowing), which allowed me to&#xA;Use that game to impress professors when visiting a specific private University and feel confident that Computer Science was the ideal degree track for me, which&#xA;Pushed me to attend University to get a Computer Science degree, where I&#xA;  Met my wife at that Univerity,&#xA;  Met lifelong friends (some whom I message with on a daily basis), and which&#xA;  Happened to be the first school in the USA to give out iPhones to all incoming Freshmen, which allowed me to&#xA;Port the Mac game to iOS to kickstart my iOS development career, which&#xA;Funded a full semester of private University using my iOS development skills, allowing me to take out fewer loans [1], and&#xA;Met the USAA recruiters who convinced me to take a &#34;boring&#34; banking job in an exciting nascent iOS development ecosystem before many banks had iPhone apps, where I&#xA;Built a virtual assistant before AI was a cool buzzword, which&#xA;Caused me to outgrow the available opporunities at USAA that challenged me, which led me to leave, and&#xA;Work at Big Nerd Ranch (RIP[2]), famous for their mobile developer consulting skills and educational books that taught many famous developers how to code, where I&#xA;  Learned how to work remotely full time just before the pandemic hit&#xA;  Made lasting friendships with brilliant people&#xA;  Tore apart and re-architected apps for companies like Peloton, Apple, and (ironically), a white-label banking software provider.&#xA;  Learned SwiftUI and other important cutting-edge iOS skills I wasn&#39;t getting to practice at USAA&#xA;  Gain leadership experience (both as a tech lead, and as a manager) which,&#xA;Prompted me to look for Principal Engineering roles, where I&#xA;Joined a team at Stryker and helped build one of the first Apple Vision Pro apps for the medical industry[3].&#xA;&#xA;Cheers to you, 2006 MacBook Pro with the 2GB ram upgrade. I would not be where I am without you.&#xA;&#xA;---&#xA;&#xA;Kiplinger Magazine (Archived Link) ↩︎&#xA;LinkedIn Page for Big Nerd Ranch (Archived Link) ↩︎&#xA;9-to-5 Mac (Archived Link) ↩︎&#xA;&#xA;The author staring the the open screen of Serenity, the Mac Book Pro described in this post.&#xA;&#xA;#technology #history #ios #ai #reminiscing #career]]&gt;</description>
      <content:encoded><![CDATA[<p>It may seem silly to celebrate the anniversary of my first Mac purchase, which I named <a href="https://en.wikipedia.org/wiki/Serenity_(Firefly_vessel)">Serenity</a> (after the Firefly-class vessel from the <a href="https://en.wikipedia.org/wiki/Firefly_(TV_series)">TV show</a> by the same name). But it is not silly, because without that machine which I unboxed 18 years ago today, I would not be who I am.</p>

<p><img src="https://quigs.blog/content/images/2024/03/100_3377-1.JPG" alt="The author as a teen sitting in a chair with the laptop, Serenity, open on his lap."></p>

<p>Without Serenity I would not:</p>
<ul><li>Have made a video game in the-then-Mac-only Unity Game Engine with my best friend (the demo was downloaded over 1 million times), which</li>
<li>Taught me to code in the Apple ecosystem (foreshadowing), which allowed me to</li>
<li>Use that game to impress professors when visiting a specific private University and feel confident that Computer Science was the ideal degree track for me, which</li>
<li>Pushed me to attend University to get a Computer Science degree, where I
<ul><li>Met my wife at that Univerity,</li>
<li>Met lifelong friends (some whom I message with on a daily basis), and which</li>
<li>Happened to be the first school in the USA to give out iPhones to all incoming Freshmen, which allowed me to</li></ul></li>
<li>Port the Mac game to iOS to kickstart my iOS development career, which</li>
<li>Funded a full semester of private University using my iOS development skills, allowing me to take out <a href="https://www.kiplinger.com/article/college/t042-c000-s002-the-right-way-to-borrow-for-college.html#pick-a-repayment-plan-3">fewer loans</a> <a href="#fn1">[1]</a>, and</li>
<li>Met the USAA recruiters who convinced me to take a “boring” banking job in an exciting nascent iOS development ecosystem before many banks had iPhone apps, where I</li>
<li>Built a virtual assistant before AI was a cool buzzword, which</li>
<li>Caused me to outgrow the available opporunities at USAA that challenged me, which led me to leave, and</li>
<li>Work at Big Nerd Ranch (RIP<a href="#fn2">[2]</a>), famous for their mobile developer consulting skills and educational books that taught many famous developers how to code, where I
<ul><li>Learned how to work remotely full time just before the pandemic hit</li>
<li>Made lasting friendships with brilliant people</li>
<li>Tore apart and re-architected apps for companies like Peloton, Apple, and (ironically), a white-label banking software provider.</li>
<li>Learned SwiftUI and other important cutting-edge iOS skills I wasn&#39;t getting to practice at USAA</li>
<li>Gain leadership experience (both as a tech lead, and as a manager) which,</li></ul></li>
<li>Prompted me to look for Principal Engineering roles, where I</li>
<li>Joined a team at Stryker and helped build one of the <a href="https://9to5mac.com/2024/03/11/surgeons-plan-and-visualize-operations/">first Apple Vision Pro apps for the medical industry</a><a href="#fn3">[3]</a>.</li></ul>

<p>Cheers to you, 2006 MacBook Pro with the 2GB ram upgrade. I would not be where I am without you.</p>

<hr>
<ol><li>Kiplinger Magazine <a href="https://web.archive.org/web/20231208223024/https://www.kiplinger.com/article/college/t042-c000-s002-the-right-way-to-borrow-for-college.html#pick-a-repayment-plan-3">(Archived Link)</a> <a href="#fnref1">↩︎</a></li>
<li>LinkedIn Page for Big Nerd Ranch <a href="https://web.archive.org/web/20240315023449/https://www.linkedin.com/company/bignerdranch/">(Archived Link)</a> <a href="#fnref2">↩︎</a></li>
<li>9-to-5 Mac <a href="https://web.archive.org/web/20240312014701/https://9to5mac.com/2024/03/11/surgeons-plan-and-visualize-operations/">(Archived Link)</a> <a href="#fnref3">↩︎</a></li></ol>

<p><img src="https://quigs.blog/content/images/2024/03/Serenity-Mac-OFG-Post-Mortem-Screenshot.jpeg" alt="The author staring the the open screen of Serenity, the Mac Book Pro described in this post."></p>

<p><a href="https://wf.quigs.blog/tag:technology" class="hashtag"><span>#</span><span class="p-category">technology</span></a> <a href="https://wf.quigs.blog/tag:history" class="hashtag"><span>#</span><span class="p-category">history</span></a> <a href="https://wf.quigs.blog/tag:ios" class="hashtag"><span>#</span><span class="p-category">ios</span></a> <a href="https://wf.quigs.blog/tag:ai" class="hashtag"><span>#</span><span class="p-category">ai</span></a> <a href="https://wf.quigs.blog/tag:reminiscing" class="hashtag"><span>#</span><span class="p-category">reminiscing</span></a> <a href="https://wf.quigs.blog/tag:career" class="hashtag"><span>#</span><span class="p-category">career</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/happy-18th-anniversary-serenity</guid>
      <pubDate>Fri, 15 Mar 2024 02:54:31 +0000</pubDate>
    </item>
    <item>
      <title>How to Disable OnStar on the Chevy Bolt to Protect Your Privacy</title>
      <link>https://wf.quigs.blog/how-to-disable-onstar-on-the-chevy-bolt-to-protect-your-privacy</link>
      <description>&lt;![CDATA[  ⚠️ 2026 Update: This method is not 100% perfect. Since writing this post I have occasionally gotten OnStar emails from GM reporting things about the car. Isolating radio signals is hard!&#xA;&#xA;Last year I purchased my first modern connected vehicle. As Mozilla has previously reported, modern vehicles capture (and sell) data about your behavior (how you drive, where you live, where you drive to, what your sexual orientation is). As such, I decided to look into the process of disabling OnStar.&#xA;&#xA;Thanks to Imgur I found a way to (reversibly, not permanently) disable OnStar. In short, because OnStar will still report data back to General Motors and their data brokers even if you don&#39;t pay for OnStar (as best I can tell), the only way to truly protect your privacy is to either live in California where you can request to opt out of data collectin via the California Consumer Privacy Act (CCPA) or disable the OnStar hardware. Given that I don&#39;t live in California, I opted for the latter approach.&#xA;&#xA;My thanks to BiggRanger on Imgur for originally documenting this process. I followed their instructions but still ran into some difficulty so I am re-documenting this with more information about the process.&#xA;&#xA;Step 1&#xA;&#xA;Purchase a FAKRA Z Jack Female to SMA Female adapter and an SMA male 50 ohm terminator. This is what will isolate the OnStar modem from the world. Screw the terminator onto the SMA plug. Ensure that it tightened fully to isolate the Bolt from the cellular radio signals.&#xA;&#xA;FAKRA Z Jack adapter with terminator installed.&#xA;&#xA;Step 2&#xA;&#xA;Gain access to the rear of the center console by removing the glove box. Pop open the glove box and remove the damper from the right side. This required pliers to pinch the clip so that it could slide off and took more sliding force than I expected.&#xA;&#xA;The glove box damper and clip.&#xA;&#xA;Squeeze the sides of the glove box inward so that the plastic stops on each side no longer catch, and the glove box cavity opens up completely.&#xA;&#xA;The glove box catch/stopper.&#xA;&#xA;The glove box cavity.&#xA;&#xA;Step 3&#xA;&#xA;Identify the connector. Shine a flash light into the console and find the purple/violet connector. This is the cellular antenna connector (although this guide is for the Bolt, according the FAKRA chart, Purple/Violet is the industry color code for cellular/GSM so this could work in other vehicles too).&#xA;&#xA;The FAKRA Connector Color Code Chart&#xA;&#xA;The inside of the dash behind the center console from outside the glove box opening.&#xA;&#xA;A closer look at the Purple/Violet FAKRA cellular connector.&#xA;&#xA;The cellular connector was closest to the glove box and pretty easy to spot. I had to reach my hand in pretty far to grab it though.&#xA;&#xA;Reach in there, nothing will bite.&#xA;&#xA;Step 4&#xA;&#xA;Unlock the connector and slide it out. This was the hardest part for me. The original Imgur post made it sound like you &#34;just&#34; take a &#34;small&#34; screwdriver and slide out red locking tab so that you can squeeze the connector and pull it off, but sliding the locking tab out of the way took me over an hour. What is small?  &#xA;  &#xA;Turns out &#34;small&#34; means less than 18cm (5 inches) tall, with a very thin flat edge, 4mm (1/8th inch) wide. The electronics screwdriver set I have pictured below was just a little bit too tall to be effective, so I ended up using some &#34;screwdriver pen&#34; thing my wife had laying around.&#xA;&#xA;This is what &#34;small&#34; means. The screwdriver on the right worked for me.&#xA;&#xA;The other issue that gave me trouble was figuring out how far to slide the lock out. I would move it a little and think it had slid out enough, but realize it wasn&#39;t and have to try to slide it out more. The screwdrive slips on the plastic tab a lot, making this challenging. Finally I noticed that there is a &#34;locked&#34; and an &#34;unlocked&#34; indicator dot on the side of the FAKRA jack. Don&#39;t try to pull the connect off until you see the dot all the way into the unlocked position.&#xA;&#xA;Locked position.&#xA;&#xA;Unlocked position.&#xA;&#xA;Step 5&#xA;&#xA;Slide the isolated/terminated connector on. This was super fast and easy to seat and slide on. I felt it lock into place with a subtle click. I left the original connector to the actual cellular antenna handing off to the side. If you ever want to re-enable OnStar, you slide (no need to unlock!) the isolated connector off and slide the original one back on.&#xA;&#xA;Isolated cellular modem, original connector hanging off to the side.&#xA;&#xA;Step 6&#xA;&#xA;Turn on the car and check for the red light. If you see that it&#39;s red you succeeded. You can test that it actually is isolated by attempting to place a call to OnStar. The system &#34;dials&#34; for me but never connected.&#xA;&#xA;Disabled OnStar&#xA;&#xA;Epilogue&#xA;&#xA;OnStar and My Chevrolet are nice for checking the state of charge and charge rates of your Bolt. I discovered that an OBD2 dongle and a reader/writer app can tell you much of the same info. Most of the apps I tried are geared towards gas/diesel cars and required me to import the PIDs for the Bolt and build a custom dashboard. This is not ideal, so I think I might actually build an iOS app to replace the things in My Chevrolet that I care about.&#xA;&#xA;In order to warm or cool the car without having to get in it, you can use the key fob to remote start it by pressing the lock button briefly and then holding the circle arrow icon button for about 5 seconds. This won&#39;t work from miles away, but then the trade-off is that someone miles away can&#39;t violate your privacy or disable your car.&#xA;&#xA;#hacks #modification #cars #ev #privacy]]&gt;</description>
      <content:encoded><![CDATA[<blockquote><p>⚠️ 2026 Update: This method is not 100% perfect. Since writing this post I have occasionally gotten OnStar emails from GM reporting things about the car. Isolating radio signals is hard!</p></blockquote>

<p>Last year I purchased my first modern connected vehicle. As <a href="https://foundation.mozilla.org/en/privacynotincluded/articles/its-official-cars-are-the-worst-product-category-we-have-ever-reviewed-for-privacy/">Mozilla has previously reported</a>, modern vehicles capture (and sell) data about your behavior (how you drive, where you live, where you drive to, what your sexual orientation is). As such, I decided to look into the process of disabling OnStar.</p>

<p>Thanks to <a href="https://imgur.com/gallery/n00QKnH">Imgur</a> I found a way to (reversibly, not permanently) disable OnStar. In short, because OnStar will still report data back to General Motors and their data brokers even if you don&#39;t pay for OnStar (as best I can tell), the only way to truly protect your privacy is to either live in California where you can request to opt out of data collectin via the <a href="https://oag.ca.gov/privacy/ccpa">California Consumer Privacy Act (CCPA)</a> or disable the OnStar hardware. Given that I don&#39;t live in California, I opted for the latter approach.</p>

<p>My thanks to <a href="https://imgur.com/user/BiggRanger">BiggRanger</a> on Imgur for originally documenting this process. I followed their instructions but still ran into some difficulty so I am re-documenting this with more information about the process.</p>

<h2 id="step-1">Step 1</h2>

<p>Purchase a <a href="https://connectorsupplier.com/meet-the-connector-fakra-connectors/">FAKRA</a> Z Jack Female to SMA Female <a href="https://www.amazon.com/Bingfu-Navigation-Satellite-Telematics-Bluetooth/dp/B07PFLZ4HF?th=1">adapter</a> and an SMA male 50 ohm <a href="https://www.amazon.com/gp/product/B08MXLN9QX/ref=ppx_od_dt_b_asin_title_s00?ie=UTF8&amp;psc=1">terminator</a>. This is what will isolate the OnStar modem from the world. Screw the terminator onto the SMA plug. Ensure that it tightened fully to isolate the Bolt from the cellular radio signals.</p>

<p><img src="https://quigs.blog/content/images/2026/04/IMG_5525-Large.jpeg" alt=""></p>

<p><em>FAKRA Z Jack adapter with terminator installed.</em></p>

<h2 id="step-2">Step 2</h2>

<p>Gain access to the rear of the center console by removing the glove box. Pop open the glove box and remove the damper from the right side. This required pliers to pinch the clip so that it could slide off and took more sliding force than I expected.</p>

<p><img src="https://quigs.blog/content/images/2026/04/IMG_5526-Large.jpeg" alt=""></p>

<p><em>The glove box damper and clip.</em></p>

<p>Squeeze the sides of the glove box inward so that the plastic stops on each side no longer catch, and the glove box cavity opens up completely.</p>

<p><img src="https://quigs.blog/content/images/2026/04/IMG_5528-Large.jpeg" alt=""></p>

<p><em>The glove box catch/stopper.</em>
<img src="https://quigs.blog/content/images/2026/04/IMG_5531-Large.jpeg" alt=""></p>

<p><em>The glove box cavity.</em></p>

<h2 id="step-3">Step 3</h2>

<p>Identify the connector. Shine a flash light into the console and find the purple/violet connector. This is the cellular antenna connector (although this guide is for the Bolt, according the FAKRA chart, Purple/Violet is the industry color code for cellular/GSM so this could work in other vehicles too).</p>

<p><img src="https://quigs.blog/content/images/2026/04/fakra_color_codes.png" alt=""></p>

<p><em>The FAKRA Connector Color Code Chart</em>
<img src="https://quigs.blog/content/images/2026/04/IMG_5532-Large.jpeg" alt=""></p>

<p><em>The inside of the dash behind the center console from outside the glove box opening.</em>
<img src="https://quigs.blog/content/images/2026/04/IMG_5537-Large.jpeg" alt=""></p>

<p><em>A closer look at the Purple/Violet FAKRA cellular connector.</em></p>

<p>The cellular connector was closest to the glove box and pretty easy to spot. I had to reach my hand in pretty far to grab it though.</p>

<p><img src="https://quigs.blog/content/images/2026/04/IMG_5536-Large-2.jpeg" alt=""></p>

<p><em>Reach in there, nothing will bite.</em></p>

<h2 id="step-4">Step 4</h2>

<p>Unlock the connector and slide it out. This was the hardest part for me. The original Imgur post made it sound like you “just” take a “small” screwdriver and slide out red locking tab so that you can squeeze the connector and pull it off, but sliding the locking tab out of the way took me over an hour. What is small?</p>

<p>Turns out “small” means less than 18cm (5 inches) tall, with a very thin flat edge, 4mm (1/8th inch) wide. The electronics screwdriver set I have pictured below was just a little bit too tall to be effective, so I ended up using some “screwdriver pen” thing my wife had laying around.</p>

<p><img src="https://quigs.blog/content/images/2026/04/IMG_5564.jpeg" alt=""></p>

<p><em>This is what “small” means. The screwdriver on the right worked for me.</em></p>

<p>The other issue that gave me trouble was figuring out how far to slide the lock out. I would move it a little and think it had slid out enough, but realize it wasn&#39;t and have to try to slide it out more. The screwdrive slips on the plastic tab a lot, making this challenging. Finally I noticed that there is a “locked” and an “unlocked” indicator dot on the side of the FAKRA jack. Don&#39;t try to pull the connect off until you see the dot all the way into the unlocked position.</p>

<p><img src="https://quigs.blog/content/images/2026/04/IMG_5543-Large-1.jpeg" alt=""></p>

<p><em>Locked position.</em>
<img src="https://quigs.blog/content/images/2026/04/IMG_5548-Large.jpeg" alt=""></p>

<p><em>Unlocked position.</em></p>

<h2 id="step-5">Step 5</h2>

<p>Slide the isolated/terminated connector on. This was super fast and easy to seat and slide on. I felt it lock into place with a subtle click. I left the original connector to the actual cellular antenna handing off to the side. If you ever want to re-enable OnStar, you slide (no need to unlock!) the isolated connector off and slide the original one back on.</p>

<p><img src="https://quigs.blog/content/images/2026/04/IMG_5555-Large-2.jpeg" alt=""></p>

<p><em>Isolated cellular modem, original connector hanging off to the side.</em></p>

<h2 id="step-6">Step 6</h2>

<p>Turn on the car and check for the red light. If you see that it&#39;s red you succeeded. You can test that it actually is isolated by attempting to place a call to OnStar. The system “dials” for me but never connected.</p>

<p><img src="https://quigs.blog/content/images/2026/04/IMG_5556-Large-1.jpeg" alt=""></p>

<p><em>Disabled OnStar</em></p>

<h2 id="epilogue">Epilogue</h2>

<p>OnStar and My Chevrolet are nice for checking the state of charge and charge rates of your Bolt. I discovered that an OBD2 dongle and a reader/writer app can tell you much of the same info. Most of the apps I tried are geared towards gas/diesel cars and required me to import <a href="https://allev.info/boltpids/">the PIDs for the Bolt</a> and build a custom dashboard. This is not ideal, so I think I might actually build an iOS app to replace the things in My Chevrolet that I care about.</p>

<p>In order to warm or cool the car without having to get in it, you can use the key fob to remote start it by pressing the lock button briefly and then holding the circle arrow icon button for about 5 seconds. This won&#39;t work from miles away, but then the trade-off is that someone miles away can&#39;t violate your privacy or disable your car.</p>

<p><a href="https://wf.quigs.blog/tag:hacks" class="hashtag"><span>#</span><span class="p-category">hacks</span></a> <a href="https://wf.quigs.blog/tag:modification" class="hashtag"><span>#</span><span class="p-category">modification</span></a> <a href="https://wf.quigs.blog/tag:cars" class="hashtag"><span>#</span><span class="p-category">cars</span></a> <a href="https://wf.quigs.blog/tag:ev" class="hashtag"><span>#</span><span class="p-category">ev</span></a> <a href="https://wf.quigs.blog/tag:privacy" class="hashtag"><span>#</span><span class="p-category">privacy</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/how-to-disable-onstar-on-the-chevy-bolt-to-protect-your-privacy</guid>
      <pubDate>Tue, 05 Mar 2024 01:48:29 +0000</pubDate>
    </item>
    <item>
      <title>How to write a custom CoreData NSMergePolicy</title>
      <link>https://wf.quigs.blog/how-to-write-a-custom-coredata-nsmergepolicy</link>
      <description>&lt;![CDATA[Documenting Apple&#39;s undocumented and unclear code.&#xA;&#xA;Last month I encountered my first need for a custom CoreData merge policy and turned to the Apple documentation for guidance. There wasn&#39;t much. I had a unique constraint on an id field and I wanted to overwrite the database values for conflicts with non-nil fields from the incoming change without overwriting the existing record&#39;s information if the incoming change were nil.&#xA;&#xA;For example, if I made a GraphQL query that did not include some field (say a binary blob or something expensive to fetch), but the local copy of the CoreData model representing the GraphQL model already had that field from a previous (and different) call, I did not want to overwrite the already-stored-expensive-data field with nil.&#xA;&#xA;This was the perfect use case for a custom NSMergePolicy. I inferred from Apple&#39;s minimal non-existent documentation that I had to override resolve(constraintConflictslist: [NSConstraintConflict]) throws and immediately everything started to fall apart on me once the merge policy was executed: error: fatal: Unable to recover from optimistic locking failure.&#xA;&#xA;This is what my resolver override looked like:&#xA;&#xA;public override func resolve(constraintConflicts list: [NSConstraintConflict]) throws {&#xA;        for conflict in list {&#xA;            guard let databaseObject = conflict.databaseObject,&#xA;                let conflictingObject = conflict.conflictingObjects.first else {&#xA;                try super.resolve(constraintConflicts: list)&#xA;                return&#xA;            }&#xA;            &#xA;            // .propertiesByName handles both fields and relationships&#xA;            for key in databaseObject.entity.propertiesByName.keys {&#xA;                if conflictingObject.value(forKey: key) == nil {&#xA;                    // Inflate value from databaseObject as it may not have been inflated from the incoming change.&#xA;                    conflictingObject.setValue(databaseObject.value(forKey: key),&#xA;                                               forKey: key)&#xA;                }&#xA;            }&#xA;        }&#xA; }&#xA;&#xA;My resolver implementation behaved as I expected in the debugger. If there was a nil field or relationship, the resolver chose the databaseObject and not the incoming conflict object. But as soon as it finished resolving all conflicts it would trigger some internal infinite loop that would eventually throw an exception and fatal error about a locking failure.&#xA;&#xA;There is no documentation anywhere that I could find on Apple&#39;s site about this method or that error. Clearly I was doing something wrong but the official documentation looks like this and was not going to be of any help:&#xA;&#xA;A screenshot of the empty documentation page for the resolve(constraintsConflicts:) method.&#xA;&#xA;That is all Apple provides. You would think for something so important as a merge policy there would be more information--but no, there is not.&#xA;&#xA;After much fruitless web searching, I stumbled upon a YouTube video by Adar Hefer that was published a year ago. Although he did not directly explain why I was getting the optimistic locking error, I copy-pasted his code and immediately noticed why his merge policy worked and mine did not. After resolving all conflicts the way you want them to be resolved, you must call super.resolve(constraintConflicts: list). Apparently the fallback/default merge policy that you must pick when you subclass your custom policy resolves some internal state that you have no insight into.&#xA;&#xA;I was concerned that calling super would overwrite my custom merge with the default implementation, but it does not. The super call appears to respect any changes you have made. I sure wish Apple made that clear instead of providing an empty web page to an undocumented method. It would have saved me several hours of wasted time.&#xA;&#xA;Here&#39;s the full code to a working policy that you&#39;re welcome to use. I&#39;m releasing it under public domain so that yes, even you, ChatGPT and GitHub co-pilot can use it correctly.&#xA;&#xA;public class MergeNonNilPolicy: NSMergePolicy {&#xA;    /// Uses the `NSMergePolicyType.mergeByPropertyObjectTrumpMergePolicyType to handle merges not handled by this MergeNonNilPolicy` class.&#xA;    public init() {&#xA;        super.init(merge: .mergeByPropertyObjectTrumpMergePolicyType)&#xA;    }&#xA;    &#xA;    public override func resolve(constraintConflicts list: [NSConstraintConflict]) throws {&#xA;        for conflict in list {&#xA;            guard let databaseObject = conflict.databaseObject,&#xA;                let conflictingObject = conflict.conflictingObjects.first else {&#xA;                try super.resolve(constraintConflicts: list)&#xA;                return&#xA;            }&#xA;            &#xA;            // .propertiesByName handles both fields and relationships&#xA;            for key in databaseObject.entity.propertiesByName.keys {&#xA;                if conflictingObject.value(forKey: key) == nil {&#xA;                    // Inflate value from databaseObject as it may not have been inflated from the incoming change.&#xA;                    conflictingObject.setValue(databaseObject.value(forKey: key),&#xA;                                               forKey: key)&#xA;                }&#xA;            }&#xA;        }&#xA;        &#xA;        try super.resolve(constraintConflicts: list)&#xA;    }&#xA;}&#xA;&#xA;#apple #programming #swift #ios #developer #coredata #solution #codeexample #database #documentation #youtube #coding]]&gt;</description>
      <content:encoded><![CDATA[<p>Documenting Apple&#39;s undocumented and unclear code.</p>

<p>Last month I encountered my first need for a custom CoreData merge policy and turned to the Apple documentation for guidance. There wasn&#39;t much. I had a unique constraint on an <code>id</code> field and I wanted to overwrite the database values for conflicts with non-nil fields from the incoming change without overwriting the existing record&#39;s information if the incoming change were nil.</p>

<p>For example, if I made a GraphQL query that did not include some field (say a binary blob or something expensive to fetch), but the local copy of the CoreData model representing the GraphQL model already had that field from a previous (and different) call, I did <em>not</em> want to overwrite the already-stored-expensive-data field with nil.</p>

<p>This was the perfect use case for a custom <code>NSMergePolicy</code>. I inferred from Apple&#39;s <del>minimal</del> non-existent documentation that I had to override <code>resolve(constraintConflictslist: [NSConstraintConflict]) throws</code> and immediately everything started to fall apart on me once the merge policy was executed: <code>error: fatal: Unable to recover from optimistic locking failure.</code></p>

<p>This is what my resolver override looked like:</p>

<pre><code class="language-swift">public override func resolve(constraintConflicts list: [NSConstraintConflict]) throws {
        for conflict in list {
            guard let databaseObject = conflict.databaseObject,
                let conflictingObject = conflict.conflictingObjects.first else {
                try super.resolve(constraintConflicts: list)
                return
            }
            
            // .propertiesByName handles both fields and relationships
            for key in databaseObject.entity.propertiesByName.keys {
                if conflictingObject.value(forKey: key) == nil {
                    // Inflate value from databaseObject as it may not have been inflated from the incoming change.
                    conflictingObject.setValue(databaseObject.value(forKey: key),
                                               forKey: key)
                }
            }
        }
 }
</code></pre>

<p>My resolver implementation behaved as I expected in the debugger. If there was a nil field or relationship, the resolver chose the <code>databaseObject</code> and not the incoming <code>conflict</code> object. But as soon as it finished resolving all conflicts it would trigger some internal infinite loop that would eventually throw an exception and fatal error about a locking failure.</p>

<p>There is <em>no</em> documentation anywhere that I could find on Apple&#39;s site about this method or that error. Clearly I was doing something wrong but the official documentation looks like this and was not going to be of any help:</p>

<p><img src="https://quigs.blog/content/images/2023/09/Screenshot-2023-09-04-at-11.38.02.png" alt="A screenshot of the empty documentation page for the resolve(constraintsConflicts:) method."></p>

<p>That is all Apple provides. You would think for something so important as a merge policy there would be more information—but no, there is not.</p>

<p>After much fruitless web searching, I stumbled upon a <a href="https://www.youtube.com/watch?v=EJdzTJX7AJo&amp;pp=ygUNbnNtZXJnZXBvbGljeQ">YouTube video by Adar Hefer</a> that was published a year ago. Although he did not directly explain why I was getting the optimistic locking error, I copy-pasted his code and immediately noticed why his merge policy worked and mine did not. After resolving all conflicts the way you want them to be resolved, you <em>must</em> call <code>super.resolve(constraintConflicts: list)</code>. Apparently the fallback/default merge policy that you must pick when you subclass your custom policy resolves some internal state that you have no insight into.</p>

<p>I was concerned that calling super would overwrite my custom merge with the default implementation, but it does not. The super call appears to respect any changes you have made. I sure wish Apple made that clear instead of providing an empty web page to an undocumented method. It would have saved me several hours of wasted time.</p>

<p>Here&#39;s the full code to a working policy that you&#39;re welcome to use. I&#39;m releasing it under public domain so that yes, even you, ChatGPT and GitHub co-pilot can use it <em>correctly</em>.</p>

<pre><code class="language-swift">public class MergeNonNilPolicy: NSMergePolicy {
    /// Uses the ``NSMergePolicyType.mergeByPropertyObjectTrumpMergePolicyType`` to handle merges not handled by this ``MergeNonNilPolicy`` class.
    public init() {
        super.init(merge: .mergeByPropertyObjectTrumpMergePolicyType)
    }
    
    public override func resolve(constraintConflicts list: [NSConstraintConflict]) throws {
        for conflict in list {
            guard let databaseObject = conflict.databaseObject,
                let conflictingObject = conflict.conflictingObjects.first else {
                try super.resolve(constraintConflicts: list)
                return
            }
            
            // .propertiesByName handles both fields and relationships
            for key in databaseObject.entity.propertiesByName.keys {
                if conflictingObject.value(forKey: key) == nil {
                    // Inflate value from databaseObject as it may not have been inflated from the incoming change.
                    conflictingObject.setValue(databaseObject.value(forKey: key),
                                               forKey: key)
                }
            }
        }
        
        try super.resolve(constraintConflicts: list)
    }
}
</code></pre>

<p><a href="https://wf.quigs.blog/tag:apple" class="hashtag"><span>#</span><span class="p-category">apple</span></a> <a href="https://wf.quigs.blog/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://wf.quigs.blog/tag:swift" class="hashtag"><span>#</span><span class="p-category">swift</span></a> <a href="https://wf.quigs.blog/tag:ios" class="hashtag"><span>#</span><span class="p-category">ios</span></a> <a href="https://wf.quigs.blog/tag:developer" class="hashtag"><span>#</span><span class="p-category">developer</span></a> <a href="https://wf.quigs.blog/tag:coredata" class="hashtag"><span>#</span><span class="p-category">coredata</span></a> <a href="https://wf.quigs.blog/tag:solution" class="hashtag"><span>#</span><span class="p-category">solution</span></a> <a href="https://wf.quigs.blog/tag:codeexample" class="hashtag"><span>#</span><span class="p-category">codeexample</span></a> <a href="https://wf.quigs.blog/tag:database" class="hashtag"><span>#</span><span class="p-category">database</span></a> <a href="https://wf.quigs.blog/tag:documentation" class="hashtag"><span>#</span><span class="p-category">documentation</span></a> <a href="https://wf.quigs.blog/tag:youtube" class="hashtag"><span>#</span><span class="p-category">youtube</span></a> <a href="https://wf.quigs.blog/tag:coding" class="hashtag"><span>#</span><span class="p-category">coding</span></a></p>
]]></content:encoded>
      <guid>https://wf.quigs.blog/how-to-write-a-custom-coredata-nsmergepolicy</guid>
      <pubDate>Mon, 04 Sep 2023 16:15:45 +0000</pubDate>
    </item>
  </channel>
</rss>