<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
    <title>John Haney</title>
    <link>https://johnhaney.com/</link>
    <atom:link href="https://johnhaney.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Personal site of John Haney — apps, code, writing, and a few hobbies.</description>
    <language>en-us</language>
    <lastBuildDate>Wed, 13 May 2026 00:00:00 +0000</lastBuildDate>
        <item>
        <title>WWDC26 Wish List</title>
        <link>https://johnhaney.com/blog/wwdc26-wish-list/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/wwdc26-wish-list/</guid>
        <pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate>
                <description>My wish list heading into WWDC26 — what I&#039;d like to see in visionOS, RealityKit, and Reality Composer Pro for the year ahead.</description>
                <content:encoded><![CDATA[<p>WWDC is the main event of my developer year. As has become tradition, here's my wishlist. We'll find out on June 8, 2026 when Apple previews updates for all the things (iOS, visionOS, macOS, tvOS, and watchOS) to 27.</p>
<h2>visionOS</h2>
<ul>
<li><strong>Full Liquid Glass</strong> Make it easier to write cross-platform apps by using glassEffect everywhere.</li>
<li><strong>A Camera in RealityView</strong> I would love to be able to add a camera within a RealityView and be able to record or render that view elsewhere. As a source for a PortalComponent could also be very interesting.</li>
<li><strong>ARKit body detection of the wearer</strong> having more of the skeleton of the visionOS user would unlock a lot of exciting game and health use cases</li>
<li><strong>Widgets in environments</strong> I want to leave a widget in a specific place on the Moon, or on the surface of Haleakalā, and have it still be there next time I'm in that environment.</li>
<li><strong>Even more flexible widget placement and window pinning</strong> I have objects on my walls that interfere with widgets, and I'd like to use any spot along that wall regardless of what's physically there. One idea: if I shake the widget a lot, or hold it in place long enough, it breaks through the restrictions and gives me a more custom positioning that reflects the wall itself instead of the room scan.</li>
<li><strong>Shared coordinate spaces between iOS and visionOS</strong> We have shared in-person experiences for visionOS to visionOS, and for iOS to iOS, but not crossing that bridge. I have a lot of app ideas that would be unlocked with this, which is why I've been working to get this going manually, but I would love to get native support in iOS 27 and visionOS 27.</li>
<li><strong>visionOS and tvOS more automatic media synchronization</strong> I'd like to start watching something on the TV and in Vision Pro at the same time, with playback controls synced automatically.</li>
<li><strong>AirPlay by gesture</strong> Perhaps some gestures to point at a device in space to start casting to it.</li>
<li><strong>Spatial templates and SharePlay for more than five participants</strong> I want to add "flat" FaceTime participants from iOS, macOS or the web to an immersive template and give them spatial positions in the scene, instead of grouping them on the shared canvas. Literally let me place people around a virtual table, whether they're Spatial Personas or flat video heads.</li>
<li><strong>ARKit information from immersive scenes</strong> Let me place virtual content in the user's selected immersive space as if it were a real space they're standing in — the contours of the volcano, the craters and rocks on the Moon.</li>
<li><strong>Render and interact with a captured space</strong> Gaussian Splats perhaps — with an associated mesh exposed as ARKit anchors so I can treat it like a real space for placement and physics.</li>
<li><strong>"Leave behind" objects into the shared space</strong> I want to offer that a user can take elements out of my apps and set them on a table, a bookshelf, wherever, where they remain interactive as new windows of my app in the shared space. Think of this like tear off toolbars from the Mac. I want to be able to "pin" something from my mixed immersive experience to the real world and have it stay in the Shared Space when I leave.</li>
</ul>
<h2>RealityKit</h2>
<ul>
<li><strong>More pre-made assets</strong> — objects, textures, sounds, everything. Please bring the models from the old Reality Composer app to current USD and more.</li>
<li><strong>More lights, and more lighting options</strong> More lights at one time in a RealityView scene, and more lighting effects. I'd love to be able to have light masks so they cast unique patterns, animate them, and more.</li>
<li><strong>Live previewing of Components and Systems inside Reality Composer Pro</strong> Let me test and run my Systems in the same preview environment where I'm authoring the scene.</li>
<li><strong>Precise camera control</strong> - I would like to be able to specifically position the camera and its focal properties in RealityView.</li>
<li><strong>Immersive on iOS and macOS</strong> - I would like some equivalent to Immersive Spaces on iOS and macOS. To go full screen into a 3D view, treating the screen as a portal you are looking thru could be a really compelling way to bring visionOS experiences on iOS and macOS.</li>
</ul>
<h2>Reality Composer Pro</h2>
<ul>
<li><strong>Dramatically faster compile times</strong> Builds come to a long stall compiling rkassets. Any performance improvements here would be very welcome.</li>
<li><strong>Baked lighting</strong> If I could mark lights or objects as static in an RCP scene and have that lighting baked into the textures at save/load time, scenes would look dramatically better with no extra runtime cost</li>
</ul>
<h2>Foundation Models Framework and CoreAI</h2>
<ul>
<li>I would like to see some built-in tools to connect to Foundation Models Framework that provide access to information and context about the user (with their permission of course), to make for more capable and interesting combinations of personalized reasoning for users.</li>
<li>There is a lot more to explore with on-device reasoning and I'm really excited to see where things expand beyond Foundation Models Framework.</li>
<li>I've seen rumors of a CoreAI SDK, and would be excited to see what additional tools Apple might bring to provide developers with more powerful reasoning.</li>
</ul>
<h2>MapKit</h2>
<ul>
<li><strong>Camera control with 3D and street level views</strong> - I want to be able to animate a camera moving along a street with the street-level perspective and views. Imagine a leisurely walk down a street on any device.</li>
</ul>
<h2>ARKit</h2>
<ul>
<li><strong>Cross-platform</strong> I want more aligned sensor data between iOS and visionOS</li>
<li><strong>Multiple body detection</strong> I would like to be able to detect and track multiple figures and body skeletons and get 3D positioning for all of them. Bonus if this uses the ultra-wide camera</li>
</ul>
<h2>Miscellany</h2>
<ul>
<li><strong>Gaussian Splat SDK</strong> My dream would be a full SDK with tools for creating / editing / combining splats into RealityView scenes. </li>
</ul>
<p>That's the list. Some of it is incremental, some of it is a big stretch, and hopefully at least one or two items will show up in June.</p>]]></content:encoded>
    </item>
        <item>
        <title>My first iPhone app was a web app</title>
        <link>https://johnhaney.com/blog/cintos-mobile-first-iphone-app/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/cintos-mobile-first-iphone-app/</guid>
        <pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate>
                <description>Cintos Mobile, the iPhone web app I built before the App Store existed, is restored and live again at /cintosmobile/.</description>
                <content:encoded><![CDATA[<p>I just put <strong><a href="/cintosmobile/">Cintos Mobile</a></strong> back online — pulled from the
Internet Archive, restored to the same URL it lived at almost twenty years ago,
and playable in your browser right now.</p>
<p>With the recent 50th anniversary for Apple, I've been reflecting back a lot,
and Cintos Mobile was my first ever iPhone app. I'm glad it's around again.</p>
<h2>Before the App Store, the iPhone shipped with no SDK</h2>
<p>The first iPhone came out in June 2007. There was no App Store. There was no
native SDK for third-party developers. If you wanted to build "an app" for the
iPhone, the official answer from Apple was: build a web app.</p>
<p>At WWDC 2007, Steve Jobs framed it pretty directly: developers should build
for the iPhone using Web 2.0 and AJAX. The pitch was that those web apps could
look and behave like the native ones, integrate with iPhone services like Mail
and Maps, and ship without an SDK at all — your existing browser-side skills
were everything you needed.</p>
<p>That was the official path. So that was the path I took.</p>
<p>The App Store wouldn't be announced until March 2008 (with iPhone OS 2.0 and a
real native SDK), and wouldn't open to the public until July 10, 2008. In that
roughly year-long window, "iPhone apps" meant Safari + viewport meta tag + a lot
of <code>-webkit-</code> CSS.</p>
<h2>Cintos Mobile</h2>
<p>Cintos was a "board game" I made first for the Mac, and I used it as a way to
practice as I explored other languages or platforms. I had made a Java version
and had toyed with a Windows version too. It scaled well to the iPhone screen
with the 8×8 board across the 320×480 screen. The whole thing is HTML,
JavaScript, and a few PNG files.</p>
<p>If you want to play right now: <strong><a href="/cintosmobile/">/cintosmobile/</a></strong>.</p>
<p>I tried out the web app at my nearest Apple Store once it was online, and made
a few trips back until it was working right.</p>
<p>A few details from the source that look very much of-their-time:</p>
<pre><code class="language-html">&lt;meta name="viewport" id="iphone-viewport"
      content="width=320, user-scalable=no" /&gt;</code></pre>
<p><code>width=320</code> because the iPhone's screen was 320 points wide.
<code>user-scalable=no</code> to prevent pinch to zoom from messing up the view.</p>
<pre><code class="language-html">&lt;style type="text/css" title="AppleStyle"&gt;
    @import "cintosmobile.css";
&lt;/style&gt;</code></pre>
<p><code>title="AppleStyle"</code> because I started from some Apple code.</p>
<h2>After the App Store</h2>
<p>When Apple announced the App Store and the native SDK, I applied as soon as I
could and was accepted into the iPhone Developer Program early. My first <em>App
Store</em> app was <a href="/blog/flashlight-20/">Flashlight</a>, which ended up being
downloaded over 100 million times.</p>
<h2>A note on the restoration</h2>
<p>The HTML, JS, and CSS are pulled directly from the Internet Archive's Wayback
Machine — specifically from a January 2009 snapshot, with a few small edits:
the "back to website" button now points at this site rather than the old one,
and three game piece PNGs (<code>piece0.png</code>, <code>piece1.png</code>, <code>piece2.png</code>) had been
lost from the archive entirely, so I drew new ones at the original 32×32
dimensions to make the board playable again.</p>
<p>Other than that — same code, same layout, same year-2007 web-app energy.
:-)</p>]]></content:encoded>
    </item>
        <item>
        <title>MacBook Neo and developing for Apple Vision Pro (visionOS)</title>
        <link>https://johnhaney.com/blog/macbook-neo-and-developing-for-apple/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/macbook-neo-and-developing-for-apple/</guid>
        <pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>I ordered a MacBook Neo for my kids and set up the latest Xcode beta to try out the developer experience for visionOS on this new machine.</p>
<p>Here are my basic results compiling a template project for visionOS which includes an Immersive Scene:</p>
<p>All of these tests were using Xcode 26.4 beta 3<table border="2"></p>
<tbody>
    <tr><th>Device</th><th>Mac Virtual Display</th><th>Compile Time (seconds)</th></tr>
  <tr><td>MacBook M4 Air</td><td>No</td><td>22.5</td></tr>
  <tr><td>MacBook Pro M1 Max</td><td>No</td><td>26</td></tr>
  <tr><td>MacBook Neo</td><td>No</td><td>157.5</td></tr>
  <tr><td>MacBook Neo</td><td>Yes</td><td>372.5</td></tr>
</tbody></table>  
I would say the MacBook Neo does a fine job for everything, and if this is your first Mac. At $499 for education, I'm very pleased that this can handle running the visionOS simulator and everything else.  
Happy coding!]]></content:encoded>
    </item>
        <item>
        <title>Manipulation on visionOS</title>
        <link>https://johnhaney.com/blog/manipulation-on-visionos/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/manipulation-on-visionos/</guid>
        <pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>Of all the great things introduced at WWDC25 this year, ManipulationComponent and the manipulable() SwiftUI modifier are really great. These provide some rather natural interactions with objects with <strike>one line</strike> very little code.</p>
<p>I just published an open-source sample visionOS app, <a href="https://github.com/johnhaney/manipulatives/tree/main">Manipulatives</a>, which demonstrates the basics of this. My approach is to group everything I want to become manipulable as a child of one Entity with a specific name. Then I can search for that parent Entity, and loop thru all of its children adding ManipulationComponent. This would, of course, be even simpler if the ManipulationComponent were available directly form within Reality Composer Pro (Feel free to file a Feedback and reference my FB17979086).</p>
<p>With ManipulationComponent and Entity Observables, I see this as a great combination to tracking how users are moving entities around. I’m excited to put this into action and look at ways to turn user’s manipulations of Entities into dynamic behaviors and actions in my apps’ scenes.</p>]]></content:encoded>
    </item>
        <item>
        <title>WWDC25 Wish List</title>
        <link>https://johnhaney.com/blog/wwdc25-wish-list/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/wwdc25-wish-list/</guid>
        <pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>&nbsp;Since I make apps for Apple's platforms, WWDC is the main event of my whole year. The developer conference is a time where Apple announces plans for the next major versions of visionOS, iOS, macOS, tvOS, and watchOS.</p>
<p>Sometimes we get major new announcements, like visionOS and the Apple Vision Pro at WWDC23.</p>
<p>I have <a href="https://apps.apple.com/us/app/cone-of-shame/id6466742380">been</a> <a href="https://apps.apple.com/us/app/timecube-spatial-clock/id6475053578">making</a> <a href="https://apps.apple.com/us/app/graph-grid/id6478813106">apps</a> for visionOS ever since and I’m really excited about where this platform is heading.</p>
<h2>My wishlist for visionOS</h2>
<ul>
<li>Supercharge the Shared Space<ul class="ul1">- I want apps to be able to leverage knowledge of the users hands when they are inside a volume in the shared space. Think of making a drum set app where you can position each drum as a volume just where you want it, and then play in the shared space while you have your music up in another app, and maybe be recording in GarageBand in another window<ul class="ul1" style="list-style-type: circle;">- FB16447897 (visionOS Hand Anchoring Component in Shared Space (Volumetric Windows))<li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">As a developer, I want to offer “pinning” hints to visionOS. I want to be able to suggest that this window could be pinned to a table of minimum width/depth or to a wall or next to a TV, …</li><li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">I want to allow ARKit sessions to run within the overlap of my volumetric windows in the shared space. Let me “see” the mesh or table or wall that the volume overlaps with. Let me see the relative position of my open windows / volumes in the shared space. With this, I could make an app where you place a volume in opposite corners of a room and get the dimensions quickly.</li><li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">As a user, I want to make a mapping of my home and name the rooms, ideally maybe even those are picked up and/or synced with HomeKit. Then allow me to share that with developers in a privacy preserving way so that I can configure apps to work differently in different rooms as I move around.</li><li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">I’d like to be able to pin multiple instances of an app to different rooms and have the app available to me when I am in the room, and dismissed when I leave the room</li></ul><li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">Native development tools on visionOS - Reality Composer Pro, Xcode, Swift Playgrounds</li><li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">Shared in-person sessions where each visionOS device has a common anchored position for content. To interact in a mixed immersive space with others would unlock some great experiences</li><li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">Shared in-person sessions between visionOS, iOS, macOS. With RealityView on all of these platforms, having a common coordinate space would again unlock some powerful interactions</li><li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">Spatial Templates for any number of participants (visionOS or not). I want to be able to provide “seat” assignments to everyone whether they are sharing a Spatial Persona or not, and whether they are even on a visionOS device or not. This would allow me to place people at “tables” for a conference session, or give proper assignments for a game night</li><li class="li1" style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;">TabletopKit for iOS and macOS also. Extending this framework to any platform that has RealityView support seems natural to me.</li>
</li>
<li>FB13873238 (TabletopKit support for iOS, iPadOS, macOS, tvOS)</ul>
</li>
</ul>
<h2>One more thing…</h2>
<p>I’d like to give my aspirations for where I hope Apple might be headed. I’m sure that I’m wrong, but I want to put out there what I would like to see and cast my own view of the future out there.</p>
<p>The next big evolution I see is around Spatial Computing. I want to see Apple combine the awareness of where I am in space (Center Stage) to turn the flat displays of iPhone, iPad, Mac, AppleTV into portals into immersive spaces. If I use my iPhone with an AppleTV I should be able to use Continuity Camera to enable this same tracking on a big TV.</p>
<p>With a full awareness of my position relative to the display, the display now becomes a view in space that I can move my head around to explore and watch it respond in real time.</p>
<p>Maybe I can use an Apple Pencil Pro to poke into the space for more precise selection.</p>
<p>Then I want a truly Spatial Home Screen and work environment. When I open my MacBook at my office desk, my work environment is ready for me, with slack tucked away to the side. I can “look around the corner” to pull out the music mini player and manage other glanceable tasks.</p>]]></content:encoded>
    </item>
        <item>
        <title>Happy Saint Patrick&#039;s Day</title>
        <link>https://johnhaney.com/blog/happy-saint-patricks-day/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/happy-saint-patricks-day/</guid>
        <pubDate>Thu, 17 Mar 2016 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>On this day of many things green, I'd like to offer this Xcode theme that I have been using for a few months, <a href="http://johnhaney.com/xcode/Mulder.dvtcolortheme.zip">Mulder</a>. It's quite green to celebrate Season 10 of The X-Files.</p>
<p>Here's what it looks like in action:</p>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPjXWsB07U71HFSvMrMd_7yYZlgizvjJWQ-M5nG7kThKZleWkd9PynsCovh2vnalZxUo27ts1fCJ8vSswQj464Do4IoCwX-8KLFHIcHHgtm0kunaX79WwkIaX6iDqnE4fiWA89JQFp-vo/s1600/Screen+Shot+2016-03-17+at+6.49.30+AM.png"><img src="/assets/blog/happy-saint-patricks-day/5d488052.png" alt="" /></a>
Xcode keeps themes in a folder: ~/Library/Developer/Xcode/UserData/FontAndColorThemes so here are my recommended steps to add this theme to your Xcode:</p>
<ol>
<li>
<p>Open Xcode  </p>
</li>
<li>
<p>Choose Xcode &gt; Preferences  </p>
</li>
<li>
<p>Choose Fonts &amp; Colors  </p>
</li>
<li>
<p>Press the + button in the bottom left corner and make a new theme named "Mulder"  </p>
</li>
<li>
<p>Quit Xcode  </p>
</li>
<li>
<p>Copy the downloaded Mulder.dvtcolortheme file to ~/Library/Developer/Xcode/UserData/FontAndColorThemes/.  </p>
</li>
<li>
<p>Open Xcode and enjoy a greener coding experience. :-)</p>
</li>
</ol>]]></content:encoded>
    </item>
        <item>
        <title>Lucky 13</title>
        <link>https://johnhaney.com/blog/lucky-13/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/lucky-13/</guid>
        <pubDate>Tue, 13 Oct 2015 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>On Sunday October 13, 2002, my fiancée and I were long distance. She was finishing up her college degree and I was working in Chicagoland. We had attended a wedding this particular weekend, and had driven back to college on my way back to my apartment. I was driving on a two-lane Missouri highway, listening to music and driving without cruise control for some reason. I usually would set my cruise control for a bit over the speed limit where I might manage to avoid attention from police yet this particular day I was going without it, and as a result was traveling a bit slower that I would have normally.</p>
<p>Suddenly, a fox appeared in front of my car on the left-hand side. I swerved the car to the right off the edge of the pavement with right-side tires onto the gravel shoulder, and turned back to return to the road. The car started skidding with the rear moving to the right. I recalled some old driving test television shows I watched in my early teenage years and knew I was supposed to take my foot off the gas and turn into the skid, and to be careful not to overcorrect. I took my foot off the gas, I turned into the skid -- too much. The car continued skidding, this time off to the right-side of the road. I saw an overpass ahead around the corner. I saw a car coming from the other direction. Then I saw grass as the car turned toward the rising hill off the side of the highway and my car skidded further off the edge of the road. I didn't really have time to even process it, but I was glad to be moving away from that car.</p>
<p>The next thing I knew the car was upside down. I was suspended by my seatbelt and didn't want to be like that. I put a hand on the roof of the car to brace myself as I unbuckled and rolled myself out of the car. My door opened perfectly, the window still whole in fact. The windshield had shattered. Every other window was shattered. The car was upside down, over the guardrail it had just smashed thru. It wasn't until I got the police report and saw the officer's sketch that I realized how exactly the car got to that position.  The driver's side door behind me was demolished. I can't imagine any person sitting in that seat surviving the crash. I was a foot away from that. Had I been driving a bit faster, it's just as likely that I would've hit the guardrail at my door instead of the empty one behind me.</p>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRYPOU-FiogbjgX3Ztw9L7mP4VsiUXBKThCZaMKOMWoCHdq0xyM9S1RZH-Wci0TFqDIWr0SAiyZFxfFuNl6jr2h4Z-nMme8vNn8h_MR-J8ZSUV0XjxMAMEtNYNr7lvQ0WtO1Nu2iD4AL4/s1600/2002-10-13-PoliceReport.png"><img src="/assets/blog/lucky-13/14cb90d4.png" alt="" /></a></p>
<p>I was impressed and grateful for all of the people who stopped and helped to call 911. I'm especially thankful for the police officer who found my phone and glasses among the belongings that had flown around in the wreck.</p>
<p>A colleague of mine told me about a belief in China that surviving an experience like this one meant I was marked for something great. I've keep considering this. I want my life to be worthy of this gift. This borrowed time that I'm living on since that day. My family is the legacy I care most about, and I cannot be prouder of what Katie and I have grown. All of our children are so smart, kind, playful, and empathetic.</p>
<p>I was fortunate enough to be one of the first developers to make apps on the App Store, and my Flashlight app has been used by millions of people. That's still so surreal for me to think about, and I'm so thankful for the opportunity to share my work with so many people.</p>
<p>I've had 13 years since this crash, and I've thankfully been able to do longer road trips without thinking about this. Some things certainly fade with time. My wife's birthday is November 13th. My daughter's ultrasound was on Friday the 13th.</p>
<p>13 is my lucky number.</p>]]></content:encoded>
    </item>
        <item>
        <title>PixelPop Festival 2015</title>
        <link>https://johnhaney.com/blog/pixelpop-festival-2015/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/pixelpop-festival-2015/</guid>
        <pubDate>Sun, 13 Sep 2015 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>I want to thank everyone involved with PixelPop Festival this year. I was delighted to have an opportunity to show my games and show an preview of my new game, Stacker. It's truly heartwarming to get to see people experiencing my creations for the first time and I got so much great feedback and so many great ideas to add.  I'm putting <a href="https://itunes.apple.com/us/developer/apps-from-outer-space-llc/id673290835">my iOS games</a> on sale for $0.99 this week until September 20th.  </p>
<p>Thanks again!  Now it's time to get a little rest…  :-)</p>]]></content:encoded>
    </item>
        <item>
        <title>A Talk about ViewControllers</title>
        <link>https://johnhaney.com/blog/a-talk-about-viewcontrollers/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/a-talk-about-viewcontrollers/</guid>
        <pubDate>Wed, 12 Sep 2012 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>This July, I gave a short talk about some best practices with ViewControllers on iOS for the <a href="http://briancoyner.github.com/">West St. Louis CocoaHeads</a> group.</p>
<p>This includes my tips on where/when to do certain actions to balance resource usage and keep your UI snappy.</p>
<p>Here is the PDF of the presentation: <a href="http://johnhaney.com/talks/2012-07-26%20CocoaHeads%20ViewControllers.pdf">CocoaHeads ViewController Talk</a></p>]]></content:encoded>
    </item>
        <item>
        <title>CryptoQuote Daily Challenge Update</title>
        <link>https://johnhaney.com/blog/cryptoquote-daily-challenge-update/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/cryptoquote-daily-challenge-update/</guid>
        <pubDate>Thu, 12 Apr 2012 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>Greetings,  </p>
<p>I'm happy to report that the new Daily Challenge Server is up and running, and my initial testing is going very well.  Soon (within the next week or two), CryptoQuote for iPhone, iPod touch, and iPad will be updated to version 2.4.  This version is designed to use the new server.  </p>
<p>Once I'm happy with the iOS update running "in the wild," Android apps will be next.  </p>
<p>So, in a few weeks, CryptoQuote for Android will be updated to version 2.0, adding the Daily Challenge feature for Android users, including Kindle Fire, NOOKcolor, and NOOKtablet.</p>]]></content:encoded>
    </item>
        <item>
        <title>CryptoQuote for Android 1.0</title>
        <link>https://johnhaney.com/blog/cryptoquote-for-android-10/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/cryptoquote-for-android-10/</guid>
        <pubDate>Mon, 02 Apr 2012 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>UPDATED: Reflects that the Amazon App Store page has been updated.  </p>
<p>Greetings,  </p>
<p>I'm very excited to share with you that CryptoQuote is now available for some Android devices (tablets with access to the Amazon App Store, including Kindle Fire).  You can <a href="http://www.amazon.com/gp/product/B007QE8Z1E/ref=mas_pm_cryptoquote">download CryptoQuote for Android 1.0 here</a>.  </p>
<p>This version is launching with many of the great features of CryptoQuote you see on OS X and iOS as well, with a few to be added in the not-so-distant future.  </p>
<p>At this moment, CryptoQuote is available solely via the Amazon App Store.  My hope is to have the app available for NOOK devices within the next few weeks (depending upon the pace of Barnes &amp; Noble approval processes).  </p>
<p>An Apology<br />
The initial description on the Amazon App Store product page for CryptoQuote 1.0 includes the following line:  </p>
<blockquote>Features:  
* 3199 carefully selected quotes, plus a new Daily Challenge Puzzle each day</blockquote>  
This should NOT contain the second part about the daily challenge puzzle.  I am very sorry for this error, and the descriptions have been corrected on the store.  
<p>About the Daily Challenge<br />
The Daily Challenge feature is currently only available for iOS devices. Please do know that I am committed to bringing the daily challenge to Android devices and Mac OS X.  Please also know that this is not without some significant steps before this can happen.  I'd like to elaborate a bit on this…  </p>
<p>The current daily challenge server needs some improvements:  </p>
<ol>
<li>It is currently on an older host system, which shares resources and power with other websites.  </li>
<li>It does not respond quickly enough to requests.  </li>
<li>It does not handle lots (and lots) of iPhone users well.  </li>
<li>It gets slower as more people play the daily challenge each day.  </li>
</ol>
<p>My plan is to address these problems first for iPhone users, by doing the following:  </p>
<ol>
<li>Rewrite the server-side code to handle requests quickly and efficiently.  </li>
<li>Restructure the database to handle requests quickly even for lots (and lots) of users.  </li>
<li>Setup this new server code on my new host machine, and migrate the daily challenge users over to the new server.  </li>
<li>Update CryptoQuote for iOS to add the Daily Challenge.  </li>
<li>Update CryptoQuote for Android to add the Daily Challenge.  </li>
</ol>
<p>Questions or comments?  </p>
<p>Contact me via:  <a href="http://appsfromouterspace.com/contact/">http://appsfromouterspace.com/contact/</a><br />
or on Twitter:  <a href="http://twitter.com/johnhaney">http://twitter.com/johnhaney</a></p>]]></content:encoded>
    </item>
        <item>
        <title>The Next Chapter</title>
        <link>https://johnhaney.com/blog/next-chapter/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/next-chapter/</guid>
        <pubDate>Tue, 10 Jan 2012 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>Today, I'm launching Apps from Outer Space, LLC.  My new company is taking over all of the apps my old company (John Haney Software).  </p>
<p>I'm calling this my online moving day.  Here's what's happening:<br />
Twitter:<br />
@JohnHaneySW -&gt; <a href="http://twitter.com/Apps_OuterSpace">@Apps_OuterSpace</a>  </p>
<p>Facebook:<br />
facebook.com/JohnHaneySW -&gt; <a href="http://facebook.com/AppsFromOuterSpace">facebook.com/AppsFromOuterSpace</a>  </p>
<p>Website:<br />
johnhaney.com -&gt; <a href="http://appsfromouterspace.com/">appsfromouterspace.com</a>  </p>
<p>App Store:<br />
Coming Soon.  I'm awaiting a few finalizing details.  For the moment, apps will be listed under the "John Haney Software" name.  </p>
<p>So please update your contacts, likes, follows.  2012 is going to be a great year, starting with my next app, Puppet Stage.  But I'll talk more about that very soon…</p>]]></content:encoded>
    </item>
        <item>
        <title>Thanks 100 million!</title>
        <link>https://johnhaney.com/blog/thanks-100-million/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/thanks-100-million/</guid>
        <pubDate>Mon, 24 Oct 2011 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>Flashlight has now been downloaded more than 100 million times. I'm very excited and humbled to share this with you, and many thanks to you millions of users.  </p>
<p>Has Flashlight helped you? We'd like to hear about it at FlashlightStory@johnhaney.com</p>]]></content:encoded>
    </item>
        <item>
        <title>Daily CryptoQuote problem [UPDATE: Fixed]</title>
        <link>https://johnhaney.com/blog/daily-cryptoquote-problem/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/daily-cryptoquote-problem/</guid>
        <pubDate>Wed, 03 Aug 2011 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>The Daily CryptoQuote is not working today (August 3, 2011) due to an issue on the server. Support ticket has been submitted. Hoping server gurus will fix ASAP.</p>
<p>In the meantime, you will see a message that you have already completed the puzzle, and then see results with a date of November 30, 2 (yes, the year is 2).  This particular side effect is one I will be fixing in the next update of CryptoQuote.  Sorry for any confusion this has caused.</p>
<p>UPDATE (Friday, August 5, 2011)</p>
<p>My ticket was assigned within a few hours of being submitted.  Since then (now 2 days), I have not seen any other activity.  I continue to update the ticket, but am working on making changes to CryptoQuote to work around this problem entirely.  I am very disappointed with my web hosting provider and am expecting that my workaround will have to be the solution.</p>
<p>Bottom line, this means the daily challenge will likely be down until you update to a new version of CryptoQuote.  A new version of CryptoQuote will take me at least 1 week to get onto the App Store.  I thank you for your patience.</p>
<p>UPDATE (Tuesday, August 9, 2011)</p>
<p>My website provider is not willing to fix this issue.  Fortunately, I have submitted CryptoQuote 2.1 to the App Store.  Hopefully this update will be reviewed and approved within a week.</p>
<p>Thank you all for your patience and kind emails during this time.  I am sorry that you are missing out on this regular part of your day and hope to have this back working great for you ASAP.  Please know that this new app version will give me the ability to workaround the issue seen this time, as well as provide for a smooth transition to a new web hosting provider should that become necessary in the future.</p>
<p>Thanks again and happy puzzling!</p>
<p>UPDATE (Wednesday, August 10, 2011)</p>
<p>FIXED!!!   Apple accepted my request for an expedited review and CryptoQuote 2.1 was reviewed and approved today.  You should see the new update in the App Store on your iPhone, iPod touch, or iPad now or within the next few hours.  My great appreciation again for your patience and happy puzzling!  :-)</p>]]></content:encoded>
    </item>
        <item>
        <title>Another great Flashlight email</title>
        <link>https://johnhaney.com/blog/another-great-flashlight-email/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/another-great-flashlight-email/</guid>
        <pubDate>Mon, 23 May 2011 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>It always makes my day to hear how <a href="http://johnhaney.com/flashlight/">Flashlight</a> is working great for people.  Here's the latest example:  </p>
<blockquote>I arrived at our holiday house last night in pitch black.  The house power was out and I needed to bash through the garden to the electrical meter and back into a pitch black house a couple of times.  I discovered to my delight that I had downloaded your flashlight app onto my phone.  It saved my life, without it on my iPhone 4 I wouldn't have been able to fix the fuse trip switch or avoid falling in the pond.    
<p>Thanks. It's a great app.    </p>
</blockquote>]]></content:encoded>
    </item>
        <item>
        <title>CryptoQuote 2.0</title>
        <link>https://johnhaney.com/blog/cryptoquote-20/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/cryptoquote-20/</guid>
        <pubDate>Thu, 21 Apr 2011 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>After several months of work, I've completed a major update to CryptoQuote.  With CryptoQuote 2.0, this app has a lot more to offer and I hope to hear from my users what they like the most about it.  </p>
<p>Here is the official list of "what's new"…  </p>
<LI>Hundreds more quotes, now 3199 in total  
<LI>Undo/Redo: Shake to undo/redo the last move on a puzzle.   
<LI>Custom Puzzles/Quotes: Paste a puzzle from elsewhere, or scramble your own phrase to make a puzzle.   
<LI>Printing: With an AirPrint capable printer, you can print out a puzzle.   
<LI>NEW TOOL: Word Search - choose a word and see dictionary matches for that letter pattern   
<LI>NEW TOOL: Letter Frequency - compare the frequency of the scrambled letters to the frequency of letters in English.   
<LI>Share quotes you solve (copy/email/SMS/Facebook/Twitter)   
<LI>Improved Daily Challenge with no "sign-up" required, and improved download performance.   
<LI>Physical keyboard support - works with a bluetooth or USB keyboard for solving puzzles more quickly.  
<p>Now to catch up on email and continue on my next project…  :-)</p>]]></content:encoded>
    </item>
        <item>
        <title>My Big News</title>
        <link>https://johnhaney.com/blog/my-big-news/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/my-big-news/</guid>
        <pubDate>Mon, 29 Nov 2010 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>I teased about this over the weekend and it seems most of my friends think that my wife and I are pregnant.  </p>
<p>The big news IS about a life-changing event, but not about bringing a new life into this world.  Today marks my first full-time day working on my own.  I'm phasing out of my day-job and into my own business as an Independent App Developer.  </p>
<p>I've been incredibly fortunate to be in this situation and want to thank my wife who has endured the late-night coding sessions and my steering our conversations back to apps and app ideas.  </p>
<p>I'm humbled and delighted to know that there are literally millions of people using Flashlight, and I intend to continue to improve <a href="http://itunes.apple.com/us/app/flashlight/id285281827?mt=8&amp;uo=4">Flashlight</a> and release new apps VERY SOON.  My plan is to release two new apps this year, with many more apps and updates coming soon too.  </p>
<p>I will work from my cloffice (closet office) in my house.  My daughter plans to come greet me whenever she wakes up in the morning, and I'll have lunch with my family.  I'm thrilled about this new flexibility and freedom and very excited about being able to actually create more of my list of 60+ app ideas!  </p>
<p>I'll be <a href="http://johnhaney.blogspot.com/">blogging</a> a bit more, <a href="http://twitter.com/johnhaney">tweeting</a> a bit more, and <a href="http://itunes.apple.com/us/artist/john-haney-software/id282761815?uo=4">coding</a> a LOT more.  :-)</p>]]></content:encoded>
    </item>
        <item>
        <title>Halloween and Flashlight</title>
        <link>https://johnhaney.com/blog/halloween-and-flashlight/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/halloween-and-flashlight/</guid>
        <pubDate>Fri, 05 Nov 2010 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>I have not mentioned yet, but I really really love Apple's iAd web portal.  It's really great to be able to see hourly charts and it's fun to be able to see when people begin using Flashlight more during the evenings:  </p>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHRIiIEdmif4st9HFA9yBkhcSBoevz2rEHeBZQBE27XvNSc8ExQPCGr_ynCD0vQZDdMCWMUsUenj3kvFzlfmBf7Hge-3Ld2hrSgBFnpQ_s8vg7m6Op1H5NR6V6TdLlcvTGgyyEEtQCji8/s1600/Screen+shot+2010-11-05+at+6.36.20+AM.png"><img src="/assets/blog/halloween-and-flashlight/4cbec4dd.png" alt="" /></a></p>]]></content:encoded>
    </item>
        <item>
        <title>Top iAd countries so far</title>
        <link>https://johnhaney.com/blog/top-iad-countries-so-far/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/top-iad-countries-so-far/</guid>
        <pubDate>Fri, 05 Nov 2010 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>With the recent addition of iAds internationally, I took a look at my stats and thought it might be interesting to share with you what countries are getting the most impressions right now. All of my iAd impressions right now are from <a href="http://johnhaney.com/flashlight/trynow">Flashlight</a>  </p>
<p>United States<br />
UK/GB<br />
Unknown<br />
Korea, Republic of<br />
France<br />
Saudi Arabia<br />
(Empty)<br />
Israel<br />
China<br />
Mexico<br />
Australia<br />
Japan<br />
Norway<br />
Canada<br />
Malaysia  </p>
<p>The UK/GB was about 3% of the US in terms of numbers of impressions, with the other countries trailing off quickly after…  Still, this list of the top 15 adds up to around 5.4% of the US impressions  </p>
<p>Here are the next 15 countries:  </p>
<p>Brazil<br />
Malaysia<br />
Reunion<br />
South Africa<br />
Singapore<br />
Taiwan<br />
Argentina<br />
Finland<br />
Greece<br />
Kuwait<br />
Netherlands<br />
Hong Kong<br />
India<br />
Brunei Darussalam<br />
Serbia</p>]]></content:encoded>
    </item>
        <item>
        <title>Flashlight top countries</title>
        <link>https://johnhaney.com/blog/flashlight-top-countries/</link>
        <guid isPermaLink="true">https://johnhaney.com/blog/flashlight-top-countries/</guid>
        <pubDate>Mon, 19 Jul 2010 00:00:00 +0000</pubDate>
                <content:encoded><![CDATA[<p>Now that Flashlight is using iAds, I have access to a lot more interesting data, including overall countries of where users are using Flashlight.  Flashlight appears to be used far more in the evenings (obviously), and also far more on the weekends.  </p>
<p>Top Flashlight countries from last weekend (July 17 and July 18) are:  </p>
<p>United States<br />
UK/GB<br />
Australia<br />
Canada<br />
France<br />
Unknown<br />
Germany<br />
Sweden<br />
Korea, Republic of<br />
Brazil<br />
Spain<br />
Denmark<br />
Switzerland<br />
New Zealand<br />
Italy<br />
Chile<br />
Russian Federation<br />
Japan  </p>
<p>By the way, I have to say that I continue to be humbled that my app is used by so many people around the world.</p>]]></content:encoded>
    </item>
    </channel>
</rss>
