<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Stan Lemon</title>
    <description>husband, dad, steelers fan and software developer</description>
    <link>https://stanlemon.com/</link>
    <atom:link href="https://stanlemon.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 11 Mar 2013 03:46:00 +0000</pubDate>
    <lastBuildDate>Mon, 11 Mar 2013 03:46:00 +0000</lastBuildDate>
    <generator>stanlemon.com</generator>
    
      <item>
        <title>Stanley Lemon Day</title>
        <description>&lt;p&gt;Growing up, I lived about a block from my elementary school, and by 2nd grade, I was walking to and from school on my own each day. To get to Turner Elementary, I had to cross National St., which isn&#39;t a particularly busy road, but had enough traffic that the school hired a crossing guard. The crossing guard that year was Mr. Kenneth Beardsley, a retired letter carrier for the US Postal Service. He was a truly remarkable man and very friendly to all the kids, keeping them safe each day. I enjoyed talking to Mr. Beardsley and would hang around during his shift, chatting with him in between letting kids cross the road. At one point, he jokingly told me I was a Jr. Crossing Guard, and that made my world.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/kJCkbZta-H-300.webp 300w, /img/kJCkbZta-H-600.webp 600w, /img/kJCkbZta-H-1200.webp 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/kJCkbZta-H-300.png 300w, /img/kJCkbZta-H-600.png 600w, /img/kJCkbZta-H-1200.png 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/kJCkbZta-H-300.jpeg&#34; alt=&#34;Stan Lemon wearing his October 15th is Stanley Lemon Day shirt with cameos from Sara and Lucy&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1200&#34; height=&#34;2133&#34; srcset=&#34;/img/kJCkbZta-H-300.jpeg 300w, /img/kJCkbZta-H-600.jpeg 600w, /img/kJCkbZta-H-1200.jpeg 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;While National St. wasn&#39;t busy, some people would fly down that road. Around this time, the speed limit was 35mph. One evening, I vented to my Dad about how crazy some people were and told him the police should make people drive more safely. Dad probed that thought and asked me what they meant in practice, and together we concluded that National St. needed a lower speed limit. He then encouraged me to be the change and suggested that I petition the city government to institute a school speed zone. This was in the early 90s, and the speed zones you know and love around schools today were not a thing at all.&lt;/p&gt;
&lt;p&gt;Dad helped me make a petition, and I set out to gather signatures. I had many students, teachers, even the principal, and of course, Mr. Kenneth Beardsley as signatories. I ended up taking that petition to the mayor, Mr. Steven Lakics, whom I knew because he was in the same Kiwanis club as my Dad. I did my best to ride along to Kiwanis meetings on Saturday morning at St. Andrew&#39;s golf course because it was cool, and I could get pancakes. I told Mr. Lakics what I was up to, and he looked forward to receiving the petition.&lt;/p&gt;
&lt;p&gt;Behind my house was an alley, then another row of homes, and my neighbor immediately across the alley was Mr. Gene Wind. Mr. Wind was my alderman, and as I recall, I gave him the petition. Then the wheels of government began to turn. I don&#39;t remember the specific sequence of events. Still, Mr. Wind presented the petition at a council meeting, and Mr. Lakics commissioned a study of traffic in and around Turner Elementary School. That study took an eternity for a second grader, and by the time third grade rolled around, I had all but forgotten my brief foray into politics.&lt;/p&gt;
&lt;p&gt;The study determined that there should be reduced-speed zones around the school and all other schools in town. Later that year, signs went up, and I&#39;d like to believe everyone around Turner drove a little more safely. Mr. Beardsley thought it was cool, and Mr. Wind was proud, and Dad was Dad, which was all good enough for me. Then one night at a City Council meeting, Mr. Lakics, who joked that it was past my bedtime, though I was up watching it thanks to a tip from Mr. Wind, issued a proclamation that October 15th of that year was Stanley Lemon Day. That was pretty cool.&lt;/p&gt;
&lt;p&gt;A friend of mine at the time had a T-shirt made that said, &amp;quot;October 15th is Stanley Lemon Day&amp;quot;. Somehow, that shirt survived decades at my mother&#39;s house, and my oldest daughter claimed it on a visit. She&#39;s worn it on October 15th for the last few years, and it always makes me smile.&lt;/p&gt;
&lt;p&gt;My Dad passed away a little over two years ago, but not a day goes by that I don&#39;t think about him. October 15th is one of those days I look back and remember a loving father who was always teaching, in the classroom, at home, and probably at St. Andrews golf course on whatever Saturday of the month they met. He taught me a lot, including how to write a petition, gather signatures, effect change in my local government, and teach my own kids. So yeah, one year, October 15th was Stanley Lemon day in my little hometown of West Chicago, but every October 15th since has been I had a Great Dad Day for me. Love you, Dad.&lt;/p&gt;
</description>
        <pubDate>Wed, 15 Oct 2025 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2025/10/15/stanley-lemon-day/</link>
        <guid isPermaLink="true">https://stanlemon.com/2025/10/15/stanley-lemon-day/</guid>
        
      </item>
    
      <item>
        <title>Apple Wish List (2021 edition)</title>
        <description>&lt;p&gt;Apple wish lists are nothing new. Over the years, Apple has released better software on a pretty consistent schedule. Sometimes those releases have things we expect. Other times they surprise even fanboys like me. Most Apple wish lists cover big-ticket items. This is not that list. This wish list is a bunch of little things that I encounter in my day-to-day use of Apple products. If I’m lucky, an Apple developer will spot my list and add some of them to the next macOS and iOS release. Most likely not, but a guy can hope! Apple’s World Wide Developer Conference (WWDC) is just around the corner, so I figured that now was as a good time as any to share this list.&lt;/p&gt;
&lt;h2&gt;Photos’ Family Library&lt;/h2&gt;
&lt;p&gt;I have a vast photo library that I would like to share with my wife. For years we shared an iCloud account to achieve that. There are so many problems with sharing an iCloud account, though we had to stop finally. It’s time for Apple to recognize that, like shared iCloud folders, we need shared Photos’ libraries.&lt;/p&gt;
&lt;h2&gt;Face Recognition&lt;/h2&gt;
&lt;p&gt;Photos’ face recognition was a headline feature at some point. It’s not received any love recently and is fraught with bugs. I would love for Apple to bring back the unidentified person album. I also would love a better way to correct misidentifications. The fact that faces still don’t sync consistently between my Mac and iPhone kills me. I also want to tell Photos that the belt buckle it identified as a person isn’t a person. Likewise, let me tell Photos to ignore strangers in the background of pictures. Face recognition is a powerful feature, but it leaves a lot to be desired.&lt;/p&gt;
&lt;h2&gt;Time Machine Stability&lt;/h2&gt;
&lt;p&gt;I use Time Machine and a Synology NAS to backup my laptop. It works fine most of the time, but it breaks in the worst of ways every so often. Every few months, I get an error message that Time Machine can no longer reliably back up my device. Then Time Machine triggers a new full backup and also causes me to lose my historical backups. It’s an epic pain and can be dangerous too. Time Machine needs some profound love, especially when these errors crop up. It’s also time to ditch the fancy UI for traversing versions that came out well over a decade ago. It was novel at the time, but today it’s slow and does not feel natural.&lt;/p&gt;
&lt;h2&gt;Safari Tab Syncing Reliability&lt;/h2&gt;
&lt;p&gt;Ever since Big Sur, my Safari tabs rarely sync up across devices. I use this feature far more than I realized. I notice inaccurate tab listings regularly now. I want Apple to get this right because it’s a super handy utility when it works. The one upside to Safari tab syncing not being reliable is I’ve become more acquainted with Handoff.&lt;/p&gt;
&lt;h2&gt;iPad App Library&lt;/h2&gt;
&lt;p&gt;I’ve fallen in love with the App Library on iOS and want it on the iPad OS. It feels awkward going back to traditional home screens on that device. I genuinely prefer having my apps cataloged for me in one giant list. It reminds me of macOS, where the Dock is like my singular Home Screen and the Application folder my App Library. As far as I can tell, there is no reason for the iPad not to get this organizational improvement.&lt;/p&gt;
&lt;h2&gt;macOS Widgets Desktop&lt;/h2&gt;
&lt;p&gt;Widgets made their way back into macOS with Big Sur. Unlike iOS, and to a lesser extent, iPad OS, you can’t pin them to your desktop. I want to pin my Reminders and Calendar widgets on my macOS desktop as I do on my iOS Home Screen. You could do this back in the day with Apple’s first incarnation of widgets from the Dashboard app. You can also do this on iOS and iPadOS. I’m hoping that it’s just a performance issue and the M1 will make this possible.&lt;/p&gt;
&lt;h2&gt;Google Calendar Sync Improvements&lt;/h2&gt;
&lt;p&gt;If you add a Google calendar into Apple Calendars, it works fine on macOS. Over on iOS, events are often missing for large calendars. Recurring events are especially bad as they don’t show up when they should. I’ve come not to be able to trust a Google calendar in Apple Calendar on iOS. I love Apple Calendar, but this glaring problem with Apple Calendars is a huge pain point for me. Whatever Apple is doing on macOS, they need to do over on the iOS side.&lt;/p&gt;
&lt;h2&gt;macOS Messages Stickers&lt;/h2&gt;
&lt;p&gt;Yeah, I’m one of those guys who buy sticker apps! I blame Disney and my general love of everything Star Wars. I want to use those sticker apps on macOS! It should be possible to use those stickers I’ve bought now that Messages is a universal app across macOS and iOS. It seems like the M1 processor that shares an architecture with iOS should make this relatively easy to accomplish.&lt;/p&gt;
&lt;h2&gt;Podcasts Playback Speed&lt;/h2&gt;
&lt;p&gt;The podcast app allows control of playback speed, but it’s not fine-grain enough for me. I want to control the speed in 10% increments. If you’re wondering what I mean, check out Overcast. It has the absolute best playback controls of any podcast app on iOS. Actually, Apple should buy Overcast and make it the default Podcast player on all its platforms, please.&lt;/p&gt;
&lt;h2&gt;Automator Support for Apple Notes&lt;/h2&gt;
&lt;p&gt;Most default Apple apps have support in Automator on macOS, but Notes is a glaring absence. I want basic programmatic control over the Notes app from Automator. Automator support would allow me to script things like creation and exports. It used to be a given that every native Apple app had extensive support in Automator. In recent years this has been less true, and Automator seems to have fallen by the wayside. I would be fine if Apple wanted to take this opportunity to bring Shortcuts to macOS. Regardless I want scriptability back in Apple’s standard apps, especially Notes. I do a surprising amount of writing in Notes. It would be great to automate some of the routine tasks I do with those Notes outside of the app.&lt;/p&gt;
&lt;h2&gt;Links in Apple Notes&lt;/h2&gt;
&lt;p&gt;I would like to be able to link words in Apple Notes. You can put a URL into Notes, and it’ll auto-link it. You can drag a Safari tab into a Note as an attachment. You can even copy text with a word linked into a Note. But you can’t select text and make it a link from within the app. It seems like a simple thing, but it annoys me. Apple Notes isn’t a full-on rich text editor, but this seems like a feature it should have had a long time ago.&lt;/p&gt;
&lt;h2&gt;Home App Time Ranges&lt;/h2&gt;
&lt;p&gt;The Home app allows you to configure automation based upon sunset, sunrise, and offsets of each up to 4 hours. Sunset and sunrise timers are super handy when I want my Christmas lights to turn on 30 minutes before and after sunrise and sunset. With motion-based automation, you can set ranges of time for when they will run. Sunrise and sunset are options when setting these ranges. But you can’t mix sunrise/sunset with fixed times. I want to select a motion sensor to be active from sunset until a specified time, like 11 pm when I go to sleep. The time range pickers should allow for these sort of time ranges.&lt;/p&gt;
&lt;h2&gt;Home App Color Selection&lt;/h2&gt;
&lt;p&gt;If you have two multi-color light bulbs in the Home App, there is no way to share a color selection between them. The Home app needs a recently selected color palette when configuring light bulbs. A recent color palette would allow me to set multiple bulbs to the same color, rather than trying to eye-ball it every time.&lt;/p&gt;
&lt;h2&gt;Home App Notification Muting&lt;/h2&gt;
&lt;p&gt;I recently added Eufy smart cameras to my home. They support HomeKit and integrate with the Home app on all of my Apple devices. There are many options in the Home app when these cameras detect motion, such as controlling what and when you get notifications. I placed my cameras so that they can see the entryways to my home. I have three very active kids who, during good weather, are in and out of the house constantly. You can imagine then that my cameras detect a lot of motion. For the most part, this is fine, but if I keep notifications configured, they can be rather noisy. My Ring doorbell can snooze notifications for a short time, and I would love if Apple copied this feature into the Home app. Being able to snooze motion detection notifications for a time would be a handy improvement.&lt;/p&gt;
&lt;h2&gt;Screen Time Reporting&lt;/h2&gt;
&lt;p&gt;Screen time is a pretty handy feature for keeping my device usage in check. It consists of monitoring and limits. I use the screen time limits with my kids’ devices, but it’s the monitoring that I pay attention to for myself. Each week I get a notification letting me know how my usage changed from the previous week. These notifications are great, but not all device usage is equal, as I’ve come to learn. If I boost my use because I read an extra four hours this week, that’s OK usage in my book. But if my usage increases because I spent three times as much time in the News app, that is not. Likewise, if social media went up, I’d like to know that too. It’s time for screen time reporting to become more thoughtful about my behaviors. Screen time needs to give me more insight into where my usage changed. It could use the app categories it already has to do this.&lt;/p&gt;
&lt;h2&gt;Messages Watch Notifications&lt;/h2&gt;
&lt;p&gt;I don’t get tons of notifications on my Apple Watch, but one app with carte blanch access to get my attention is Messages. Some messages are more important than others. For example, when my wife texts me, I almost always want to know about it in real-time. However, I have many group chats that don’t deserve to command that level of attention. Now you can mute specific group chats, and that is helpful. I’d like to control muting more broadly than per conversation, specifically through the Mail app’s VIP mechanism. VIP notification control for Messages would be great on iOS, but where it will count the most is on the watch. I could get notified in real-time when my wife or my mom texts me, but my Apple Watch wouldn’t blow up every time a heated debate explodes in one of my group chats.&lt;/p&gt;
&lt;h2&gt;Smart Stack Complications on the Watch&lt;/h2&gt;
&lt;p&gt;When widgets came to the iOS home screen, they brought this idea of a “Smart Stack.” A Smart Stack is a stack of widgets where Siri would decide which one should be on top. Smart Stacks might choose to show the reminders widget because something is due. Or they might prioritize the activity widget because I’m behind on my goals for the day. In my experience, it’s been pretty intuitive, and I would love to stack complications on my Apple Watch and have Siri work the same magic there. The Apple Watch has some snazzy Siri capabilities, as evidenced by the Siri watch face, but I want this power at the complication level to use it with other watch face designs.&lt;/p&gt;
</description>
        <pubDate>Sun, 16 May 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/05/16/apple-wish-list/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/05/16/apple-wish-list/</guid>
        
      </item>
    
      <item>
        <title>What is a Software Architect?</title>
        <description>&lt;p&gt;More than a few people have written about being a software architect. It&#39;s a surprisingly diverse role in the industry. The title rarely means the same thing from one company to the next. The stereotype is someone who designs stuff and then hurls it over the fence to engineers, who do the actual work of building it. If that&#39;s the only kind of software architect you&#39;ve met, you&#39;ve been short-changed.&lt;/p&gt;
&lt;p&gt;I am currently a software architect at Salesforce, working on the Pardot product. Pardot is a Business to Business (B2B) Marketing Automation tool. It enables marketers to find and capture potential leads (people to sell stuff to). It also allows marketers to build rich workflows around their engagement with those leads. It is a large and complex application with a reasonably large engineering organization behind it.&lt;/p&gt;
&lt;p&gt;I came up as a software engineer at Salesforce, making individual contributions. I wrote code. That&#39;s also what I did before coming to Salesforce. I love writing code.&lt;/p&gt;
&lt;p&gt;When I was promoted to be a software architect, my job changed. The change didn&#39;t happen overnight, but what I found is I spent less time writing code and more time helping people write code. That&#39;s how I describe my job when people ask what I do for a living. My job as a software architect is about communication and enablement. It&#39;s through those that I help engineers write code. It sounds simple enough, but how do I do this?&lt;/p&gt;
&lt;p&gt;As a software architect, I am constantly having conversations. I pose questions that test proposals and work with engineers to explore different angles of their projects. I try to promote best practices wherever I can. I also make sure that the engineers I work with know what is going on in other engineering teams. Sometimes this means pointing them to another effort. Other times, it means showing them a pattern to follow or even leveraging an existing system built by a different team.&lt;/p&gt;
&lt;p&gt;If you get five engineers into a room, odds are you will have five very different opinions on how to solve the same problem. As a software architect, I try to peel the layers of those opinions back to find commonalities. Then I use those commonalities to try to build consensus. Building consensus is often one of the most complex parts of my job. It&#39;s a critical aspect, though, because you often wind up with better results when you can establish consensus.&lt;/p&gt;
&lt;p&gt;I spent a lot of time working with other stakeholders in our organization, helping them understand how our technology works. I lead meetings and make presentations and write lots of documents. Enabling everyone to understand the technology we use and are building is critical to building even broader consensus across an engineering organization.&lt;/p&gt;
&lt;p&gt;As a software architect, I am not a people manager. I&#39;m still an individual contributor, but my contributions tend to deal more with people than code. Because of my title, I have a different sphere of influence, which often involves organizational leadership. That sphere allows me to advocate for the engineers and ensure leaders hear their concerns. At the same time, I help managers and leaders understand the tradeoffs and the complex decisions our engineers make.&lt;/p&gt;
&lt;p&gt;A few years ago, I helped started a mentorship program for engineers. I believe that mentorship is a vital part of being a software architect. Mentoring helps engineers learn how to grow their careers and hopefully advance to new challenges. It&#39;s also essential to the organization because it helps develop the next set of technical leaders. A formal program isn&#39;t a necessary part of the job, but it helps give structure to make mentorship happen.&lt;/p&gt;
&lt;p&gt;Lest you think I don&#39;t code at all, I do. I just code less than I did before. I prototype solutions to problems. I also contribute code to different teams, sometimes augmenting their bandwidth. Even when I am not directly writing code, I am still in the code because I do a lot of code reviews. I am also in constant conversation with engineers about the code they are developing.&lt;/p&gt;
&lt;p&gt;Being a software architect takes time and patience, and lots of communication. Sometimes that means endless meetings. Other times it means documents and slide decks. It&#39;s worth it when it comes together in the end because if I&#39;ve done my job, there&#39;s a connectedness between teams and stakeholders. Everyone knows what&#39;s happening and understands the ins and outs of the technology we&#39;re building together.&lt;/p&gt;
&lt;p&gt;To summarize, a software architect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Poses questions and tests proposals.&lt;/li&gt;
&lt;li&gt;Promotes and encourages best practices.&lt;/li&gt;
&lt;li&gt;Informs engineers about what is happening in other parts of an organization.&lt;/li&gt;
&lt;li&gt;Builds consensus.&lt;/li&gt;
&lt;li&gt;Enables stakeholders to understand the technology.&lt;/li&gt;
&lt;li&gt;Advocates for engineers with leadership.&lt;/li&gt;
&lt;li&gt;Mentors engineers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Stay tuned! I&#39;ll be writing more about being a software architect in future posts.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 10 Apr 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/04/10/what-is-a-software-architect/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/04/10/what-is-a-software-architect/</guid>
        
      </item>
    
      <item>
        <title>Kinivio HDMI Switch</title>
        <description>&lt;p&gt;I have a first world problem. Actually, I have many. One of them is moving HDMI cables around from device to device. At any given moment on my office desk I have a desktop, two laptops and an Xbox. But I only have one monitor. This means that switching between devices can be awkward, as I unplug an HDMI cable from one and move it to the other. Admittedly this isn’t so bad with the laptops because of my USB-C hub. The desktop and Xbox are a pain, in part because their plugs are on the back and getting to them is awkward. The &lt;a href=&#34;https://amzn.to/3tl1Iy9&#34;&gt;Kinivio HDMI Switch&lt;/a&gt; is the answer to my problem.&lt;/p&gt;
&lt;p&gt;There are a ton of HDMI switches out on the market. Many monitors are also shipping with multiple HDMI outputs now too. The challenge is finding one with enough ports that doesn’t completely compromise image quality. For this I wanted a 4k image, that supported HDR and a decent frame rate. My monitor does not support 120 fps. At some point I will replace it with one that does. I’m looking forward to this because of the Xbox primarily. For now not having 120 fps on an HDMI switch is OK because the options are non-existent. The thing is 60 fps is pretty hard to find too. Most HDMI switches you come across top out at 30 fps, and the ones that do 60 fps often have terrible reviews. The &lt;a href=&#34;https://amzn.to/3tl1Iy9&#34;&gt;Kinivio&lt;/a&gt; supports a 4k HDR image at 60 fps and has outstanding reviews on Amazon. It seemed like a unicorn, too good to be true.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://amzn.to/3tl1Iy9&#34;&gt;Kinivio&lt;/a&gt; makes a 3-port and 5-port HDMI switch that runs at 60 fps and works great. They’re not cheap starting at $52.99, but they’re worth it because of their reliability and solid quality. The &lt;a href=&#34;https://amzn.to/3tl1Iy9&#34;&gt;Kinivio&lt;/a&gt; is a metal box with a glossy plastic top and bottom. It honestly feels like a durable little hub. On the 3-port model the ports are all on the front. With the 5-port model there is an extra input on one side, and the power and out slots are on the other side. The front is a set of physical buttons that light up based upon which ports have connections and which one is currently being used. It includes a remote, which is cute but in my setup not particularly necessary.&lt;/p&gt;
&lt;p&gt;A lot of HDMI switches include auto-switching. The switch will change over to a new input as it comes on. Most everything I’ve seen on the internet says this sort of automatic switching is flakey. I can’t tell if it’s my behavior or the Kinivio has cracked this nut, because the automatic switching has been consistently on point. At the end of a long work day I’ll go grab a beer, come back to my desk and turn on the Xbox. The &lt;a href=&#34;https://amzn.to/3tl1Iy9&#34;&gt;Kinivio&lt;/a&gt; switches over and off I go. It has never switched over during the work day when the Xbox is downloading updates, which is a common complaint I saw on many HDMI switch reviews.&lt;/p&gt;
&lt;p&gt;The image quality on the &lt;a href=&#34;https://amzn.to/3tl1Iy9&#34;&gt;Kinivio&lt;/a&gt; is as good as directly plugging the Xbox into my monitor. I haven’t noticed any degradation in quality when watching videos or playing video games. I put the HDMI switch through the motions trying games like Star Wars: Squadrons and Overwatch and I also watched movies like Star Trek and Avengers: Endgame.&lt;/p&gt;
&lt;p&gt;This little device seems trivial, but it’s one of those things that can make a big difference in day to day use. I had a hard time trying to track down a switch with more than 3 ports that supported 4k HDR and did 60 fps. Reviews were sparse and there seem to be a lot of poorly made options crowding the market. If you’re in need of an HDMI switch I recommend you check out the &lt;a href=&#34;https://amzn.to/3tl1Iy9&#34;&gt;Kinivio&lt;/a&gt;, in my mind it’s the one to beat.&lt;/p&gt;
</description>
        <pubDate>Fri, 02 Apr 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/04/02/kinivio-hdmi-switch/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/04/02/kinivio-hdmi-switch/</guid>
        
      </item>
    
      <item>
        <title>PDFScanner</title>
        <description>&lt;p&gt;I admit late to the party on this one, but &lt;a href=&#34;https://www.pdfscannerapp.com&#34;&gt;PDFScanner&lt;/a&gt; is a must-have for any macOS user who scans documents. PDFScanner isn’t a new app, but it’s new to me. Over the years I’ve tried the native software that comes with my HP Scanner with much disappointment. I default back to using macOS Preview’s Import functionality. Most of the time it works. When it doesn’t, it’s spectacular though. Preview does little to help compress PDFs. This might not be a problem if you have a lot of storage but it is not ideal. PDFScanner is a solution to all of these problems.&lt;/p&gt;
&lt;p&gt;Most of the time when I scan documents it’s a page or two and I use my iPhone. Readdle makes a fantastic app for iOS called &lt;a href=&#34;https://readdle.com/scannerpro&#34;&gt;Scanner Pro&lt;/a&gt; that I’ve used for years. It’s also great for odd-shaped scans, like receipts and pay stubs. There are times, though, when I have a large document and don’t have the time to sit there and go page by page. This is why I have a printer/scanner on my desk. That scanner has a table scanner, which I can honestly say I never use. It also has a document feeder, which I have used a lot over the years.&lt;/p&gt;
&lt;p&gt;From time to time I digitalize large documents that don’t fit in the document feeder. To make this happen with Preview, you have two options. First, you can watch the document feeder, and when it gets low try to shove more sheets under it. That works about twenty percent of the time for me. Most of the time I’m not paying close enough attention though and miss that moment when I can stuff more pages in. Or I stuff pages in and completely screw up the document feeder. Second, you can scan batches of pages as multiple documents and then combine them afterward. You can try to append more scanned pages to an open document in Preview, but this never seems to work out well.&lt;/p&gt;
&lt;p&gt;PDFScanner is simple and straightforward to use. It makes PDFs from your scanner, and it happens to do that job really well. Appending to a document is as simple as hitting the “Scan” button, and in all of my attempts, it just works. When you save a PDF it compresses the content in a way that doesn&#39;t comprise the readability of the document. Trying to configure the alternative in Preview is a guessing game. You are often left you guessing which settings are the right ones. PDFScanner defaults to what makes sense for most scans and retains a clear document while saving storage. It also has support for OCR, which is Optical Character Recognition. This makes PDFs searchable. It adds even more usability to documents made with PDFScanner.&lt;/p&gt;
&lt;p&gt;Honestly, I wish I had found this app years ago. If you do any scanning this is the app to do it with. It’s infinitely better than any scanner-vendor-provided software I’ve used. It’s fantastic and worth $17.99. Grab PDFScanner today in the &lt;a href=&#34;https://apps.apple.com/us/app/pdfscanner-scanning-and-ocr/id410968114?mt=12&#34;&gt;macOS App Store&lt;/a&gt;!&lt;/p&gt;
</description>
        <pubDate>Fri, 26 Mar 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/03/26/pdfscanner/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/03/26/pdfscanner/</guid>
        
      </item>
    
      <item>
        <title>WandaVision: That&#39;s a Wrap</title>
        <description>&lt;p&gt;&lt;strong&gt;Spoiler Alert:&lt;/strong&gt; &lt;em&gt;I&#39;m going to discuss the TV show WandaVision in its entirety. If you haven’t seen the show yet go watch and then come back here.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;On &lt;a href=&#34;http://twistoflemonpod.com&#34;&gt;the podcast&lt;/a&gt;, we’ve spent the last 9 weeks discussing each episode of WandaVision. In &lt;a href=&#34;https://twistoflemonpod.com/wandacast-the-finale/&#34;&gt;last week’s podcast&lt;/a&gt;, we were joined by friend of the show, Patrick “Patty” Sturdivant. Patty is our resident Marvel-expert. He first joined us for &lt;a href=&#34;https://twistoflemonpod.com/patrick-sturdivant-the-first-listener-and-our-review-of-endgame/&#34;&gt;a live recording to review Avengers: Endgame in 2019&lt;/a&gt;. Then he joined us to discuss &lt;a href=&#34;https://twistoflemonpod.com/marvel-ing-at-disney-announcements/&#34;&gt;the big Disney marvel announcement in December 2020&lt;/a&gt;. I recommend all that material, it’s great, and not &lt;strong&gt;just&lt;/strong&gt; because you get to hear me talk, a lot.&lt;/p&gt;
&lt;p&gt;WandaVision is the Marvel Cinematic Universe&#39;s (MCU) first foray into stream television. Sort of. Marvel has had a pretty sizable catalog of TV Shows, including on ABC and Netflix. We’re told though, that these are not canonical. So while they bear a lot of references to the MCU, Disney says they’re not legit. I think this was stupid, but regardless what WandaVision is doing is fundamentally different.&lt;/p&gt;
&lt;p&gt;Marvel’s Agents of Shield attempted to tie in with the movies when it bridged the Winter Soldier storyline. If you watched the show in real-time the episode before Winter Solider released was setting the scene for the fall of Hydra. Then when you watched the episode that came right after Winter Soldier’s release it picked up moments after the movie concluded. The remainder of that season and the next followed the collapse of Shield, a part of the MCU that is largely glossed over in the movies. Agents of Shield also brought characters from the movies, most notably Phil Coulsen, but also Nick Fury and even Lady Sif from the Thor franchise. But Disney says that’s not MCU canon...&lt;/p&gt;
&lt;p&gt;Netflix released several shows, Daredevil, Jessica Jones, Luke Cage, The Iron Fist, The Punisher, and The Defenders. These shows often made references to the attack on New York from The Avengers. Yet they never directly referenced primary MCU characters or any of the other MCU events that had taken place. When the Netflix deal ended with Disney these shows seemed to evaporate into time. There are rumors that The Punisher might come back, as well as rumors that Charlie Cox from Daredevil might appear in Spiderman 3. I hope these rumors pan out because The Punisher was excellent and Charlie Cox is the gold standard of Daredevil casting (sorry Ben Affleck). One wonders if there will be references to The Iron Fist in Shang-Chi. But again, Disney says all this material is not MCU canon…&lt;/p&gt;
&lt;p&gt;WandaVision doesn’t split hairs about where it stands in the MCU. There is no ambiguity here. It picks up shortly after Endgame and follows Wanda as she is coping with the loss of her love, Vision. The show follows the VisionQuest arc of the 1980’s West Coast Avengers comic run. The arc is mostly good, but it gets quirky at times, like when it introduces the Great Lakes Avengers. That arc does have Wanda losing Vision, having children, and ultimately losing her grip of things in grief.&lt;/p&gt;
&lt;p&gt;This show kicks off right in the middle of a town called Westview, but it looks like a 1950’s sitcom. We’ll progress through sitcom styles of the ’50s to the ’60s and ’70s in the first three episodes. At first glance, this seems gimmicky, like it was something someone on the production side wanted to do for fun. In episode 8 we learn that it was sitcoms that got Wanda through war-torn Secovia. Secovia looks like the Eastern block of Germany from the clips that we see. This sitcom style might have run one episode too long for me. Watching the Avengers Assemble episode on WandaVision made me realize, though, the level of creativeness that went into these episodes. It also left me suspicious that the writers might have got lost in the fun of it too.&lt;/p&gt;
&lt;p&gt;The sitcoms are there to show us Wanda’s idealism and the things she’s never had: a stable suburban life with a husband and kids. There’s no grief for Wanda in the sitcoms because she’s displaced it to the townspeople of Westview. She is channeling her grief to them through the magic of what we&#39;ll come to know as The Hex.&lt;/p&gt;
&lt;p&gt;The Hex is a reddish bubble that exists over Westview, and Wanda has control of everyone inside of it. This is a stunning use of magic. Wanda transforms matter, creates people (like Vision and her children), and controls the minds of thousands of residents. She controls who gets in and who doesn’t. It seems horrific. We’re left through the first 7 episodes wondering if Wanda made The Hex or if it was someone else, and she’s trapped too.&lt;/p&gt;
&lt;p&gt;Meanwhile, we have SWORD, which is like SHIELD but for space. Remember, SHIELD is gone, having been dismantled after it was revealed that Hydra had infiltrated it in Captain America: Winter Soldier. After a run on the sitcoms, we focus in on Monica Rambeau, who for a time is actually in the hex as a character named Geraldine. We’ve met Monica before in Captain Marvel; she is Maria Rambeau’s daughter and Maria is Carol Danvers’ best friend. Monica is all grown up now and works for SWORD, an organization we learn her mother helped create. Monica was snapped up during the blip, and while she was away her mother passed away from cancer. Monica comes back confused, but ready to jump back in with SWORD. It’s during her re-acclimation that we meet Director Hayward, who you can’t help but feel is just a bit creepy. It turns out that Hayward has ulterior motives in the show; he wants Wanda’s power to help create a new Vision and use it as a weapon.&lt;/p&gt;
&lt;p&gt;Monica will eventually gain powers as she tries to enter The Hex a second time. It’s not clear what happens here, but we know in the comics that she is a superhero known both as Spectrum and Photon. WandaVision seems like a setup for this storyline. Unfortunately, they’re just scratching the surface. I was left feeling like they must have cut a lot of Monica’s storyline from the final show. It feels incomplete and forced. The entire SWORD storyline is there, but almost as an afterthought at times.&lt;/p&gt;
&lt;p&gt;In the end, Monica, with the help of Agent Woo from Ant-Man and Darcy from Thor will try to get to Wanda to convince her to end The Hex. Monica teases us into thinking Wanda might not be in control, but in the end, this is thrown in as misdirection. Monica goes rogue from SWORD and decides to try to end The Hex despite Director Hayward telling her not to. Monica then teases us that she’s going to call an aerospace engineer. This created quite the buzz on the internet, and I admit, I wanted it to be Reed Richards (Mr. Fantastic). It wasn’t, and it shouldn’t have been. Mr. Fantastic deserves a better introduction to the MCU than what WandaVision could have offered. There was nothing especially significant of the character. This seems like a missed opportunity. Couldn’t it have been Amadeus Cho? Or Ironheart? The writers could have capitalized on plenty of other Marvel characters here.&lt;/p&gt;
&lt;p&gt;Finally, we get to Agatha, the suspicious nosy next-door neighbor. She turns out to be more than just another resident of Westview. Our first clue is when she doesn’t appear on Woo’s board of identified residents in the SWORD camp. The internet suspected she was Agatha Harkness. Agatha is a witch from the comics who goes back to the days of the Salem Witch Trials. Agatha’s special gift is stealing the power of other witches. By the end of the series, she will identify Wanda as the Scarlet Witch. This name was off-limits in the MCU until Disney acquired 21st Century FOX. This is the first time we hear her with that mantle. It’s a big deal, because it’s the first crossover event of mutants into the MCU.&lt;/p&gt;
&lt;p&gt;In the comics, Agatha is like a deranged mentor to Wanda. She helps Wanda get through her grief at the loss of her children at one point. That’s not the MCU’s Agatha, at least not yet. Agatha here has been manipulating Wanda inside of The Hex. She was drawn to The Hex because of its chaos magic, the most powerful magic that exists. She will eventually tell Wanda that she is more powerful than the Sorcerer Supreme, who is Dr. Strange. Does Wanda know this? It’s hard to say because both she and Strange blipped and the only actual crossover we’ve seen was in The Battle for Earth during Avengers: Endgame.&lt;/p&gt;
&lt;p&gt;Agatha’s big reveal takes us through the history of Wanda’s grief. It’s at this point we learn the significance of the sitcom episodes. We see Wanda loose her parents, her brother Pietro and ultimately Vision. We also get some background on how Wanda and Vision came to be an item. It was here that we see Vision consoling Wanda with the epic line, “What is grief, if not love persevering?”&lt;/p&gt;
&lt;p&gt;As with every MCU installment, WandaVision ends with a big battle. Hayward tries to shoot Wanda and her family but Monica (Spectrum) stops them in the first clear demonstration of her powers. Wanda’s kids, who in the comics are Wiccan and Speed of the Young Avengers, take care of Heyward’s military support. Vision and Heyward’s incarnation of Vision faceoff (fake vision aka “fision) in an aerial battle that ends in a library with them debating the Ship of Theseus. Wanda takes to the sky against Agatha. Agatha thinks she is absorbing Wanda’s power when in reality Wanda is building runes all around The Hex. The runes hearken back to a remark that Agatha makes to Wanda, “Only the witch to cast the runes can use her magic.” Ultimately Wanda dupes Agatha. She wins the battle and confines Agatha to her nosy neighbor persona. Agatha appears to have her power neutralized.&lt;/p&gt;
&lt;p&gt;At this point, Wanda faces the hard reality of ending The Hex. As The Hex is shrinking Wanda begins to say her goodbyes. First she thanks the twins for “choosing me to be your mom”. Then she converses with Vision in what is arguably some of the best dialogue of the show. Vision’s goodbye is a profound tear-jerker, “I have been a voice with nobody, a body but not human, and now, a memory made real. Who knows what I might be next? We’ve said good-bye before, so it stands to reason…” Wanda replies, “We’ll say hello again.”&lt;/p&gt;
&lt;p&gt;Heyward’s fake Vision is gone, we know not where. The people of Westview have been freed. Wanda’s family is gone. Monica faces Wanda and says, “They’ll never know what you sacrificed for them.” It all seems like Wanda might be the superhero of the show, but she’s not. She’s tortured an entire town to cope with her grief. She’s a monster in every sense of the word. Lest there be any doubt, Agatha, who is a villain in her own right, is trapped by Wanda still. The show is over, at least, the sitcoms are.&lt;/p&gt;
&lt;p&gt;There are two post-credit scenes, the first where Monica is approached by an agent, maybe of SWORD? It turns out to be a Skrull, the species persecuted by the Kree in Captain Marvel. Monica has met the Skrulls before so she’s not surprised to see an alien. The Skrull says, “I was sent by an old friend of your mother’s.” Odds are this is Nick Fury, but there’s also the possibility it could be another character in the MCU. We know that the MCU is working on Secret Invasion, which is a story about the Skrull infiltration of earth. Does that mean Monica will be in that show? It seems likely. It also seems increasingly likely that Captain Marvel 2 will tie into that show as well.&lt;/p&gt;
&lt;p&gt;The final post-credit scene shows Wanda in a small house near a mountainside. As we zoom in we find her astral form in a back room with a book. That book is The Dark Hold. This book has a few names, The Book of Sins and The Book of the Damned are the two big ones. It’s a spellbook containing a bunch of magic made of dark matter, which comes from the Dark Dimension. We’ve seen the Dark Dimension before in the MCU. That’s where Dormammu, the main villain in Dr. Strange, resides. That’s the stuff that Wanda appears to be studying. The very appearance of the astral form is a connection to Dr. Strange. The Dark Hold also points us to potential plots for Dr. Strange and The Multiverse of Madness. To top it off we hear the voices of Wanda’s kids off in the distance.&lt;/p&gt;
&lt;p&gt;By and large, I think the show was very well-written. The dialogue excelled in so many places that I agree with my friend Patty, this is some of the best of the MCU. Elizabeth Olsen’s acting is next level. Kathryn Hahn’s Agnes/Agatha is nothing short of brilliant. Paul Bettany seems to be having pure fun in this role. It’s a great cast and the acting is brilliant.&lt;/p&gt;
&lt;p&gt;As I mentioned earlier, I think the sitcom angle was taken a little too far. One less sitcom episode and I think we would have still gotten the point. The writers waited to cross over to the SWORD storyline a little too late as well. The show probably would have benefited from some of that context earlier. When I went back and rewatched the show, the first three episodes were so much richer with the SWORD context. That said, the SWORD storyline itself seems unfulfilled. Monica Rambeau is undeveloped. But it’s a great show and a great start for the MCU’s canonical foray into television. I’m excited about Dr. Strange and hopeful that there’s more to this story in that forthcoming movie.&lt;/p&gt;
&lt;p&gt;I can’t decide how approachable this show is to those who aren’t familiar with the MCU. At the same time, who even are those people? If you have a passing familiarity with the MCU then you probably have enough background for WandaVision. If you’ve seen Civil War, Dr. Strange, and Captain Marvel you’ll benefit from the additional insight. But I don’t think those are required. Those first sitcom episodes are especially catchy for those not fully immersed in the MCU as they’re generally light on MCU-lore.&lt;/p&gt;
&lt;p&gt;If you want WandaVision to be your entry point into the MCU it’s going to be tough. I think that at the very least you need Avengers: Age of Ultron and Avengers: Infinity War to have enough context to know what’s going on with Wanda. Of course, no one in their right mind will watch Infinity War and not watch Endgame. Those are great movies though, so it’ll be worth the investment. With those three movies, you’re all set in my opinion.&lt;/p&gt;
&lt;p&gt;I’m glad Disney took on the challenge of this long-form episodic story. It was a treat each Friday to tune in with the family and see what’s next. I’m really glad that Disney did not drop the whole series at once like Netflix does. Releasing an episode each week helped the build up and created a lot of conversation around the show. This past week Disney released an episode of Avengers Assembled showing how they made WandaVision. It&#39;s worth watching. You’ll get a sense of how much creative energy went into the design and writing of the show. It’s a ton of fun and even my kids were glued to the screen.&lt;/p&gt;
&lt;p&gt;Next up is Falcon &amp;amp; the Winter Soldier. The stakes are high on this one. I fully expect it to be a sequel to Captain America: Civil War, which is my favorite non-Avengers movie in the MCU. They’ve got a great set of characters that are perfectly cast. I’ll be shocked if it’s not as enjoyable. As for Wanda, we’ll look to Dr. Strange: Multiverse of Madness, where we know she will return. Odds are Wanda plays the villain there thanks to another contributing villain. My money is on Mephisto, the Devil-like character in the Marvel universe. Some folks have speculated Nightmare may show up, and I think that’s possible as well. My friend Patty suggested that Scarlet Witch will make a literal deal with the devil to get her boys back, and I think he&#39;s probably onto something there. That’s not too distant from the 1980’s story arc involving Mephisto and Wanda, either. Regardless of how this shakes out, I think we’re in for a treat and more great storytelling from the MCU.&lt;/p&gt;
</description>
        <pubDate>Thu, 18 Mar 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/03/18/wandavision/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/03/18/wandavision/</guid>
        
      </item>
    
      <item>
        <title>Apple M1 Review</title>
        <description>&lt;p&gt;Last summer during the &lt;a href=&#34;https://developer.apple.com/wwdc20/&#34;&gt;World Wide Developer Conference (WWDC)&lt;/a&gt;, Apple announced the introduction of a new processor and architecture for the Mac. I cannot overstate the significance of this change. It’s a big deal. In November Apple started shipping Mac laptops and the Mac mini with this new processor named the M1. The reviews were shocking because almost everyone loved the new processor. Even the most ardent critics of Apple, like &lt;a href=&#34;https://www.theverge.com/21569603/apple-macbook-air-m1-review-price-specs-features-arm-silicon&#34;&gt;The Verge&lt;/a&gt;, gushed over this new Mac. I was left scratching my head… could it be that good? Well, the answer is yes.&lt;/p&gt;
&lt;p&gt;This is in no way a replacement for the many &lt;a href=&#34;https://www.tomsguide.com/reviews/macbook-air-2020-m1&#34;&gt;fantastic reviews&lt;/a&gt; of the M1 out there. If the M1 interests you then you should read those. I waited until March to pull the trigger and buy one. One of the reasons for this was to let the manufacturing process work out its kinks. I was an early adopter of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Mac_transition_to_Intel_processors&#34;&gt;Intel transition&lt;/a&gt; and as awesome as that first Intel MacBook Pro was, it had a lot of issues. I’ve owned many Macs, and all have been solid machines. A few of those got more value out of Apple Care than others. That first Intel MacBook Pro was one.&lt;/p&gt;
&lt;p&gt;When I made that transition to Intel most everything I used ran using Rosetta. Apple made a bold move, but the software ecosystem took time to catch up. With the M1 transition, I wanted to give the ecosystem some time. Being on the cutting edge of things often means a bit of discomfort. Waiting a few months reduces that. In my case, the delay gave Microsoft time to update a bunch of apps that are critical for me to run natively on the M1. That was worth the wait.&lt;/p&gt;
&lt;p&gt;Rosetta 2 is a translation layer on the M1 that runs apps that were originally built for Intel. If you open an Intel-based app, in the background Rosetta 2 will transparently make it so you can run the software. The first time you do this &lt;a href=&#34;https://support.apple.com/en-us/HT211861&#34;&gt;it’ll prompt you to install Rosetta 2&lt;/a&gt;. I’m not sure why Apple didn’t preload this onto M1 Macs. That would have made sense for most people. It seems like most people will need this for a while. Nonetheless the only time you’ll notice Rosetta 2 is the first time you open an Intel app. It’s slower, presumably because Rosetta 2 is doing some upfront translation work. After that, though, you would never notice an Intel app wasn’t built to run natively on an M1. It’s unbelievable the technical feat that Apple accomplished here. The most impressive piece of technology is the one that works so well that you forget it is there. That’s Rosetta 2.&lt;/p&gt;
&lt;p&gt;I cannot overstate how much faster the M1 is. There are a few benchmarks out there, like &lt;a href=&#34;https://browser.geekbench.com/mac-benchmarks&#34;&gt;GeekBench&lt;/a&gt;, with hard numbers that are worth checking out. Those benchmarks track raw CPU output. I am more interested in how the new processor handles day-to-day work. For the most part, everything seems instantaneous. Even processes that were fast on my 2018 MacBook Pro seem faster on the M1. What blew me away was the first time I compiled code written in Apple’s Swift programming language. I had to do a double-take to make sure Apple’s Xcode had compiled the code because it happened so fast. I’m used to hitting that build button and waiting a minute or more. On the M1 the code compiled about as quickly as it takes to snap one’s fingers. Likewise, the time it took for Photos to process facial recognition was orders of magnitude faster. I recently reset my Photos library on the 2018 MacBook Pro so I was painfully aware of how long it could take. On the M1 I set it up late on a Friday night and left it to run (without sleeping) overnight. With the 2018 MacBook Pro, I did this for several nights in a row. With the M1 when I woke up the next morning it had finished. At first, I thought something had gone horribly wrong because it shouldn’t be that bast. But all my facial data was there and matched up with what I saw on my iPhone and iPad. It’s things like this that can make a huge difference in the day-to-day of Mac users.&lt;/p&gt;
&lt;p&gt;I decided with my M1 to get the MacBook Air instead of a Pro. There were a few reasons for this. If you get the 8 core Air model, the processors are the same between the models. The memory and hard drive options were the same too. The primary difference came down to cooling. The MacBook Pro has a fan and the Air does not. The MacBook Pro also has a Touch Bar. I’ve never been a fan of the Touch Bar. I’ve tried to make use of it, but more often than not it shows me the wrong thing at the wrong time. When the Touch Bar debuted its most compelling feature was Touch ID. Touch ID is a game-changer in so many ways. I don’t think this is a simple case of being old and stuck in my ways. I’m generally pretty receptive to new doing things that Apple products use. The Touch Bar never made using my laptop easier, with one exception: the emoji picker. As for the fans, this was a tough call. I have a soft spot for the MacBook Air. Because it has Touch ID without a Touch Bar I decided that made the most sense for me.&lt;/p&gt;
&lt;p&gt;When the MacBook Air was introduced in 2008 I &lt;a href=&#34;https://www.youtube.com/watch?v=NGM4PXbUnBc&#34;&gt;watched the event&lt;/a&gt;. I was blown away at the idea of a computer that fit into a manilla envelope. That first Air was crazy expensive. It was not a laptop that made sense for me at the time. My first Mac was an &lt;a href=&#34;https://everymac.com/systems/apple/ibook/specs/ibook_g4_800_12.html&#34;&gt;12” iBook&lt;/a&gt;. I wrote a ton of code on that thing, and it got me through college too. For the time it felt like a really small computer and I loved the portability of it. When I switched to the MacBook Pro it was considerably bigger. I found that I often missed the form factor of that iBook. So when Apple released the 11” Air a few years after the Air’s debut, I had my eyes on it. In 2011 Apple updated the Air to Intel’s Sandy Bridge architecture and &lt;a href=&#34;https://everymac.com/systems/apple/macbook-air/specs/macbook-air-core-i5-1.6-11-mid-2011-specs.html&#34;&gt;I pulled the trigger&lt;/a&gt;. Again I wrote a ton of code on that little device and I took it everywhere with me. It almost ruined the iPad for me. Almost, but I’ll save that story for another time.&lt;/p&gt;
&lt;p&gt;In hindsight, that MacBook Air I bought was underpowered for many of the things I did with it. Yet I loved that laptop. There was something about the portability of it that was a game-changer. It was for that reason that I bought a &lt;a href=&#34;https://everymac.com/systems/apple/macbook_pro/specs/macbook-pro-core-i5-2.3-13-mid-2018-true-tone-display-touch-bar-specs.html&#34;&gt;13” MacBook Pro&lt;/a&gt; instead of the 15” in 2018. When it came time for me to jump in on the M1 I couldn’t resist the Air.&lt;/p&gt;
&lt;p&gt;As I mentioned I did a few intensive things with my M1 that typically generated a lot of heat on my MacBook Pro’s case. I let Photos rescan my library for faces. I built projects in Xcode. I compiled packages from source with &lt;a href=&#34;https://brew.sh&#34;&gt;homebrew&lt;/a&gt;. The heat output from the new M1 is non-existent. I’m sure I’ll come up with a task that will generate some heat, but I haven’t done it yet.&lt;/p&gt;
&lt;p&gt;Apple seems to have done something magical here. I can’t recall the last time I had a laptop rest on my lap without feeling the heat on my legs. Heat output seems like a strange thing to put a lot of stock in, heat but it is a big deal in day-to-day use. The bottom line is the M1 is a more pleasant Mac to hold.&lt;/p&gt;
&lt;p&gt;I’ve not had my M1 long enough to claim I’ve tested the battery. I’ve been avoiding plugging it in to see how long the charge lasts. I’m leaving apps open, surfing the web, compiling code, and writing docs. The only thing that is crystal clear is this Mac will last longer than my Intel Mac doing similar things. Last week I unplugged it Saturday morning to work on configuring things and used it periodically each day until Tuesday. On Tuesday at 33% macOS told me to plug it in so I could install the Big Sur update. I recorded my Podcast Tuesday night and am writing this today and have not yet plugged it in. Anecdotally the battery life is insane.&lt;/p&gt;
&lt;p&gt;I was looking forward to was installing iPad apps on my M1 Mac. There are a few awesome apps, like &lt;a href=&#34;https://overcast.fm&#34;&gt;Overcast&lt;/a&gt;, that I want on my Mac but are only on iOS. By using a similar architecture to the iPad the M1 Macs open up the possibility of running these iPad apps. There were signs that this might be on Apple’s radar, but I never thought they would actually do it. This is a great thing for developers because now it’s even easier to build an app once for all Apple’s platforms. For a consumer, it also unlocks a bunch of fantastic apps that were previously exclusive to iOS.&lt;/p&gt;
&lt;p&gt;There are two things I&#39;m not thrilled with on the M1 MacBook Air. The first is that both of its ports are on the left side of the device. I would have preferred at least one USB-C port on the right side. The few times I&#39;ve charged it I ran the power chord behind the laptop because the outlet was to its right side. It&#39;s annoying, but not a deal-breaker.  The second is that the camera is the same crappy one Apple has on all their other portable Macs. It hasn&#39;t had a meaningful update in years. It&#39;s low resolution. There&#39;s no excuse for this when Apple makes one of the most widely used cameras on the market in the iPhone. The iPhone camera is great too! I don&#39;t feel like it&#39;s too much to ask in the age of Zoom meetings to put a decent camera into a laptop.&lt;/p&gt;
&lt;p&gt;One final thing, I was using a 2018 MacBook Air before this MacBook Air. &lt;a href=&#34;https://www.macrumors.com/guide/butterfly-keyboard-vs-scissor-keyboard/&#34;&gt;It had the much-hated butterfly switch keyboard.&lt;/a&gt; This never bothered me to the extent it did &lt;a href=&#34;https://marco.org/2017/11/24/fixing-the-macbook-pro&#34;&gt;so much of the internet&lt;/a&gt;. The lack of travel often felt awkward, but by and large, I was OK. Apple has backpedaled on that design choice, returning to the scissor switches. The keys have more travel and more clickiness (that’s a technical term), and it’s a nice homecoming. I didn’t expect the change to be a big deal for me. After using it I do like the scissor-switch much better and I am glad Apple went back to it.&lt;/p&gt;
&lt;p&gt;I am pretty impressed with the M1 MacBook Air. I worried that expectations were set too high by Apple and the pundits that reviewed it. They were not set too high, it is a great computer. It feels great and makes me excited to see what Apple does next with its processors.&lt;/p&gt;
</description>
        <pubDate>Fri, 12 Mar 2021 21:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/03/12/apple-m1-review/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/03/12/apple-m1-review/</guid>
        
      </item>
    
      <item>
        <title>Sanctus.org JavaScript Edition</title>
        <description>&lt;p&gt;&lt;a href=&#34;https://sanctus.org&#34;&gt;Sanctus.org&lt;/a&gt; is a hobby project of mine. It started when I was in college at Concordia University, River Forest. My dorm floor started praying Matins in the morning before classes together. This was before the Lutheran Service Book had been published. We relied upon a set of Word documents to pick daily readings. I thought it would be neat to have a webpage that did this for us. My dorm mates helped type data and shortly thereafter I released the first version of the site.&lt;/p&gt;
&lt;p&gt;Since 2003 the site has existed in some form. &lt;a href=&#34;https://github.com/stanlemon/lectionary&#34;&gt;In 2012 I released a PHP version of the calculator.&lt;/a&gt; This is the code responsible for determining which week of the Christian calendar a date is. I did not release the rest of the site because it was a hot mess. For a while now I&#39;ve dreamed of making a JavaScript version of the whole thing. I had a few goals:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It should be approachable to others with basic coding skills.&lt;/li&gt;
&lt;li&gt;Easily incorporated into a church website if someone wants.&lt;/li&gt;
&lt;li&gt;Include data and rendering tools as well as the calculator.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I would have never dreamed of doing this in JavaScript in 2003 because the state of JavaScript was a mess. Plus, browsers were not optimized for JavaScript-based applications as they are today.&lt;/p&gt;
&lt;p&gt;I&#39;m excited to share that the JavaScript version is real and you can find it on &lt;a href=&#34;https://github.com/stanlemon/lectionary-js&#34;&gt;GitHub&lt;/a&gt;. &lt;a href=&#34;http://stanlemon.com/lectionary-js/&#34;&gt;You can also see it in action in your web browser.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I still have a lot to do. While the calculator has extensive test coverage, the rendering library does not. I would also like to clean up some of the code on the daily view. None of this makes the code unapproachable. It&#39;s just that it could be better.&lt;/p&gt;
&lt;p&gt;I have not shut down the old version of &lt;a href=&#34;https://sanctus.org&#34;&gt;sanctus.org&lt;/a&gt;. There are a few things the new version does not have. The original version includes the scripture texts, but the new version only includes links. The original version also included daily Psalms, but the new does not. The truth there is that I have no idea where I found those Psalm selections. I&#39;d like to include Psalm readings, but I&#39;m not sure where to source them yet.&lt;/p&gt;
&lt;p&gt;I&#39;m excited about this new version. I hope that it&#39;ll be more accessible to folks who want to experiment with different use cases. The site has focused on the one-year lectionary for all of its life. The new code base would make a three-year version pretty simple to build. This is the sort of thing I wanted to unlock.&lt;/p&gt;
&lt;p&gt;Please check out the new version. If you find issues, let me know. If you&#39;ve been a user of Sanctus.org over the years I appreciate your support.&lt;/p&gt;
</description>
        <pubDate>Wed, 03 Mar 2021 08:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/03/03/sanctus-org-javascript-edition/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/03/03/sanctus-org-javascript-edition/</guid>
        
      </item>
    
      <item>
        <title>Nanoleaf Essentials Review</title>
        <description>&lt;p&gt;I’d like to think I have a modest yet informed smart home game. We are an &lt;a href=&#34;https://www.tomsguide.com/us/apple-homekit-faq,review-4195.html&#34;&gt;Apple HomeKit&lt;/a&gt; house. I love Apple’s position on security, especially when it comes to technology for my home. While HomeKit is great it can make it challenging to find affordable devices. I’ve used smart plugs for a long time and recently decided I wanted to try bulbs. Each of my master bedroom lamps plugged into a smart plug. I use HomeKit automation to turn them on in the morning. The problem is they come on at full brightness and make waking up a bit jarring. What I wanted was for them to increase brightness over a half-hour. So I decided to look for dimmable smart bulbs.&lt;/p&gt;
&lt;p&gt;The go-to for smart bulbs is &lt;a href=&#34;https://www.philips-hue.com/en-us&#34;&gt;Phillips Hue&lt;/a&gt;. They seem like a decent enough product; the reviews are good. They need a dedicated hub to work with HomeKit. The entry cost is also pretty expensive. Because of this I started to look around and first landed with a set of &lt;a href=&#34;https://amzn.to/3umDO6L&#34;&gt;bulbs from Sylvania&lt;/a&gt;. With the &lt;a href=&#34;https://amzn.to/3umDO6L&#34;&gt;Sylvania bulbs&lt;/a&gt;, I experienced a lot of lag between triggering action and it taking place. Sometimes the action never triggered. The lamps with these bulbs were pretty far from my router. I suspect this is why they were not very responsive. I ended up returning the bulbs.&lt;/p&gt;
&lt;p&gt;That leads me to &lt;a href=&#34;https://nanoleaf.me&#34;&gt;Nanoleaf&lt;/a&gt;. I’d never heard of this company before. They’re not on Amazon, but they are on the Apple website. From what I gather they primarily make decorative lightings like tiles and strings. They also have a line called Essentials, which includes an A19 socket bulb. This is exactly what I wanted. I wasn’t interested in a multi-color bulb, but that’s all they make. I wanted to control the bright white to cool spectrum and the multi-color bulbs let me do that.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/hmjLHpQqak-300.webp 300w, /img/hmjLHpQqak-600.webp 600w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/hmjLHpQqak-300.png 300w, /img/hmjLHpQqak-600.png 600w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/hmjLHpQqak-300.jpeg&#34; alt=&#34;My nightstand lamp&#39;s nanoleaf essentials bulb, green with full brightness.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;600&#34; height=&#34;600&#34; srcset=&#34;/img/hmjLHpQqak-300.jpeg 300w, /img/hmjLHpQqak-600.jpeg 600w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;What made the &lt;a href=&#34;https://nanoleaf.me&#34;&gt;Nanoleaf&lt;/a&gt; bulbs special was the inclusion of the Thread protocol. Most likely you’ve never heard of Thread. Thread is for Internet of Things devices. It is low power and works in a mesh. If you have other Thread enabled devices they benefit from proximity to each other. It so happens that my HomePod Minis support Thread. Because it uses Thread, the &lt;a href=&#34;https://nanoleaf.me&#34;&gt;Nanoleaf&lt;/a&gt; bulbs are as close to instantaneous as possible. There will always be a delay with wireless products. With the &lt;a href=&#34;https://nanoleaf.me&#34;&gt;Nanoleaf&lt;/a&gt; it&#39;s barely perceptible.&lt;/p&gt;
&lt;p&gt;Setup was a breeze in the Home app. You use the Add Accessory button in the Home app and scan the HomeKit code. It takes a few seconds but then you have total control of the bulb. The only downside is the Home app itself. The app allows control of the brightness and color. If you have more than one bulb though, good luck trying to match the colors between them. The Home App could benefit from a recently used palette.&lt;/p&gt;
&lt;p&gt;I set up a bunch of automations in the Home app to increase bulb brightness by 10% every five minutes. It works, but I wish this process was more streamlined. What I want is to go from 10% to 50% over thirty minutes starting at a specific time. One of the other things I automated was turning the bulbs on when my ecobee detects motion. Between 6 pm and 10 pm, if you walk into the master bedroom the ecobee will turn the lights on. Then if the motion stops for a while it will turn them off again. I wish the Home app allowed more complex scheduling of automations. You can either choose sunset to sunrise or specific times. What I want is thirty minutes before sunset until 10 pm. Maybe in iOS 15!&lt;/p&gt;
&lt;p&gt;These bulbs are competitively priced to other smart bulbs. Granted a smart bulb is way more expensive than a standard bulb. They are not available on Amazon. The only place I could find them was on Apple’s site. There is a standalone app available but it’s not necessary. If you do use it, I recommend setting it up after configuring the bulbs in the Home app. The &lt;a href=&#34;https://apps.apple.com/us/app/nanoleaf-smarter-series/id1049333656&#34;&gt;Nanoleaf app&lt;/a&gt; is the only way to update the bulb firmware as far as I can tell.&lt;/p&gt;
&lt;p&gt;If you need smart bulbs and are in the HomeKit ecosystem these seem to me to be the best option. There are other HomeKit bulbs out there but they either need a hub or have latency issues. &lt;a href=&#34;https://nanoleaf.me&#34;&gt;Nanoleaf&lt;/a&gt; combines functionality and responsiveness in a competitively priced bulb for your HomeKit smart home. &lt;a href=&#34;https://www.apple.com/shop/product/HPE62ZM/A/nanoleaf-essentials-a19-bulb&#34;&gt;Grab some over on Apple&#39;s website.&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 21 Feb 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/02/21/nanoleaf-essentials/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/02/21/nanoleaf-essentials/</guid>
        
      </item>
    
      <item>
        <title>Super Bowl 2021</title>
        <description>&lt;p&gt;After 10 months I&#39;m ready for the Super Bowl. I&#39;m not as excited about it as I thought I would be, though. Despite not having pre-season games, this season felt a lot longer than normal. Perhaps it&#39;s because games got moved around each week. Or maybe it&#39;s because I never knew who was actually going to play for my team.&lt;/p&gt;
&lt;p&gt;Nonetheless here we are at Super Bowl Sunday.&lt;/p&gt;
&lt;p&gt;I love football and I love the Pittsburgh Steelers. I&#39;m heart broken that my team lost steam at the end of the season and didn&#39;t advance. For our family, Super Bowl Sunday is an opportunity to get together with friends and family. We eat good food and socialize and the game just happens to be on in the background. Unless the Steelers are in it, then that&#39;s the main attraction. But it&#39;s been awhile, unfortunately.&lt;/p&gt;
&lt;p&gt;There&#39;s no Lemon family Super Bowl party this year. That&#39;s OK. Covid has taught us patience, and I&#39;m OK not celebrating this Super Bowl. It&#39;s another Tom Brady year and I&#39;m kind of sick of watching him play in the big game.&lt;/p&gt;
&lt;p&gt;Don&#39;t get me wrong, Tom is without a doubt the greatest quarterback of my life time and likely of all time. As much as it pains me, he is the GOAT. If there was any doubt, he proved the naysayers wrong this year when he got to the big game without Belichek. Nonetheless, it&#39;s time for the NFL to move on from Tom Brady.&lt;/p&gt;
&lt;p&gt;Football is a great game. I love that on any given Sunday every team has a shot at victory. The equity of the NFL sets it apart from other sports like MLB. In MLB money wins games. If you have enough you can buy your way to a championship. Talent and coaching are important, but the point is you can buy those things. In the NFL, if you break the bank on the best running back in the league you have, at best, a third of a game plan. You also won&#39;t have any money to buy the rest of that game plan. The salary cap forces teams to make smart decisions or suffer the consequences.&lt;/p&gt;
&lt;p&gt;Tom Brady is an existential threat to the NFL&#39;s equity. His talent tilts the scales unfairly to whatever team he plays on. His salary undervalues his skill. It kills me to say that, it really does, but it&#39;s true. If there are any doubts, ask the Buffalo Bills what they think. For the first time in a generation they won their division!&lt;/p&gt;
&lt;p&gt;I will probably watch the Super Bowl, but I won&#39;t promise to like it. I will root against Tom Brady as I have the last 9 times he&#39;s been in this game. If he does happen to win I hope he hangs up the cleats for good. Tom winning would be the kind of normal we had before 2020. But the NFL needs a new normal. (Don&#39;t we all?) Tom needs to step away to make the game less predictable and more interesting for fans. In 2022 the Super Bowl should have less Tom Brady and more black and yellow.&lt;/p&gt;
&lt;p&gt;Anyhow, good luck Patrick! Make ‘em eat turf.&lt;/p&gt;
</description>
        <pubDate>Thu, 04 Feb 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/02/04/super-bowl/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/02/04/super-bowl/</guid>
        
      </item>
    
      <item>
        <title>The Return of MagSafe</title>
        <description>&lt;p&gt;There is a &lt;a href=&#34;https://www.macrumors.com/2021/01/15/new-macbook-pro-models-magsafe-ports/&#34;&gt;rumor&lt;/a&gt; that MagSafe is returning to the Mac. Even &lt;a href=&#34;https://www.bloomberg.com/news/articles/2021-01-22/apple-aapl-plans-new-macbook-air-with-magsafe-macbook-pro-with-sd-card-slot&#34;&gt;Mark Gurman&lt;/a&gt; buys into this rumor. &lt;em&gt;I &lt;strong&gt;hope&lt;/strong&gt; it’s not true.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In the early 2000’s Apple released improvements to their products that seemed minor, but often had dramatic improvements in day to day use. It was this attention to detail that set Apple apart and helped to create a new generation of Apple fanboys. MagSafe was one of those features. Almost everyone has, at some point, snagged a laptop charging cable and put their device at peril. Apple’s idea of using a magnet in the charging connector to avoid accidentally tossing your device off of its perch was brilliant and it won over tons of fans. It’s hard to remember just how crazy this idea was, but back then you weren’t supposed to put a magnet anywhere near your devices. Magnets were the enemy, often responsible for data loss and hardware failure. It’s easy to forget this and take for granted how astounding this seemed at the time because, since MagSafe, we’ve had lots of devices with magnet integrations, like the iPad Smart Covers, the Apple Watch and now iPhone cases.&lt;/p&gt;
&lt;p&gt;When MagSafe got a makeover in 2012 there was a lot of grumbling because many of us had invested in and amassed a few MagSafe chargers. The hard reality was that our devices got smaller and our ports needed to adapt. Our ports also needed to keep up with innovations in power consumption and transfer. This was no different than when the iPhone switched from the 30 pin adapter to lightning, a change needed because the iPhone needed faster charging and more transfer throughput. MagSafe 1 to MagSafe 2 was painful, but we all eventually got over it.&lt;/p&gt;
&lt;p&gt;Eventually Apple ditched MagSafe altogether and embraced USB-C. This was not without hurt feelings across the Apple-verse. Personally I love the idea of USB-C. &lt;em&gt;It’s one adapter to rule them all. My precious.&lt;/em&gt; Despite the promised ubiquity of USB-C, it was never better than MagSafe from a usability standpoint. Apple needed to add USB-C to its devices, but not for charging. Nonetheless Apple went all in, getting rid of every port on the Mac except for USB-C, included our beloved MagSafe.&lt;/p&gt;
&lt;p&gt;Now that we’ve had four years to switch everything over to USB-C switching to MagSafe would be a terrible move. USB-C chargers have never been particularly affordable, and good USB-C cables aren’t exactly cheap either. Because Macs shipped with only USB-C ports, many of us amassed a collection of dongles and hubs, some of which had pass thru power. These were pricey purchases. All of this gear becomes potentially obsolete the minute Apple ditches charging via USB-C. I suppose Apple could reintroduce a standalone charging port alongside of USB-C, though honestly I think this would be extremely confusing for the vast majority of consumers.&lt;/p&gt;
&lt;p&gt;The iPad recently switched to USB-C. I thought the iPhone 12 might join it this year. I should say, I hoped the iPhone 12 would join it. Apple did, however, ditch charger blocks with the iPhone 12, opting to include a lightning to USB-C cable. If ever there was a time to ditch lightning on the iPhone it was when they dropped the charger block. In addition Apple reintroduced the MagSafe branding on a rather expensive magnetic charger for the back of the iPhone. It’s probably great to use if you don’t mind your phone charging more slowly, but it’s hard to justify at the excessive price point that ecosystem commands.&lt;/p&gt;
&lt;p&gt;The best thing Apple could do is to keep USB-C on the Mac and work harder at making affordable chargers, cables and better multi port hubs. Apple’s HDMI and Single USB-A hub is one of the most reliable hubs out there, but it has just a single USB-A port. Apple needs to finish transforming its line of mobile devices to USB-C, including the port on the bottom of the iPhone. Rather than ditch USB-C for charging, Apple should push the standard forward to enable faster power and higher wattage than it does today. Bringing back MagSafe on the Mac would be a risky gamble that is sure to upset many folks who just got comfortable with USB-C. It also stands to be extremely confusing if that branding extends to MacBook chargers and iPhone cases. &lt;em&gt;If Apple really wants to bring the original cleverness of MagSafe back to the Mac then do it through a clever USB-C adapter, but &lt;strong&gt;please&lt;/strong&gt;, Apple, don’t change power charging ports on us again.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 31 Jan 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/01/30/the-return-of-magsafe/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/01/30/the-return-of-magsafe/</guid>
        
      </item>
    
      <item>
        <title>Review of the Apple One Bundle</title>
        <description>&lt;p&gt;It amazes me that I meet folks who haven’t heard of the &lt;a href=&#34;https://www.apple.com/apple-one/&#34;&gt;Apple One bundle&lt;/a&gt;. Nonetheless I’ve met a lot of people who missed Apple’s announcement and subsequent rollout at the end of October 2020. The Apple One Bundle takes the various services Apple has built out over the last few years and packages them up into a single billing structure. With the Apple One Bundle you’re charged once a month for all of the services in your bundle. Prior to this every Apple service you signed up for had a different billing date and a separate transaction.By bundling more than one service you also receive discounts on the total cost of having these services. But is the Apple One Bundle worth it?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Current pricing for Apple services by themselves look like this:
&lt;ul&gt;
&lt;li&gt;iCloud storage per month runs 50gb for $.99, 200gb for $2.99 and 2tb for $9.99&lt;/li&gt;
&lt;li&gt;Music runs $9.99/month for an individual and $14.99 for a Family of up to 5.&lt;/li&gt;
&lt;li&gt;TV+ runs $4.99/month&lt;/li&gt;
&lt;li&gt;Arcade runs $4.99/month&lt;/li&gt;
&lt;li&gt;News+ runs $9.99/month&lt;/li&gt;
&lt;li&gt;Fitness+ runs $9.99/month&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bundle pricing looks like:
&lt;ul&gt;
&lt;li&gt;Individual at $14.95/month (Single user, Music, tv+, Arcade, iCloud 50gb)&lt;/li&gt;
&lt;li&gt;Family at $19.95/month (Up to 6 users, iCloud increases to 200gb)&lt;/li&gt;
&lt;li&gt;Premier at $29.95/month (News+, Fitness+, iCloud increases to 2tb)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Verbiage on the Apple site is confusing for the number of users. It often says, “up to 5 other people”. This means 6 users total, the subscriber plus five others. I’m honestly not sure what big families are supposed to do, but I think Apple is trying to limit people sharing these subscriptions with extended family members and friends.&lt;/li&gt;
&lt;li&gt;The trial for Apple One is extremely confusing, as they prorate based upon which services you’ve already used a trial for. If you’re currently running a multi-month trial (like the 3 month Arcade one with new iPhone) you’ll lose the balance of trial months.&lt;/li&gt;
&lt;li&gt;Like many bundles, this is more compelling the more services you are already using.&lt;/li&gt;
&lt;li&gt;In my situation I regularly paid for 2tb of iCloud storage, Apple Music for a family and Apple Arcade, so by upgrading to the Apple One bundle I gained News+, TV+ and Fitness+ (total of $24.97 by itself) for no additional cost.&lt;/li&gt;
&lt;li&gt;iCloud storage is absolutely worth having if you have an iPhone. Put your documents in it, use it for iPhone backups and store your Photos in it. It’s the safest and most secure option for you and your family. The only other service I would even consider recommending is Microsoft’s OneDrive, but that doesn’t offer iPhone backup storage or a Photos product.&lt;/li&gt;
&lt;li&gt;Apple Music is great, and if you’re in the Apple ecosystem it is, in my opinion, a better offering than Spotify. Sharing a single iTunes account for Apple Music among multiple people neuters the service of its personalization benefits, so if you have a significant other or kids you should absolutely be using a family subscription. Don’t believe me? It took years to get Taylor Swift out of my music recommendations. It’s not worth it.&lt;/li&gt;
&lt;li&gt;Arcade has high quality games with no ads. If you have kids, the ads in many free games are the thing you should be worried about. Games in the App Store are often not rated based upon the smut that comes across in app ads, so you could potentially be exposing your little ones to pure garbage. Plus, the Arcade games are really high quality. We have a rule in our house: I’ll approve installing ANY Arcade game for my kids. If it’s not an Arcade game and it has ads the kids don’t even ask me anymore.&lt;/li&gt;
&lt;li&gt;TV+ is a decent streaming service and I was happy to use it on a first year promo. I really enjoyed For All Mankind, The Morning Show, See, Defending Jacob, Greyhound and Tehran. My kids loved Ghost Writer. These shows had great writing and solid acting and because of them TV+ is a contender with other premium content providers. TV+ wasn’t enough content to keep me paying for the service by itself, though, at least not yet. I’m sure covid slowed down their production significantly, so I it’ll be interesting to see if TV+ can keep up with content now that Hollywood is back in action.&lt;/li&gt;
&lt;li&gt;News+ is hard to justify at $9.99/month unless you’re heavily into Magazines. Magazine junkies will find an extensive catalog of content of all sorts. That’s not me. I am a news paper junkie, though. The Wall Street Journal has a ton of complex packaging options, but if you plan on having a subscription for longer than 12 weeks then News+ is the most affordable way to get the WSJ. There are other great papers available too, like the LA Times, Houston Chronicle and the San Francisco Chronicle. The problem is the News app, which is a hot mess to navigate and never really shows me content from the sources I want most. If I just want to navigate through the sections of the WSJ it’s not a great experience. If, like me, you’re in that 2tb iCloud category then odds are the Premier Bundle makes sense for you, and then News+ is included, which is just fine.&lt;/li&gt;
&lt;li&gt;Fitness+ looks great, and though I’m not a fitness junkie I appreciate what they’re doing here. I did a whole podcast on this recently so I won’t go into depth here but you can check out the episode. If you’re in the Premier bundle then Fitness+ comes with the Premier bundle and is a sweet addition.&lt;/li&gt;
&lt;li&gt;All of these services continue to get great content added to them each month.&lt;/li&gt;
&lt;li&gt;If you’re in the 2tb iCloud storage block and have Apple Music for a family you can look at the Premier bundle one of two ways, for $5 extra you’re getting a ton of solid material. If you have any of the $5 services already, then you get it at no additional cost. If you have (or want) one of the $10 services, you’ll basically get it half off with a bunch of other stuff at no cost.&lt;/li&gt;
&lt;li&gt;The Family Bundle is the best all around deal if you have another person in your life.&lt;/li&gt;
&lt;li&gt;Historically Apple has NOT increased the cost of its services. iCloud storage, while pricey per gb, has never gotten more expensive. The same is true for Apple Music.&lt;/li&gt;
&lt;li&gt;Just about every streaming service has increased their rates over the past year, including Disney+.&lt;/li&gt;
&lt;li&gt;It remains to be seen if the prices of the Apple One bundle will stay put or not. I think they’re safe for the next few years, anyhow.&lt;/li&gt;
&lt;li&gt;I think that most people will find savings in the Apple One Bundle and almost everyone will get some additional content they didn’t have before.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; I have no problem recommending the Apple One Bundle.&lt;/p&gt;
</description>
        <pubDate>Fri, 22 Jan 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/01/22/review-of-the-apple-one-bundle/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/01/22/review-of-the-apple-one-bundle/</guid>
        
      </item>
    
      <item>
        <title>Keeping Your Internet Safe with NextDNS</title>
        <description>&lt;p&gt;The internet is like the Wild Wild West, without the awesome soundtrack and dance moves of Will Smith. The truth is it’s a really dangerous place, for kids as well as adults. It gets harder every day to know what is safe and understand the consequences of interacting with all of the digital services that make up our world. As a father of three who are increasingly becoming connected it’s even harder, because the last thing I want is them stumbling into a snake’s nest. I’ve tried a number of things over the years, but I feel like for the first time my home internet is safe for me, my wife and my kids. Let me introduce you to &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/bUy8_tk1a3-300.webp 300w, /img/bUy8_tk1a3-600.webp 600w, /img/bUy8_tk1a3-1000.webp 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/bUy8_tk1a3-300.png 300w, /img/bUy8_tk1a3-600.png 600w, /img/bUy8_tk1a3-1000.png 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/bUy8_tk1a3-300.jpeg&#34; alt=&#34;On the right hand side of the Roku home screen there is usually an ad.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1000&#34; height=&#34;576&#34; srcset=&#34;/img/bUy8_tk1a3-300.jpeg 300w, /img/bUy8_tk1a3-600.jpeg 600w, /img/bUy8_tk1a3-1000.jpeg 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;It’s worth mentioning what pushed me over the edge to revisit my current ad blocking and tracker blocking strategy. Around the time the new Borat movie was released Amazon was buying ads everywhere, and one evening I turned on our Roku TV to find a picture of Borat in a Mankini plastered in the ad spot to the right of my Roku channels. My kids were in the room, but fortunately were paying attention to other things. To say I was mad would be an understatement. I was determined to find a way to block ads on the Roku TV. Many friends recommended setting up a &lt;a href=&#34;https://pi-hole.net&#34;&gt;pi-hole&lt;/a&gt;, but that involved more work than I wanted to take on. After much trial and error I’m happy to report &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; blocks the ad section on the Roku and also covers a ton of other nefarious ads and trackers. Thanks to &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; my home internet is much safer for me and my family.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bottom line: Internet safety for you and your family is really hard.&lt;/li&gt;
&lt;li&gt;There are essentially three categories you need to protect on: Tracking, ads and domains.&lt;/li&gt;
&lt;li&gt;Tracking can get down right creepy. Everyone needs to make a personal decision about how much they want various websites to profile them. I’m somewhere between nothing and nothing.&lt;/li&gt;
&lt;li&gt;A few years back Apple introduced ad blockers to much fanfare. The problem is that much of our engagement with content actually happens in Apps where these ad blockers have no ability to protect you.&lt;/li&gt;
&lt;li&gt;Many ad blockers also block tracking too. The thing is, most people I know do not have ad blockers installed on their computers and definitely not on their mobile devices.&lt;/li&gt;
&lt;li&gt;It is worth mentioning that not all ad blockers are created equal. Some actually do their own tracking and that’s how they make money. Buyer beware!&lt;/li&gt;
&lt;li&gt;While some ad blockers are nefarious, many are not. My favorite has been Better, which I had been using on my Mac, iPhone and iPad.&lt;/li&gt;
&lt;li&gt;Deploying an ad blocker app to your whole family is manual and a true headache.&lt;/li&gt;
&lt;li&gt;Apple recently bundled tracking protection into its Safari web browser, which is great, but that does not extend into apps.&lt;/li&gt;
&lt;li&gt;Not all ads are bad, and some are genuinely necessary for content providers to make money to continue to produce content. Unless you’re comfortable paying for all of your content on the internet you have to tolerate (and accept?) some ads, or the services that provide free ad-based content will cease to do so.&lt;/li&gt;
&lt;li&gt;Many content providers have little visibility into what sort of ad garbage might be tacked onto their content. This is especially true for free games in the App Store. Another example would be my local newspaper’s app, which has some of the most egregious and self-compromising ads.&lt;/li&gt;
&lt;li&gt;Many routers now ship with various content filters. These can be handy, but they’re more likely to be a pain to setup. Plus, this is not the primary business of these products and the quality of their content filters are just not top tier in my opinion.&lt;/li&gt;
&lt;li&gt;Disney actually has a product in this space called &lt;a href=&#34;https://meetcircle.com&#34;&gt;Circle&lt;/a&gt;, specifically for kids’ use of the internet. It’s expensive ($9.99/month plus the central device). I think this product is more accessible than many but it’s still not Disney’s primary business and leaves a lot to be desired.&lt;/li&gt;
&lt;li&gt;Services like &lt;a href=&#34;http://opendns.com&#34;&gt;OpenDNS&lt;/a&gt; have been around for a long time and provide a decent way for blocking things like pornography at your network level. They don’t offer a great solution once your mobile device leaves the nest. It’s not great at dealing with tracking and ads, either. And the interface for working with OpenDNS is painfully dated and difficult to use.&lt;/li&gt;
&lt;li&gt;In comes &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt;, a competitor to services like OpenDNS that also deals with stopping trackers and blocking ads.&lt;/li&gt;
&lt;li&gt;Spoiler alert: &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; is awesome.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; is free for up to 300k DNS requests a month. In my household I blew through this in 12 days, but it’s a great way to grease the gears, and if you happen to be beneath that total request account, then the service is essentially free. There is simply no reason not to try it out.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; runs a bank-breaking $20/year for your home network and associated devices. This is half a trip to Burger King for my family.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; provides traditional domain category blocking, so you can shut down requests to porn, gambling and other things.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; provides a variety of additional security features, such as enforcing Safe Search with search engines like Google and forcing YouTube restricted mode.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; has advanced security features such as Cryptojacking protection, something that most people have never heard of but on which &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; has you covered.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; also include Native Tracking Protection, which stops hardware like my Sonos and Roku from capturing low level tracking data. Apple actually does some of this tracking too (though it’s anonymized when it hits Apple’s servers), but I’ve found that some Apps really choke when it’s enabled. I’m looking at you, Pokemon TCG and Marvel Unlimited.&lt;/li&gt;
&lt;li&gt;I’ve stopped using ad blockers on my devices because &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; has me covered.&lt;/li&gt;
&lt;li&gt;Using &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; at the router level, everyone in my family got tracking and ad protection. My kids largely don’t have access to the web because they interact mostly through apps which I have to approve before they can install them. &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; was an upgrade to our internet security because of how broadly I could apply it to all of my family’s devices.&lt;/li&gt;
&lt;li&gt;My plan is to install the &lt;a href=&#34;https://apps.apple.com/ca/app/nextdns/id1463342498&#34;&gt;NextDNS iOS app&lt;/a&gt; on each iPhone, iPad and iPod touch in the house. This is a hassle the first time, but it uses a VPN profile to ensure that the device is forced to route through &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; DNS services when they leave the nest. I can still control &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; centrally, and the app also allows me to identify each device so that I can see what’s happening from &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; logs. The setup effort involved here is well worth it in my opinion.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://apps.apple.com/app/nextdns/id1464122853&#34;&gt;NextDNS also has a Mac app&lt;/a&gt; that covers the same use case, and it’s installed on the one personal Mac we have in the house. I imagine they have a Windows app, too, for those who use that OS.&lt;/li&gt;
&lt;li&gt;Side Note: &lt;a href=&#34;https://help.nextdns.io/t/g9hmv0a/how-to-install-and-trust-nextdns-root-ca&#34;&gt;It’s worth taking the time to install the NextDNS root certificate on your devices, too.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; has some seriously awesome technology, but they also have awesome explanations of what they do. Take, for example, &lt;a href=&#34;https://nextdns.io/privacy&#34;&gt;this absurdly easy to understand privacy policy&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Tangentially related to this is that if you’ve just been using whatever random DNS servers your ISP has configured (whether that’s Comcast, etc. or your cellular provider like Verizon) you’re exposing a lot of data and it’s probably impacting your network performance. Over the years, services like OpenDNS or &lt;a href=&#34;https://developers.google.com/speed/public-dns/&#34;&gt;Google’s DNS&lt;/a&gt; or &lt;a href=&#34;https://www.cloudflare.com/learning/dns/what-is-1.1.1.1/&#34;&gt;Cloudflare’s 1.1.1.1&lt;/a&gt; have offered faster DNS lookups without all of the additional security protections of NextDNS. Cloudflare actually has a decent mobile setup to cover you when you leave the nest, but otherwise once you went mobile you were on your own. &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; has you covered on this front and as far as I can tell is competitive with the other big DNS providers. It’s definitively faster than the defaults my AT&amp;amp;T Broadband connection provides.&lt;/li&gt;
&lt;li&gt;For the first time since I gave my kids devices I really feel like our internet is safe. &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; has thought about things I never considered and is protecting the household at multiple layers.&lt;/li&gt;
&lt;li&gt;If you’re like me and you’re not comfortable with wide open access to the internet for your kids, this is the absolute best thing you can do for them.&lt;/li&gt;
&lt;li&gt;If you’re like me and you’d rather not have every action you take on the internet be tracked, this is the absolute best way to stop that.&lt;/li&gt;
&lt;li&gt;If you’re like me and you’re tired of excessive and inappropriate ads on everything from your news app, to the web, to your Roku, then this is the absolute best way to stop that.&lt;/li&gt;
&lt;li&gt;Seriously, give &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; a shot. You won’t regret it!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I did not receive anything in return for this review, and none of the links I’m providing to &lt;a href=&#34;https://nextdns.io&#34;&gt;NextDNS&lt;/a&gt; are affiliate links. I simply believe in the service.&lt;/p&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/5TgYWj0kAT-300.webp 300w, /img/5TgYWj0kAT-600.webp 600w, /img/5TgYWj0kAT-1000.webp 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/5TgYWj0kAT-300.png 300w, /img/5TgYWj0kAT-600.png 600w, /img/5TgYWj0kAT-1000.png 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/5TgYWj0kAT-300.jpeg&#34; alt=&#34;NextDNS offers several layers of security, many of which are very advanced and mitigate serious risks.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1000&#34; height=&#34;721&#34; srcset=&#34;/img/5TgYWj0kAT-300.jpeg 300w, /img/5TgYWj0kAT-600.jpeg 600w, /img/5TgYWj0kAT-1000.jpeg 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;NextDNS offers several layers of security, many of which are very advanced and mitigate serious risks.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/xMwQo8Sbk3-300.webp 300w, /img/xMwQo8Sbk3-600.webp 600w, /img/xMwQo8Sbk3-1000.webp 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/xMwQo8Sbk3-300.png 300w, /img/xMwQo8Sbk3-600.png 600w, /img/xMwQo8Sbk3-1000.png 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/xMwQo8Sbk3-300.jpeg&#34; alt=&#34;NextDNS ad &amp;amp; tracker blocking is the best I&#39;ve ever used.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1000&#34; height=&#34;709&#34; srcset=&#34;/img/xMwQo8Sbk3-300.jpeg 300w, /img/xMwQo8Sbk3-600.jpeg 600w, /img/xMwQo8Sbk3-1000.jpeg 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;NextDNS ad &amp; tracker blocking is the best I&#39;ve ever used.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/M6YyDjKAcA-300.webp 300w, /img/M6YyDjKAcA-600.webp 600w, /img/M6YyDjKAcA-1000.webp 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/M6YyDjKAcA-300.png 300w, /img/M6YyDjKAcA-600.png 600w, /img/M6YyDjKAcA-1000.png 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/M6YyDjKAcA-300.jpeg&#34; alt=&#34;NextDNS parental controls let you block entire categories as well as individual sites and services.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1000&#34; height=&#34;772&#34; srcset=&#34;/img/M6YyDjKAcA-300.jpeg 300w, /img/M6YyDjKAcA-600.jpeg 600w, /img/M6YyDjKAcA-1000.jpeg 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;NextDNS parental controls let you block entire categories as well as individual sites and services.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/s0pfP3YxBf-300.webp 300w, /img/s0pfP3YxBf-600.webp 600w, /img/s0pfP3YxBf-1000.webp 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/s0pfP3YxBf-300.png 300w, /img/s0pfP3YxBf-600.png 600w, /img/s0pfP3YxBf-1000.png 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/s0pfP3YxBf-300.jpeg&#34; alt=&#34;NextDNS analytics give a nice overview of exactly what&#39;s happening with your internet traffic.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1000&#34; height=&#34;796&#34; srcset=&#34;/img/s0pfP3YxBf-300.jpeg 300w, /img/s0pfP3YxBf-600.jpeg 600w, /img/s0pfP3YxBf-1000.jpeg 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;NextDNS analytics give a nice overview of exactly what&#39;s happening with your internet traffic.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/ZCkdTTJM61-300.webp 300w, /img/ZCkdTTJM61-600.webp 600w, /img/ZCkdTTJM61-1000.webp 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/ZCkdTTJM61-300.png 300w, /img/ZCkdTTJM61-600.png 600w, /img/ZCkdTTJM61-1000.png 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/ZCkdTTJM61-300.jpeg&#34; alt=&#34;NextDNS lets you see the individual requests mit blocks. As you can see my Roku is a bit out of control with the tracker requests.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1000&#34; height=&#34;796&#34; srcset=&#34;/img/ZCkdTTJM61-300.jpeg 300w, /img/ZCkdTTJM61-600.jpeg 600w, /img/ZCkdTTJM61-1000.jpeg 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;NextDNS lets you see the individual requests mit blocks. As you can see my Roku is a bit out of control with the tracker requests.&lt;/figcaption&gt;
&lt;/figure&gt;
</description>
        <pubDate>Fri, 15 Jan 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/01/15/keeping-your-internet-safe-with-nextdns/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/01/15/keeping-your-internet-safe-with-nextdns/</guid>
        
      </item>
    
      <item>
        <title>2021 New Years Resolutions</title>
        <description>&lt;p&gt;I’ve got mixed feelings about New Years Resolutions. They typically seem gimmicky and too often are unrealistic even under the best of circumstances. Both &lt;a href=&#34;https://twistoflemonpod.com/goals-for-2020/&#34;&gt;last year&lt;/a&gt; and again &lt;a href=&#34;https://twistoflemonpod.com/headed-into-a-new-year/&#34;&gt;this year&lt;/a&gt; Jon and I discussed New Years Resolutions on &lt;a href=&#34;https://twistoflemonpod.com/&#34;&gt;our podcast&lt;/a&gt; through the lens of goal setting and in the context of what habits we wanted to establish.&lt;/p&gt;
&lt;p&gt;I like habits because they often involve some ceremony, and ceremony is good. Ceremony gives you something by which to define a routine, and all good habits are born from routine. I think too often it’s the lack of ceremony that causes so many New Years resolutions to end in disaster. If we simply trust in our will power to make it to the gym or eat better we’re going to have days where we utterly fail. Whereas a good ceremony is like clockwork and survives, even when our motivation doesn’t.&lt;/p&gt;
&lt;p&gt;At the start of the year I was actually feeling pretty good about my habits. In 2019 I crushed my goals, and had both the ceremony to maintain them and the celebration when I achieved them. When 2020 started I was struggling to identify clear goals. I wanted to ride my bike more, having essentially taken a year off from long road cycling. I also wanted to build a better morning routine, but I wasn’t really sure what I wanted that routine to consist of. When Jon and I discussed this on the podcast he suggested I write more and we set a goal for one blog post a month.&lt;/p&gt;
&lt;p&gt;Right out the gate I dragged my feet on the writing goal, making my &lt;a href=&#34;https://stanlemon.com/2020/04/19/what-the-last-episode-of-seinfeld-and-the-flu-have-in-common/&#34;&gt;first&lt;/a&gt; and &lt;a href=&#34;https://stanlemon.com/2020/04/19/pizza-night-at-the-lemons/&#34;&gt;second&lt;/a&gt; post in April but not really finding any sort of stride until &lt;a href=&#34;https://stanlemon.com/2020/11/15/iphone-12-pro/&#34;&gt;November&lt;/a&gt;. I rode a little bit but never with any consistency, and I never set per day and per week mileage goals like I did the year I accomplished my 100-miler. And the morning routine was an utter disaster as I didn’t even so much as set an alarm for the first half of the year.&lt;/p&gt;
&lt;p&gt;Despite failing at my big goals, I did maintain a lot of my habits from the prior year such as reading daily, family devotions, journaling and keeping in contact with friends. I am most successful when establishing explicit habits, ones that I can write down and put in my way regularly. I’m a list maker. I have lists for everything.&lt;/p&gt;
&lt;p&gt;So what about 2021? After such a rough year, my goals for 2021 are about finding normalcy. I’m not even going to mess around this year, I’m going to start out with a list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I want to get the vaccine.&lt;/li&gt;
&lt;li&gt;I want to show Jon how to brew beer.&lt;/li&gt;
&lt;li&gt;I want to see my Mom and Dad.&lt;/li&gt;
&lt;li&gt;I want to take two family vacations away from the house.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some things are already in motion, like the first family vacation. I’ve already got a reservation to rent an RV around my and my wife’s 15th wedding anniversary. The other things require some waiting, but they’ll happen. I’m sure of it because this list is going on the wall in my office.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/nlXrCSCNNJ-300.webp 300w, /img/nlXrCSCNNJ-600.webp 600w, /img/nlXrCSCNNJ-800.webp 800w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/nlXrCSCNNJ-300.png 300w, /img/nlXrCSCNNJ-600.png 600w, /img/nlXrCSCNNJ-800.png 800w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/nlXrCSCNNJ-300.jpeg&#34; alt=&#34;My resolutions are on my wall and in my face every day this year.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;800&#34; height=&#34;1067&#34; srcset=&#34;/img/nlXrCSCNNJ-300.jpeg 300w, /img/nlXrCSCNNJ-600.jpeg 600w, /img/nlXrCSCNNJ-800.jpeg 800w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;I know I want to continue habits I’ve previously established:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read scripture and pray as a family (aka devotions).&lt;/li&gt;
&lt;li&gt;Write about my day (aka journal).&lt;/li&gt;
&lt;li&gt;Read every day.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And there are a few new things I want to establish:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get out of bed in the morning (&lt;a href=&#34;https://twistoflemonpod.com/headed-into-a-new-year/&#34;&gt;&lt;em&gt;if this sounds weird, listen to the podcast&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Bike 2x10 miles a week starting in May.&lt;/li&gt;
&lt;li&gt;Practice the clarinet twice a week.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/fzmBqF-p_T-300.webp 300w, /img/fzmBqF-p_T-600.webp 600w, /img/fzmBqF-p_T-1000.webp 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/fzmBqF-p_T-300.png 300w, /img/fzmBqF-p_T-600.png 600w, /img/fzmBqF-p_T-1000.png 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/fzmBqF-p_T-300.jpeg&#34; alt=&#34;My iPhone is no longer next to the bed, so I need to get out of bed to take a look at it.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1000&#34; height=&#34;1000&#34; srcset=&#34;/img/fzmBqF-p_T-300.jpeg 300w, /img/fzmBqF-p_T-600.jpeg 600w, /img/fzmBqF-p_T-1000.jpeg 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;What are my ceremonies you ask? First I’m moving my cell phone and kindle across the bedroom, so that in the morning I will have to get out of bed to look at them. The bike ride goal is tricky because I won’t start it until it’s warmer outside, so I’ve decided to create a recurring event in my calendar. My calendar is sacred to me, so having this scheduled will force me to do it or worst case reschedule it. I&#39;m hoping to do the same thing with practicing the clarinet.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/I6yMRYWiDT-300.webp 300w, /img/I6yMRYWiDT-600.webp 600w, /img/I6yMRYWiDT-800.webp 800w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/I6yMRYWiDT-300.png 300w, /img/I6yMRYWiDT-600.png 600w, /img/I6yMRYWiDT-800.png 800w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/I6yMRYWiDT-300.jpeg&#34; alt=&#34;Scheduling bicycle rides in my calendar.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;800&#34; height=&#34;1063&#34; srcset=&#34;/img/I6yMRYWiDT-300.jpeg 300w, /img/I6yMRYWiDT-600.jpeg 600w, /img/I6yMRYWiDT-800.jpeg 800w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;To conclude, if you want to do the New Years Resolutions thing here is my advice:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Put your resolutions in front of you so that you see them every day.&lt;/li&gt;
&lt;li&gt;Ceremonies can keep you on track when you&#39;re lacking motivation.&lt;/li&gt;
&lt;li&gt;Habits will outlive the next year.&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Mon, 04 Jan 2021 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2021/01/04/new-years-resolutions/</link>
        <guid isPermaLink="true">https://stanlemon.com/2021/01/04/new-years-resolutions/</guid>
        
      </item>
    
      <item>
        <title>2020 in Review</title>
        <description>&lt;p&gt;What a mess of a year! If a global pandemic wasn’t enough to ruin it, throw in civil unrest and a nightmare election cycle and you’ve got 2020 in a nutshell. When the year started our family was already home-based, with me working remotely and my children being home schooled by my wife. We had a ton of activities outside of the house, all of which came to a screeching halt in March and many remaining in pause to some extent through the balance of the year. Staying home all the time sucks. Not being able to see people regularly sucks. The only thing worse than that though, is the hyper-politicization of &lt;strong&gt;everything&lt;/strong&gt;. First it was political to say the virus is real, next it was political to wear a mask, then it was political to say racism is bad and here we are at the end of an awful election cycle where how you cast your vote became political! If we could make something political in 2020 we did. On top of all that relationships became sacrificed to your political leanings. Don’t agree with a friend? That’s fine, you can find a replacement. Have a disagreement with a family member? No big deal, just stop talking to them. It’s December &lt;strong&gt;finally&lt;/strong&gt; and looking in the rear view mirror I’ve realized that as awful of a year as it’s been it hasn’t been a total bust.&lt;/p&gt;
&lt;p&gt;January was a slow start, but then in February our family went to Disney World with my mom, my sister and her kids. We had a great week long visit to the parks while staying at the Art of Animation resort.  The trip was not without incident though. My youngest got sick in the park during our first full day, and then on our final day of the trip (Valentine’s day) I was sick in bed with a high fever. We headed home and I was feeling only slightly better than death. The plane flight home exacerbated existing issues with my Eustachian tubes in both ears, and I ended up feeling like garbage until late May. At the same time my dad fell and broke a hip while we were in Disney, which would have been stressful enough had covid not kicked in a month after he took up residence in a long term care facility, where he eventually caught covid and — thanks be to God — recovered. Meanwhile, that whole ear situation kicked off a long journey of visits to the ENT and ultimately tubes being placed in both ears, once elective procedures resumed in Indiana. Despite all that, Disney was a blast, and spending time in the new Star Wars section of the park was nothing short of unbelievable. Flying the Millennium Falcon and drinking blue milk afterward was a dream come true and I cannot wait to go back.&lt;/p&gt;
&lt;p&gt;In May I was finally feeling better and was also in need of a hobby, as most everything we were involved in had come to a screeching halt. I’ve always wanted to take up brewing my own beer and there seemed like no better time to start. Sara and I ordered a kit from &lt;a href=&#34;http://northernbrewer.com&#34;&gt;Northern Brewer&lt;/a&gt; and tried our first brew. It turned out pretty good and inspired us to brew three more times, including experimenting with lagering our own Oktoberfest. Because we already had most of the equipment we needed, we also tried our hand at making wine and in June fermented and eventually bottled a Pinot Noir that we are still enjoying.&lt;/p&gt;
&lt;p&gt;Before moving to Indianapolis I routinely made all of our own bread, but in the move I lost my interest, motivation and most importantly time. Like a lot of people during the spring lockdown I resumed bread making, but I put my own twist on it. When you brew beer you end up with a lot of wonderful “spent” grains left over. Many people just toss them out, others will put them in their compost bin, and then there are a few of us who dry them out and incorporate them into bread making. I modified &lt;a href=&#34;https://www.kingarthurbaking.com/recipes/walter-sands-basic-white-bread-recipe&#34;&gt;King Arthur’s excellent Walter Sand’s recipe&lt;/a&gt; to incorporate beer grains and have been making our bread each week.&lt;/p&gt;
&lt;p&gt;I started smoking meat in Spring 2019, but I really kicked it into gear in 2020, thanks in large part to a few fantastic sales at Kroger, extra time and because my cooking setup improved dramatically. We were able to find a contractor to add a deck to the back of our house, where I could finally put my grill and smoker. Prior to the deck, both were located in the garage and I would pull them out when needed and move them back in when done. It was all a bit of a hassle and I never liked running through the garage to get to the kitchen. The deck was a game changer, and we smoked a ton of pork, chicken, hot dogs and jalapeños. The deck also gave us a way to socialize (distantly) with friends over the course of summer, which was much needed after the spring.&lt;/p&gt;
&lt;p&gt;I was never much of a gamer growing up. It wasn’t for a lack of interest, but it wasn’t something my parents really wanted me to get sucked into. Nonetheless when I was 7 and had my first heart surgery they thought video games might keep me sedentary during my recovery. They gave me a Super Nintendo Entertainment System (SNES) and I spent hours working my way through Super Mario World. I never really got many other games, though, and eventually my interest waned. Sara and I had a Nintendo Wii for awhile but it honestly didn’t interest me much. However when the Switch was released in 2017 I had a chance to play one during a work trip and fell in love. The problem was my better half was of a similar mindset as my parents had been and feared our kids would get sucked into a virtual abyss. When out of nowhere she gave me the go-ahead to secure a Nintendo Switch I began a multi-month search for a console. At the end of June I found one at a Target in Colorado and thanks to my loving sister-in-law it was secured and mailed to me (and the kids). I have gotten into gaming, buying more games than I’m willing to admit for both the kids and myself. At the end of September my luck was running high and I secured a pre-order for an Xbox Series X, which came in November. My friend Jon and I have been &lt;a href=&#34;https://www.ea.com/games/starwars/squadrons&#34;&gt;learning how to fly X-Wings lately&lt;/a&gt;, and someday he’s going to explain to me what Halo is. I am terrible at gaming, but I’m having a lot of fun and so are my kids. Plus we’re being responsible with our time limits too, I swear!&lt;/p&gt;
&lt;p&gt;When I wasn’t gaming I read. A lot. I finished 66 books in 2020 covering a wide range of topics and genres. Admittedly I got sucked into a number of political memoirs that made headlines, but aside from that &lt;a href=&#34;/2020/12/23/recommended-books-from-2020/&#34;&gt;I read some great books which I’ve detailed already on this blog&lt;/a&gt;. I kept up with every new Star Wars release and also worked through a list of books I would have read in High School had I not graduated early. I also revisited a few classics. Reading was a great way to unwind from work and the stress of current events. Much to the chagrin of my &lt;a href=&#34;https://saralemon.com&#34;&gt;wife&lt;/a&gt; and friends, though, I wasn’t a big fan of &lt;a href=&#34;https://amzn.to/2JWTJ9w&#34;&gt;The Hobbit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Circumstances at work due to covid enabled me to spend more time writing code, a part of my job that I’ve done less of in recent years but I still love dearly. I was able to contribute to the &lt;a href=&#34;https://releasenotes.docs.salesforce.com/en-us/winter21/release-notes/rn_pardot_eilex_send_experience.htm&#34;&gt;Lightening Email Builder Pardot send experience&lt;/a&gt; and had a really awesome time working on it.&lt;/p&gt;
&lt;p&gt;Our family started a regular habit of going for a midday walk. Despite having a decently sized home, the walls started to close in on us as we spent so much time together. We found that a 30 minute walk for the five of us together with our dog Dax gave us some nice exercise and would unwind the tension of being so close together all the time. It’s a habit I hope we continue, despite cold weather, and it’s one I would recommend everyone take up.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://jonkohlmeier.com&#34;&gt;Jon&lt;/a&gt; and I took a brief hiatus from the &lt;a href=&#34;http://twistoflemonpod.com&#34;&gt;podcast&lt;/a&gt; between March and June as covid was changing everyone’s daily lives. Despite that break we hit episode 100 this year! It’s crazy to think we’ve done so many episodes. While there weren’t nearly enough milkshake reviews Jon and I covered a lot of ground, and I think, made some good listening.&lt;/p&gt;
&lt;p&gt;Football and the &lt;a href=&#34;http://steelers.com&#34;&gt;Steelers&lt;/a&gt; in particular have been a bright spot for me as well. I thought that maybe the season would be delayed or cancelled, but it wasn’t and the &lt;a href=&#34;http://steelers.com&#34;&gt;Steelers&lt;/a&gt; have advancing the field yard by yard. Apple had a &lt;em&gt;heckuva&lt;/em&gt; year, and as a fanboy I had a fun time dissecting and trying out new products. I dragged my feet on the AirPod Pro&#39;s, which was a huge mistake in hindsight, but I finally got a pair and they&#39;ve been one of those truly magical Apple products. The &lt;a href=&#34;/2020/11/28/a-review-of-the-homepod-mini/&#34;&gt;HomePod Mini&lt;/a&gt; and &lt;a href=&#34;/2020/11/15/iphone-12-pro/&#34;&gt;iPhone 12&lt;/a&gt; were also unexpected joys, and I am thrilled with Apple’s M1 announcement. The clock is ticking; I will be getting one.&lt;/p&gt;
&lt;p&gt;There’s no doubt that 2020 was rough. As bad as it was, though, it gave me an opportunity to slow down and focus on old and new hobbies alike. It was too easy before 2020 to get caught up in work and the busyness of driving place to place. The forced reset of priorities in 2020 was not without its benefits, and while I wouldn’t wish this year ever to happen again I’ll embrace the gift it gave nonetheless.&lt;/p&gt;
</description>
        <pubDate>Wed, 30 Dec 2020 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/12/30/year-in-review/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/12/30/year-in-review/</guid>
        
      </item>
    
      <item>
        <title>Recommended Books from 2020</title>
        <description>&lt;p&gt;I did not set out to read 64 (&lt;em&gt;and counting&lt;/em&gt;) books in 2020 but, like so much this year, it just sort of happened. I was pretty convinced that after 40 books last year I had peaked and I would never read more in a single year. Was I ever wrong! I read a ton of really fantastic books this year, &lt;a href=&#34;https://www.goodreads.com/user_challenges/20194804&#34;&gt;the full list of which you can see on Goodreads&lt;/a&gt;, but I thought it would be interesting to pull out my top 10. That exercise proved to be really hard, even more so when I attempted to put them in order. Nonetheless, here they are!&lt;/p&gt;
&lt;h2&gt;#10. &lt;a href=&#34;https://amzn.to/3gNTskV&#34;&gt;Money: The True Story of a Made-Up Thing by Jacob Goldstein&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In another life I would have been an economist. I absolutely love the NPR podcasts Plant Money and The Indicator, so I was ecstatic when one of Planet Money’s hosts, Jacob Goldstein, wrote a book all about money. This is an interesting history of money in the world, the philosophy of it and some of the foundational economic theory behind it. If you’ve ever wondered why a dollar is a dollar, this is for you!&lt;/p&gt;
&lt;h2&gt;#9 &lt;a href=&#34;https://amzn.to/3nlASDj&#34;&gt;Cheaper By the Dozen by Frank Gilbreth &amp;amp; Ernestine Gilbreth Carey&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I loved this book in elementary school and I was tickled when it appeared on a reading list for my kids this year. I read this out loud to them every Saturday after breakfast. We laughed and cried together in this fun story about a very large family that takes place in the 1920’s. If you’ve never read this one, give it a try. It’s just good fun.&lt;/p&gt;
&lt;h2&gt;#8 &lt;a href=&#34;https://amzn.to/3qVOdo9&#34;&gt;Franklin and Winston by Jon Meacham&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Winston Churchill is a legend, known for his strong presence and impressive oratorical skills. If you’ve ever watched The Crown or the Darkest Hour you know how intriguing this character is. Meacham, the famed biographer of Thomas Jefferson and Andrew Jackson, looks at Churchill’s more vulnerable side as he analyzes the relationship that formed between Churchill and FDR during World War II.&lt;/p&gt;
&lt;h2&gt;#7 &lt;a href=&#34;https://amzn.to/34d8hIL&#34;&gt;Truman by David McCullough&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Of all the presidential biographies I’ve read, my expectations for Truman were about as low as Franklin Pierce. Truman just seemed like an odd in-between president tucked between the liberal titan FDR and the Republican bulwark Eisenhower. The reality is Truman stands at a pivotal transition in US history, with the close of World War II and the dropping of the Atom Bomb as well as the start of the Korean and Cold Wars. Truman’s domestic policies were just as significant, too. McCullough is my favorite biographer and he does this man wonderful justice as he paints a compelling picture.&lt;/p&gt;
&lt;h2&gt;#6 &lt;a href=&#34;https://amzn.to/2KmtoS7&#34;&gt;Midnight in Chernobyl by Adam Higginbotham&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What’s not interesting about a global nuclear disaster? My curiosity in this title was sparked after watching HBO’s Chernobyl miniseries. The author knows his stuff and even though, at times, the technical detail was over my head, the chronicling of the catastrophe is well done and engaging. You can’t walk away from this one without shock and dismay over the USSR’s handling of this tragic event.&lt;/p&gt;
&lt;h2&gt;#5 &lt;a href=&#34;https://amzn.to/3miRYQT&#34;&gt;Duty by Robert Gates&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Former Defense Secretary who served for both President George Bush and President Barack Obama recalls his time in the office. Along the way he gives you his take on the various folks he encounters, everyone from each President and Vice President to folks like General Stan McChrystal. Gates is a fascinating character who put country first and has some great reflections in this memoir.&lt;/p&gt;
&lt;h2&gt;#4 &lt;a href=&#34;https://amzn.to/3mjmbzx&#34;&gt;A Promised Land by Barak Obama&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No matter what your political persuasion this is a really well written book. President Obama is rather critical of himself in his analysis and it’s an interesting take of recent history. I didn’t follow the news closely while he was in office so I found this to be enlightening and informative.&lt;/p&gt;
&lt;h2&gt;#3. &lt;a href=&#34;https://amzn.to/2K1AP0Y&#34;&gt;Turn the Ship Around by L. David Marquet&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Leadership books are essentially my Harlequin novels. This book came across my (virtual) desk and it is one of the best leadership books I’ve ever read. Marquet illustrates how leaders need to empower people rather than micromanage them through his command of a submarine, the Santa Fe, which he was put in charge of at the last minute. Ultimately the Santa Fe went from one of the worst ships in the Navy to the Best.&lt;/p&gt;
&lt;h2&gt;#2 &lt;a href=&#34;https://amzn.to/3oOGtCw&#34;&gt;Just Mercy by Bryan Stevenson&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On Juneteenth Apple made a number of movies free, including Just Mercy. I wasn’t familiar with the movie but I like Michael B. Jordan. The book follows the legal work Bryan Stevenson does in Alabama for death row inmates. Like the movie it closely follows the case of Walter McMillian, who was wrongly convicted of murder. It’s often terrifying to read, but it was a good reminder of just how much inequity actually exists in our country.&lt;/p&gt;
&lt;h2&gt;#1 &lt;a href=&#34;https://amzn.to/3a8lG8L&#34;&gt;To Kill a Mockingbird by Harper Lee&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Somehow I escaped school without ever reading this book. I was familiar with it, but had never actually taken the time. Part of my quest in 2020 was to read books I had missed out by graduating from High School early. After finishing Just Mercy it made sense to read this one. Everyone should read this book. It’s impossible to put down the story of Scout, Jim, and Atticus Finch as they confront racism in Monroeville, Alabama. Unfortunately, it felt incredibly relevant in 2020.&lt;/p&gt;
&lt;h2&gt;Honorable Mentions&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&#34;https://amzn.to/2WeIMT8&#34;&gt;The Nickel Boys by Colson Whitehead&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This piece of fiction is based off of some historical events and explores the Jim Crow South in Florida. It’s a heart wrenching story with an unexpected twist at the end. This one won the Pulitzer this year and it was well deserved. Once I started reading it I couldn’t put it down.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&#34;https://amzn.to/2WzvMaS&#34;&gt;The Luckiest Man: Life with John McCain by Mark Salter&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I&#39;ve always been fascinated by John McCain, the maverick of the Senate with a supposed independent streak and a heroic heritage of military service, including his capture in Vietnam. This book was written by his former Chief of Staff (through the 2008 presidential election) and is a close up analysis of the man. Salter doesn&#39;t hold any punches as he&#39;s both loving and critical of the famed senator. McCain is fascinating and this gave a deeper perspective on him than I&#39;ve read before. If you have the chance to read this, follow it up with the HBO documentary on McCain entitled, &amp;quot;For Whom the Bell Tolls,&amp;quot; which is named after McCain&#39;s favorite book by Ernest Hemingway.&lt;/p&gt;
</description>
        <pubDate>Tue, 22 Dec 2020 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/12/22/recommended-books-from-2020/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/12/22/recommended-books-from-2020/</guid>
        
      </item>
    
      <item>
        <title>The Death of Streaming TV</title>
        <description>&lt;p&gt;Hulu is increasing the cost of its monthly live TV subscription service. A service that started at $40/month in 2017 will end 2020 at $65/month (or $70/month if you have the no ads for on demand streaming). Live TV streaming services have been increasing their monthly subscription costs over the last few years, gnawing away at one of their main competitive advantages. When these services first became available they seemed like great alternatives to the big cable providers like Comcast. Cable TV is expensive and often comes with tons of channels that I don’t want. Streaming offered a simpler list of valuable channels at a much more compelling price. That’s not true anymore, though.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/ZDcZLC9kUP-300.webp 300w, /img/ZDcZLC9kUP-600.webp 600w, /img/ZDcZLC9kUP-1000.webp 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/ZDcZLC9kUP-300.png 300w, /img/ZDcZLC9kUP-600.png 600w, /img/ZDcZLC9kUP-1000.png 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/ZDcZLC9kUP-300.jpeg&#34; alt=&#34;Hulu on Roku TV with a Roku remote and the dedicated Hulu button.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1000&#34; height=&#34;1000&#34; srcset=&#34;/img/ZDcZLC9kUP-300.jpeg 300w, /img/ZDcZLC9kUP-600.jpeg 600w, /img/ZDcZLC9kUP-1000.jpeg 1000w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;I don’t watch a ton of TV. My need for live television revolves around sports. I’m just close enough to the Southeastern edge of Indianapolis that over the air broadcasts can be sketchy, and NBC is nearly impossible to get. Most seasons I need CBS, NBC, FOX, ESPN and the NFL Network. This year I also caught some presidential debates on other channels, but normally the only reason I watch live TV is for football. If you look around it’s actually pretty hard to find both ESPN and the NFL Network available to stream on the same service, so Hulu Live was a sweet deal. Granted, I get a bunch of other channels I don’t need and will never watch, but that’s just the penalty of a bundle, right? I used to dream of a streaming service where I could pick the channels I want: a build your lineup sort of experience. For awhile that was the holy grail of streaming, but I’ve given up hope of ever getting that. Alas, I’m left here paying for Lifetime when all I really want is football! The past few years Hulu TV fulfilled my needs because it was cheaper than Cable, I could cancel it after football, and it was an all around good app experience.&lt;/p&gt;
&lt;p&gt;I loved Hulu. As far as live streaming services go I felt like it was the best of the best. At $40/month the long list of worthless channels that I’ll never watch and are tacked onto my plan didn’t bother me. Even at $60/month it was bearable, but something about $65/month became too expensive for me. This is my last month of Hulu Live; I will not be subscribing after this month. I would never have considered cancelling Hulu had it not been for this latest price hike. They broke me, and there was no reason for it. I was Hulu’s ideal customer, paying full price while using a handful of channels 1-2 days a week for roughly 3 hours at a time. Hulu’s expansive channel list resulted in larger fees for a bunch of garbage television channels I don’t need or want.&lt;/p&gt;
&lt;p&gt;Streaming TV is broken and it’s as much Hulu’s fault as it is the major sports leagues’ (NFL, MLB, NBA and NHL). There are a ton of people out there just like me and all they want is to stream their team’s games a few weeks out of the year. Every league but the NFL has their own streaming service, but it’s subject to blackouts that penalize you if you’re local to your team or the opponent your team is playing. I’ve tried MLB.tv before, but my baseball team is the Pirates and, because I live in the midwest, most of the Pirate’s division is blacked out as ‘local’ for me. The same is true for the Pacers here in Indianapolis, which are available via NBA.tv if you don’t live in Indy.&lt;/p&gt;
&lt;p&gt;The NFL stands alone in lacking a true streaming service. Part of this is because of DirectTV and part of it is because of long standing contracts with the big networks. The closest thing to an NFL streaming service is actually CBS All Access, which allows live games to be streamed over devices and TVs. You only get your regional games on CBS All Access though, so being a Steelers fan I’m left to spoof my location most Sundays. The other networks with streaming services, such as ESPN and NBC’s Peacock, will broadcast sports but not NFL games.&lt;/p&gt;
&lt;p&gt;What I really want more than anything is a Pittsburgh Steelers subscription. If the NFL Network had any sense about them they would give this to me. They could get away with $60/month with only minimal grumbling on my part so long as I also got games played in my local market, too. The NFL doesn’t seem to understand the potential here though, so instead of offering a streaming service they drive me into the arms of services like Hulu.&lt;/p&gt;
&lt;p&gt;If the NFL doesn’t want to get into the streaming game, then what consumers really need is to be able to choose channels a la carte. I want to pick the main broadcasters plus ESPN, the NFL Network, and maybe the Disney channel too. The problem is the major TV channel conglomerates are not going to allow this because they wouldn’t be able to prop up the garbage channels. The other option is channel bundles, which Hulu and YouTube TV have resisted doing. Sling and AT&amp;amp;T do offer bundles, but they each do so with their own flaws. AT&amp;amp;T starts at $55/month, with their premium plan at $80/month, which are still rather fat bundles. If you’re a college sports fan you’re pretty much stuck with the AT&amp;amp;T premium bundle, too. Meanwhile, sling has two different bundles at $30/month, but they’ve cleverly split the channel so that you can get local market channels (CBS, NBC, FOX) and ESPN with the same bundle. Insult to injury, the NFL Network and ESPN are in different bundles. Sling’s attempt at a skinny bundle is, at best, misleading.&lt;/p&gt;
&lt;p&gt;Streaming services initially offered customers choice where there was none. Cable tried to hold onto cord cutters by making internet cheaper when bundled with TV, but even that couldn’t keep people locked in. Now the streaming services that originally brought innovation to television are falling into the same trap cable providers were in. The sports leagues aren’t helping the matter any, either. Something has to give. In the meantime, I’m cancelling Hulu and I might divert that money to a better antenna.&lt;/p&gt;
&lt;p&gt;Lastly, in a year when most professional sports can’t have fans, now is the time for the NFL, MLB and NBA to rethink their approach to streaming. Every one of these leagues needs to offer a blackout-free subscription service. Let me pay to stream all of my team’s games! Please, just take my money!&lt;/p&gt;
</description>
        <pubDate>Wed, 16 Dec 2020 22:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/12/16/the-death-of-streaming-tv/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/12/16/the-death-of-streaming-tv/</guid>
        
      </item>
    
      <item>
        <title>The Travesty of Unloanable Books</title>
        <description>&lt;p&gt;Recently my oldest daughter, Lucy, asked me if she could let a friend borrow a book she had. “Of course”, I said, ”why wouldn’t you be able to?” What I didn’t realize at first is that she was referring to a book we had recently bought on Amazon Kindle, which she had plowed through in record time. It was the latest book in a series that this particular friend of hers had first introduced to her. Her friend was waiting for her physical copy to arrive, and Lucy was anxious to start talking to her about the story. I had to explain to Lucy that it was almost certainly not possible. Lucy was disappointed, and perhaps I was even more so.&lt;/p&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/na3CGE5KsM-300.webp 300w, /img/na3CGE5KsM-600.webp 600w, /img/na3CGE5KsM-1200.webp 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/na3CGE5KsM-300.png 300w, /img/na3CGE5KsM-600.png 600w, /img/na3CGE5KsM-1200.png 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/na3CGE5KsM-300.jpeg&#34; alt=&#34;Money: The True Story of a Made-Up Thing was one of my favorite 2020 reads and I so badly want to loan it to my friend Jon.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1200&#34; height=&#34;1200&#34; srcset=&#34;/img/na3CGE5KsM-300.jpeg 300w, /img/na3CGE5KsM-600.jpeg 600w, /img/na3CGE5KsM-1200.jpeg 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;&lt;a href=&#34;https://amzn.to/37CtUTW&#34; target=&#34;_blan&#34;&gt;Money: The True Story of a Made-Up Thing&lt;/a&gt; was one of my favorite 2020 reads and I so badly want to loan it to my friend Jon.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;It is no secret that I’m a huge fan of the Kindle and reading digitally. It’s something my wife can’t understand and my best friend Jon insists misses out on part of the experience of reading: the physical book in your hand and the crisp pages between your fingers. I’ve had a Kindle since the first generation, and I’ve read using the Kindle app on my iPhone and iPad since it launched. Even before the Kindle I remember reading over-priced books on my Palm LifeDrive.&lt;/p&gt;
&lt;p&gt;I went to college intending to be a Pastor, and if you’ve ever met anyone who has studied theology you know they collect books as if it were a bad addiction. This was just as true for me, and right at the point in my life where I was embracing minimalism I started to amass books at an alarming rate. When I moved from dorm to dorm on campus I could fit everything but my books into a single piece of luggage, but there were boxes and boxes of books, mostly theological ones.&lt;/p&gt;
&lt;p&gt;When I finally left college I emptied my apartment into a 2004 Dodge Neon, and I just assumed it was normal that the passenger seat and back seat were piled high with boxes of books. My first year after college in Pittsburgh didn’t slow me down any either, I bought more and more books that year so that when my wife and I moved into our first home we had more boxes of books than we did for clothes and dishes combined.&lt;/p&gt;
&lt;p&gt;I think it was at this point that I started to become annoyed with the physical presence of my book collection. Many of the books I was lugging around I had read and was unlikely to read again. I had never been much of a collector, but that’s really what my books had become. Most of the books I had either weren’t that good or they were single purpose books, something I needed to read to answer a particular pressing question or scratch a particular itch. I determined that some of my books might best be served in other people’s hands, so I started the long process of culling my library. I gave some to friends and I sold others, and the ones that weren’t valuable enough to sell and uninteresting to friends I donated to the local library.&lt;/p&gt;
&lt;p&gt;At first the Kindle didn’t have the books I was looking for. That was because Concordia Publishing House (CPH), the publisher of many of the theology books I was interested in, dragged their feet on the digital book experience. When CPH did finally join the fray they priced their books absurdly high, too. Despite that I was also reading fiction, books by Jeff Schaara and Star Trek novels, which were easily available for $9.99 on Amazon.&lt;/p&gt;
&lt;p&gt;While embracing the digital book I found that, for me, it was actually easier to read than physical books. I hated books that wouldn’t lay flat, and it repulsed me to damage their spine to force them into submission. I found the typeface of older books offensive to my eyes, and even though my eyes are not bad I preferred a bigger type than most are printed with. I also really loathe book lights, but I like to read while in bed before falling asleep. As the Kindle experience translated to the iPhone and iPad I found I could read anywhere. I could read on my Kindle in bed at night with its backlight, or I could pull out my iPhone and read while waiting in line at the grocery store. I ended up reading a lot on my iPhone too, and reading became the thing that laced the gaps of my day together. I never had this portability with physical books, and for me it was the killer feature that leveled up my reading game.&lt;/p&gt;
&lt;p&gt;Digital reading has only gotten better with time, especially as libraries got on board and services like OverDrive became common place. When our family moved to Indiana I got a library card, largely out of peer pressure (my wife and kids being a formidable force), and began making extensive use of the digital loans. When it’s available to borrow digitally from the library that’s what I do, only buying a book if it’s not available or the wait is too long to satiate my need to read.&lt;/p&gt;
&lt;p&gt;What I’ve noticed lately though is that I’ve amassed a lot of one-time reads, books that I am likely never to look at again. They were great the first time, but hardly the sort of book I’ll find myself re-reading over and over again. In fact, there are actually few of those types of books on my shelf, virtual or physical. The problem is I can’t do anything with them. I had a sunk cost in buying them, and most of them I can’t give to friends to borrow. Kindle actually offers a loan feature, but it’s up to the publisher to enable. This is stupid because the publisher doesn’t own that copy of the book, and they really should have no say in what I do with it. If I want to loan it to a friend, that should be exclusively my choice and the publisher should have zero say in my ability to do so. Likewise, I should be able to resell that digital book. Amazon could facilitate this on their platform and even take a cut on the sale, just like they do when I sell a physical book on their marketplace. This lack of freedom with my books stinks, as Lucy learned the other day when she wanted to let a friend borrow one. Yet as much as I want to be able to loan and sell digital books, I also want to donate them. I really want to be able to give them to my local library after I’m done with them, just as I have done with so many physical books over the years. If Amazon (or Apple for that matter) were to make one major improvement to the digital book experience that’s the one I would want them to make: &lt;strong&gt;Let me donate my gently used digital books to the public library.&lt;/strong&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 09 Dec 2020 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/12/09/the-travesty-of-unloanable-books/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/12/09/the-travesty-of-unloanable-books/</guid>
        
      </item>
    
      <item>
        <title>2020 Christmas Playlist</title>
        <description>&lt;p&gt;When I was younger I griped a lot about Christmas music and lighting the tree before Christmas Day. Christmas is a season on the &lt;a href=&#34;http://sanctus.org/2020/12&#34;&gt;church calendar&lt;/a&gt; and it doesn&#39;t start until the 25th. The next 12 days then, are where we can bust out the Christmas music and celebrate. That period before Christmas, which is usually most of December, is Advent and in the Christian tradition is a penitential season. During Advent we&#39;re prayerfully waiting in hopeful anticipation for the baby Jesus.&lt;/p&gt;
&lt;p&gt;As I&#39;ve gotten older I&#39;ve realized that my zealousness didn&#39;t really serve my purpose, to point to Christ and Him crucified for you. The truth of the matter is much of the world, knowingly or otherwise, bends the knee to the Savior as they rejoice in His arrival, albeit a little early perhaps. If I&#39;m being honest, it&#39;s hard for me to be upset at that, even in spite of my religious zealotry.&lt;/p&gt;
&lt;p&gt;In 2020 I think it&#39;s even harder to get worked up about such things. It&#39;s been a rough year and everyone has spent it in hopeful anticipation. If staying home mostly alone for the better part of a year isn&#39;t penitential than I don&#39;t know what it is! &lt;a href=&#34;https://saralemon.com/2020/12/happy-new-year/&#34;&gt;But quite frankly, my wife has expressed this better than I have.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In recent years the tree goes up Thanksgiving weekend and it&#39;s lit as soon as the last ornament is hung. I&#39;ve also taken to making a playlist of Christmas music that will play for most of December. Each year I start from the previous year&#39;s playlist and make adjustments. This year we sat around the living room as a family culling duplicate songs and adding new songs. This is a little thing we do as a family, but it&#39;s fun and brings us joy. I figure in 2020 wherever you can find joy, you should take advantage of it, even Christmas music in Advent! If you like Christmas music, maybe you&#39;ll enjoy our family&#39;s playlist. It&#39;s on Apple Music and available for your listening enjoyment. If there&#39;s a fantastic Christmas song that you don&#39;t see, &lt;a href=&#34;/contact&#34;&gt;get ahold of me and let me know, please&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://music.apple.com/us/playlist/christmas-2020/pl.u-Bq3eH9MpNx&#34;&gt;&lt;strong&gt;Check out the Lemon family Christmas playlist for 2020&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;iframe allow=&#34;autoplay *; encrypted-media *; fullscreen *&#34; frameborder=&#34;0&#34; height=&#34;450&#34; style=&#34;width:100%;max-width:660px;overflow:hidden;background:transparent;margin-left:auto;margin-right:auto;display:block;&#34; sandbox=&#34;allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation&#34; src=&#34;https://embed.music.apple.com/us/playlist/christmas-2020/pl.u-Bq3eH9MpNx&#34;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Sun, 06 Dec 2020 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/12/06/christmas-play-list/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/12/06/christmas-play-list/</guid>
        
      </item>
    
      <item>
        <title>A Review of the Apple Card</title>
        <description>&lt;p&gt;In March, 2019 Apple released their “Apple Card”, a credit card with a truly Apple experience. Apple has been in the electronic payments business for a while now, first by letting you store credit cards securely on your devices in the Wallet app to use via Apple Pay and then with Apple Cash, a PayPal/Venmo type service for sending cash between people. The introduction of the Apple Card was a natural progression for Apple but, unlike other companies who have their own credit cards, this is not just an Apple-branded Master card, it’s an entire experience from start to finish.&lt;/p&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/jOtqversDo-300.webp 300w, /img/jOtqversDo-600.webp 600w, /img/jOtqversDo-1170.webp 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/jOtqversDo-300.png 300w, /img/jOtqversDo-600.png 600w, /img/jOtqversDo-1170.png 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/jOtqversDo-300.jpeg&#34; alt=&#34;Apple Card is an entire expierence available from the Wallet app.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1170&#34; height=&#34;2532&#34; srcset=&#34;/img/jOtqversDo-300.jpeg 300w, /img/jOtqversDo-600.jpeg 600w, /img/jOtqversDo-1170.jpeg 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;Apple Card is an entire expierence available from the Wallet app.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;First a quick disclaimer: If you don’t need a credit card you should just stop here and go check out videos of hamsters on YouTube. Credit cards can be a useful financial tool, but they can also be a terrible trap. Never ever use a credit card to buy something you can’t actually pay for. Treat credit cards as a convenience when paying and not as a line of credit and you’ll avoid a whole host of trouble. There are appropriate times to carry a balance on a credit card, but they are few and far between. If you think you should carry a balance you’re most likely wrong, so just avoid it and spare yourself the incredible expense and pain. Now that we have that out of the way…&lt;/p&gt;
&lt;p&gt;The signup experience for the Apple Card is without a doubt the easiest of any credit card I have seen. You start from the Wallet app in your iPhone and everything just works. It’s a truly hassle free experience. I have a credit freeze with all of the major credit bureaus (and you probably should too), which means signing up for a new line of credit is deliberately difficult to do. I’ve tried signing up for things in the past with a credit freeze and it’s usually not clear what’s going on. When you finally remember that, oh yeah, I have a credit freeze, you usually have no clue to which credit bureau you should go to unfreeze. In my experience customer support reps are usually either unwilling or unable to tell you which bureau it might be, too. This wasn’t the case with the Apple Card; the app let me know right away that it couldn’t proceed because of a credit freeze and exactly which bureau they were using. In the grand scheme of things this is not a huge feature by any stretch, but it is a testament to the amount of care Apple has put into the setup experience.&lt;/p&gt;
&lt;p&gt;At the tail end of setup you have the ability to order a physical card. The card is a huge piece of titanium, and it is a truly gorgeous credit card, at least as gorgeous as a credit card can be. If you go through the process of signing up for the Apple Card you should get one of the physical cards for the eye candy alone. When it did arrive the unboxing was impressive. Yes, unboxing. It wasn’t sent glued to a letter in an overstuffed envelope. Activating the physical card involved holding the card close to my iPhone. It was just that easy.&lt;/p&gt;
&lt;p&gt;Now Apple is hoping you won’t actually use the physical card because they want you to use Apple Pay. It’s really wild how far Apple Pay has come over the past couple of years. What seemed novel when it was released is now nearly ubiquitous. As the pandemic has raged and contactless payments have become the norm, Apple Pay has really shined.&lt;/p&gt;
&lt;p&gt;After a year and a half why did I finally try the Apple Card? Apple offers 3% back on purchases at Apple, and with the imminent release of the iPhone, and the prospect of buying a HomePod Mini it seemed like that might make it worth trying. My wife also got a new iPhone and it made sense to set her up with an Apple Card for the same purpose. Initially I expected she could be added to the card I setup, because that’s how every other credit card I’ve ever used works, however Apple Card doesn’t work that way. One Apple Card is for one individual and so we had to setup a separate card for my wife. We probably could have entered my card manually as a payment method on her Apple account for checking out, but when you’re trying to buy a new iPhone on launch day you want the checkout experience with the least amount of friction. I also don’t think she would have been able to add my card to Apple Pay on her phone in the same way, though I admit I didn’t actually try this out.&lt;/p&gt;
&lt;p&gt;Separate cards are not inherently bad, and I suspect that for a lot of couples this is probably desirable. In our situation it’s a hassle. My wife and I have joint accounts on every front other than this one, and I handle the household finances month to month. My first concern was making sure the card was paid on time, because all of that happens in the Wallet app. It turns out it’s pretty easy to setup automatic payment, which is keyed wonderfully to the final day of the month. This alleviated my fears of potentially missing a payment, but it still lacked the visibility I wanted in how the card was being used. There’s also no easy way for me to see what the balance of her card is without her iPhone, but more on that later.&lt;/p&gt;
&lt;p&gt;One of the coolest features of the Apple Card is the visuals around transactions. Apple Card categorizes them automatically for you and has great little graphs for how much you’ve spent over the month. The thing about two separate cards when your family accounting is unified is that these graphs are essentially useless because they only show part of the picture.&lt;/p&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/6-24Ci_r38-300.webp 300w, /img/6-24Ci_r38-600.webp 600w, /img/6-24Ci_r38-1170.webp 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/6-24Ci_r38-300.png 300w, /img/6-24Ci_r38-600.png 600w, /img/6-24Ci_r38-1170.png 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/6-24Ci_r38-300.jpeg&#34; alt=&#34;Apple Card clearly shows you what you&#39;ve spent each month broken down by categories.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1170&#34; height=&#34;2532&#34; srcset=&#34;/img/6-24Ci_r38-300.jpeg 300w, /img/6-24Ci_r38-600.jpeg 600w, /img/6-24Ci_r38-1170.jpeg 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;Apple Card clearly shows you what you&#39;ve spent each month broken down by categories.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Drilling into a particular merchant will show you all of the transactions for that merchant. If I want to see everything I’ve bought at Apple it’s extremely easy to pull up the list. This is nice compared to most services that show barely legible names for charges which are often varied and irregular. In those other services its hard to pull up everything you’ve spent at a specific place. In addition to the date and amount you can also see what percentage you got cash back from each transaction. Everything you buy at Apple earns 3%, if you used Apple Pay with your Apple Card at a non Apple retailer it’s 2% and everything else is 1%. This is crazy simple to wrap your head around compared to other credit cards, and there are no monthly promos to sign up for to unlock different percentages. The best part about Apple’s cash back, though, is that you don’t have to wait until the end of the billing cycle to get that benefit. As soon as a charge clears you receive your cash back award in your Apple Cash account.&lt;/p&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/25ZQhVwaAK-300.webp 300w, /img/25ZQhVwaAK-600.webp 600w, /img/25ZQhVwaAK-1170.webp 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/25ZQhVwaAK-300.png 300w, /img/25ZQhVwaAK-600.png 600w, /img/25ZQhVwaAK-1170.png 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/25ZQhVwaAK-300.jpeg&#34; alt=&#34;Apple Card allows you to see all of the transactions for a particular merchant.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1170&#34; height=&#34;2532&#34; srcset=&#34;/img/25ZQhVwaAK-300.jpeg 300w, /img/25ZQhVwaAK-600.jpeg 600w, /img/25ZQhVwaAK-1170.jpeg 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;Apple Card allows you to see all of the transactions for a particular merchant.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;If you want to make a payment on your Apple Card you can set it up to happen automatically or do it manually from within the Wallet app on your iPhone. If you want to pay manually you’re presented with a pretty cool circular image of the amount you can pay. You can drag the control dot around the circle to change how much you’re going to pay. The circle visualizes exactly what your balance is and what needs to be paid to avoid interest. The first time you make a payment you can choose to use the debit card that’s paired to your Apple Cash. This is novel because when you pay your card it’s instant, as opposed to online bill bay using an ETF withdrawal from your checking account that takes days to clear. The immediacy of this payment is a really nice improvement to the credit card payment experience.&lt;/p&gt;
&lt;figure&gt;
&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/oNZQ--V8me-300.webp 300w, /img/oNZQ--V8me-600.webp 600w, /img/oNZQ--V8me-1170.webp 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/oNZQ--V8me-300.png 300w, /img/oNZQ--V8me-600.png 600w, /img/oNZQ--V8me-1170.png 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/oNZQ--V8me-300.jpeg&#34; alt=&#34;Apple Card payments are easy and clear with a clever circular control for derterming how much to pay.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1170&#34; height=&#34;2532&#34; srcset=&#34;/img/oNZQ--V8me-300.jpeg 300w, /img/oNZQ--V8me-600.jpeg 600w, /img/oNZQ--V8me-1170.jpeg 1170w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;
&lt;figcaption&gt;Apple Card payments are easy and clear with a clever circular control for derterming how much to pay.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;My biggest beef with the Apple Card is the separate accounts for spouses. Ideally I could have partially worked around this using my preferred budgeting service Mint, however the Apple Card is not supported by Mint. That actually complicates things further because it means a chunk of my spending is not visible in my overall financial picture. This is really the heart of the matter for me; the Apple Card sits on an island and does not fit in with the rest of your financial picture. This is not unlike Apple’s disjointed family experience with Photos. For whatever reason Apple seems to assume that spouses and family only share certain stuff, like iCloud storage and Apps purchased, but not Credit Card accounts and certainly not Photos (that’s a rant waiting to happen…). Apple needs to get with the program on the Photos front and on the joint Credit Card accounts, too.&lt;/p&gt;
&lt;p&gt;I suspect that Mint will eventually sort out the issues with Apple Card and support it. However, until it does I’m only using it for purchases at Apple. Ideally I’d like to make this my primary credit card, but I just can’t do that until either my wife’s and my cards are somehow combined or Mint starts supporting it.&lt;/p&gt;
&lt;p&gt;Now here’s the thing: the Apple Card is actually perfect for a lot of people. For starters, if you’re solo or just do your banking solo than my primary quip about separate accounts is a moot point for you. If that’s you then the next thing I would look at is if you have any reason to use another credit card alongside the Apple Card. If you don’t have that need and you can really consolidate to a single credit card (as most people should) then the Apple Card is a great one to do so with. If you pay a lot of bills with a debit card or checking account directly that’s the final consideration here, because you’ll be struggling to identify how much you’ve spent at a given time across accounts that don’t aggregate yet in services like Mint. The big takeaway here is if you can really go all in on the Apple Card, do it. If you can’t, it might be better to wait, or just use it for your annual (or semi-annual) iPhone upgrade.&lt;/p&gt;
</description>
        <pubDate>Thu, 03 Dec 2020 14:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/12/03/apple-card/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/12/03/apple-card/</guid>
        
      </item>
    
      <item>
        <title>A Review of the HomePod Mini</title>
        <description>&lt;p&gt;The HomePod Mini is the culmination of a long hard road for Siri. For those of us loyal Mac-addicts and Apple fanboys it&#39;s the fruition of a long slog to the ubiquitous smart assistant that many of us have been hoping for. Finally we have a smart speaker that lives up to the dream and at a price that any Mac aficionado can deploy into their home.&lt;/p&gt;
&lt;p&gt;When I look back at iPhones it was the 4 that really amplified the potential power and beauty of a personal computer in your pocket. It was the 4 that introduced the retina screen, which was the first time we stopped seeing pixelation on our screens. It also included Apple’s first processor, the A4, and it brought multi-tasking to the iPhone. I waited for hours in line on launch morning at a mall in Pittsburgh with my wife and my eight month older daughter to get iPhone 4’s for the Mrs. and myself. It was a great phone.&lt;/p&gt;
&lt;p&gt;When the iPhone 4S was released it seemed a bit anti-climactic because the 4 had been such a transformative release for the iPhone. The 4S headline feature was this weird &amp;quot;virtual assistant&amp;quot; called Siri. At this point in time, 9 years ago, computers didn’t talk to you, let alone parse and process requests. It would be 3 more years before Amazon released the Alexa.&lt;/p&gt;
&lt;p&gt;While I’ve worked from home most of my career, I was actually driving into an office when the 4S was released. In my mind’s eye the 4S would give me a boost of productivity on my drive to and from the office each morning. Paired with a Jawbone bluetooth headset (anyone remember them?) I attempted to text with my wife as well as go over personal email, which included my side hustles and volunteer work at the time on my drive home. It was mostly a disaster. Fortunately I never got in a car accident, but suffice it to say Siri was horribly unreliable at that point. I gave up after a few weeks and stopped using Siri for years.&lt;/p&gt;
&lt;p&gt;Siri became a punchline for Apple bloggers and podcasters for awhile, and then Amazon came out of nowhere with their own virtual assistant speaker. Alexa doubled down on microphones that seemed to hear everything better than the mic on the iPhone, and Alexa also featured tons of integrations (with varying degrees of questionable security) that made the device instantly more powerful than Siri was. Alexa even had a slick integration layer that allowed developers to very easily rollout new skills seemingly overnight.&lt;/p&gt;
&lt;p&gt;I purchased one of the first Alexa devices Amazon sold and jumped right in. I had started buying Belkin WeMo switches prior to the Alexa and was pleased when I could tell Alexa to turn on the lights that were plugged into the WeMos in the living room or bedroom. I even wrote my own short lived skill just to try it out. I was never quite comfortable opening Alexa up to my calendar, so that anyone in the house could access it, and I never dared to enable purchases over Alexa either. Still it was a cool device that literally carved out a new market of technology that was innovative and exciting.&lt;/p&gt;
&lt;p&gt;Meanwhile Apple took their sweet time jumping into the home speaker realm. They were quietly improving Siri’s ability to parse speech and constantly refining its functionality in iOS. Finally with iOS 10, a whole two years after Alexa’s launch, Siri was able to be customized by developers. Adoption was slow going though, both by developers and users. At this point Siri was a solid virtual assistant with a lousy mic, but it had lost the trust of its user base so it was grossly under utilized.&lt;/p&gt;
&lt;p&gt;The first HomePod was released in June of 2017, three years after Alexa and a whole year after Google Home. It was stupid expensive at $349, to the point that I think many thought this was an Apple troll. It had a dumbed down version of Siri, but it touted an amazing speaker with fantastic sound quality. But it was soooo expensive!&lt;/p&gt;
&lt;p&gt;I couldn’t justify a HomePod as much as I wanted to. I had already bought into the Sonos ecosystem and most of my smart home equipment was not HomeKit enabled. Deep down I wanted a HomePod, but it just seemed like a foolish purchase for my situation. Around the same time I became increasingly disenfranchised with Alexa. Alexa kept turning on at weird times, catching odd parts of conversations when she wasn’t being invoked. There were also growing questions on the internet about the security of Alexa and her many skills. I’m a firm believer that technology needs to have a bias toward privacy and be really transparent about it, and I just didn’t feel like Alexa had that. I packed up all of my Alexas and eventually recycled them. I slowly started retiring non-HomeKit enabled smart devices, realizing that the security of HomeKit was worth the investment. (It’s worth noting that when Apple shifted to allowing manufacturers to enable HomeKit through software rather than a dedicated chip that entire ecosystem bloomed into something that was worth investing in.)&lt;/p&gt;
&lt;p&gt;I think the Apple Watch might have saved Siri. HomePod definitely didn’t do it. In September 2017 the Apple Watch Series 3 introduced Siri support. By this point I felt like everywhere I went people were wearing Apple Watches. It was an incredibly convenient little device, and being able to talk to it ended up being a game changer. I honestly believe it was the watch that instilled a new sense of trust and confidence in Siri.&lt;/p&gt;
&lt;p&gt;That brings us to the present with the release of the HomePod Mini. Apple has been quietly improving the original HomePod over the last three years, and apparently at the same time developing the &amp;quot;affordable&amp;quot; version of their smart speaker. At $99 I felt I could take a chance and try it out. However, during the announcement Apple demoed a new feature called the intercom, and this single handedly convinced me to order two HomePod Minis on launch day.&lt;/p&gt;
&lt;p&gt;The fact of the matter is the HomePod Mini is an impressive little speaker. It has great sound and more volume than I expected from such a little device. There are a variety of videos on YouTube showcasing the quality of the sound, so I won’t belabor that here, but suffice it to say that unless you’ve spent a ton on speakers this is probably a sound quality upgrade for you. The setup was an absolute breeze, much better than any smart speaker or wireless speaker I’ve setup. Apple just made it work. The only really annoying thing about the setup flow was as soon as it was ready to go it needed to update to iOS 14.2. Seeing as the iPhone and iPad needed iOS 14.2 to intercom with the HomePod Mini this seemed like poor timing in the manufacturing process.&lt;/p&gt;
&lt;p&gt;The HomePod Mini features multi-user support and I honestly didn’t believe there was any chance this would work. However, it works great. My wife and I have both been able to text, read messages and control music play with the device seamlessly discerning who we are. I was further blown away when my kids got setup on the HomePod Mini and were also able to use Messages. Multi user support is an impressive feat in its own right, but it also makes the device much more useful because I can ask it questions about my calendar and reminders without other people gaining access to that information. At the same time, my kids can still play music and ask it for jokes when they want. The only thing it left me wondering is… if Apple can do this on the HomePod Mini why can’t they do it on the iPad?&lt;/p&gt;
&lt;p&gt;As for the intercom, it’s honestly just as awesome as I expected. I’ve always envied the built in intercoms that were so trendy in the 90’s, but they’re hard to find and not exactly cheap. I put one HomePod Mini in our kitchen and the other right outside my kids’ bedrooms on a bookshelf. The result is I’m not hollering up the stairs to ask if they’re done brushing their teeth yet. Instead I just intercom from my phone to the kids’ room HomePod Mini. They can respond just as seamlessly and the whole thing really works great. Less yelling, better communication, what’s not to love?&lt;/p&gt;
&lt;p&gt;I set low expectations for this device, but I’ve been pleasantly impressed so far. I plan to keep using it and might have further thoughts, but right now I have no reservations about recommending a HomePod Mini. If you’re in the Apple ecosystem already then this device makes a lot of sense. If you haven’t started using a smart speaker yet, this is the best place to start. If you’re a disgruntled smart speaker user or maybe just question the security of your existing one, this is a great way to jump ship and embrace a secure smart speaker. In other words, go buy a HomePod Mini.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Shortly after setting up our HomePod Minis I woke up one morning surprised at how brisk it felt in our bedroom. I reached for my phone and opened my ecobee app to see what the temperature was and I was shocked because the furnace was turned off! I quickly turned it back on and began interrogating the members of the household. It turned out that one of my kids while experimenting with the HomePod Mini had turned off the furnace. After a swift explanation and some new ground rules I think (and hope) we’ll be able to avoid this in the future, but this makes me think Apple might be overdue for some finer grain controls on the Home app for family setups.&lt;/p&gt;
</description>
        <pubDate>Sat, 28 Nov 2020 22:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/11/28/a-review-of-the-homepod-mini/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/11/28/a-review-of-the-homepod-mini/</guid>
        
      </item>
    
      <item>
        <title>Big Sur</title>
        <description>&lt;p&gt;macOS Big Sur was announced at Apple’s World Wide Developer Conference (WWDC) on June 22nd, 2020. It was released on Tuesday, November 10, 2020. This year I decided to pass on using the beta versions, probably due to the trauma of my last beta experience. I installed Big Sur on release night after some rocky attempts to download it from Apple’s update servers. After several days of using it, I have a few thoughts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Catalina was a particularly jarring release for macOS. The beta was terribly unstable, and even on launch it was a brutally buggy operating system. It remains a black mark on macOS.&lt;/li&gt;
&lt;li&gt;Big Sur’s day one download was wrought with problems, which seemed like a bad omen in the moment. These issues seem to have been sorted out. If you were trying to preorder a PS5 on Big Sur’s launch day the experience probably felt very similar.&lt;/li&gt;
&lt;li&gt;The update itself is around 12.18gb, which is nothing to sneeze at. If you’re not running on a fiber optic line with 1000Mbs down, like me, you might want to plan to do the download before you go to bed. Make sure your Mac’s power save mode won’t put the device to sleep while doing this.&lt;/li&gt;
&lt;li&gt;If you missed it, this is macOS 11. The 11 is a big deal only to the numbering system itself. Whether or not this release warrants such a big version number shift is debatable. After 19 years on version 10 some think the suspense had built up. For most folks with existing Macs the jump to 11 won’t feel nearly as dramatic as the tech and Apple blogs made it out to be.&lt;/li&gt;
&lt;li&gt;Big Sur looks like a major overhaul because of the aesthetic change, but it’s largely akin to a fresh coat of paint. The entire UI from top to bottom has been modernized and cleaned up. A bunch of the design language has been unified to be more consistent with iOS. Most of these changes genuinely look better. However, I find some icons look out of place, like Messages and Mail, which have odd gradients on them that stick out from the aesthetic of the rest of Big Sur.&lt;/li&gt;
&lt;li&gt;There are many productivity enhancements across the operating system, little changes that just make things better to use. For example, the control center in the menu bar is super handy. While most of these things are great they are not in and of themselves earth shattering features.&lt;/li&gt;
&lt;li&gt;Widgets on macOS now look and feel like the ones on iOS. These are nice, but they’re not game changers as the core functionality of these largely existed before. Widgets themselves are on their second incarnation in macOS, having first appeared from OS X 10.4 to 10.7. The new widgets are admittedly better, but you’re probably not going to upgrade just for them.&lt;/li&gt;
&lt;li&gt;There are little niceties sprinkled throughout this release, like notification grouping, or a notification dismissal button. This adds a layer of polish to features that have been around for awhile.&lt;/li&gt;
&lt;li&gt;Safari received some nice improvements, like built in tracker blocking, but unless you never updated Safari on Catalina you already had most of these. Safari in Big Sur did gain support for Apple’s Translation service, which first appeared in iOS 14. If you find yourself using this service on Google, this will be a welcome addition.&lt;/li&gt;
&lt;li&gt;Next to the day to day pleasantries of a new interface, Messages is perhaps the most important change in Big Sur. Messages is one of the most commonly used apps on every Apple device. This release unifies the Messages across platforms, which means Big Sur Messages will look and behave more like Messages in iOS 14. Replies, pinned conversations and Memojis are all noteworthy things that carried over into Big Sur from iOS. For most people this is a huge improvement and long overdue. Beyond my general desire to have the latest of everything, this was my “killer” feature and the reason I upgraded on day one.&lt;/li&gt;
&lt;li&gt;Besides the fresh paint, this operating system has a lot of improvements under the hood. However, these are improvements that the average user won’t notice but make for a better experience regardless. A good example are the security improvements. It’s almost cliche at this point, but Big Sur is the most secure version of macOS. Privacy continues to be a key feature for Apple.&lt;/li&gt;
&lt;li&gt;Big Sur’s biggest feature didn’t matter for anyone on release day, because it was support for Apple Silicon, a chip that wasn’t in anyone’s computer on release day. Perhaps that’s why this release feels a little anticlimactic to me. Big Sur reminds me of  OS X 10.4 “Tiger”, which included some UI improvements, Dashboard Widgets, Spotlight, but most importantly paved the way for Apple’s transition to Intel based Macs. A big part of Tiger was about getting everything under the hood ready for the Intel future. That didn’t make Tiger a bad release, nor does it make Big Sur a bad release, but it does mean that when you update you have to remember the biggest feature of Big Sur is for the next computer you buy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;To update or not to update?&lt;/strong&gt; Big Sur seems pretty safe and most people should update. I’ve experienced few issues and all of them were trivial. Unless you have unusual peripherals or non-standard Mac software that touches the system in a more invasive fashion you should be fine updating. If you’re in that camp I mention though, simply hold off until your critical apps have Big Sur updates.&lt;/p&gt;
</description>
        <pubDate>Thu, 19 Nov 2020 12:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/11/19/big-sur/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/11/19/big-sur/</guid>
        
      </item>
    
      <item>
        <title>iPhone 12 Pro</title>
        <description>&lt;p&gt;The iPhone 12 Pro was announced at an Apple Event on October 13th, with preorders that Friday the 16th. My order was placed shortly after 8am and it arrived on October 23rd. Now that I&#39;ve had it for a few weeks I have a few thoughts, especially in light of the device it replaced, my iPhone 122 Pro.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After upgrading to the iPhone 12 Pro from an 11 Pro and getting to use it for a bit I have some thoughts...&lt;/li&gt;
&lt;li&gt;The processor (A13 -&amp;gt; A14) and memory (4gb -&amp;gt; 6gb) upgrades are noticeable in every day use. Everything runs faster and everything seems more responsive. These improvements make the upgrade worth it in my opinion.&lt;/li&gt;
&lt;li&gt;The form factor is a pleasant change. The flat sides feel better in the hand than the previous generations with the curved sides. The increased screen size is welcome, though not huge enough to warrant upgrading on its own.&lt;/li&gt;
&lt;li&gt;I bought the pacific blue and it’s absolutely gorgeous, this is a great looking phone. Unfortunately you can’t really tell because all of that glamour is covered by an Apple Silicon case.&lt;/li&gt;
&lt;li&gt;The Apple Silicon case isn’t noticeably different. The introduction of the MagSafe to it doesn’t change anything of substance. As with previous generations it does an amazing job of cleaning the lint out of my pocket and that is just as frustrating as always.&lt;/li&gt;
&lt;li&gt;Anecdotally I’m getting better battery performance. It’s hard to say why this is because it should have been a wash. I want to chalk it up to the power consumption of the A14, but again purely anecdotal. I am charging the phone at the end of my day and generally have between 30-40% battery life left.&lt;/li&gt;
&lt;li&gt;The iPhone 11 Pro’s front glass was the worst of any iPhone I’ve had. The 11 Pro scratched noticeably the first week I had it. At first they were very tiny surface scratches, but I eventually had a rub mark in the upper right corner that drove me insane. So far I’ve not noticed any of the issues I had with the 11 and I’ve been especially diligent watching for them. It is early, but this seems better in a purely unscientific way. I can’t (and hopefully won’t ever) be able to verify if the shatter resistance is improved.&lt;/li&gt;
&lt;li&gt;I can’t say that I’ve noticed any improvements with 5G. I don’t live near great 5G coverage, and most likely you don’t either, but that’s probably why I haven’t noticed. I’m sure some day this will matter.&lt;/li&gt;
&lt;li&gt;The LiDAR sensor is hard to evaluate. My photos look great, but they did on the 11 Pro too. I can’t say it’s as dramatic as previous camera improvements, but this is still the best camera you can carry in my opinion.&lt;/li&gt;
&lt;li&gt;There was a lot of anger over Apple excluding the charging brick from the box. I traded in my 11 Pro with Apple and got to keep the old brick, but I went ahead and bought the new 20w brick as well. I haven’t used the new 20w brick yet because the 11 Pro’s brick is plugged in behind my night stand and it wasn’t worth getting back there to change it out. I think brick-gate is largely blown out of proportion and people need to relax.&lt;/li&gt;
&lt;li&gt;Initially I preordered the new MagSafe charger, but then ended up cancelling the order. It’s a pretty expensive charger. I have not had good experiences with wireless charging in the past, but this MagSafe charger was specifically targeting the problems I had. Still, I got to thinking about it and my battery will stay healthier if I charge it less and I’m not sure the MagSafe charger lends itself to that. Ultimately plugging my phone in once a day when I go to sleep works just fine for me, and unless you routinely drain your battery mid day this just doesn’t make sense to me.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;To buy, or not to buy?&lt;/strong&gt; The most compelling reason to buy this phone is the processor and memory upgrade. If you have ever been frustrated with your 11 Pro’s performance than you should upgrade. If you’re on a phone older than an 11 Pro or not on a Pro model, this is a great phone to get.&lt;/p&gt;
</description>
        <pubDate>Sun, 15 Nov 2020 16:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/11/15/iphone-12-pro/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/11/15/iphone-12-pro/</guid>
        
      </item>
    
      <item>
        <title>The Donut Fairy</title>
        <description>&lt;p&gt;Evelyn is the household donut connoisseur. She&#39;s the one responsible for getting me out of bed early to go get donuts, and she also usually decides where to get the donuts. She&#39;ll tell you the best donuts in Indianapolis are at Long&#39;s Bakery, but that Jack&#39;s Donuts is closer; and if you want one of the cinnamon twists they&#39;re bigger at Jacks, but Long&#39;s has the better cake donuts. She&#39;s got it all down; this is her thing.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/R6fYdoqsxL-300.webp 300w, /img/R6fYdoqsxL-600.webp 600w, /img/R6fYdoqsxL-1200.webp 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/R6fYdoqsxL-300.png 300w, /img/R6fYdoqsxL-600.png 600w, /img/R6fYdoqsxL-1200.png 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/R6fYdoqsxL-300.jpeg&#34; alt=&#34;Dunkin Donuts delivered to the house via Door Dash&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1200&#34; height=&#34;1200&#34; srcset=&#34;/img/R6fYdoqsxL-300.jpeg 300w, /img/R6fYdoqsxL-600.jpeg 600w, /img/R6fYdoqsxL-1200.jpeg 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;One day Henry (age 8) is sitting back watching reruns of the epic show Myth Busters on Hulu. This is one of the few shows we watch that has ads. Evelyn, his little sister (age 6), is his sidekick and was happily sitting at his side watching Myth Busters when an ad for Dunkin Donuts came up. I can count the number of times Evelyn has had donuts from Dunkin on both hands, it’s maybe 7. Only one of those occurred in Indianapolis, the others were at Grandma Lemon’s house during a visit and a few times on the road when Mom &amp;amp; Dad needed coffee.&lt;/p&gt;
&lt;p&gt;I was sitting on the deck reading when the Dunkin Donuts ad popped up, and Evelyn rushed outside to tell me about. She told me we could get free donuts, the TV said so. She was excited and rambling a bit and also mentioned something about dashing. It took me a bit, but I figured out that the ad was talking about Door Dash.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/tQIsLt-lh0-300.webp 300w, /img/tQIsLt-lh0-600.webp 600w, /img/tQIsLt-lh0-751.webp 751w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/tQIsLt-lh0-300.png 300w, /img/tQIsLt-lh0-600.png 600w, /img/tQIsLt-lh0-751.png 751w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/tQIsLt-lh0-300.jpeg&#34; alt=&#34;Dunkin Donuts ad inside of the Door Dash app, note the free munchkins&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;751&#34; height=&#34;1024&#34; srcset=&#34;/img/tQIsLt-lh0-300.jpeg 300w, /img/tQIsLt-lh0-600.jpeg 600w, /img/tQIsLt-lh0-751.jpeg 751w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Maybe this is a good time to explain that in Evelyn’s 6 long years of life we’ve had food delivered to our house exactly one time. It was right after we moved to Indianapolis, on day 2, and we ordered pizza from Donatos. The kids declared it a disaster and to this day when I mention it they don’t recall it, the scar of bad pizza having been blocked out due to the trauma of the whole thing.&lt;/p&gt;
&lt;p&gt;So Evelyn has no idea what Door Dash is, but this hasn’t registered in my brain yet, but I cautioned her that this likely was too far away to work for us. She nodded and went along, insisting that I check. I installed the Door Dash app, having never used it before, created an account and checked Dunkin Donuts’ availability to our home. We live in a relatively new part of Indy and there are a number of things that don’t deliver to our area (like Drizzly) and I assumed that would be the case because Dunkin Donuts is not exactly close (~9 miles). Well sure enough, Dunkin Donuts delivered to our home and the ad that Evelyn saw was the first thing to pop up.&lt;/p&gt;
&lt;p&gt;I committed to Evelyn then and there that I would get donuts in the morning, including the 25 free donut holes. Her job was to wake me up in the morning and say “Dunking Donuts” so that I remembered. Thus the deal was closed.&lt;/p&gt;
&lt;p&gt;The next morning Evelyn got up a little earlier than usual, snuck into our master bedroom, crept up alongside my side and in the creepiest voice possible said, “DUNKIN DONUTS.” I pulled up the app on my phone and I started to place an order. This all seemed fairly routine, but now I needed to get ready. Evelyn got dressed and waited while I showered. When I came out she looked very nervous, “Daddy, you took a long time, we gotta go get the donuts.” At this point I smiled, “But honey they’re already here.” “What?!?!? How?!?” I then showed Evelyn a picture of them on our front doorstep that had been sent to me by the Door Dash driver, and she bolted downstairs. Mrs. Lemon had already moved them inside.&lt;/p&gt;
&lt;p&gt;This was a truly mind blowing event for Evelyn. Donuts could be delivered?!? To our house?!? How is this possible??? Of course, there’s only one answer and I shared it with Evelyn: &lt;strong&gt;The Donut Fairy.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Technology is pretty cool.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/l9b320JBWh-300.webp 300w, /img/l9b320JBWh-600.webp 600w, /img/l9b320JBWh-1200.webp 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/l9b320JBWh-300.png 300w, /img/l9b320JBWh-600.png 600w, /img/l9b320JBWh-1200.png 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/l9b320JBWh-300.jpeg&#34; alt=&#34;Evelyn devouring a Dunkin Donut from The Donut Fairy&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1200&#34; height=&#34;1200&#34; srcset=&#34;/img/l9b320JBWh-300.jpeg 300w, /img/l9b320JBWh-600.jpeg 600w, /img/l9b320JBWh-1200.jpeg 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 21 Sep 2020 01:20:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/09/20/the-donut-fairy/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/09/20/the-donut-fairy/</guid>
        
      </item>
    
      <item>
        <title>Red Sauce for Pizza, Spaghetti and Other Pasta</title>
        <description>&lt;p&gt;When I made my &lt;a href=&#34;/2020/04/19/pizza-night-at-the-lemons/&#34;&gt;Pizza Night at the Lemon&#39;s&lt;/a&gt; post and video I mentioned I would share my red sauce (aka &amp;quot;pizza&amp;quot; sauce) recipe shortly thereafter. Well, here it is!  This recipe came about due to the difficulties my wife and I had finding a good pizza sauce for our pizza. Prior to this recipe we also never ate pasta, for similar reasons. It seemed like whenever we found a good sauce we would snatch up as much as the grocery store had and then it would disappear after that, leaving us to experiment and find a different brand.  Finally we were doing a stint with Blue Apron and came across a &lt;a href=&#34;https://www.blueapron.com/recipes/three-cheese-calzones-with-broccoli-rabe-broccolini-tomato-sauce&#34;&gt;Calzone recipe&lt;/a&gt; that had a rather delightful sauce to it.  Blue Apron ships their seasoning packets already measured so we didn&#39;t know the composition other than the unknown aleppo pepper and italian seasoning (typically oregano, basil and rosemary). So we set out to reproduce this sauce, along with some modifications and came up with what follows. This is our red sauce, we use it for pizza, spaghetti and any other pasta dish we put together. The batch here is more then you need for pizza night, so you can either save the extra for next week or freeze it if you like, we&#39;ve done both! Enjoy!&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;text-center&#34;&gt;
    &lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/RP_Yu2fP_I4&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;Ingredients&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;1lb 12oz can of crushed tomatoes&lt;/li&gt;
&lt;li&gt;2 tablespoons olive oil (or enough to cover the bottom of the pan)&lt;/li&gt;
&lt;li&gt;8 fresh garlic cloves&lt;/li&gt;
&lt;li&gt;1/2 teaspoon &lt;a href=&#34;(https://amzn.to/2SsCdea)&#34;&gt;aleppo pepper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;1 teaspoon dry basil&lt;/li&gt;
&lt;li&gt;1 teaspoon dry oregano&lt;/li&gt;
&lt;li&gt;1/4 teaspoon sugar&lt;/li&gt;
&lt;li&gt;1/4 teaspoon salt&lt;/li&gt;
&lt;li&gt;1/4 teaspoon black pepper&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;If you don&#39;t have aleppo pepper that&#39;s ok, just skip it, &lt;a href=&#34;https://amzn.to/2SsCdea&#34;&gt;but consider ordering some for your spice cabinet&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Optional&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Dash of cayenne pepper&lt;/li&gt;
&lt;li&gt;1/4 teaspoon &lt;a href=&#34;https://amzn.to/369n5bh&#34;&gt;ground fennel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Directions&lt;/h2&gt;
&lt;p&gt;Begin with a medium sized pot, like 2.5 Quarts, pour about 2 tablespoons of olive oil into it, or enough to provide nice coverage over the bottom of the hot. Heat on medium.  You&#39;ll know when the oil is hot enough because if you flick a drop of water at it, it will pop.&lt;/p&gt;
&lt;p&gt;One the oil is hot take 8 cloves of freshly minced garlic and place into the oil. If you do not have fresh garlic you can use pre-minced garlic, and figure about two heaping teaspoons.&lt;/p&gt;
&lt;p&gt;Let the garlic fry up for about about a minute or just until it turns golden brown.  Make sure you&#39;re constantly stirring it around while it fries.&lt;/p&gt;
&lt;p&gt;Add 1/2 teaspoon of aleppo pepper, 1 teaspoon dry oregano and 1 teaspoon dry basil into the hot oil and fried garlic, stirring in continuously for about 30 seconds or when the oregano and basil begin to toast.&lt;/p&gt;
&lt;p&gt;Add 1lb 12oz of crushed tomatoes (1 big can) to the hot oil, fried garlic and spices slowly so that it doesn&#39;t splatter back at you, stirring vigorously. Add 1/4 teaspoon sugar, 1/4 teaspoon salt, 1/4 teaspoon black pepper and optionally a dash of cayenne pepper, and a 1/4 teaspoon of ground fennel.  Stir continuously for about 4 minutes, or until the sauce has been heated through.  You&#39;ll know it&#39;s heated when the sauce begins to pop.&lt;/p&gt;
&lt;p&gt;Remove from heat and let it cool before applying to a pizza, or if serving with Pasta apply immediately. You can smooth the sauce out with an immersion blender, which might be desirable for certain dishes.&lt;/p&gt;
</description>
        <pubDate>Sun, 17 May 2020 19:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/05/17/red-sauce-for-pizza-spaghetti-and-other-pasta/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/05/17/red-sauce-for-pizza-spaghetti-and-other-pasta/</guid>
        
      </item>
    
      <item>
        <title>Pizza Night at the Lemon&#39;s</title>
        <description>&lt;p&gt;As long as my wife and I have been married we&#39;ve been making our own pizza, every Friday night. I grew up in a suburb of Chicago where pizza and Friday nights were pretty much synonymous. Ordering pizza from your local parlour was just what you did. For my family most Fridays we ordered pizza from Campagna&#39;s, which made a crispy and often very salty thin crust. Later in life we&#39;d frequent Dominick&#39;s and then &lt;a href=&#34;https://www.paljoeys.com&#34;&gt;Pal Joey&#39;s&lt;/a&gt;, which sadly is the only one of these restaurants still in business today.&lt;/p&gt;
&lt;p&gt;It often surprises people to learn that even as a Chicago suburbanite, the pizza which you are most likely to associate with our fair city was not what I grew up on.  The flakey and buttery goodness of Chicago style deep dish that places like &lt;a href=&#34;https://giordanos.com&#34;&gt;Giordiano&#39;s&lt;/a&gt; and &lt;a href=&#34;https://www.ginoseast.com&#34;&gt;Gino&#39;s East&lt;/a&gt; made so popular was not something we ate regularly. In fact, in my hometown I don&#39;t even know of a place that served that style of pizza when I was growing up.  Chicago style pizza is far more diverse than the casserole-like pies where the sauce decorates the top, in fact it&#39;s the thinner version of Chicago style pizza that I grew up on every Friday night and still continue to love. Now don&#39;t get me wrong, deep dish is fantastic, that&#39;s just not the purpose of this post today.&lt;/p&gt;
&lt;p&gt;When my wife Sara and I got married we immediately moved to the Northern side of Pittsburgh, where she started a new job. That first Friday together as a married couple I was left with an empty and hollow feeling as we struggled to find a pizza place for dinner. There&#39;s a place called Fox&#39;s Pizza that&#39;s pretty popular, but nothing about about it tasted right. For the first time in my life I didn&#39;t enjoy pizza night.  So we did what any young couple would do during a culinary crisis and we decided to make our own.&lt;/p&gt;
&lt;p&gt;Sara used a recipe right out of the Kitchen Aid Mixer recipe book, and for years it was good enough. We struggled to find good sauce, but for awhile the local Shop&#39;n Save had the best we could find, until they didn&#39;t. When we finally moved to Indiana I took up bread baking as a hobby and thus unleashed a series of experiments in pizza making to find the right process, ingredients and recipe for the pizza I wanted to eat. The experimentation became so intense that one week our family ate pizza every night of the week, each a different recipe. What I ultimately found was that no single recipe accomplished the texture and flavor I wanted, so eventually I started experimenting with ingredients and ratios.&lt;/p&gt;
&lt;p&gt;Almost five years later pizza night is as much a tradition in our family as it was in mine at my folk&#39;s home in West Chicago; the only difference is that I make my pizza from scratch. It starts before lunch time when I mix up the dough, and concludes right after I&#39;m done with work as I hand stretch and assemble our pizza. For a long time many of my friends have asked me to share my recipe, which is honestly quite simple. The process is more nuanced though, and as many times as I&#39;ve tried to write it down nothing would do it justice quite like a video. So here we are. I am happy to share a complete walk through of the Lemon family pizza recipe. I hope you&#39;ll give it a shot at home, and I hope this video helps you out.&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;text-center&#34;&gt;
    &lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/_UL-A-Gvlr8&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;For this recipe you&#39;re going to need a scale, because all of my measurements are by weight. Weighing any recipe that you&#39;re baking guarantees consistency. When you measure by volume its easy to throw off the ratio of flour and water and that can really change how things come out.  So if you don&#39;t have a digital scale at home, &lt;a href=&#34;https://amzn.to/3aw7Qd2&#34;&gt;do yourself a solid and order one&lt;/a&gt;, they&#39;re inexpensive and super valuable when baking.&lt;/p&gt;
&lt;p&gt;I use a mixer to combine my ingredients, but you can absolutely do this by hand too. Combine all of the ingredients and work them together until you have a smooth dough. In my Kitchen Aide mixer I start at speed 1 for 1-2 minutes and then increase it to speed 2 for another 6-8 minutes. In total you&#39;re going to mix the dough for 8-10 minutes, but the important thing is the texture. If you&#39;re doing this by hand, try not to add too much additional flour from your work service to the dough. Gently work it, folding the dough over itself again and again until you get a smooth and consistent dough.&lt;/p&gt;
&lt;h2&gt;Ingredients&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Active Yeast 9g&lt;/li&gt;
&lt;li&gt;Water 372g&lt;/li&gt;
&lt;li&gt;Olive Oil 18g&lt;/li&gt;
&lt;li&gt;00 Flour 300g&lt;/li&gt;
&lt;li&gt;All Purpose Flour 300g&lt;/li&gt;
&lt;li&gt;Salt 12g&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;See notes below for additional information on ingredients.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Directions&lt;/h2&gt;
&lt;p&gt;After you&#39;ve combined the ingredients, divide the dough into two even balls. I used my scale to weigh them and make sure they&#39;re equal. Then place the dough balls onto a lightly floured plate, cover it with plastic wrap and place it into your fridge for 5-8 hours. During this time the dough will rise, but thanks to the refrigeration it&#39;ll rise a little bit slower and develop a richer flavor profile.&lt;/p&gt;
&lt;p&gt;When it&#39;s cooking time start your oven at the hottest temperature you can set it to. In my house this is 550 degrees. If you have a baking stone or &lt;a href=&#34;https://shop.bakingsteel.com/collections/steels/products/baking-steel-3-8&#34;&gt;baking steel&lt;/a&gt;, put it in the over before you turn it on.  You&#39;re going to want to let you oven warm for about an hour to make sure everything is as hot as you can get it. I&#39;m a big fan of the baking steel, as it concentrates heat in your oven far better than a baking stone does. Bottom line is you want something super hot to slide your pizza on to.&lt;/p&gt;
&lt;p&gt;After your oven has been heated for about an hour, take the dough out of the fridge. I like to give it 10 minutes or so to adjust to room temperature. Remove the plastic wrap, lightly flour the top and bottom (I like to use Semolina for the bottom) and begin hand stretching the dough by passing it from one hand to the other and letting gravity do the hard work. If you&#39;ve never seen this technique before, check out the video.&lt;/p&gt;
&lt;p&gt;Once your dough is stretched and shaped begin assembly. &lt;em&gt;I have sauce recipe I make from scratch that I&#39;ll share in a future video and post.&lt;/em&gt; I use just mozzarella cheese on the top. You can try other cheeses, but remember I&#39;m going for the pizza I grew up with in Chicago and on the thin crusts that&#39;s mozzarella (deep dish aficionados will recall that provolone is common in those recipes).&lt;/p&gt;
&lt;p&gt;Transfer your pizza into your hot 550 degree oven and set a timer for 6 minutes. Your pizza will be done when that mozzarella begins to blister (the slightly brown glorious crunchiness that forms when cheese is cooked in the oven).  Pull the pizza out, transfer to a cooling rack and wait 5 minutes before cutting. Then enjoy!&lt;/p&gt;
&lt;p&gt;When cutting a pizza I&#39;m a big fan of the &lt;a href=&#34;https://amzn.to/2x5SRc0&#34;&gt;Kitchy&lt;/a&gt; which is sharp, easy to use and a breeze to clean.&lt;/p&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I highly recommend &lt;a href=&#34;https://shop.kingarthurflour.com/items/saf-red-instant-yeast-16-oz&#34;&gt;Saf Instant yeast&lt;/a&gt;, this stuff just works. If you have Fleischman&#39;s that&#39;s ok, but next time you&#39;re out shopping keep an eye out for Saf.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://amzn.to/3bI2rRG&#34;&gt;00 flour&lt;/a&gt; is what gives my pizza that pizza-parlour smell and flavor that is so distinct from other flour. It&#39;s highly refined and finely milled Italian flour, often used in making pasta, but really puts your pizza over the top.&lt;/li&gt;
&lt;li&gt;I love &lt;a href=&#34;https://shop.kingarthurflour.com/items/king-arthur-unbleached-all-purpose-flour-5-lb&#34;&gt;King Arthur&#39;s All Purpose Flour&lt;/a&gt;, most grocery stores sell this.&lt;/li&gt;
&lt;li&gt;If you don&#39;t have or can&#39;t find 00 flour that&#39;s OK, you can substitute all purpose or bread flour. It&#39;ll taste different, but it won&#39;t be bad.&lt;/li&gt;
&lt;li&gt;If you want to try something different, substitute the all purpose flour with 00 flour. You&#39;ll find the pizza to be a bit more chewy, so your mileage may vary.&lt;/li&gt;
&lt;li&gt;Using bread flour in place of all purpose flour is totally fine, it&#39;ll produce a chewier crust generally.&lt;/li&gt;
&lt;li&gt;I recommend using kosher salt, but if you don&#39;t have any normal table salt is fine too.&lt;/li&gt;
&lt;li&gt;For a little bit of extra flavor you can add 3g of garlic powder directly to the dough. Most of the time I do this.&lt;/li&gt;
&lt;li&gt;I recommend having some &lt;a href=&#34;https://amzn.to/3cX82np&#34;&gt;Semolina flour&lt;/a&gt; on hand for the underside of your dough, it&#39;s coarser and will help you move the dough from your work surface into the oven.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 19 Apr 2020 17:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/04/19/pizza-night-at-the-lemons/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/04/19/pizza-night-at-the-lemons/</guid>
        
      </item>
    
      <item>
        <title>What the last episode of Seinfeld and the flu have in common</title>
        <description>&lt;p&gt;After nine seasons 76 million people tuned into watch the last episode of the TV Show Seinfeld. That episode was a profound middle finger to the audience of Seinfeld, basically telling every dedicated fan that after all those years the show was pointless. It was an extremely polarizing episode, some loved it, some hated it. But 76 million viewers! Do you ever wonder how they came up with that number? Did NBC have some magical way of tracking every TV with a wire or antenna that tuned in for the finale? No, they did not. Instead they used statistical sampling to come up with that number. This is how most ratings and viewership &amp;quot;estimates&amp;quot; work; a company like Nielsen polls a set of people who are representative of the total viewership, and then they multiply it out. If you sample 1000 people, which is supposed to represent a 100 million human beings, you’re going to multiply it by 100,000 to get your best guess at the actual number of viewers. This sort of estimation in statistical analysis is hugely important in understanding what’s going on today with numbers about viruses like the flu and the novel coronavirus.&lt;/p&gt;
&lt;p&gt;Let’s take a look at influenza. You might have heard of some of these numbers: During the 2018 - 2019 season, 34,200 died from influenza in the United States. Meanwhile, as I write this on April 19, 2020, &lt;a href=&#34;https://coronavirus.jhu.edu/map.html&#34;&gt;Johns Hopkins&lt;/a&gt; is reporting 39,090 deaths from the novel coronavirus in the United States. Ok, so at first glance perhaps the novel coronavirus is marginally worse than the flu, but is that an accurate statement?&lt;/p&gt;
&lt;p&gt;A number is only as good to you as your understanding of where it came from. It’s like Seinfeld and the 76 million people who tuned in for what many (not me) have argued is one of the worse finales to a TV show ever aired. We already know that 76 million people were not polled about Seinfeld, and the same is actually true of the 34,200 deaths from the flu in the United States. This 34,200 number comes from the &lt;a href=&#34;https://www.cdc.gov/flu/about/burden/2018-2019.html&#34;&gt;Center for Disease Control’s website&lt;/a&gt;, and a lot of people miss &lt;a href=&#34;https://www.cdc.gov/flu/about/burden/how-cdc-estimates.htm&#34;&gt;the methodology the CDC used for coming up with this number&lt;/a&gt;. If you click a little deeper into the site and read further you’ll see that the CDC uses a tool to estimate total deaths from reported deaths.[^1] &lt;a href=&#34;https://onlinelibrary.wiley.com/doi/full/10.1111/irv.12486&#34;&gt;Here’s their summary to the method&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We used routinely collected surveillance data, outbreak field investigations, &lt;strong&gt;and proportions of people&lt;/strong&gt; seeking health care from survey results to &lt;strong&gt;estimate&lt;/strong&gt; the number of illnesses, medical visits, hospitalizations, &lt;strong&gt;and deaths&lt;/strong&gt; due to influenza during six influenza seasons (2010‐2011 through 2015‐2016). &lt;em&gt;(emphasis mine)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let’s take a closer look at these numbers for the state I live in, Indiana.  For the 2018 - 2019 season &lt;a href=&#34;https://www.cdc.gov/nchs/pressroom/sosmap/flu_pneumonia_mortality/flu_pneumonia.htm&#34;&gt;Indiana had 1,118 deaths from influenza&lt;/a&gt; according to the CDC. It’s important to remember that the CDC does not actually do these tests in each state, rather they get their data from state health departments like the Indiana State Department of Health (ISDH). ISDH reports to the CDC actual tests each week, and &lt;a href=&#34;https://www.in.gov/isdh/22104.htm&#34;&gt;you can view these reports online&lt;/a&gt;. If you look at &lt;a href=&#34;https://www.in.gov/isdh/files/Weekly%20Influenza%20Report-Week%2020-2018-2019.pdf&#34;&gt;the last report of the flu season&lt;/a&gt;, which stretches from October to May, you’ll see that there were 113 reported influenza deaths. These are deaths with actual lab tests confirming that the individual who died had influenza. At the same time though, the CDC reports an estimate of 1,118 flu deaths in Indiana, which is derived from the 113 tested deaths reported by Indiana’s health department using the method they described above. Remember, 113 is the confirmed test number (like Nielsen’s sampling of the viewership for the Seinfeld finale), and 1,118 is an estimate (like the 76 million viewers that tuned into the Seinfeld finale).&lt;/p&gt;
&lt;p&gt;Most news sources are relying on data from &lt;a href=&#34;https://coronavirus.jhu.edu/map.html&#34;&gt;Johns Hopkins&lt;/a&gt; (which uses CDC data) to report the number of deaths from the novel coronavirus in the United States. The data in these numbers are from confirmed lab tests of people who have died from the novel coronavirus. These are not estimates. So when you want to compare the flu and the novel coronavirus in Indiana, the 1,118 estimated deaths from the 2018 - 2019 flu season is not the right number to compare to &lt;a href=&#34;https://www.in.gov/coronavirus/&#34;&gt;Indiana’s current 562 confirmed deaths from the novel coronavirus&lt;/a&gt;[^2], the 113 number is. Comparing 113 flu deaths to 562 novel coronavirus deaths is comparing confirmed lab tests against confirmed lab tests.&lt;/p&gt;
&lt;p&gt;But of course it’s more complicated than that. Notice I’m not referencing the 2019 - 2020 flu numbers. The reason for this is that this year’s flu season is not actually over. Just like the novel coronavirus season, we’re in the middle of it so our confirmed tests are incomplete. They’re going to grow tomorrow and the next day and the day after that until the season for this virus concludes. Right now we don’t know how long that is, but we know that the 113 confirmed deaths spanned a 7 month window while the 562 novel coronavirus deaths only span about 2 months.&lt;/p&gt;
&lt;p&gt;The estimated deaths from the flu of 1,118 were just under 10x higher than the confirmed deaths of 113. I have no way of knowing if that multiple will hold true for the novel coronavirus. I hope not. We’re certainly testing far more people for the novel coronavirus than we do for the flu. We won’t know estimated deaths until this virus has run its full course and the CDC can work up a methodology and complete their research. For the time being all we can do is compare confirmed tests, and those are certainly higher. The important thing here is to remember that you have to be comparing the right numbers. If those numbers are not sourced the same way then you can’t simply say one is worse because the number is higher.&lt;/p&gt;
&lt;p&gt;None of this is intended to scare you. It’s intended to help you understand why statements like &amp;quot;we lose more people from the seasonal flu&amp;quot;[^3] are, at best, a misunderstanding of the underlying numbers and how we got them. I think it’s fair to say that the number of confirmed tests show that the novel coronavirus has a higher mortality rate than the flu. How much higher remains to be seen, and we probably won’t know until this is all over. Until that day, stay safe, please.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This mathematical “revelation” is not new or original, but I chose to write this after seeing friends and close family compare the flu and novel coronavirus. If you want a longer and more sophisticated analysis of the number conundrum check out this piece from late March in The Washington Post titled, &lt;a href=&#34;https://www.washingtonpost.com/politics/2020/03/27/those-covid-19-death-toll-figures-are-incomplete/&#34;&gt;“Those covid-19 death figures are incomplete”&lt;/a&gt;. Just make sure you read the article in its entirety, please.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: I am not a epidemiologist, nor a health care worker, nor a scientist. My only qualifications are that I can read and I once took a statistics class in High School. The best thing you, dear reader, can do, is to do your own research, and learn how these numbers are made yourself.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Footnotes:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;[^1]: If you&#39;re wondering why the CDC reports an estimate rather than just raw test data think back to the last time you had the flu, or the time before that. Did you make it to the doctor? If you did, did they test you? The flu is common enough that many of us have had it a few times and we didn&#39;t necessarily get tested each time to confirm it. Doctor visits and tests both cost money and they can curb the decisions that we make, especially during seasons when the flu may not be as bad. Factor in those without health insurance or even those who are naturally averse to visiting the doctor (like my friend &lt;a href=&#34;http://jonkohlmeier.net&#34;&gt;Jon&lt;/a&gt;) and the confirmed tests really only show us a portion of the picture. This is ultimately why the CDC does research beyond confirmed tests to come up with a more accurate representation of the impact of the flu on the United States. Even if the CDC wanted a 100% confirmed number they couldn&#39;t pull it off, it&#39;s just too hard to do in a country of 328 million people. It&#39;s the same challenge a company like Nielsen is trying to figure out how many people tuned in for the Seinfeld finale.&lt;/p&gt;
&lt;p&gt;[^2]: This number is current as of 4/19/2020, and if you read this anytime after the day I published this article it will be wrong. This is really amazing when you stop and think about it. Prior to the novel coronavirus the state of Indiana reported stats for the flu weekly in a PDF. They had a fancy table, but that was really it. The novel coronavirus has forced state health departments like ISDH to step up their analytics game in a big way, now giving daily updates with all sorts of data segments to analyze. This is great, but it also factors into the challenge we face with data right now as so many media outlets historically have reported estimates rather than raw data.&lt;/p&gt;
&lt;p&gt;[^3]: &lt;a href=&#34;https://twitter.com/AmeliaPakHarvey/status/1251627911108575233&#34;&gt;Robert Hall of Bloomington, IN on 4/18/20&lt;/a&gt;, recorded by &lt;a href=&#34;https://www.indystar.com&#34;&gt;IndyStar&lt;/a&gt; reporter &lt;a href=&#34;https://twitter.com/AmeliaPakHarvey&#34;&gt;Amelia Pak-Harvey&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sun, 19 Apr 2020 17:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2020/04/19/what-the-last-episode-of-seinfeld-and-the-flu-have-in-common/</link>
        <guid isPermaLink="true">https://stanlemon.com/2020/04/19/what-the-last-episode-of-seinfeld-and-the-flu-have-in-common/</guid>
        
      </item>
    
      <item>
        <title>How We Paid Off Our Mortgage</title>
        <description>&lt;p&gt;Awhile back I wrote an article about &lt;a href=&#34;https://stanlemon.com/2018/09/15/visualizing-a-mortgage/&#34;&gt;visualizing my mortgage&lt;/a&gt; after my buddy Jon and I &lt;a href=&#34;https://twistoflemonpod.com/episode-8-if-you-dont-buy-milkshakes-with-your-money-save-for-a-house/&#34;&gt;discussed buying a house&lt;/a&gt; on our &lt;a href=&#34;http://twistoflemonpod.com/&#34;&gt;podcast&lt;/a&gt;. Since then my wife and I have aggressively gone after our mortgage and I was happy to report (on Facebook) that at the end of June we made the final payment. I hesitated posting about this on Facebook (I don&#39;t post often), but I was pretty proud and happy and wanted to share that joy. Yes, it was a brag and it was anything but humble, but sometimes you earn a little bit of that. :)&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/iioQpLPikH-300.webp 300w, /img/iioQpLPikH-600.webp 600w, /img/iioQpLPikH-1024.webp 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/iioQpLPikH-300.png 300w, /img/iioQpLPikH-600.png 600w, /img/iioQpLPikH-1024.png 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/iioQpLPikH-300.jpeg&#34; alt=&#34;Mrs. Lemon and I in front of our home with our mortgage visualization fully colored in.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1024&#34; height=&#34;768&#34; srcset=&#34;/img/iioQpLPikH-300.jpeg 300w, /img/iioQpLPikH-600.jpeg 600w, /img/iioQpLPikH-1024.jpeg 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Since my post many friends and &lt;em&gt;frenemies&lt;/em&gt; alike have asked us two questions. First, how did we do it? Second, did we use Dave Ramsey’s methods? The answer to the second question is no, we did not explicitly use Dave Ramsey’s methods. Some of his principles and methods look very similar to our own though, so it’s possible we’ve been unintentionally using parts of them for the better part of a decade. The first question is harder to answer and does not have a quick and straight forward answer, so I figured I’d write a post about it.&lt;/p&gt;
&lt;p&gt;Sara and I bought our first house a year into our marriage, back in 2007 right before the housing bubble burst. We bought a brand new town home in Pittsburgh and never expected it to be our forever home, though we loved it no less. The initial purchase was tough. We had saved some money up, but just barely enough to make it happen. Our downpayment was not dictated by our savings, but rather by our monthly payment. We had a budget and knew where we wanted that payment to be and thus cobbled together the money necessary to get that monthly payment.  We managed to get about 11% down on that first house. This was back when PMI was just a flat fee, so it was not a big factor in our decision making. That was the last time we put less than 20% down on a home. If I were buying my first house today PMI would probably play a bigger factor in determining the amount I was borrowing.&lt;/p&gt;
&lt;p&gt;We lived in that townhome for three years and refinanced in the middle of it. This probably seems insane, but the interest rates were dropping so fast then that it seemed crazy not to. Our refinance saved us a ton of money on interest, and despite not being there for very long the numbers made sense. When we refinanced we also did something a bit unusual, we put more money down, thus reducing the total size of the new loan. I had been doing contract work and, with a very good year, had some extra savings. We were spreading out a smaller loan over a fresh set of 30 years with a smaller interest rate, so our payment was definitely going to be smaller. Many people would spend the money freed up from a refinance like this, but we had already budgeted for what we were paying and decided to keep doing so. This meant that the buffer from the refinance was suddenly going at our principal. When you pay extra on your principal it quickly begins to chip away at that balance.&lt;/p&gt;
&lt;p&gt;At the end of our time at the townhome we bought what we thought would be our forever home, just North of Pittsburgh in a lovely town called Saxonburg. It turned out that we had some equity stored up in the townhome and sold it for more than we had bought it. All of that equity went into our next loan. Interest rates were still falling at this point and so once again a year after we bought that house we refinanced. Again, it would have been crazy not to. The monthly savings more than paid for itself a mere nine months later. I never thought this would make sense to do twice in my lifetime, but here we were. As I write this now I doubt I’ll see interest rates drop like that again. My first mortgage’s interest rate was twice what my last’s was!&lt;/p&gt;
&lt;p&gt;Once again we had a buffer in our budget and used it to pay more principal. While we were living in Saxonburg life threw us a curve ball we didn’t expect and we ended up leaving Pittsburgh. We moved to a farm town my wife grew up in called Seymour in the state of Indiana. We had a hard time finding a home in Seymour and ended up staying with my in-laws for almost four months. During that time we kept the same budget, storing up four months of mortgage payments for the next house.&lt;/p&gt;
&lt;p&gt;When we found a home we took all of the proceeds from the previous home, four additional months of mortgage payments, as well as some extra savings we had amassed and threw it all at our new house. On top of that the home in Seymour cost a lot less than the last home in Pittsburgh. We wound up with a mortgage payment far smaller than any we had in Pittsburgh, and so we did what we had always done and paid more on the principal.&lt;/p&gt;
&lt;p&gt;At this point in my career I received my first ever bonus. This was not income I had budgeted for and so initially we debated what we would do with that money. Ultimately we threw it at our principal, creating a new habit that would follow us over the next five years we lived in Seymour. Any time I had a bonus, or Sara made money from playing the organ at church or teaching music, we threw that money at our mortgage. Over time we chipped away at that mortgage, the principal getting ever smaller.&lt;/p&gt;
&lt;p&gt;When we sold our home in Seymour to move to Indianapolis we had been home owners for 11 years. We had paid a lot towards our principal over that time and were well situation for what we would do next. We decided with the new mortgage for our house in Indianapolis we were going to take out a 15 year loan, instead of the 30 year loan we had up until this point. This brings me to another point we’ve used to our favor over the years.&lt;/p&gt;
&lt;p&gt;For 11 years we took out 30 year loans. This goes against most debt reduction strategies you’ll find out there. This probably seems odd considering where things ended up, but keep in mind we never expected to stay at the townhome or the house in Seymour forever. We knew we were never going to see the end of that loan, and so we opted for a smaller payment over a longer period of time. But why? If you ever spend time looking at a mortgage amortization schedule you’ll see that you pay very little on the principal at the front of the mortgage. By doing a smaller payment, we used that buffer toward our principal and in turn paid principal amounts that would have normally been done 10-15 years later in the amortization schedule. This allowed us to chip away at the principal faster. It probably sounds crazy and as I mentioned, it’s not a traditional debt reduction strategy, but knowing that we weren’t going to stay in that home forever enabled us to look at things a bit differently.&lt;/p&gt;
&lt;p&gt;I&#39;d be remiss if I didn&#39;t mention an important detail. When Sara and I got married we had no debt whatsoever. We started with a completely blank slate in large part due to both of our parents, who graciously made sure we entered adulthood with both a college degree and no student loans. There&#39;s probably a whole other blog article waiting to be written about student loan debt, but that&#39;s for another time. We were very blessed by the generosity of our parents; they gave us a huge leg up as we worked towards buying a home. &lt;em&gt;Thanks mom, dad, mom-in-law and dad-in-law!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Over our years of home ownership we kept focussed, throwing extra at the principal at every turn. First by budgeting for it and second through bonuses and income from odd jobs. The critical point here is to borrow lower than the budget and commit the excess to the principal. There was no magic, no secret formula and no books behind our strategy. Four houses and six mortgages later we’re finally done.&lt;/p&gt;
</description>
        <pubDate>Fri, 09 Aug 2019 01:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2019/08/08/how-we-paid-off-our-mortgage/</link>
        <guid isPermaLink="true">https://stanlemon.com/2019/08/08/how-we-paid-off-our-mortgage/</guid>
        
      </item>
    
      <item>
        <title>Life with a Twist of Lemon - The First Year</title>
        <description>&lt;p&gt;For close to a year now my friend &lt;a href=&#34;http://jonkohlmeier.net&#34;&gt;Jon&lt;/a&gt; and I have been recording our podcast, &lt;a href=&#34;https://twistoflemonpod.com&#34;&gt;Life with a Twist of Lemon&lt;/a&gt;. Jon and I have been friends for a long time, and he had been advocating for us to do a podcast for a while when I finally caved, contingent on one condition: &lt;strong&gt;I would do nothing.&lt;/strong&gt; I knew if Jon was serious this wouldn’t be a problem, and we could simply replace one of our usual phone calls with a high-quality microphone and it wouldn’t be more time out of my day. To sweeten the deal, Jon suggested we use my name in the title. &lt;em&gt;As if I could resist!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We really had no idea what the podcast would be about. There was no plan. We were just going to talk. It’d be like when the NSA ease drops in our phone conversations. Lo and behold themes would emerge.&lt;/p&gt;
&lt;p&gt;This week Jon and I released an &lt;a href=&#34;https://twistoflemonpod.com/one-year-with-a-twist-of-lemon/&#34;&gt;episode reflecting back on the year’s highlights&lt;/a&gt;. I thought in the spirit of our anniversary celebration I would list out my top 5 episodes, the ones you really shouldn’t miss.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/ytKg1FOh1b-300.webp 300w, /img/ytKg1FOh1b-600.webp 600w, /img/ytKg1FOh1b-1024.webp 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/ytKg1FOh1b-300.png 300w, /img/ytKg1FOh1b-600.png 600w, /img/ytKg1FOh1b-1024.png 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/ytKg1FOh1b-300.jpeg&#34; alt=&#34;Life with a Twist of Lemon&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1024&#34; height=&#34;1024&#34; srcset=&#34;/img/ytKg1FOh1b-300.jpeg 300w, /img/ytKg1FOh1b-600.jpeg 600w, /img/ytKg1FOh1b-1024.jpeg 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Honorable Mention:&lt;/strong&gt; In December we began running a crawl before the show where I made a pitch to raise donations for our friend, &lt;a href=&#34;https://www.lcms.org/Fritsche&#34;&gt;Pastor Joel Fritsche, who serves as a missionary in the Dominican Republic&lt;/a&gt;. The pitch was simple: Donate $50 and I’ll match it and send you a sticker. We raised money and sent out stickers; it was pretty awesome.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;a href=&#34;https://twistoflemonpod.com/episode-25-the-budget-episode/&#34;&gt;#5 January 3, 2019 - The Budget Episode&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this episode we talked about budgeting, the things we do and how we structure our finances each month. This is just good listening in my opinion and is arguably one of our more timeless episodes.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&#34;https://twistoflemonpod.com/episode-8-if-you-dont-buy-milkshakes-with-your-money-save-for-a-house/&#34;&gt;#4 September 6, 2018 - If you don’t buy milkshakes with your money, save for a house!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Our most listened to episodes started with a twist:  There were no milkshakes!  Jon was in pursuit of a house and peppered me with questions about what to expect.  After recording I ended up resurrecting my blogging career and posted about how my wife and I &lt;a href=&#34;https://stanlemon.com/2018/09/15/visualizing-a-mortgage/&#34;&gt;visualized our mortgage&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&#34;https://twistoflemonpod.com/a-philisophical-debate-regarding-grilled-cheese/&#34;&gt;#3 March 14, 2019 - A Philosophical Debate regarding Grilled Cheese&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Much to my surprise this turned out to be the most controversial episode we’ve recorded. Shortly after this one was released my cell phone blew up with messages appalled by my grilled cheese criteria. I’m still defending my position on this one, and I’m still right.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&#34;https://twistoflemonpod.com/patrick-sturdivant-the-first-listener-and-our-review-of-endgame/&#34;&gt;#2 May 2, 2019 - Patrick Sturdivant: The First Listener (and our review of Endgame)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This episode was literally months in the making! We recorded it with our friend Patrick after watching Endgame twice. It made for a long night, but pretty good podcast listening. (This is also where we lost Jon’s mom as a listener.)&lt;/p&gt;
&lt;h2&gt;&lt;a href=&#34;https://twistoflemonpod.com/episode-14-milkshakes-power-our-productivity/&#34;&gt;#1 October 18, 2018 - Milkshakes power our productivity&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is good clean Milkshake fun, with our very first guest – my very own daughter, Lucy Lemon. It’s in this episode where Lucy established the rubrics for milkshake straws, which has become part of our Milkshake method evaluation system ever since.&lt;/p&gt;
</description>
        <pubDate>Fri, 26 Jul 2019 12:01:00 +0000</pubDate>
        <link>https://stanlemon.com/2019/07/26/life-with-a-twist-of-lemon-the-first-year/</link>
        <guid isPermaLink="true">https://stanlemon.com/2019/07/26/life-with-a-twist-of-lemon-the-first-year/</guid>
        
      </item>
    
      <item>
        <title>My Favorite Marvel Movies</title>
        <description>&lt;p&gt;I’m a big fan of the Marvel Cinematic Universe. I don’t hesitate to get a baby sitter and see new releases in the theater and I’ve pretty much preordered every release (sans Guardians 2). I love the genre, but even more so I think the MCU represents some of the best movie writing of my lifetime. Consistently the MCU rolls out great content, so that even the worst MCU movie is still a great movie. Not even Star Wars can rival the consistent greatness of the MCU’s story telling.&lt;/p&gt;
&lt;p&gt;Because I’m such an MCU nerd I often get asked to rank the movies from my favorite to least. That’s no easy task! I’ve tried this before with Star Trek and Star Wars where the disparity between a great movie and the bottom of the barrel is stark. In the MCU that disparity is narrow and sometimes hard to navigate.  The middle of the list of also especially difficult to decide because they’re on such even ground with each other. Nonetheless for you, dear reader, I shall endeavor to order these movies. Please note, this list is fluid and I have no reservations about updating this list over time.&lt;/p&gt;
&lt;p&gt;Lastly… don’t ever watch these movies in this order! The MCU should &lt;strong&gt;always&lt;/strong&gt; be watched chronologically, period. Unlike Star Wars the release order matters, with but a few exceptions that, quite honestly, are not worth taking out of release order (looking at you Captain America: First Avenger and Captain Marvel).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Avengers: Infinity Wars&lt;/li&gt;
&lt;li&gt;Avengers: Endgame&lt;/li&gt;
&lt;li&gt;Captain America: Civil War&lt;/li&gt;
&lt;li&gt;Iron Man 1&lt;/li&gt;
&lt;li&gt;Thor: Ragnarok&lt;/li&gt;
&lt;li&gt;Spider-Man: Far From Home&lt;/li&gt;
&lt;li&gt;Guardians of the Galaxy&lt;/li&gt;
&lt;li&gt;Captain America: Winter Soldier&lt;/li&gt;
&lt;li&gt;Avengers&lt;/li&gt;
&lt;li&gt;Black Panther&lt;/li&gt;
&lt;li&gt;Captain America: The First Avenger&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Captain Marvel&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Ant-man&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Dr. Strange&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Spider-Man: Homecoming&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Iron Man 2&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Thor&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Age of Ultron&lt;/li&gt;
&lt;li&gt;Iron Man 3&lt;/li&gt;
&lt;li&gt;Thor: Dark World&lt;/li&gt;
&lt;li&gt;Guardians of the Galaxy 2&lt;/li&gt;
&lt;li&gt;Ant-man &amp;amp; the Wasp&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;A few words (possible spoilers below)...&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Notice the italics? These are movies that I struggled to sort amongst themselves and I would not object to someone’s personal reorganization of 12-18.&lt;/li&gt;
&lt;li&gt;Yes, Infinity wars tops Endgame. Why? Infinity Wars is arguably the best most complete story in the MCU. They weren’t afraid to leave you entirely hopeless and that made this an emotionally gripping movie. Endgame is great, especially the final scenes, but as a whole the film isn’t greater than the fantastic writing of Infinity Wars.&lt;/li&gt;
&lt;li&gt;Why is Age of Ultron so low? Yes, we get Vision, Scarlett Witch and the fist mention of Wakanda, but while there’s some great stuff going on here it is all in all a weak movie with lots of holes. Bottom line is it could have been better. It’s critical to the development of the MCU’s story line but I never find myself going back and rewatching it because I want to.&lt;/li&gt;
&lt;li&gt;Dark World: Elves, enough said.&lt;/li&gt;
&lt;li&gt;Guardians 2 has one of the best opening 30 minutes in the MCU. It’s hilarious and just great entertainment. After that 30 minutes we slip into the “I’ve got daddy issues” phase of the movie and the writing just goes down the drain. I can also make an argument that this is the least valuable movie to the franchise. What does it add to the ultimate culmination of Infinity Wars? Nothing.&lt;/li&gt;
&lt;li&gt;I wanted so badly to love Ant-man &amp;amp; the Wasp, especially since Ant-man has long been a favorite of mine. I was ecstatic that we got the Wasp and that she was so key to this film, but the problem here is the villain. Which one, you ask? Exactly! This movie struggled to identify a clear bad guy and suffered because of it. Yes, it was hilarious and yes the post credits scene is absolutely critical to Endgame, making it one of the most necessary movies to watch going into it, but all in all it was just bad writing. My biggest fear from this one is that they don’t make a third, because that would be a travesty.&lt;/li&gt;
&lt;li&gt;There are a ton of Captain Marvel haters out there, but I am not one. The biggest criticism I’ve heard is about Brie Larson’s almost stoic performance. Those with this criticism simply don’t understand the character and clearly don’t understand the Kree. So if Brie Larson’s sometimes emotionless acting bugged you, go do yourself a favor and read up on the Kree. If there’s anything to fault this movie for it’s probably the lack of depth around Kree culture, but then again hey we didn’t need (or want) an Endgame-length movie here.&lt;/li&gt;
&lt;li&gt;Why is Far From Home so high? Well, I just watched it! But more so than that it ended up being more of a comic book styled movie than other MCU flicks. It has great character development for Spider-Man too. I loved that it was intrinsically tied into Endgame without being fully dependent upon it. There are so many great nerd-nods in this movie that MCU lovers will gush over it. Lastly, it &lt;strong&gt;finally&lt;/strong&gt; capitalized on BARF, this odd left field reference in the beginning of Civil War that had until now never been capitalized on. MCU fans have been patiently waiting for something to be made of BARF and now we’ve got it in Mysterio!&lt;/li&gt;
&lt;li&gt;Many of my friends will recall that for a long time I strongly disliked the first Avengers movie. So it might seem odd that it now stands in the top 10. What changed? I have long loved the story telling and character development of the MCU far more than I did the special effects and elaborate battle scenes. This is why Captain America: The First Avenger sits so high on my list, when for many it is near the bottom. The first Avengers is an action movie that has an amazing amount of ground to cover and thus it spends a lot less time on character development than say Ultron. What changed my mind was actually Endgame. As I re-watched the entire MCU in preparation for Endgame I found myself coming back to that first Avengers movie and really appreciating how much is setup for the rest of the MCU in that movie. It&#39;s this appreciation that drove it up so high on my list.&lt;/li&gt;
&lt;li&gt;What about The Incredible Hulk? Well, what about it?&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 06 Jul 2019 15:01:00 +0000</pubDate>
        <link>https://stanlemon.com/2019/07/06/my-favorite-marvel-movies/</link>
        <guid isPermaLink="true">https://stanlemon.com/2019/07/06/my-favorite-marvel-movies/</guid>
        
      </item>
    
      <item>
        <title>React PouchDB Components</title>
        <description>&lt;p&gt;Last night I released a new library to &lt;a href=&#34;https://github.com/stanlemon/react-pouchdb&#34;&gt;GitHub&lt;/a&gt; and &lt;a href=&#34;https://www.npmjs.com/package/@stanlemon/react-pouchdb&#34;&gt;npm&lt;/a&gt; called React PouchDB components. I&#39;m excited to share this library, which started as an experiment to illustrate to my friend &lt;a href=&#34;http://jonkohlmeier.net&#34;&gt;Jon&lt;/a&gt; how easy it could be to leverage &lt;a href=&#34;http://pouchdb.com&#34;&gt;PouchDB&lt;/a&gt; in &lt;a href=&#34;https://reactjs.org&#34;&gt;React&lt;/a&gt;. After enough tooling around I suspected that the pieces could be extracted and shared more broadly.&lt;/p&gt;
&lt;p&gt;There are a number of different ways to deal with state in React, everything from the simple &lt;a href=&#34;https://reactjs.org/docs/state-and-lifecycle.html&#34;&gt;&lt;code&gt;setState()&lt;/code&gt;&lt;/a&gt; to &lt;a href=&#34;http://redux.js.org&#34;&gt;redux&lt;/a&gt;. Most sites need remote data, and so as a developer your options become a little more complex, leveraging promises inside of &lt;code&gt;componentDidMount()&lt;/code&gt; or tools like &lt;a href=&#34;https://www.github.com/reduxjs/redux-thunk&#34;&gt;redux-thunk&lt;/a&gt;. These are all great, but what I wanted was a simple way to fetch data into PouchDB and for it to be declarative.&lt;/p&gt;
&lt;p&gt;Here&#39;s what I imagined...&lt;/p&gt;
&lt;pre class=&#34;language-jsx&#34;&gt;&lt;code class=&#34;language-jsx&#34;&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt; Database&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; Document &lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;@stanlemon/react-pouchdb&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;App&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;token class-name&#34;&gt;Database&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token plain-text&#34;&gt;
      &lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;token class-name&#34;&gt;Document&lt;/span&gt;&lt;/span&gt; &lt;span class=&#34;token attr-name&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;token attr-value&#34;&gt;&lt;span class=&#34;token punctuation attr-equals&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&#34;&lt;/span&gt;my-document&lt;span class=&#34;token punctuation&#34;&gt;&#34;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token plain-text&#34;&gt;
        &lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;token class-name&#34;&gt;MyComponent&lt;/span&gt;&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token plain-text&#34;&gt;
      &lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;token class-name&#34;&gt;Document&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token plain-text&#34;&gt;
    &lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;token class-name&#34;&gt;Database&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;MyComponent&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt; name&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; description &lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token plain-text&#34;&gt;
      &lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;name&lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token plain-text&#34;&gt;
      &lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;description&lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token plain-text&#34;&gt;
    &lt;/span&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There are two components here, the first &lt;code&gt;&amp;lt;MyComponent /&amp;gt;&lt;/code&gt; is a simple view, it renders some properties that are passed to it.  The other is &lt;code&gt;&amp;lt;App /&amp;gt;&lt;/code&gt; which declaratively establishes a PouchDB database connection using the &lt;code&gt;&amp;lt;Database /&amp;gt;&lt;/code&gt; component.  &lt;em&gt;This component can take an optional name and remote URL for syncing.&lt;/em&gt; The &lt;code&gt;&amp;lt;App /&amp;gt;&lt;/code&gt; component also uses the &lt;code&gt;&amp;lt;Document /&amp;gt;&lt;/code&gt; component which is responsible for fetching data out of a PouchDB document and setting it as properties on &lt;code&gt;&amp;lt;MyComponent /&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;One of the other advantages of the &lt;code&gt;&amp;lt;Document /&amp;gt;&lt;/code&gt; component is that it provides a property to it&#39;s children called &lt;code&gt;putDocument()&lt;/code&gt; that allows you to update the state of your document, just as you might when using &lt;code&gt;setState()&lt;/code&gt;. This method eagerly updates the component&#39;s properties, and then ensures that the document is updated in PouchDB.&lt;/p&gt;
&lt;p&gt;As an added bonus, if you&#39;re syncing your PouchDB database to a remote &lt;a href=&#34;https://docs.couchdb.org&#34;&gt;CouchDB&lt;/a&gt; instance, the &lt;code&gt;&amp;lt;Document /&amp;gt;&lt;/code&gt; component will update properties when change events occur. This means that you can sync down remote updates with little effort in near real time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There is a working example in the GitHub repository under the &lt;code&gt;./example/&lt;/code&gt; directory. It has it&#39;s own &lt;code&gt;README&lt;/code&gt; and is really easy to spin up and start playing.&lt;/strong&gt; &lt;a href=&#34;https://stanlemon-react-pouchdb.glitch.me&#34;&gt;You can check out the example app over on glitch.&lt;/a&gt; This example app showcases several different ways to leverage a document including &lt;code&gt;&amp;lt;Document /&amp;gt;&lt;/code&gt; and a higher order function &lt;code&gt;withDocument()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ready to give it a spin?&lt;/p&gt;
&lt;pre class=&#34;language-shell&#34;&gt;&lt;code class=&#34;language-shell&#34;&gt;&lt;span class=&#34;token function&#34;&gt;npm&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;--save&lt;/span&gt; @stanlemon/react-pouchdb pouchdb&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From there the &lt;a href=&#34;https://github.com/stanlemon/react-pouchdb/blob/master/README.md&#34;&gt;&lt;code&gt;README&lt;/code&gt;&lt;/a&gt; is your friend!&lt;/p&gt;
&lt;p&gt;This library is intended to quickly get a PouchDB database into your react application. It won&#39;t work for every situation and there are definitely more complicated use cases that it does not cover, but as a starting point it should get you off the ground quickly.  It&#39;s also worth noting that this library is not intended to work with other state container libraries.  Maybe it does, but that&#39;ll be purely by chance.  If you are using something like redux you should consider taking a look at &lt;a href=&#34;https://github.com/vicentedealencar/redux-pouchdb&#34;&gt;redux-pouchdb&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please reach out with feedback!  I love questions and suggestions so send them my way.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Stay tuned, I have some more PouchDB related goodies coming.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 01 Mar 2019 02:47:00 +0000</pubDate>
        <link>https://stanlemon.com/2019/02/28/react-pouchdb-components/</link>
        <guid isPermaLink="true">https://stanlemon.com/2019/02/28/react-pouchdb-components/</guid>
        
      </item>
    
      <item>
        <title>React, Relay &amp; Mutations</title>
        <description>&lt;p&gt;A working example of what I&#39;m going to describe here can be found at https://github.com/stanlemon/example-relay-app.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;For awhile &lt;a href=&#34;https://graphql.org&#34;&gt;GraphQL&lt;/a&gt; has looked interesting to me, like something I wanted to learn. I love the concept of strongly typing expressive queries that can be batched into a single request. That&#39;s GraphQL, a technology that really seems to shine in UI work for single page apps (SPAs).&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://facebook.github.io/relay/&#34;&gt;Relay&lt;/a&gt; is Facebook&#39;s GraphQL framework for &lt;a href=&#34;https://reactjs.org&#34;&gt;React&lt;/a&gt;, it&#39;s really where GraphQL got its traction from. I love React and spend a good portion of my &lt;em&gt;hobby time&lt;/em&gt; building stuff with it, so GraphQL was a natural progression for me.  The problem is that documentation and examples on how to use Relay are all over the place and it&#39;s even harder to get into if don&#39;t already have a working GraphQL server. &lt;em&gt;Some might point out that &lt;a href=&#34;https://www.apollographql.com/&#34;&gt;Apollo&lt;/a&gt; is a much easier place to start with React &amp;amp; GraphQL and that definitely seems true, but I specifically wanted to familiarize myself with Relay.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My first challenge was a working GraphQL server that I could issue queries against. Fortunately &lt;a href=&#34;https://www.graphile.org/postgraphile/&#34;&gt;PostGraphile&lt;/a&gt;] makes this super easy. You need a &lt;a href=&#34;http://postgresql.org&#34;&gt;Postgres&lt;/a&gt; instance to get going, but after that you have a working GraphQL server over top of a Postgres database. I won&#39;t go into how to setup PostGraphile, it&#39;s documentation is actually rather than good and there are some additional environment notes in the repository with my example code.&lt;/p&gt;
&lt;p&gt;Querying from within Relay is pretty easy and straightforward and the documentation that Facebook offers is adequate. &lt;a href=&#34;https://www.graphqlbin.com/v2/KZ4Efq&#34;&gt;If you want to play around with querying check out this GraphQL playground with Star Wars data, it&#39;s pretty fantastic!&lt;/a&gt; GraphQL is not just for fetching data though, it also allows you to create, update and delete it. Those operations are called mutations and their documentation is a lot less clear.&lt;/p&gt;
&lt;p&gt;A mutation in and of itself is not complicated, there are really two parts to it: (1) the mutation definition and then (2) committing the mutation to the GraphQL server.  That looks like this:&lt;/p&gt;
&lt;pre class=&#34;language-javascript&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt; graphql&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; commitMutation &lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;react-relay&#39;&lt;/span&gt;

&lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; mutation &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; graphql&lt;span class=&#34;token template-string&#34;&gt;&lt;span class=&#34;token template-punctuation string&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;
  mutation AppCreatePersonMutation($input: CreatePersonInput!) {
    createPerson(input: $input) {
      person {
        id
        firstName
        lastName
      }
    }
  }
&lt;/span&gt;&lt;span class=&#34;token template-punctuation string&#34;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;span class=&#34;token function&#34;&gt;commitMutation&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;environment&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
  mutation&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;token literal-property property&#34;&gt;variables&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;token literal-property property&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
      &lt;span class=&#34;token literal-property property&#34;&gt;person&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;token literal-property property&#34;&gt;firstName&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Stan&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;token literal-property property&#34;&gt;lastName&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Lemon&#34;&lt;/span&gt;
      &lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;
    &lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;
  &lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the app I built I had already loaded all of the person records from my database using a query like this:&lt;/p&gt;
&lt;pre class=&#34;language-javascript&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;query AppQuery &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
  allPeople &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
    nodes &lt;span class=&#34;token punctuation&#34;&gt;{&lt;/span&gt;
      id
      firstName
      lastName
    &lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;
  &lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;token punctuation&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When I first got this working I naively expected the properties in the react component that came from this query to update, such that my new person would appear in my list.  But alas it did not! Updating the state store for relay is not straight forward. The &lt;a href=&#34;https://facebook.github.io/relay/docs/en/mutations.html&#34;&gt;mutation documentation on relay&#39;s site&lt;/a&gt; has some clues, but I ended up struggling to implement what I thought was a pretty straight forward user case: &lt;em&gt;updating the list of nodes from my initial query with a new record&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Make sure your &lt;code&gt;createPerson()&lt;/code&gt; mutation is returning the same fields as your &lt;code&gt;allPeople&lt;/code&gt; query, and also make sure that &lt;code&gt;allPeople&lt;/code&gt; is returning &lt;code&gt;id&lt;/code&gt;. Matching fields in the response is important for new records. If you&#39;re only doing updates you can get away with returning just the fields you&#39;ve changed, but the example below does not cover partial updates.  The &lt;code&gt;id&lt;/code&gt; field is not actually required for create mutations like this, but as soon as you start working with updates you&#39;ll thank me as the the global graphql id is the easiest way to yank an existing record out of the store.&lt;/p&gt;
&lt;p&gt;What we need to do now is define an &lt;code&gt;updater&lt;/code&gt; function on that the second parameter to &lt;code&gt;commitMutation()&lt;/code&gt;.  This updater receives a single parameter, the &lt;code&gt;store&lt;/code&gt; and this is where we will do our handy work.&lt;/p&gt;
&lt;p&gt;Inside the updater function the first thing we want to do is get the portion of the store where &lt;code&gt;allPeople&lt;/code&gt; is at, because this is what we need to modify.  We need to put our new person into the list of person records in that part of the store, which will in turn trigger the update to our UI. This is actually pretty easy to do as long as you know the key to pass the &lt;code&gt;get()&lt;/code&gt; method. I found this out using the &lt;code&gt;replay-devtools&lt;/code&gt;, which I highly recommend installing.&lt;/p&gt;
&lt;pre class=&#34;language-javascript&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;&lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; allPeople &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; store&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;client:root&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now we have the container of the query. Because we&#39;re using PostGraphile everything is nested under &lt;code&gt;nodes&lt;/code&gt; so we actually need to yank that out from under our &lt;code&gt;allPeople&lt;/code&gt; variable. That looks like this:&lt;/p&gt;
&lt;pre class=&#34;language-javascript&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;&lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; nodes &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; allPeople&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getLinkedRecord&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;allPeople&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getLinkedRecords&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;nodes&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We also need to get the person record that our GraphQL server returned to us and then yank the payload from it.  The payload in this case is that new person we created.&lt;/p&gt;
&lt;pre class=&#34;language-javascript&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;&lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; payload &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; store&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getRootField&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;createPerson&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; newPerson &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; payload&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getLinkedRecord&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;person&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We have the original list of persons and the new person we added, now we need to combine them, this is really easy using the spread operation:&lt;/p&gt;
&lt;pre class=&#34;language-javascript&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;&lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; newNodes &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;...&lt;/span&gt;nodes&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; newPerson&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now we have the full list of person objects as they exist in our database. Keep in mind if you were sorting these somehow with graphql you will need to insert the newPerson into the proper place, not just blindly at the end like we are doing.   Lastly we take that new nodes list and replace it in our &lt;code&gt;allPeople&lt;/code&gt; portion of the store like so:&lt;/p&gt;
&lt;pre class=&#34;language-javascript&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;allPeople&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getLinkedRecord&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;allPeople&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;setLinkedRecords&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;newNodes&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;nodes&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once this is done the local store in your react component will re-render with the new data.&lt;/p&gt;
&lt;p&gt;Keep in mind, this is a root level scenario for the component in question.  It seems pretty simple, but good luck finding an example that works like this one. If you&#39;re using data nested under another object (like comments on a post) than there are plenty of examples on the web more suited to that scenario, examples that involve things like the &lt;code&gt;ConnectionHandler&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can find all the code for my working example over at https://github.com/stanlemon/example-relay-app&lt;/p&gt;
</description>
        <pubDate>Wed, 23 Jan 2019 12:30:00 +0000</pubDate>
        <link>https://stanlemon.com/2019/01/23/react-relay-and-mutations/</link>
        <guid isPermaLink="true">https://stanlemon.com/2019/01/23/react-relay-and-mutations/</guid>
        
      </item>
    
      <item>
        <title>Gillette Won</title>
        <description>&lt;p&gt;I do my best to avoid social media, and even when I do participate I consume a pretty narrow set of content. For example, my twitter is highly curated to focus on Indianapolis municipal happenings, Apple product rumors and javascript news. On the rare occasion I login to Facebook it’s mostly to respond to messages on my podcast page or to look at old pictures of Chicago North Western trains. I rely on my lovely wife and podcast cohort Jon to keep me in the know on the latest and greatest internet fads, at least the ones that stir up enough trouble to warrant a text. It really is a top notch curation system.&lt;/p&gt;
&lt;p&gt;This week the Gillette “The Best Men Can Be” commercial somehow bubbled its way up into my view and I read reactions from both the political left and the political right on how wonderful and how terrible this commercial is. If you’re not familiar with the video you can find it on YouTube. Like so many things today it yielded truly polar reactions. Those that loved it applauded it for calling out what some refer to as “bro culture”. Those that hated it claimed it vilified all men universally.&lt;/p&gt;
&lt;p&gt;Here’s what annoys me about this whole thing: Gillette won and everyone else lost. Anyone who thinks Gillette was somehow in pursuit of altruism forgets the age old axion that “any press is good press”. Gillette is owned by Proctor &amp;amp; Gamble, a behemoth of consumer goods based out of Cincinnati.  It is a publicly owned and traded company whose sole purpose is to generate profits for its shareholders. Let that set in a minute. Gillette exists to make money, plain and simple.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ft.com/content/9bb5cc54-d368-11e6-b06b-680c49b4b4c0&#34;&gt;In 2015 Gillette was the #1 shaving company in the United States, holding onto 64% of the market with runner up Schick.&lt;/a&gt; By all accounts both Gillette and Schick make crappy shave products.  Both companies sell dull cartridge blade systems that generate an absurd amount of waste, but I digress. In recent years, Dollar Shave Club encroached onto Gillette’s market share by more than a razor’s edge, resulting in a 1 Billion dollar purchase by Unilever. Even beyond sub par subscription services like Dollar Shave Club, you have stores like &lt;em&gt;The Art of Shaving&lt;/em&gt; popping up everywhere and a general interest in the more classical safety razor genre of equipment. All this is to say, Gillette is hurting. Its relevance is shriveling up and it needs some life kicked back into its blood. Don’t believe me though, take a look at Procter &amp;amp; Gamble’s stock prices.  In a hugely volatile year on the stock market &lt;a href=&#34;https://finance.yahoo.com/quote/PG/&#34;&gt;$PG&lt;/a&gt; is basically untouched. That’s not what share holders want to see, they want growth!&lt;/p&gt;
&lt;p&gt;Gillette has to be loving all the PR it’s getting. Again, any press is good press. People who weren’t talking about Gillette are now, and a product that was not memorable is now gliding its way onto everyone’s social media feeds.  So if you loved the video, maybe you’ll go out and buy some Gillette razors in support of the company and its bold position in this video. That’ll help Procter &amp;amp; Gamble’s quarterly sales, and that’s exactly what they want. Or maybe you hated the video, feeling like it unilaterally vilified half the population with stereotypes. If Gillette is lucky, you took to social media to complain about it, or shared some article or other post and further perpetuated their ad campaign. The best advertising is free, and you played right into Gillette’s hand.  Either way, Gillette is on everyone’s mind, and that imprint will linger for a bit.&lt;/p&gt;
&lt;p&gt;It really doesn’t matter where you stand on the issue, because in the end Gillette won. Nothing has changed, we’re just as angry and polarized as we were before the campaign, if not more so.&lt;/p&gt;
&lt;p&gt;Gillette is in good company though. We hate to admit it, but this sort of appeal to our heart strings style advertising - which has absolutely nothing to do with the product being sold - is increasingly common. Tune in on a Sunday and the NFL is talking up fighting cancer and other diseases as well as supporting the military. Don’t be confused that these are somehow honest appeals. At the end of the day it’s just another ploy to get you to tune in and watch the real product, a football game. If you support our military and it appears like the NFL does, you tune in to support them, thus increasing their viewership and further increasing the cost of advertisement on one of the sacred NFL commercial slots. That’s the end goal of these heart string campaigns.&lt;/p&gt;
&lt;p&gt;Don’t get me wrong, there are honest folks who mean well by participating in these campaigns their companies put on. I really don’t mean to discount the intent of both NFL players and Gillette employees, I just think we need to be honest about what drives campaigns like this. As much as I would love for it to be, it’s not altruism. We shouldn’t somehow project that onto the marketing departments of these big economic machines who ultimately have dividends to pay every quarter.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;On an unrelated note, if you are either thinking of buying Gillette products because you loved the video or if you are thinking of no longer buying Gillette products because you hated the video let me take this opportunity to appeal to you. There’s a better way! Get yourself a good ol’ &lt;a href=&#34;https://amzn.to/2W6O16e&#34;&gt;Merkur safety razor&lt;/a&gt; and some &lt;a href=&#34;https://amzn.to/2DlzhbY&#34;&gt;Astra blades&lt;/a&gt; and enjoy a better shave. Chances are you’ll support a smaller business in the process too, winning all around.&lt;/p&gt;
</description>
        <pubDate>Sat, 19 Jan 2019 18:30:00 +0000</pubDate>
        <link>https://stanlemon.com/2019/01/19/gillette-won/</link>
        <guid isPermaLink="true">https://stanlemon.com/2019/01/19/gillette-won/</guid>
        
      </item>
    
      <item>
        <title>Visualizing a Mortgage</title>
        <description>&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/i_2UbmoQm5-300.webp 300w, /img/i_2UbmoQm5-600.webp 600w, /img/i_2UbmoQm5-1200.webp 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/i_2UbmoQm5-300.png 300w, /img/i_2UbmoQm5-600.png 600w, /img/i_2UbmoQm5-1200.png 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/i_2UbmoQm5-300.jpeg&#34; alt=&#34;A drawing of the Lemon home representing our mortgage and showing our progress paying it off.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1200&#34; height=&#34;900&#34; srcset=&#34;/img/i_2UbmoQm5-300.jpeg 300w, /img/i_2UbmoQm5-600.jpeg 600w, /img/i_2UbmoQm5-1200.jpeg 1200w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;In &lt;a href=&#34;https://twistoflemonpod.com/episode-8-if-you-dont-buy-milkshakes-with-your-money-save-for-a-house/&#34;&gt;Episode 8&lt;/a&gt; of &lt;a href=&#34;http://twistoflemonpod.com&#34;&gt;Life with a Twist of Lemon&lt;/a&gt; my friend &lt;a href=&#34;http://jonkohlmeier.net/&#34;&gt;Jon&lt;/a&gt; asked me about buying a house and for part of that discussion we talked about mortgages. One of the things that I mentioned our family does is visualize our mortgage on a piece of paper hanging on the side of our refrigerator. On the paper is a drawing of a house, which my lovely wife made to look like our actual house.  It’s on graph paper and each square represents part of the mortgage we owe. As we pay down the mortgage we fill in boxes, with the ultimate goal of having the whole house filled in. This idea didn’t originate with me; I don’t actually even recall where I first saw this. I think it’s neat though, and I like that it’s there every day for us to see. A few listeners (it still amazes me that we have those, thank you mom and the other 3 folks that tuned in) asked me what that mortgage visualization looks like, so I thought I would share it here. The colors don’t mean anything, they were chosen based on the closest colored pencil at the time. The shaded parts (roof and windows) also don’t count in our drawing. Anyone can do this too, and you don’t need to be as fancy with the drawing as Mrs. Lemon was. That said, I think ours is pretty cool and I’m just tickled with what she made for our family. Now to fill it up!&lt;/p&gt;
&lt;p&gt;The purpose of the drawing and really a good portion of Jon’s and my discussion is understanding your debt and having a strategy to get rid of it. I don’t think debt is in and of itself a bad thing. In many instances it’s simply a necessity, like buying a house. I do think society is perhaps too comfortable with debt though and it’s good to go into something like a mortgage with a desire not to have it.  That desire is strong in me, and things like this visualization help keep it top of mind so that I am constantly being reminded to get rid of it.&lt;/p&gt;
</description>
        <pubDate>Sat, 15 Sep 2018 14:24:00 +0000</pubDate>
        <link>https://stanlemon.com/2018/09/15/visualizing-a-mortgage/</link>
        <guid isPermaLink="true">https://stanlemon.com/2018/09/15/visualizing-a-mortgage/</guid>
        
      </item>
    
      <item>
        <title>Life with a Twist of Lemon</title>
        <description>&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/ytKg1FOh1b-300.webp 300w, /img/ytKg1FOh1b-600.webp 600w, /img/ytKg1FOh1b-1024.webp 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/ytKg1FOh1b-300.png 300w, /img/ytKg1FOh1b-600.png 600w, /img/ytKg1FOh1b-1024.png 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/ytKg1FOh1b-300.jpeg&#34; alt=&#34;Life with a Twist of Lemon&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;1024&#34; height=&#34;1024&#34; srcset=&#34;/img/ytKg1FOh1b-300.jpeg 300w, /img/ytKg1FOh1b-600.jpeg 600w, /img/ytKg1FOh1b-1024.jpeg 1024w&#34; sizes=&#34;100vw&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;For more than a couple of years now my friend &lt;a href=&#34;http://jonkohlmeier.net/about/&#34;&gt;Jon Kohlmeier&lt;/a&gt; has been trying to persuade me to start a podcast with him. We’ve routinely joked about it, but I’ve resisted getting it started because of time and other trivial things. Jon and I have been friends for well over a decade now and our roots to podcasting go way back. Jon was the cohost and producer of the &lt;a href=&#34;https://itunes.apple.com/us/podcast/ht-legacy-cast/id1424483387&#34;&gt;Higher Things Radio podcast&lt;/a&gt; with another friend of mine, &lt;a href=&#34;https://twitter.com/revborghardt&#34;&gt;Rev. George Borghardt&lt;/a&gt;. I appeared a number of times on that podcast, and there are more than a &lt;a href=&#34;https://itunes.apple.com/us/podcast/ht-legacy-cast/id1424483387#&#34;&gt;couple of episodes&lt;/a&gt; where it is just Borghardt and I just shooting the breeze. I think that’s where the idea for Jon’s and my podcast came from, because really &lt;a href=&#34;http://twistoflemonpod.com&#34;&gt;Life with a Twist of Lemon&lt;/a&gt; is just the two of us shooting the breeze. Jon likes to say we’re just recording the conversations we were going to have anyway, and if it wasn’t for the fact that we schedule the recording that’d probably be spot on.&lt;/p&gt;
&lt;p&gt;So this is my latest project, a podcast where I just talk with my friend Jon. There’s nothing prescriptive about what we’re going to discuss fro one episode to the next. We’re going to try to keep it to thirty minutes or so, because we don’t particularly care for long podcasts ourselves. We plan to keep it fully rated G because I’ve got kids and I want them to be able to be safely in ear shot. Right now I’m having a lot of fun doing the podcast; more fun than I thought I would. If I’m lucky, we’ll get a listener other than my mom and dad, and if not then my kids can look back on this project in a few years and laugh about it.&lt;/p&gt;
&lt;p&gt;Oh and about the name... as vain as I am, would you believe it wasn’t my idea? No, really! Jon came up with the name and, because I have no modesty in my blood, I happily obliged to using it.&lt;/p&gt;
&lt;p&gt;You can find our podcast on &lt;a href=&#34;https://itunes.apple.com/us/podcast/life-with-a-twist-of-lemon/id1419902908?mt=2&#34;&gt;iTunes&lt;/a&gt; and most likely whatever podcast app you’re using. I use &lt;a href=&#34;https://overcast.fm/itunes1419902908/life-with-a-twist-of-lemon&#34;&gt;Overcast&lt;/a&gt;, a fantastic and free podcast for iOS, and recommend trying it out if you’re not already using a podcast app. The topic is constantly changing so pick an episode that interests you and give it a try, worst case scenario we’ve wasted thirty minutes of your time!&lt;/p&gt;
&lt;p&gt;And apparently we&#39;ve got a &lt;a href=&#34;https://www.facebook.com/twistoflemonpod/&#34;&gt;Facebook&lt;/a&gt; and &lt;a href=&#34;https://twitter.com/twistoflemonpod&#34;&gt;Twitter&lt;/a&gt; page too, if you&#39;re into that sort of thing. (Thanks Jon!)&lt;/p&gt;
</description>
        <pubDate>Sat, 08 Sep 2018 16:45:00 +0000</pubDate>
        <link>https://stanlemon.com/2018/09/08/life-with-a-twist-of-lemon/</link>
        <guid isPermaLink="true">https://stanlemon.com/2018/09/08/life-with-a-twist-of-lemon/</guid>
        
      </item>
    
      <item>
        <title>Ranking Star Wars</title>
        <description>&lt;p&gt;Recently a friend of mine, &lt;a href=&#34;https://twitter.com/revborghardt&#34;&gt;Rev. George Borghardt&lt;/a&gt; asked the internet to rank Star Wars movies, best to last. Presumably this was inspired by a discussion he and I had over some of Kentucky&#39;s finest just the week before.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Arrange the Star Wars Movies from your favorite to your least favorite! Mine List: V, VI, VII, Rogue One, IV, III, I, II&lt;/p&gt;
&lt;p&gt;— George Borghardt (@revborghardt) &lt;a href=&#34;https://twitter.com/revborghardt/status/861035823055093760&#34;&gt;May 7, 2017&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Some folks try to skimp on this and throw out Phantom Menace, Attack of the Clones and Revenge of the Sith as if they&#39;re not &amp;quot;Star Wars&amp;quot;, but here&#39;s the deal: &lt;strong&gt;They are.&lt;/strong&gt; I don&#39;t think anyone in their right mind would dispute that they are of lesser quality than the original trilogy, Force Awakens and Rogue One. Nonetheless, they are canon!  I generally take the stance that the acting is horrible, but the underlying story is a valuable contribution to the galaxy. I&#39;ll go even further by saying that I&#39;m a huge fan of The Clone Wars TV Show, and you don&#39;t get that without the prequels, which thus makes their cinematic presence worth it.&lt;/p&gt;
&lt;p&gt;I&#39;m going to cut to the chase, give you my list, and then explain why below.  Here they are from best to worst:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Empire Strikes Back&lt;/li&gt;
&lt;li&gt;Rogue One&lt;/li&gt;
&lt;li&gt;A New Hope&lt;/li&gt;
&lt;li&gt;Return of the Jedi&lt;/li&gt;
&lt;li&gt;Force Awakens&lt;/li&gt;
&lt;li&gt;Revenge of the Sith&lt;/li&gt;
&lt;li&gt;Attack of the Clones&lt;/li&gt;
&lt;li&gt;Phantom Menace&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Spoiler Alert:&lt;/strong&gt; If you haven&#39;t seen &lt;strong&gt;ALL&lt;/strong&gt; of the Star Wars movies then this is &lt;strong&gt;not&lt;/strong&gt; the blog article you&#39;re looking for.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I&#39;ve never seen a respectable ordering of Star Wars movies where Empire wasn&#39;t first.  If you put Return of the Jedi ahead of it, say because you like Ewoks, then I would contend, you&#39;re not serious about Star Wars. There, I&#39;ve said it!  But seriously, this is the movie that gave us AT-ATs, Bespin and Han Solo in carbonite! It&#39;s the movie that&#39;s awesome, even without a trench run and a moon-like killing machine. The characters are developed; they&#39;re building chemistry, and the story unfolds with you on the edge of your seat through every scene. Seriously, I just love this movie!&lt;/p&gt;
&lt;p&gt;Some people are going to be shocked that I&#39;ve put Rogue One so high, so let me defend myself a little here.  First off it&#39;s worth noting I might still be high on Stardust, but I really loved this movie! I felt the story itself was bold and well-developed. The movie as a whole stands on its own laurels.  The soundtrack is exquisite, especially considering that John Williams didn&#39;t score it! Chirrut has become my favorite Star Wars character (supplanting Chewie after years in first place).  There isn&#39;t a character in this movie I felt was poorly cast, and each was an excellent contribution to not only the film, but the franchise as a whole.  K2SO was a hoot and a half. Alan Tudyk did a fantastic job, and my only regret is that this is his only chapter in the universe. Speaking of which, they killed them all! This controversial way to end the movie was bold, and the clean bookends only enhanced the awesomeness of this tale. The battle scene at Scarif is amazing; easily the most thrilling CGI in the franchise. The little easter eggs from Rebels were delightful. The closing scene with Vader was truly ruthless, and the conclusion of this movie is a beautiful tie in to A New Hope - far more wonderful than I would have ever expected.  I&#39;ll say this in conclusion, I wasn&#39;t born by the time Return of the Jedi first appeared in theaters. I caught the theatrical re-release and while I loved them, only Force Awakens and Rogue One have been the Star Wars of my generation. Of the two, Rogue One is the movie that I walked away with goosebumps, excited about what this far away galaxy had in store for both me and my kids.&lt;/p&gt;
&lt;p&gt;Again, I might be high on stardust, so I reserve the right to revisit this when I come down from cloud city.&lt;/p&gt;
&lt;p&gt;I put A New Hope next, which might surprise some people but my reasoning is simple - this movie created the galaxy we know and love! The cinematography is amazing in this film, just stop and admire the camera art - it&#39;s stunning. This movie opens and we&#39;re immediately immersed in the story.  Stuff has happened, there&#39;s a history to the tale that&#39;s being told, a move unlike anything I can think of from its time. We get introduced to this evil machine man, our villain in the early moments, along with our heroine Princess Leia and the two comedic droids that transcend all of the Star Wars universe (seriously, they&#39;re the only characters in ALL of the films and show!). Most importantly there is nothing hokey about this movie (which is why it displaces the next film in my ordering); it&#39;s a true original and that&#39;s why I&#39;ve ranked it here.&lt;/p&gt;
&lt;p&gt;Return of the Jedi is great, but it&#39;s admittedly a little hokey at times. The ewoks, enough said.  But I do love this movie, and it&#39;s an excellent conclusion to the original trilogy.  This movie opens with Luke &amp;quot;a Jedi knight&amp;quot; (no longer a padawan still discovering the ways of the force) taking on the vile gangster Jaba the Hutt.  If you were watching this for the first time when it came out this was your first introduction to Jaba!  Unlike Empire, Return leans on a Death Star, which is not in and of itself bad, but is also why Return falls behind A New Hope for me.  If Return had been the first in the franchise I would have ranked it above A New Hope, but alas it&#39;s not and thus why it falls in this spot.&lt;/p&gt;
&lt;p&gt;Force Awakens was an awesome reboot to this franchise. I love Rey&#39;s character, and Finn is an awesome wing man in this film.  While the movie starts a bit slow, it&#39;s an honest homage to the art which is A New Hope, all the way down to blowing up Star Killer Base with an X-Wing. Kylo Ren, by all measures, appears to be a formidable villain. I won&#39;t belabor all the excellent aspects of this movie, I&#39;ll just say this: Force Awakens is my generation&#39;s A New Hope, and in that vein it served it&#39;s purpose, but it&#39;s hardly an original story to the Star Wars Trilogy. While it bests the prequels (easily) it doesn&#39;t break above any of the original movies for me.&lt;/p&gt;
&lt;p&gt;Revenge of the Sith is dark, so much so that George Lucas supposedly insisted it be rated PG-13, when all other Star Wars films had just been PG. Anakin is as creepy as ever, but the supporting cast is top notch.  This movie opens with a battle over Coruscant with some amazing camera angles, and then we get a glimpse into Anakin&#39;s struggle with the dark side as he slays Count Dooku.  Order 66 is a shocking scene that answers a long time question of the Star Wars universe: What happened to the Jedi? Lastly, Anakin&#39;s fall to the Dark Side, followed by his mutilation and finally his mechanical restoration concludes the prequels in the spirit of the original trilogy. We see the twins finding their homes in the galaxy, answering one of those burning questions from Return of the Jedi. Then to top it off, we get a glimpse of Lord Vader and the Emperor watching the construction of the ultimate weapon - a proper way to transition to A New Hope. This is a great capstone to the original trilogy.  For most of my life I believed that this is where Star Wars ended and I was pretty happy with that. If Force Awakens were never to have come out this would have been an excellent ending to an epic franchise.&lt;/p&gt;
&lt;p&gt;The thing I remember the most about Attack of the Clones was that stupid scene on Naboo with Anakin and Padme frolicking through the field. This was Hayden Christensen&#39;s entrance into the Star Wars universe and his creepiness alone ruins the prequels for many people. But the truth is this movie tells us a lot about the Clones themselves, and sets up The Clone Wars TV show, which was truly fantastic. We also get our first glimpse into how Anakin struggles with the dark side as he slaughters the sand people on Tatooine. This glimpse helps the viewer transition from the cute little kid of the Phantom Menace into the evil tyrant of A New Hope. The battle scene on Geonosis is pretty much awesome, with Yoda commanding the Clones, &amp;quot;A perimeter around the survivors create!&amp;quot; Anakin gets his butt kicked in this one, but the scene is tensely awkward, with the only redeeming point being Yoda coming in and one upping Dooku in a way that only Yoda could. There&#39;s a glimpse of the Death Star in this one, a nugget into the backstory of the amazing killing machine that sets the scene for the original trilogy. If it wasn&#39;t for the Naboo scene it would be a close race with Revenge, but in the end it&#39;s hard not to call this movie cheesy.&lt;/p&gt;
&lt;p&gt;Phantom Menace is the one unnecessary film in the franchise, and thus it should be no surprise it&#39;s in last place.  Its limited value is in Qui Gon and Maul, let me explain.  Qui Gon becomes critical in The Clone Wars to understanding how it is that Obi Wan comes back to Luke in the original trilogy. If you don&#39;t care how or why that is, then this point is moot. Ultimately the Qui Gon / Obi Wan communing through the living force is not super critical to the story line, it&#39;s just another facet told.  Onto Maul, he was the face of this movie&#39;s release in many respects. It seemed like every movie poster featured him when Phantom came out. He was scary and the face of the Dark Side and yet in reality his on screen presence was pretty pathetic. But Maul got a second life (almost literally) in The Clone Wars that continued on into Rebels.  Some of the best stories in those two shows involve Maul and so, while Phantom Menace is unequivocally last on my list, it&#39;s worth noting the significance it had on the animated series (which kick butt by the way). Now again, you can get by without this film and often when I&#39;m telling folks what order to watch these I leave this one out, in hopes that it won&#39;t soil their perception of this awesome set of movies.  I would mention the ridiculousness of Jar Jar at this point, but the internet is filled with far better Jar Jar Hate than I could accomplish here.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ordering these movies is difficult. It&#39;s like asking, which is better: Godfather or Godfather II?  In the end you&#39;re forced to say they&#39;re both great and you can&#39;t bare to choose.  That&#39;s how I feel about the original trilogy. It&#39;s almost painful to order them, and I even find myself second guessing whether I did it wrong.  With great movies like Force Awakens and Rogue One coming out, it gets even harder! That said, I&#39;ve done it and I even feel pretty good about it, too!  &lt;em&gt;But whatever you do, please don&#39;t ask me to rank the Marvel movies!&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 07 May 2017 19:06:00 +0000</pubDate>
        <link>https://stanlemon.com/2017/05/07/ranking-star-wars/</link>
        <guid isPermaLink="true">https://stanlemon.com/2017/05/07/ranking-star-wars/</guid>
        
      </item>
    
      <item>
        <title>The Star Trek Litmus Test</title>
        <description>&lt;p&gt;I recently went on a bit of a Twitter rant with a friend over the release of Star Trek Beyond. This is the third installment in the reboot, and unequivocally the worst.  My original tweet which sparked the discussion read, &amp;quot;Beyond was a good action movie, but it wasn&#39;t Star Trek.&amp;quot;&lt;/p&gt;
&lt;p&gt;I&#39;ve not been shy with my friends that I am NOT a fan of the reboots. It&#39;s not because they erased the timeline of four shows and ten movies. I actually thought that was a clever way of rebooting the franchise. I&#39;m just not sure it needed to do that. I personally would have been fine if they rebooted it the same way that Christopher Nolan did Batman out of the ashes of George Clooney and Val Kilmer. Nonetheless, I could live with erasing the timeline if the story had been capable of standing on its own without the assistance of Old Spock. Now, let&#39;s say for a minute I could live with this story resting on the laurels of Old Spock.  And let&#39;s say I could even stomach JJ Abrams throwing the camera all over every scene while flooding my eyes with lens flares.  Even if we write off all these things, the reboots still lost all credibility because of the second movie.&lt;/p&gt;
&lt;p&gt;The second reboot took what is, in my estimation, the unequivocal best Star Trek movie ever and plagarized the story in a gross abuse of the franchise. I didn&#39;t like Star Trek Into Darkness at all. This was not a new movie, but it was presented that way. The decision to kill off Kirk, and then to resurrect him in the way they did seemed overly forced. Rather than be an homage to the Wrath of Khan it felt more like an insult to it. It was at this point that I realized the franchise might actually be in worse hands than when Rick Berman took over after Roddenberry&#39;s death.&lt;/p&gt;
&lt;p&gt;Now let me be clear about something. I&#39;m a green blooded Trekkie. I grew up on TOS reruns and then watched Star Trek The Next Generation as it was syndicated on UPN in Chicago (anyone still remember WPWR?). Every Christmas, Easter, Birthday and even one Hanukah was marked with Star Trek action figures. I actually look back and think, oh yeah Christmas 94 that  was &lt;a href=&#34;https://www.amazon.com/Star-Trek-Next-Generation-Ambassador/dp/B0009P7HZC&#34;&gt;Sarek&#39;s&lt;/a&gt; year. Oh and by the way, my son&#39;s middle name is Tiberius and my dog&#39;s name is Dax.&lt;/p&gt;
&lt;p&gt;Back to the third reboot. It was terrible, for a Star Trek movie. It might have made a decent action flick, but I went into a preshow intending to judge it as a Star Trek movie and it came up short. Spoiler Alert: This film is incapable of standing on its own merits. Old Spock again has to be dragged into the story in order to give New Spock any depth, even though Leonard Nimoy has passed away and all they can do is show his picture. (My wife thinks they were trying to give Nimoy a nod here, I think the dedication at the end was sufficient). Krall&#39;s backstory was hollow and Jaylah&#39;s was absent from the story line altogether. The story of the Franklin is never really answered for us, and yet that seems important. Worse yet is we&#39;re left wondering, how did all these other people make it to a planet that we&#39;re told is unable to be reached by anything less than the navigation systems of the Enterprise. Yorktown is like something out of an MC Escher drawing, except Yorktown would never be confused for art. Where was the utopianism Star Trek is known for? Where was the moral discussion of right and wrong as some crew member faces an impossible decision? The closest thing we had to any character inflection in this movie was Kirk debating whether or not he wanted to take a job that he actually applied for. Lastly, would it have been possible to write the third Star Trek movie in a series without blowing up the Enterprise? I guess we&#39;ll never know.&lt;/p&gt;
&lt;p&gt;As I&#39;ve been debating the merits, or really the lack thereof, of Star Trek Beyond I find myself questioning whether or not these people can really be considered Trekkies.  You may think that&#39;s harsh, but this is scifi and I take it very very seriously. Thus, I&#39;ve done what any true Trekkie would naturally do: I came up with a Litmus test.  Here&#39;s my formula for evaluating whether or not your friends, family, and adversaries alike are honest Trekkies.&lt;/p&gt;
&lt;p&gt;First, if they have not actually seen every episode of TOS and TNG they are immediately disqualified. I think you can make a case that you must have seen DS9, sufferred through the misery of Voyager and survived Enterprise, but I&#39;m feeling generous today so we&#39;ll keep it to TOS and TNG. I should qualify this; if they have to think about it they&#39;ve failed. I only lose track of Star Trek episodes after I&#39;ve seen them more than 30 times. I once wore out a VHS recording of Relics.&lt;/p&gt;
&lt;p&gt;Second, it should be a given they&#39;ve seen every Star Trek movie ever made, period. There&#39;s no room to budge on this. Do not accept excuses that they skipped out on Insurrection or the Motion Picture as if that&#39;s tolerable. The line must be drawn here! This far, no further!&lt;/p&gt;
&lt;p&gt;Third, ask them what the best Star Trek movie is? Any pause before saying Wrath of Khan should be treated with suspicion. There&#39;s not much more I can say about this. If for some reason you disagree, I recommend you stick to Dr. Who.&lt;/p&gt;
&lt;p&gt;Fourth, ask them what the best Star Trek The Next Generation movie is. First Contact. If you think I need to explain this, I hear the 1998 Lost in Space was fantastic. So fantastic in fact that neither Amazon or Netflix could get the licensing to offer it over their streaming services.&lt;/p&gt;
&lt;p&gt;Five, ask them what their favorite TOS episode is. On this one I personally accept three answers. &lt;em&gt;Sidebar: Top 10, 20, 25, 42 episode lists of Star Trek seem to be universally awful. Reject any list that attempts to order all the series together. Especially reject any list that actually includes a Voyager episode.&lt;/em&gt; For me the three TOS options I accept are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Space Speed&lt;/li&gt;
&lt;li&gt;Trouble with Tribbles&lt;/li&gt;
&lt;li&gt;The Tholian Web&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;I&#39;ve long debated adding Mirror, Mirror. In my old age I&#39;ve become more generous so I&#39;d take this one as an honorable mention and give the Trek-anidate a second shot to name one of my three.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Six, ask them what their favorite TNG episode is. Again, I accept three answers for this one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Best of Both Worlds pt. 1 &amp;amp; 2 (There are times when I really think this should be the only answer I accept)&lt;/li&gt;
&lt;li&gt;Unification (Reboot should have watched this and taken notes. This is how you tie in an old cast with style!)&lt;/li&gt;
&lt;li&gt;Chain of Command (How many lights are there?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Seventh, ask them what their favorite DS9 episode is. Did you think that because I didn&#39;t require watching all of DS9 in the first test you wouldn&#39;t be on the hook for it? Nice try. Any answer that&#39;s not from Season 6 is wrong. Period. My go-tos are Sacrifice of Angels and In the Pale Moonlight. This is arguably some of the best Star Trek ever written.&lt;/p&gt;
&lt;p&gt;Eighth, and this is the last one, what&#39;s the worst episode of Enterprise? A Night in Sickbay. Sometimes I think this is the episode where Berman killed Star Trek. But hey it could have been worse, it could have been Voyager&#39;s Threshold!&lt;/p&gt;
&lt;p&gt;Judge the Trekkies around you. Impersonators will not be tolerated, resistance is futile!&lt;/p&gt;
</description>
        <pubDate>Sun, 24 Jul 2016 18:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2016/07/24/the-star-trek-litmus-test/</link>
        <guid isPermaLink="true">https://stanlemon.com/2016/07/24/the-star-trek-litmus-test/</guid>
        
      </item>
    
      <item>
        <title>Bluetooth and the Survival of the Fittest</title>
        <description>&lt;p&gt;I am a strong believer that the power of the internet is best leveraged when it is used for funny memes, pictures of cats, and that really amazing video about Tom Brady’s balls. However, I feel that I need to break from my strong belief about the internet for a moment and instead bend it to my will and rant.&lt;/p&gt;
&lt;p&gt;Recently while chatting with a friend I regurgitated a sentiment from a tweet I saw, or maybe it was on a blog I read or quite possibly a Podcast I heard. Honestly the source doesn’t matter, this is the internet and attribution died along with academic citations. Long live Wikipedia! I digress. So this sentiment was mine, despite having found it elsewhere. What was this profound sentiment you ask? Simply that while we have all this awesome technology that resembles the Science Fiction of my youth, I do not recall there ever being so many cords… Did you ever see someone charge Data? Or plug a tricorder into the wall? Where was Luke’s light saber docking station? At the time I was reflecting I considered this as a weakness of the evolution of technology. I believed that we had not yet achieved that synergistic point where real life and Science Fiction merged in an amazingly beautiful union where neither was distinguishable from one another.&lt;/p&gt;
&lt;p&gt;Then I was driving today and I realized that if the evolution of humanity is determined by the survival of the fittest it’s actually those still yielding cords in their vehicles that will survive. It will be the heavily corded souls ruling the road that will define future generations. Which means Science Fiction is all a lie.&lt;/p&gt;
&lt;p&gt;Bear with me while I explain. We are all worried about teen drivers (and some half brained adults like myself) texting while on the road with their mobile devices. This fear does not seem misplaced, especially when people are carrying devices so large that they must use two hands with them. Many states have even gone so far as to pass laws prohibiting using your mobile devices while in moving vehicles. As I’m sure you know, these laws are religiously followed and obeyed by all of man kind - at least any God-fearing Patriot. I postulate that texting while driving is hardly the thing we should fear most about today’s roads. It’s actually bluetooth!!! Years from now we will look back and realize that the rollout of bluetooth was actually a genocide stunting the growth of the population! There is nothing more perilous than to be in a moving vehicle whimsically believing in the dream that your car and some other device will communicate in perfect harmony. When this fails, and it always does, you find yourself speeding down a highway (or as in my case a far too narrow country road with steep ditches on either side) trying to reconcile why two devices which say they can talk to each other simply will not work! The rage builds up inside, you dismiss the heavily federally regulated dialog that says only passengers should pair devices in moving vehicles, and you fight the never-ending battle of bluetooth hell that rages all about the vehicle you reside in. And may God have mercy on your soul if there are more than one device involved in this awful union of technology.&lt;/p&gt;
&lt;p&gt;Bluetooth will kill us. One by one we will succumb to stupidity on the road. Only the cord bearers will survive this awful twist of human evolution. Science fiction was all a lie. Wireless and charger-less devices have no basis in our technological future. They are simply a figment of a wonderful play of fantasy that is less likely to be realized than an ice queen who sings on mountain tops. Give up, just plug your damn device in.&lt;/p&gt;
&lt;p&gt;Congratulations if you’ve made it this far. You are part of the few, the proud, those that can read more than 140 characters on the internet. Go buy yourself a beer!&lt;/p&gt;
</description>
        <pubDate>Sat, 05 Dec 2015 20:06:00 +0000</pubDate>
        <link>https://stanlemon.com/2015/12/05/bluetooth-and-the-survival-of-the-fittest/</link>
        <guid isPermaLink="true">https://stanlemon.com/2015/12/05/bluetooth-and-the-survival-of-the-fittest/</guid>
        
      </item>
    
      <item>
        <title>LemonRestBundle 0.8.0</title>
        <description>&lt;p&gt;&lt;a href=&#34;http://github.com/stanlemon/rest-bundle&#34;&gt;LemonRestBundle 0.8.0&lt;/a&gt; has been released. The theme for this version is &lt;strong&gt;compatibility&lt;/strong&gt;. While several significant bugs have been fixed since the last release, the focus has been primarily on ensuring that the bundle is compatible with a wide range of versions of PHP, Symfony and Doctrine. Additionally the bundle now comes with support for MongoDB and better support for other implementations of Doctrine.&lt;/p&gt;
&lt;h2&gt;Compatibility with PHP&lt;/h2&gt;
&lt;p&gt;LemonRestBundle now supports PHP 5.3, 5.4, 5.5, 5.6. Additionally the primary ORM test suite passes when using Doctrine 2.5 on HHVM and HHVM nightlies. Tests are also actively being run against PHP 7, though compatibility will not be guaranteed until after it is stable.&lt;/p&gt;
&lt;h2&gt;Compatibility with Symfony&lt;/h2&gt;
&lt;p&gt;LemonRestBundle now supports Symfony versions 2.3, 2.4, 2.5 and 2.6. Additionally, preliminary support has been made for 2.7. While 2.7 is not currently running in Travis CI, if you use it in your projects it will work.&lt;/p&gt;
&lt;h2&gt;Compatibility with Doctrine ORM&lt;/h2&gt;
&lt;p&gt;LemonRestBundle now support Doctrine ORM 2.3, 2.4 and 2.5 In general it is recommended you use 2.5 whenever possible.&lt;/p&gt;
&lt;h2&gt;Compatibility with Doctrine MongoDB ODM&lt;/h2&gt;
&lt;p&gt;LemonRestBundle now works with &lt;a href=&#34;http://doctrine-mongodb-odm.readthedocs.org/en/latest/&#34;&gt;Doctrine MongoDB ODM&lt;/a&gt;! There are tests specifically for the mongo implementation and they are running in TravisCI.&lt;/p&gt;
&lt;p&gt;Except where indidcated, all of these versions and combinations of these versions are being tested against automatically in TravisCI. &lt;a href=&#34;https://travis-ci.org/stanlemon/rest-bundle&#34;&gt;You can always check the builds out here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update to the latest version of LemonRestBundle and let me know what you think!&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 07 Apr 2015 22:52:00 +0000</pubDate>
        <link>https://stanlemon.com/2015/04/07/lemonrestbundle-0-8-0/</link>
        <guid isPermaLink="true">https://stanlemon.com/2015/04/07/lemonrestbundle-0-8-0/</guid>
        
      </item>
    
      <item>
        <title>Adding PATCH to LemonRestBundle</title>
        <description>&lt;p&gt;Work on &lt;a href=&#34;http://github.com/stanlemon/rest-bundle&#34;&gt;LemonRestBundle&lt;/a&gt; continues, last night I merged in support for PATCH. This is an interesting beast because there are some strong opinions on the proper way to implement PATCH in a REST API. Initially I assumed I would just avoid it rather than subject myself to the judgment of poor implementation. However, the more I researched PATCH the more I realized that I wanted to add it, and furthermore the strong opinions were largely academic in nature. The &lt;a href=&#34;https://tools.ietf.org/html/rfc6902&#34;&gt;JSON Patch specification&lt;/a&gt; is rather powerful but also complex, I&#39;ve yet to find a consuming client that actually supports this standard. What I see a lot of is more akin to the &lt;a href=&#34;http://tools.ietf.org/html/draft-ietf-appsawg-json-merge-patch-07&#34;&gt;JSON Merge Patch specification&lt;/a&gt;, and this is exactly what I&#39;ve decided to add. Truthfully the bulk of the work in my implementation happens in JMS Serializer. I need to do more extensive testing on object nesting but the basic implementation works right now. One issue to keep in mind is the current setup requires you to specify the object id when in the PATCH request. I hope to fix this in the future, but for now that&#39;s the requirement.&lt;/p&gt;
&lt;p&gt;I&#39;ve also recently added the ability to customize the Criteria object for searches.  The Criteria object is basically a collection of the query parameters and it gets used by the ObjectManager to add filtering to the findBy() command used for making collections of a given resource. Out of a set of query parameters the default implementation separates out some data for limit, offset, order by and order direction and then provides those in a standard way to the ObjectManager. The limiting factor in the initial implementation is that you might not have liked the fields I was using for limit, offset, etc. Customizing the Criteria object gives you full control over how this is handled. You can read more about how to configure this in the bundle&#39;s documentation.&lt;/p&gt;
&lt;p&gt;I&#39;ve been experimenting with generating &lt;a href=&#34;http://swagger.io&#34;&gt;Swagger&lt;/a&gt; docs within my bundle. I would expect this to materialize in the next week or so.  The technical details are already available to generate the docs, it&#39;s the descriptive data that isn&#39;t there yet and I&#39;m still evaluating the best way to make that possible. Ultimately I&#39;d love to have the bundle help it&#39;s users generate documentation for their APIs, eliminating yet one more detail in the management of a REST API.&lt;/p&gt;
&lt;p&gt;Last but not least there I think it&#39;s safe to expect support for versioning, again this will largely be driven off of JMS Serializer&#39;s version exclusion groups.&lt;/p&gt;
&lt;p&gt;Work on the bundle continues to move forward. Several folks have made contributions, all of which I am really grateful for! If you have a suggestion, recommendation or spotted a bug of any sort please open an issue over on GitHub.&lt;/p&gt;
</description>
        <pubDate>Fri, 17 Oct 2014 03:05:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/10/16/adding-patch-to-lemonrestbundle/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/10/16/adding-patch-to-lemonrestbundle/</guid>
        
      </item>
    
      <item>
        <title>Demoing LemonRestBundle with ng-admin</title>
        <description>&lt;p&gt;tl;dr &lt;a href=&#34;http://restdemo-stanlemon.rhcloud.com/#&#34;&gt;You can try out LemonRestBundle with ng-admin here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Last week I shared that I was working on a &lt;a href=&#34;github.com/stanlemon/rest-bundle&#34;&gt;Symfony 2 bundle that would create REST end points from Doctrine entities&lt;/a&gt;. I&#39;ve been continuing to work on that bundle, adding features and flexibility and I decided to re-evaluate the way I was demoing it. The truth is that I didn&#39;t want to sink a lot of time into writing a demo, but I also want to do a show more functionality than just pulling down some objects from and dumping them to a page. What I want is to show the full REST life cycle, getting, searching and saving objects to an api. Fortunately there&#39;s a really great tool out there that plugs into a REST api and does just that! It’s called &lt;a href=&#34;https://github.com/marmelab/ng-admin&#34;&gt;ng-admin&lt;/a&gt; and it’s from the folks over at &lt;a href=&#34;http://marmelab.com/&#34;&gt;Marmelab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For those that aren&#39;t familiar with &lt;a href=&#34;https://github.com/marmelab/ng-admin&#34;&gt;ng-admin&lt;/a&gt;, it&#39;s a tool written using &lt;a href=&#34;https://angularjs.org/&#34;&gt;Angular&lt;/a&gt; and it allows you to easily wire up a &amp;quot;stock&amp;quot; UI for a REST API. Like my own project, it&#39;s opinionated and convention oriented. Quite honestly it&#39;s a pretty cool tool. So I’ve hooked it up to a symfony standard application with the &lt;a href=&#34;github.com/stanlemon/rest-bundle&#34;&gt;LemonRestBundle&lt;/a&gt; and configured some entities to match &lt;a href=&#34;ng-admin.marmelab.com&#34;&gt;Marmelab’s own demo&lt;/a&gt;. I also pulled the sample data down that Marmelab was using and stuck it in a sqlite database. The database resets every minute, but it’s enough time to create a post and edit some comments and see &lt;a href=&#34;https://github.com/stanlemon/rest-bundle&#34;&gt;LemonRestBundle&lt;/a&gt; in action. The really cool part is when you take a look at the demo app’s GitHub repository and realize &lt;a href=&#34;https://github.com/stanlemon/rest-demo-app/tree/master/src/Lemon/RestDemoBundle/Entity&#34;&gt;it took three Entity classes to make the whole thing happen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://restdemo-stanlemon.rhcloud.com/#/list/post&#34;&gt;I’ve deployed the demo over at OpenShift so you can take a look and try it out for yourself.&lt;/a&gt; You can also clone the &lt;a href=&#34;https://github.com/stanlemon/rest-demo-app&#34;&gt;demo app from GitHub&lt;/a&gt;, run composer.phar install and try it yourself!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Links to check out:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://github.com/stanlemon/rest-bundle&#34;&gt;LemonRestBundle for Symfony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://github.com/stanlemon/rest-demo-app&#34;&gt;Demo app repository for LemonRestBundle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://restdemo-stanlemon.rhcloud.com&#34;&gt;Live demo of LemonRestBundle on OpenShift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/marmelab/ng-admin&#34;&gt;ng-admin by Marmelab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 08 Oct 2014 01:40:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/10/07/demoing-lemonrestbundle-with-ng-admin/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/10/07/demoing-lemonrestbundle-with-ng-admin/</guid>
        
      </item>
    
      <item>
        <title>LemonRestBundle for Symfony</title>
        <description>&lt;p&gt;For a little while now I’ve been working on a bundle for Symfony to easily create REST apis for &lt;a href=&#34;http://www.doctrine-project.org/projects/orm.html&#34;&gt;Doctrine&lt;/a&gt; entities. My goal was to be able to create a REST api with nothing more than a Doctrine entity and it’s metadata, including custom metadata from bundles like &lt;a href=&#34;http://jmsyst.com/libs/serializer&#34;&gt;JMS Serializer&lt;/a&gt;. I wanted to invest very little time in the actual api part, and get to writing applications that used it. I’ve hit this wall before, and inevitably what happens is I make a valiant effort at rolling a REST api and then get distracted or bored and walk away leaving the project to rot.&lt;/p&gt;
&lt;p&gt;Recently I was resurrecting an older project and wanting to do right by it and decided I could mask a lot of my database worts by leveraging some of Doctrine’s more advanced features. Specifically I added &lt;a href=&#34;http://doctrine-orm.readthedocs.org/en/latest/cookbook/custom-mapping-types.html&#34;&gt;custom types&lt;/a&gt; to ensure I had good data structures, leveraged some &lt;a href=&#34;http://doctrine-orm.readthedocs.org/en/latest/reference/events.html&#34;&gt;lifecycle events&lt;/a&gt; and implemented &lt;a href=&#34;http://doctrine-orm.readthedocs.org/en/latest/tutorials/embeddables.html&#34;&gt;Doctrine 2.5’s recent addition of Embeddables&lt;/a&gt;. I had also added a bunch of validation to my entities using &lt;a href=&#34;http://symfony.com/doc/current/book/validation.html&#34;&gt;Symfony’s Validation component&lt;/a&gt;, so they were well defined and could be validated easily with meaningful responses when things weren&#39;t right. I wound up with a clean set of objects that did what I wanted well, but there was one problem, I needed an api! Having been down this road before I wanted to solve my problem for the last time, or at the very least make the problem more interesting to solve.&lt;/p&gt;
&lt;p&gt;Recently I have been playing with &lt;a href=&#34;https://github.com/KnpLabs/KnpJsonSchemaBundle&#34;&gt;Knp’s JSON Schema bundle&lt;/a&gt; and this was in part my inspiration to make something that was &lt;em&gt;magical&lt;/em&gt;. I don’t mean magical in the buzz word sense (okay, maybe I do). I mean magical in the highly &lt;em&gt;opinionated&lt;/em&gt;, &lt;em&gt;convention driven&lt;/em&gt; sort of way. My solution needed to &lt;em&gt;just work&lt;/em&gt;(tm). The pieces were all there, and as I mentioned earlier the bulk of the tooling already existed, specifically great serialization, easy validation, reliable content negotiation and of course the graph traversal of Doctrine itself.  I just needed to get it all hooked into the request/response process of an api. Thus begot my very own REST bundle for Symfony 2.&lt;/p&gt;
&lt;p&gt;Now hold up, I know what you’re thinking... Symfony already has &lt;a href=&#34;https://github.com/FriendsOfSymfony/FOSRestBundle&#34;&gt;a REALLY good REST bundle from Friends of Symfony&lt;/a&gt;, doesn’t it? This is very true! That is an excellent bundle, it’s high powered and very flexible. &lt;strong&gt;Mine is not&lt;/strong&gt;. In fact it’s not even intended to be. If you want &lt;a href=&#34;https://github.com/willdurand/Hateoas&#34;&gt;HATEOAS&lt;/a&gt; for example, FOSRestBundle is the right option for you. If you need to customize the POST/PUT processes or alter extensively the behavior of your GET actions, then FOSRestBundle is going to be a far better option for you. If you want to use &lt;a href=&#34;http://propelorm.org&#34;&gt;Propel&lt;/a&gt; or &lt;a href=&#34;http://doctrine-mongodb-odm.readthedocs.org/en/latest/&#34;&gt;Mongo&lt;/a&gt; (though that may come in the future for mine) or any other data source besides Doctrine ORM than FOSRestBundle is the better option for you. If you are using Doctrine ORM and want to write as little code as possible while getting some REST endpoints, than my bundle might be the better option for you.&lt;/p&gt;
&lt;p&gt;Enough chatter, &lt;a href=&#34;https://github.com/stanlemon/rest-bundle/blob/master/Tests/Fixtures/Person.php&#34;&gt;take a look at the fixtures included in my bundle&lt;/a&gt; and you’ll see some very simple examples of what sort of metadata driven modeling I had in mind for this project. &lt;a href=&#34;https://github.com/stanlemon/rest-bundle/blob/master/Tests/Controller/RestControllerTest.php&#34;&gt;I have a pretty extensive functional test that shows how the bundle works.&lt;/a&gt; I’ve also built a simple example application using this bundle that you can take a look at and see the bundle working. Well without further delay, I&#39;m really happy to share with you &lt;a href=&#34;https://github.com/stanlemon/rest-bundle&#34;&gt;LemonRestBundle&lt;/a&gt;, &lt;a href=&#34;https://github.com/stanlemon/rest-bundle/blob/master/Resources/doc/index.md&#34;&gt;documentation included&lt;/a&gt;! Feedback is very welcome, feel free to drop me an email or &lt;a href=&#34;http://twitter.com/stanlemon&#34;&gt;shoot me a message on twitter&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 02 Oct 2014 22:24:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/10/02/lemonrestbundle-for-symfony/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/10/02/lemonrestbundle-for-symfony/</guid>
        
      </item>
    
      <item>
        <title>Why Symfony 2.5 is important</title>
        <description>&lt;p&gt;&lt;a href=&#34;http://symfony.com/blog/symfony-2-5-0-released&#34;&gt;Symfony 2.5 was released on June 1&lt;/a&gt;. I&#39;ve been following blogs and listening to podcasts about the release and there are a lot of really awesome additions in this release. But there is one feature in particular that I don&#39;t believe is getting enough attention and deserves some.&lt;/p&gt;
&lt;p&gt;Back in April I wrote about my frustration with &lt;a href=&#34;/2014/04/13/symfony-and-absolute-paths/&#34;&gt;Symfony &amp;amp; Absolute Paths&lt;/a&gt;. I was excited to see in May that this concern found &lt;a href=&#34;https://github.com/symfony/symfony/pull/10894&#34;&gt;itself into an official GitHub issue and PR&lt;/a&gt; and that it might get resolved in a future release of Symfony.  Well it has, and burried under the notes for 2.5 RC1 is this, &amp;quot;bug #10894 [HttpKernel] removed absolute paths from the generated container (fabpot)&amp;quot;.&lt;/p&gt;
&lt;p&gt;Quite frankly, this is &lt;strong&gt;huge&lt;/strong&gt;!  After my post in April I hacked together what I was calling a &lt;em&gt;PathlessKernel&lt;/em&gt; to work around this issue.  I basically regex&#39;ed out the application root from the container. In my opinion this was an inelegant solution and thus I chose not to share it. The fix in #10894 is far superior and allows for the regenerating of cache in a CI environment before deployment without all of the path chaos previously created when dumping the container.&lt;/p&gt;
&lt;p&gt;This is a big win for Symfony as it makes an application build artifact truly portable!&lt;/p&gt;
</description>
        <pubDate>Mon, 16 Jun 2014 23:16:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/06/16/why-symfony-2-5-is-important/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/06/16/why-symfony-2-5-is-important/</guid>
        
      </item>
    
      <item>
        <title>Review: Extending Symnfony</title>
        <description>&lt;p&gt;&lt;a href=&#34;http://www.packtpub.com/extending-symfony-2-web-application-framework/book&#34;&gt;Extending Symnfony&lt;/a&gt; by Sébastien Armand is a tutorial-style introduction to a variety of the ways that you can extend a Symfony 2 full stack installation. I’m a big fan of Symfony 2 and I’ve done a fair amount of app building with it, so I was interested in Armand’s book and seeing what new things I could discover about hooking into sf2.&lt;/p&gt;
&lt;p&gt;The book is filled with code samples, far more than you’ll find in most other technical books. Most of these code samples are also complete, which anyone who has traversed the official Symfony 2 cookbooks will greatly appreciate. Unfortunately, these code samples sometimes cross pages in inconvenient ways, and none of them include syntax highlighting which can make it hard to read at times.&lt;/p&gt;
&lt;p&gt;Armand tackles six (sort of eight) areas of Symfony 2 development where developers can tap in and extend existing functionality of Symfony 2. First and foremost he kicks off his tutorials with covering service definitions and listeners. These topics seem like they could have been separate chapters to me, but nonetheless he does a good job of giving real world examples of how to tie these things in. He especially does well with event listeners - the secret weapon of the Symfony 2 stack (in my opinion anyhow).&lt;/p&gt;
&lt;p&gt;Armand’s approach to extending symfony is project-based, meaning that through the book you’re working on building an app that handles some details for meet ups between users. You can think of it like the old Symfony 1 Askeet tutorial. This is a huge advantage of Armand’s book over other Symfony 2 texts you’ll find in the wild. Actual applications create context and drive home the concepts. As an added bonus, in this book you are NOT building yet another task manager!&lt;/p&gt;
&lt;p&gt;The Security chapter covers some of the more difficult areas of Symfony 2. Anyone who has dealt with Security in sf2 knows that, while extremely powerful, it can also be extremely challenging. Armand’s examples are helpful, especially as he tackles an OAuth implementation. Armand uses the Friends of Symfony UserBundle to get going, but unfortunately didn’t cover with too much depth getting started with this super handy bundle. The examples in the book are priceless, but I look forward to future revisions that cover the new SimpleAuth implementation in Symfony 2. The only other thing I wished Armand would have covered was securing an api with tokens and a custom user provider for doing this. He shows how a cookie can be used with an event listener, but truthfully there are better ways of tackling this problem in Symfony 2 that are more consistent with its security model.&lt;/p&gt;
&lt;p&gt;One of the most valuable chapters in this book is the Doctrine chapter. Doctrine 2’s official documentation lacks a lot of context. By being a project-based tutorial, Armand actually shows you how to write a custom data type, custom DQL function, and a custom filter, rather than stumble through the Doctrine 2 docs and hope you got close. This chapter in and of itself is a valuable resource for those times when you need to do these things.&lt;/p&gt;
&lt;p&gt;The final chapter discusses bundles briefly. This is one area of the book I felt could have been fleshed out a bit more. Armand covers the basics, but part of me felt like this chapter almost belonged at the beginning of the book instead of the tail end. The other thing that was missing from this chapter was bundle inheritance which, while a tricky subject, is a huge part of extending a Symfony 2 application.&lt;/p&gt;
&lt;p&gt;All in all I think this is a solid book on tapping into some of the more powerful features of Symfony 2 and it’s counterpart Doctrine 2. The book is at times a little oddly organized, but the code samples and tip are worthy any web developers time. If you’re looking to dive into some of the things in the book’s table of contents get yourself a copy and profit from Armand’s tutorials and extensive code samples.&lt;/p&gt;
</description>
        <pubDate>Thu, 12 Jun 2014 19:38:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/06/12/review-extending-symnfony/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/06/12/review-extending-symnfony/</guid>
        
      </item>
    
      <item>
        <title>A Review of Pley &amp; Renting Legos</title>
        <description>&lt;p&gt;I recently decided to signup for &lt;a href=&#34;http://pley.com&#34;&gt;Pley&lt;/a&gt;, a service that supplies lego sets by mail for a monthly membership price.  They advertise that you&#39;re safe to lose a piece or two and that the kits are always sanitary using their special &lt;em&gt;FDA grade&lt;/em&gt; process.  Unfortunately I found both of these claims to be &lt;strong&gt;false&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;First off let&#39;s set the record straight, I&#39;m an adult Lego geek. That&#39;s a technical term, you can check me on it. As a kid I had a vast array of sets and spent countless hours constructing my dreams. Then I went to High School, College and got married and had mostly forgotten about Legos.  Until I took a job where I was working on the hosting infrastructure used by the Official Lego Podcasts, like &lt;a href=&#34;https://itunes.apple.com/us/podcast/lego-hero-factory-channel/id372652372?mt=2&#34;&gt;this one&lt;/a&gt;.  Suddenly I had an excuse to play with Legos again, it was work related after all...&lt;/p&gt;
&lt;p&gt;I&#39;ve collected a few sets as an adult, and I fully admit to playing with them from time to time.  &lt;em&gt;I&#39;m not ashamed.&lt;/em&gt; When I saw Pley I thought it could be the perfect &lt;em&gt;life-as-a-service&lt;/em&gt; for my late night hobby.&lt;/p&gt;
&lt;p&gt;I went through the trial and the first set I got was a total bust. The &lt;a href=&#34;http://shop.lego.com/en-US/Desert-Skiff-9496&#34;&gt;Desert Skiff&lt;/a&gt; came in the mail and I started piecing it together.  Normally I try to avoid the directions as much as possible, as that adds to the general fun of the puzzle.  But on this one though I had to pull out the book. This probably sounds a little crazy since it&#39;s only a 213 piece set, but hear me out. As it turns out the set was missing pieces, to the tune of at least 10! I finally couldn&#39;t finish the set because there were so many missing. I logged online an reported the missing pieces and sent the set back in.  I admit that out of frustration I didn&#39;t pull everything apart. I hadn&#39;t heard back from Pley until this week when they sent this email to me.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Stan,&lt;/p&gt;
&lt;p&gt;We hope you are enjoying Pley. We have received your set today. Thank you!&lt;/p&gt;
&lt;p&gt;To keep kids happy, we ask all users to disassemble the sets to individual pieces so that each child has the same building experience with no sets arriving partially built.&lt;/p&gt;
&lt;p&gt;Here is a note we received from on of our Pleyers:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/img/ixI3rctwRC-200.webp 200w&#34; sizes=&#34;100vw&#34;&gt;&lt;source type=&#34;image/png&#34; srcset=&#34;/img/ixI3rctwRC-200.png 200w&#34; sizes=&#34;100vw&#34;&gt;&lt;img src=&#34;/img/ixI3rctwRC-200.jpeg&#34; alt=&#34;Tal&#39;s letter: can you separate piece&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; width=&#34;200&#34; height=&#34;197&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We appreciate you taking a few extra minutes to separate each piece so that other children can enjoy the set equally.&lt;/p&gt;
&lt;p&gt;Thanks for Pleying!&lt;/p&gt;
&lt;p&gt;The Pley Team&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&#39;m a little more than flabbergasted. I didn&#39;t get any replies when I filed a missing-part list! On their website they say, &lt;em&gt;&amp;quot;Lost a piece? No worries. We won&#39;t charge.&amp;quot;&lt;/em&gt; What they don&#39;t say is, &amp;quot;The next guy might be out of luck though!&amp;quot; Furthermore, if their process is so clean how did this kid &lt;em&gt;Tal&lt;/em&gt; get the set still stuck together? How do they know I didn&#39;t stick a booger between those blocks?  And really what are they doing sending this kid&#39;s letter to me? Surely this is some kind of privacy violation!&lt;/p&gt;
&lt;p&gt;The thing I really miscalculated though was thinking that renting one set at a time would somehow pacify my burning desire as a Lego-master to mix and match multiple sets. There simply is nothing better than owning your sets, period.&lt;/p&gt;
&lt;p&gt;Unfortunately I just can&#39;t recommend this service.  Yeah, it&#39;s partially out of bitterness, but I also feel like I&#39;ve been lied to. So keep buying on Amazon, or Target or wherever it is you get your Lego-fix and steer clear of Pley!&lt;/p&gt;
</description>
        <pubDate>Fri, 23 May 2014 01:31:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/05/22/a-review-of-pley-renting-legos/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/05/22/a-review-of-pley-renting-legos/</guid>
        
      </item>
    
      <item>
        <title>jGrowl 1.3 &amp; 1.4</title>
        <description>&lt;p&gt;About a week ago I released v1.3 of &lt;a href=&#34;https://github.com/stanlemon/jGrowl&#34;&gt;jGrowl&lt;/a&gt;. This is for all intents and purposes a maintenance release, containing primarily packing info for npm and bower, as well as a Grunt config for future development. More importantly is that the &#39;&lt;em&gt;develop&lt;/em&gt;&#39; branch is underway and this contains some significant changes to the plugin.&lt;/p&gt;
&lt;p&gt;The 1.4 release intends to address the following things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;LESS&lt;/em&gt; for CSS&lt;/li&gt;
&lt;li&gt;Remove IE6 support&lt;/li&gt;
&lt;li&gt;Easily use &lt;a href=&#34;http://getbootstrap.com&#34;&gt;bootstrap&lt;/a&gt; and include examples&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These things are currently available for testing, simply pull &#39;develop&#39; and give it a spin.&lt;/p&gt;
&lt;p&gt;Additionally I am very happy to share that the &lt;a href=&#34;http://bower.io/search/?q=jgrowl&#34;&gt;jGrowl package on Bower&lt;/a&gt; now points at the correct repository, meaning you can easily add jGrowl to your project using this excellent package manager.&lt;/p&gt;
&lt;p&gt;Lastly, while most of the development on 1.4 is complete I am hoping at some point to work on automating some tests of the plugin. If you have experience doing this with jQuery plugins I would welcome advice, insight or better yet - pull requests.  If you have any feedback on either 1.3 or 1.4 please don&#39;t hesitate to drop me a line.&lt;/p&gt;
</description>
        <pubDate>Mon, 28 Apr 2014 00:20:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/04/27/jgrowl-1-3-1-4/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/04/27/jgrowl-1-3-1-4/</guid>
        
      </item>
    
      <item>
        <title>Aura.Sql &amp; Existing PDO connections</title>
        <description>&lt;p&gt;I&#39;m pretty excited about a contribution I recently made to &lt;a href=&#34;http://github.com/auraphp/Aura.Sql&#34;&gt;Aura.Sql&lt;/a&gt;.  For those not familiar with &lt;a href=&#34;http://auraphp.com&#34;&gt;Aura&lt;/a&gt;, it&#39;s the brain child of &lt;a href=&#34;http://paul-m-jones.com/archives/4757&#34;&gt;Paul M Jones&lt;/a&gt; (a decent dude despite his hate for design patterns starting with the letter F) and strives to be a set of standalone components with no outside dependencies and 100% test coverage. Aura.Sql v2 is also known as ExtendedPdo, and it&#39;s a drop in replacement for PDO.  The idea is it gives you some extra giddy up in your database tooling, via lazy connections, short hand helpers and a basic profiler. I&#39;ve found this especially helpful on a couple of projects where I have a bunch of technical debt and an antiquated ORM.  The problem is database connections are expensive and opening up a new one via ExtendedPdo is not always feasible.  My contribution to this project was the ability to decorate or wrap an existing PDO instance so that you could pull the raw connection from another system and use it without reconnecting to the database.  This is an idea I got from Doctrine 2, which offers similar support by passing in an existing instance object.  This is a particularly handy feature when refactoring a legacy code base.&lt;/p&gt;
&lt;p&gt;If you&#39;re getting off the ORM band wagon, or dealing with some poorly performing legacy code you&#39;re trying to refactor take a look at Aura.Sql, it&#39;s right tool for the job.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gist.github.com/stanlemon/10692955&#34;&gt;https://gist.github.com/stanlemon/10692955&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 16 Apr 2014 22:51:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/04/16/aura-sql-and-existing-pdo-connections/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/04/16/aura-sql-and-existing-pdo-connections/</guid>
        
      </item>
    
      <item>
        <title>Symfony &amp; Absolute Paths</title>
        <description>&lt;p&gt;My love affair with &lt;a href=&#34;http://symfony.com&#34;&gt;Symfony&lt;/a&gt; 2 has hit a rocky spot. I have an atomic deployment system for a Symfony 2 app that I&#39;ve been working on.  Basically it works like this... The app gets built on my CI server, &lt;a href=&#34;https://www.atlassian.com/software/bamboo&#34;&gt;Bamboo&lt;/a&gt;. That build results in an artifact, a tarball of the entire application.  This tarball is intended to represent the final product, meaning tests have all been run - they passed - and any compilation steps have been executed.  But I&#39;ve got a problem.  It comes when I try to warm the cache or more generally if I run any Symfony console command on the build system before the artifact is made. This includes things like installing &lt;a href=&#34;http://symfony.com/doc/current/cookbook/assetic/index.html&#34;&gt;Assetic&lt;/a&gt; dependencies.  To work around my problem I&#39;ve been making sure my &#39;cache&#39; folder is empty before I build the tarball.  I wind up crossing my fingers on the deploy step and trusting that things will work themselves out when the cache is warmed and the container is compiled on the application server.  This is a horrible solute.  It&#39;s one I&#39;m forced to deal with because of the way Symfony 2 dumps it&#39;s dependency injection container.  The container dump compiles references to &lt;em&gt;%kernel.root_dir%&lt;/em&gt; which is an absolute path to the application root. That path is different on my CI server than it is on my production application server. If I compile the container on the CI server I wind up with a dump file that has the wrong absolute paths, resulting in a non-function app.&lt;/p&gt;
&lt;p&gt;Some may want to question not doing the build on the application server if this is a problem. That may work for some people, but I think it&#39;s wrong to assume it&#39;s going to be possible in every deployment scenario.  There are simply a lot of regulated industries where building on the application server simply is not going to pass an audit. In my experience both in the PCI and Hippa worlds this simply wouldn&#39;t have worked.  You may disagree, but the reality is when you get into sorts of regulated environments you are playing by someone else&#39;s rules, even if they&#39;re silly rules. Furthermore, this solution does not scale.  It works for small clusters, but there&#39;s a point at which it simply is too long to roll that sort of deployment process out across a datacenter.  I&#39;ve spent a fair amount of time solving software problems in these sort of regulated environments, so now I am admittedly wired to consider such things even when they&#39;re not being mandated by a regulatory body.  My build system involves Bamboo and &lt;a href=&#34;http://www.ansible.com/&#34;&gt;Ansible&lt;/a&gt;.  Out of this system a singular artifact of the application is produced for deployment. It&#39;s a clean system and I can pull the artifact down from the CI server at any point and work with the exact distribution that will hit my application server at any time. Well, identical so long as the cache is not built. Here lies my beef with the way Symfony works.&lt;/p&gt;
&lt;p&gt;As I mentioned, this has been a bit of a pain with Assetic.  Until recently I was able to avoid it for the most part. Assetic can be a great tool, especially during development, but much of it can be circumvented with more front end centric tools like Grunt. Recently though I started playing around with the &lt;a href=&#34;https://github.com/Spea/SpBowerBundle&#34;&gt;SpBowerBundle&lt;/a&gt; to manage front end assets and hit this problem again.  In principle I really like what SpBowerBundle brings to the table.  It&#39;s an awesome union of front end and back end dependency management into a nice clean integrated system.  However, this time I just couldn&#39;t make it work.  This is no fault of the Bundle&#39;s, as I eluded to earlier, I consider this a flaw in the way the container is compiled.&lt;/p&gt;
&lt;p&gt;In general I am a huge fan of Symfony 2. I love the design and architecture of the system, and the flexibility to build a truly componetized app is unique in the PHP-stratosphere right now. This doesn&#39;t seem to me like it should be an issue, yet it is. It also seems to me like more people should be wrestling with this, but I&#39;m not finding the blog articles on it or any workarounds for that matter.  Truthfully I suspect the problem could be resolved by delegating the string replacement of &lt;em&gt;%kernel.root_dir%&lt;/em&gt; to a method call, like &lt;em&gt;getRootDir()&lt;/em&gt; which could then return the magic constant &lt;em&gt;__DIR__&lt;/em&gt; and we could use absolutely paths without having to hardcode them.&lt;/p&gt;
</description>
        <pubDate>Sun, 13 Apr 2014 17:19:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/04/13/symfony-and-absolute-paths/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/04/13/symfony-and-absolute-paths/</guid>
        
      </item>
    
      <item>
        <title>SwS: The Basics</title>
        <description>&lt;p&gt;Do you want to get started shaving with a double edge razor? Mark and I cover &lt;a href=&#34;http://shavewithswagger.wordpress.com/2014/03/19/the-basics/&#34;&gt;The Basics&lt;/a&gt; on &lt;em&gt;Shave with Swagger&lt;/em&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 19 Mar 2014 22:06:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/03/19/sws-the-basics/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/03/19/sws-the-basics/</guid>
        
      </item>
    
      <item>
        <title>SwS: I hated shaving</title>
        <description>&lt;p&gt;Today&#39;s post on &lt;a href=&#34;http://shavewithswagger.wordpress.com&#34;&gt;&lt;em&gt;Shave with Swagger&lt;/em&gt;&lt;/a&gt; discusses why &lt;a href=&#34;http://shavewithswagger.wordpress.com/2014/03/17/i-hated-shaving/&#34;&gt;I hated shaving&lt;/a&gt;.  Keep an eye out, later this week Mark and I will cover &amp;quot;the basics&amp;quot; of what you need to get started wet shaving.&lt;/p&gt;
</description>
        <pubDate>Mon, 17 Mar 2014 22:50:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/03/17/sws-i-hated-shaving/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/03/17/sws-i-hated-shaving/</guid>
        
      </item>
    
      <item>
        <title>Against Setter Injection</title>
        <description>&lt;p&gt;I recently read Richard Miller&#39;s post  &lt;a href=&#34;http://richardmiller.co.uk/2014/03/12/avoiding-setter-injection/&#34;&gt;Avoiding Setter Injection&lt;/a&gt; and I in large part agree with his sentiments. My conversion to constructor injection over setter injection is a fairly recent one and when I was initially deliberating the differences I found a lot of explanations online with little concrete code to show why this practice is less productive to good object oriented design. I thought I would try to illustrate with some concrete code examples I agree with Miller that ultimately constructor injection is a more worthy approach and why you should avoid using setter injection whenever possible.&lt;/p&gt;
&lt;p&gt;First, let&#39;s consider two interfaces &lt;em&gt;FooService&lt;/em&gt; and &lt;em&gt;FooNotifier. FooService&lt;/em&gt; will use a &lt;em&gt;FooNotifier&lt;/em&gt; which contains a method &lt;em&gt;notify().&lt;/em&gt; We have two implementations of &lt;em&gt;FooNotifier&lt;/em&gt; the &lt;em&gt;BarNotifier&lt;/em&gt; and the &lt;em&gt;BazNotifier.&lt;/em&gt;  Fundamentally they do two completely different things, though they agree to the same contract.  Here&#39;s what these things look like:&lt;/p&gt;
&lt;p&gt;[gist]https://gist.github.com/stanlemon/d0748c96775995275074[/gist]&lt;/p&gt;
&lt;p&gt;Now let&#39;s take a look at our constructor injection implementation &lt;em&gt;FooServiceConstruct&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;[gist]https://gist.github.com/stanlemon/a1968eedabb808fa5985[/gist]&lt;/p&gt;
&lt;p&gt;And also our setter injection implementation &lt;em&gt;FooServiceSetter&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;[gist]https://gist.github.com/stanlemon/4ca097db323de8c7faba[/gist]&lt;/p&gt;
&lt;p&gt;The argument goes that with constructor injection you create an object with all of it&#39;s dependencies. This means that you minimize side effects caused by the dependency not being injected, or worse changing on you after your object has been created. It makes your object fundamentally more predictable. Think of it this way, this is the only way that we can use our &lt;em&gt;FooServiceConstruct&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;[gist]https://gist.github.com/stanlemon/f2cf4b13562fa1fa3f74[/gist]&lt;/p&gt;
&lt;p&gt;But with _FooServiceSetter w_e can actually do a couple of things with that implementation...&lt;/p&gt;
&lt;p&gt;[gist]https://gist.github.com/stanlemon/bcd6e243a4baa5d7b0f5[/gist]&lt;/p&gt;
&lt;p&gt;You&#39;ll see that we can create a &lt;em&gt;FooService&lt;/em&gt; that either does not work or that can have it&#39;s internal behavior completely changed out from under us.  Neither of these options is good. The alternative is that with constructor injection we have an object that stands on it&#39;s own, the functionality of which cannot be changed in runtime after it has been instantiated. If you want to avoid buggy software, make your objects predictable.&lt;/p&gt;
&lt;p&gt;This is a simple example, but it illustrates the nature of an object that uses setter injection. It creates the potential for volatility in your object that you don&#39;t want to occur.  Now I&#39;m not saying you should never inject via setter. There may be times that you actually want the behavior I&#39;ve illustrated, however I think you will find that most of the time you simply don&#39;t want that. Subsequently as a general rule I inject by constructor unless compelled otherwise during the design of my software. I make it the exception, not the rule when writing objects.&lt;/p&gt;
</description>
        <pubDate>Sat, 15 Mar 2014 13:25:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/03/15/against-setter-injection/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/03/15/against-setter-injection/</guid>
        
      </item>
    
      <item>
        <title>Shave with Swagger</title>
        <description>&lt;p&gt;I&#39;m really excited to share a new blogging endeavor with my friend Mark Buetow, &lt;em&gt;Shave with Swagger&lt;/em&gt; and &lt;a href=&#34;http://shavewithswagger.wordpress.com/2014/03/12/good-morning/&#34;&gt;Good morning!&lt;/a&gt; is our first post.  What should you expect in the future? Posts about shaving, product reviews, blade analysis and random pontifications about our honest devotion to the pleasurable indulgence of a decent wet shave in the morning.&lt;/p&gt;
</description>
        <pubDate>Thu, 13 Mar 2014 21:44:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/03/13/shave-with-swagger/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/03/13/shave-with-swagger/</guid>
        
      </item>
    
      <item>
        <title>Bamboo Push Notifications</title>
        <description>&lt;p&gt;For awhile now I&#39;ve wished that &lt;a href=&#34;http://atlassian.com/software/bamboo&#34;&gt;Bamboo&lt;/a&gt; had an app, or something that could deliver a push notification when a build starts or finishes. Sure there is email, but that means my build notifications will get lost in all of the other junk I am quietly ignoring in my inbox.  What I want is a targeted notification for my builds. So I got to thinking, why not leverage &lt;a href=&#34;http://pushover.net&#34;&gt;Pushover&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;I decided to setup some inline script tasks on one of my bamboo plans using the following code (supply your credentials accordingly), in order to give Bamboo push notifications.&lt;/p&gt;
&lt;p&gt;https://gist.github.com/stanlemon/8726494&lt;/p&gt;
&lt;p&gt;Of course you can kick this up a notch by changing the message, using additional variables and throwing other notifications in at very stages of your build plans.&lt;/p&gt;
</description>
        <pubDate>Fri, 31 Jan 2014 04:20:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/01/30/bamboo-push-notifications/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/01/30/bamboo-push-notifications/</guid>
        
      </item>
    
      <item>
        <title>Composer, Bamboo and private Bitbucket packages</title>
        <description>&lt;p&gt;I use Atlassian&#39;s &lt;a href=&#34;http://www.atlassian.com/software/bamboo&#34;&gt;Bamboo&lt;/a&gt; for continuous integration on a lot of projects. I&#39;m a huge fan, it&#39;s a solid product with a lot of flexibility and the OnDemand service coupled with EC2 instances and custom EBS volume make for a really robust cloud based solution to continuous integration. Almost every project I put into Bamboo involves a call to load &lt;a href=&#34;https://getcomposer.org&#34;&gt;composer&lt;/a&gt; and install dependencies. Many of the projects I dabble with belong to other people and so they&#39;re locked down with some form of authentication and not normally in &lt;a href=&#34;http://packagist.org&#34;&gt;Packagist&lt;/a&gt;. In the past this has created some challenges with installing my composer dependencies, but this past weekend I think I finally found a tolerable solution to my dilemma.&lt;/p&gt;
&lt;p&gt;In addition to being a big fan of Atlassian&#39;s Bamboo I also really like Atlassian &lt;a href=&#34;http://bitbucket.org&#34;&gt;Bitbucket&lt;/a&gt;. I became a heavy Bitbucket user back before Atlassian bought the product because I was a heavy Mercurial user and it was the only hosted solution available. When they were bought and added &lt;em&gt;git&lt;/em&gt; I kept using them because they offer &lt;strong&gt;free&lt;/strong&gt; private repositories, whereas competitor GitHub does not. I&#39;ve had problems when I develop a private package and then want to use it in an application. My workaround up until this weekend was to create a &amp;quot;deployment&amp;quot; user and give them access to my private repository, finally including it&#39;s username/password on my vas url in the repository block of my composer.json. This is all sorts of ugly and I have never been satisfied with it. In addition to not being safe or secure it also chews up one of the sacred five users you can team up with on a private repository.&lt;/p&gt;
&lt;p&gt;So this weekend I set out to find a different approach to private Bitbucket packages in composer. One that wasn&#39;t so ugly and didn&#39;t make me feel so insecure about my setup.&lt;/p&gt;
&lt;p&gt;BitBucket (and GitHub for that matter) have this concept of a deployment key. It&#39;s a private/public ssh key combination that grants read-only access to your repository without chewing up a user account to do so.  It&#39;s specifically geared toward the problem I was trying to solve. In my case Bamboo executes it&#39;s tasks as the &#39;bamboo&#39; user.  The trick is getting the private portion of your deployment key into a place that Bamboo can use it.  Bamboo OnDemand creates EC2 instances when it needs to run a build and then terminates it after its done.  This is great because it keeps costs low and it means you don&#39;t have to worry about a machine getting gunked up with stuff between builds. It also means there&#39;s no shared state between runs, so sticking a private key on your EC2 instance only helps you for a little while.  But wait a minute... what if I set that up with a task in my job when it runs?&lt;/p&gt;
&lt;p&gt;I wound up creating an initial task to setup my private deployment key like this:&lt;/p&gt;
&lt;p&gt;[gist]https://gist.github.com/stanlemon/8661196[/gist]&lt;/p&gt;
&lt;p&gt;Fortunately Bamboo lets you lock down your user&#39;s ability to see these sort of things and the logs don&#39;t show anything indicating what&#39;s going on, which makes it relatively secure - at least seemingly more so than sticking a plain text password in my composer.json file.&lt;/p&gt;
&lt;p&gt;Now if you&#39;re familiar with Bamboo at all you know that the initial repository setup does not allow you to clone using ssh. This is limited only to the Java implementation of git that Bamboo uses to poll the repository. The default EC2 images ship with a full first class git, and so that means if you declare your package in the repositories block like &amp;quot;&lt;em&gt;git@bitbucket.org:team/project.git&lt;/em&gt;&amp;quot; it&#39;ll use the aforementioned key and load just fine.&lt;/p&gt;
&lt;p&gt;Life is a lot easier with an on-premise install of Bamboo where your disk persists between builds and you can set that key up permanently, but for those of us living in the cloud this will do the trick. You can use this approach on-premise too though and you can even use it with Jenkins if that&#39;s your preferred continuous integration implementation.&lt;/p&gt;
</description>
        <pubDate>Tue, 28 Jan 2014 02:28:00 +0000</pubDate>
        <link>https://stanlemon.com/2014/01/27/composer-bamboo-and-private-bitbucket-packages/</link>
        <guid isPermaLink="true">https://stanlemon.com/2014/01/27/composer-bamboo-and-private-bitbucket-packages/</guid>
        
      </item>
    
      <item>
        <title>Why I left Facebook</title>
        <description>&lt;p&gt;On Thursday, December 20th I decided to deactivate my Facebook account. In full disclosure I am not committed to leaving it deactivated forever. I made this move against the recommendation of my wife and closest friends. Nonetheless I have committed to being Facebook-free for the remainder of 2013.&lt;/p&gt;
&lt;p&gt;The question remains, why? Rather then let acquaintances, connections and dare I say “friends” (all supposed 918 of you) speculate I figured it would be best to set the record straight.&lt;/p&gt;
&lt;p&gt;I was an early adopter of Facebook, having jumped on the bandwagon in 2005 while I was still studying at school. At the time the appeal for me was to connect with my high school friends, none of which were going to the same school I was. My Junior year of High School morphed into my Senior year and I got out of West Chicago Community High School in three years instead of the normal four. This meant that the group of individuals I had grown up with I was no longer graduating with. Facebook helped me stay connected with some of those people I grew up with and also find out what I had missed my would-be senior year.&lt;/p&gt;
&lt;p&gt;I didn’t get heavily involved in posting until 2009 when my daughter Lucy was born. The months leading up to her entrance in the world were filled with posts and pictures of me and my baby-momma packing the pounds and preparing for our daughter’s big appearance. By that point my Facebook friends had expanded to include church friends, neighbors, colleagues from work and college friends as well. So Facebook became a great way to share with them what was going on as a young couple with a growing family.&lt;/p&gt;
&lt;p&gt;Fast forward to 2013, eight years after I first setup my account and here I am deactivating it for the first time ever. I’ve longer surpassed Dunbar’s number with regards to my friend count and it’s always been on my mind that many of these connections simply don’t matter. But some of them do. Some of them matter a lot.&lt;/p&gt;
&lt;p&gt;I have tried in larger part to resist the urge to discuss politics on Facebook. If you’ve met me in person you know that I am more than willing to share my positions and defend them, and have a reasonable conversation about them. For the most part, I don’t do that on Facebook. Likewise, religion is another topic I do my best to steer away from. This area I have been more gray with though, especially as of late. Please don’t misunderstand me, I have expressed my faith and frequently share things from the Higher Things website. But you won’t find me sharing my beliefs on what I consider to be polarizing social topics. It’s not that I don’t have those beliefs, I do - and as my closest friends will tell you I’m pretty passionate about them too. (Systematic and liturgical theology, the things that most of the world doesn&#39;t care about are another story - those I&#39;ve largely considered fair game for better or worse.)&lt;/p&gt;
&lt;p&gt;I consider it a matter of pride that what you get when you talk to me is the same whether it be by text, email, phone or in person. I try very hard to maintain the same level of sarcasm and crassness whether in person or by email. I outright refuse to take myself too seriously on any of these mediums either. This is not a standard I believe to be common though, and I think these medium allow many to hide behind their keyboard and says things in ways they simply would never do in person.&lt;/p&gt;
&lt;p&gt;People are very much entitled to their opinions. They are equally entitled to post them on Facebook (or Twitter or the flavor of the day). I’m not getting off Facebook because I don’t want people to speak what they believe or think. If you need to, please read that sentence one more time. I’m getting off of Facebook because I still want to have dinner with you. It dawned on me this week as I watched close friends and immediate family openly criticize my faith in an offensive and personal fashion. I think they thought it was cute, perhaps even comical. I think stupidity prevailed over judgment and they didn’t think it was nearly as awful as it was. Here’s the thing that got me though, none of the people who circulated the meme in question would dare say such things at the Christmas dinner table. They just wouldn’t. It’s in large part because they are decent and kind individuals who love me as much as I love them. Yet on Facebook for whatever reason they seem compelled to cross that line boldly. I’m sure it’s in part because they have friends who are going to hit that “Like” button, or perhaps give them a “True dat!” in the comment feed. But I think they forget that I’m their friend too.&lt;/p&gt;
&lt;p&gt;I really enjoy seeing pictures of friends and family. I love hearing about your trips and weekend travels. The recipes you share are not only delicious but inspiring. The posts you make that you’d never be willing to say to my face… those trouble me. They hurt. And I guess that’s ultimately what has driven me away from Facebook. My feelings have been hurt and it’s been done in the shadows of the dark alleys of my Facebook feed. I&#39;m sure others feelings have been hurt to, maybe even by some who agreed with you on your last rant but find this just as offensive as I do.&lt;/p&gt;
&lt;p&gt;Growing up my dad would often tell me that “every action has an equal and opposite reaction.” For much of my childhood I wrote this off as just another stanza in the long ballad of life. As an adult I realize there’s a lot of truth and wisdom in such a statement. I guess the reaction then to those friends I mentioned earlier is this… You don’t get to see pictures of my kids at Christmas. You’re not going to get to see the videos on my wall as they open the presents you sent. You’re going to miss next week’s sonogram. And when it comes to that Christmas Wossel recipe we were going to re-share, well you’re out of luck there too. It&#39;s pretty tasty by the way.&lt;/p&gt;
&lt;p&gt;I don’t know if this is forever… I’ve got the unusual occasion to take time off at Christmas (for first time in four years) and I felt my time might be best spent focussing on my kids than on Facebook. I guess we’ll have to wait and see what’s in store for 2014.&lt;/p&gt;
</description>
        <pubDate>Sun, 22 Dec 2013 18:20:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/12/22/why-i-left-facebook/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/12/22/why-i-left-facebook/</guid>
        
      </item>
    
      <item>
        <title>2-Factor This!</title>
        <description>&lt;p&gt;A lot of services across the web are amping up security in lieu of &lt;a href=&#34;http://abcnews.go.com/Technology/hacker-group-stole-million-stolen-facebook-google-passwords/story?id=21109910&#34;&gt;recent breaches&lt;/a&gt;. One technique to do this is called &lt;a href=&#34;https://help.github.com/articles/about-two-factor-authentication&#34;&gt;two factor authentication&lt;/a&gt;. It’s a name that perfectly describes the technique, but explains absolutely nothing.&lt;/p&gt;
&lt;p&gt;So what is two factor auth and why do you care? Simply, two factor auth is your password plus something else. In most cases that “something else” is going to be a text message, an email or a secure token system like &lt;a href=&#34;https://itunes.apple.com/us/app/google-authenticator/id388497605&#34;&gt;Google Authenticator&lt;/a&gt; or &lt;a href=&#34;https://www.authy.com&#34;&gt;Authy&lt;/a&gt;. Some banking websites have been doing this forever via email but the growing trend is to use text messages as they can be a considerably safer approach to this sort of authentication.&lt;/p&gt;
&lt;p&gt;Here’s the thing to keep in mind… You are most likely already doing two factor auth in your life - you just don’t think of it like that. If you have a safety deposit box for example, it takes two keys to unlock it. Without both sets your birth certificate isn’t going to see the light of day. If you’ve bought a car recently you’re also using two factor auth as &lt;a href=&#34;http://en.wikipedia.org/wiki/Transponder_car_key&#34;&gt;every car key these days comes with a microchip implemented in it&lt;/a&gt;. You can’t start your car with a copy of your key, you need to use the key plus the microchip if you want to drive anywhere. And if you don’t have that microchip your car not only won’t run, it very well may lock up on you too! These are two factor strategies, where they prevent criminal-like-folk from copying your keys and running away with your identity and precious automobile. &lt;em&gt;Why not use that same strategy with your personal information stored securely on the world wide web?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;How does two factor work with your favorite web service? There are two typical routes, the most common of which involves your cell phone and a text messaging plan. If you don’t have unlimited text messaging either pony up or take a trip to the Verizon store for an upgrade. When you login, normally for the first time, you’ll get a text message from the service in question. Websites like Facebook will ask you to punch in a unique code on this text message after you enter your password, but before you actually get to login to the service. The idea is that your cell phone is most likely on you and there’s a uniqueness to the device in your pocket that a hacker cannot replicate. Stealing your password then is not enough, you need to steal a person’s cell phone too - thus making it infinitely more difficult for a hacker to access your information.&lt;/p&gt;
&lt;p&gt;Not every service has two factor authentication, but a lot do. You should evaluate the services you use every day and consider enabling two factor authentication where it’s available. I’m a big proponent of enabling two factor auth for your &lt;a href=&#34;http://www.google.com/landing/2step/&#34;&gt;Google&lt;/a&gt;, &lt;a href=&#34;https://www.dropbox.com/help/363/en&#34;&gt;Dropbox&lt;/a&gt;, &lt;a href=&#34;http://blog.evernote.com/blog/2013/10/04/two-step-verification-available-to-all-users/&#34;&gt;Evernote&lt;/a&gt; and &lt;a href=&#34;https://www.facebook.com/note.php?note_id=10150172618258920&#34;&gt;Facebook&lt;/a&gt; accounts. As these items likely contain more personal data about you and your friends than anything else you’re using it’s important to harden your security around them.&lt;/p&gt;
&lt;p&gt;Don’t get me wrong… Two factor auth doesn’t just slow down the losers trying to compromise your data, it slows you down too. Principally though this should only happen when you setup Facebook on your phone, or configure your email client to pull down your Gmail. Your setup is slower, but your data is safer. In my opinion this is a fair trade considering what is at stake. One other thing to keep in mind… &lt;strong&gt;These services don’t do two factor auth for their sake.&lt;/strong&gt; It actually costs them money to run, with almost no return on the investment! Two factor auth is a service for you, to protect your data and keep you, your family and friends safe.&lt;/p&gt;
</description>
        <pubDate>Tue, 10 Dec 2013 02:57:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/12/09/2-factor-this/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/12/09/2-factor-this/</guid>
        
      </item>
    
      <item>
        <title>You don&#39;t give a crap, but your mom does!</title>
        <description>&lt;p&gt;&lt;em&gt;So you don’t give a crap that your data gets exposed or hacked?&lt;/em&gt; You don’t have anything to hide, so the potential leak isn’t worth the added effort of complex passwords and password management systems.  You want a simple, easy to remember password.  Fair enough.  I get it.  You don’t give a crap, but here’s the thing… &lt;strong&gt;Your mom might.&lt;/strong&gt; Or your dad, or your sister or your great Aunt Bertha or your Cousin’s best friend that you just recently added on Facebook.  &lt;em&gt;And that’s the point&lt;/em&gt;!&lt;/p&gt;
&lt;p&gt;Let’s say you’re one of the few who don’t give a rip because you have nothing to hide. Stop being selfish!  Most of this password protection junk has nothing to do with you.  It has to do with the information you have access to, like my email address, my phone number, the names of my kids and that picture I shared with you from my best friends bachelor party!&lt;/p&gt;
&lt;p&gt;You are most likely passively collecting information in the services you use every day.  It might just be people&#39;s names, but it also could be more serious information like their addresses and phone numbers.  A data leak because you used a stupid password exposes all kinds of things that your friends and family don’t want everyone under the sun to know. And not just because it’s private information, but because it effects their safety!&lt;/p&gt;
&lt;p&gt;It can get worse then just the revealing of address and phone numbers though.  How you say?  Consider the fact that that Facebook app on your phone posts where you go.  Maybe it’s a restaurant, church or even the grocery store.  You’re a hip social media rock star and you’ve been capturing your geo-coordinates and checking in wherever you go.  So have I, your mutual friend on Facebook,  as well as your neighbor’s 16 year old daughter.  Now ALL of that information about where you’ve been and the trends of your daily activity is accessible to some low life hacker that cracked your stupid-simple password.  Is this sounding scary yet?  Let’s keep going…  That hacker might decide to pay one of us (you, me or or your neighbor’s teenage daughter) a visit.  Or maybe the hacker sells that valuable data information to a petty thief or a pedophile. Now is it scary? &lt;em&gt;It ought to be&lt;/em&gt;.  &lt;strong&gt;This is what happens when the flood gate known as your weakly protected account is opened.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You are just a gateway drug for a hacker. Your credit card, social security number are low hanging fruit compared to the peripheral data you are toting in those web based accounts you login day in and day out. Protecting your accounts with unique and complex passwords isn’t just about you.  It’s about everyone you engage with using those services.  It’s about personal protection, for you, your family and your friends. So I get it, you don’t have anything to hide that you’re worried about a hacker exposing. But I do.&lt;/p&gt;
</description>
        <pubDate>Sat, 07 Dec 2013 14:32:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/12/07/you-dont-give-a-crap-but-your-mom-does/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/12/07/you-dont-give-a-crap-but-your-mom-does/</guid>
        
      </item>
    
      <item>
        <title>How Google is making Gmail Insecure</title>
        <description>&lt;p&gt;&lt;a href=&#34;http://googleblog.blogspot.ca/2012/12/winter-cleaning.html&#34;&gt;Last winter, about a year ago, Google did a round of house cleaning&lt;/a&gt;.  When they did this they consequently opened the flood gates to making Gmail a less secure product.  &lt;em&gt;How you say&lt;/em&gt;?  Let me explain...&lt;/p&gt;
&lt;p&gt;Google&#39;s 12/12 cleaning eliminated a product called Google Sync.  This was an extremely handy product for folks going mobile who want to stay connected to their email.  It essentially allowed you to setup your Gmail account using Microsoft&#39;s Exchange protocol.  What&#39;s significant about that is that it enabled instant push notifications for new email messages.  This meant that when Google got an email for you, if you were using the Exchange protocol you got it instantly. When Google dropped support for this the best you could hope for was getting your email in a 15 minute window, hardly instant.&lt;/p&gt;
&lt;p&gt;In a world of &lt;strong&gt;instant&lt;/strong&gt; not having your email as soon as it&#39;s available is a huge deal.  But why did Google do this?  Presumably to get more people to adopt their &lt;a href=&#34;https://itunes.apple.com/app/gmail/id422689480&#34;&gt;Gmail iOS app&lt;/a&gt;. But here&#39;s the thing... Gmail for iOS &lt;em&gt;&lt;strong&gt;SUCKS&lt;/strong&gt;&lt;/em&gt;!  Yeah, I said it, it&#39;s absolutely terrible!  Not all of it is Google&#39;s fault, but some of it should have been resolved when Google picked up &lt;a href=&#34;http://sparrowmailapp.com/&#34;&gt;Sparrow&lt;/a&gt; in an acquisition - those dudes knew how to make an email account.  Gmail for iOS is awful first and foremost because iOS has no concept of a default email client.  If you&#39;re using Safari and you click on an email address, or maybe you click on it from your Contacts, you&#39;re going to open up the native Mail app. There are more problematic issues though that are technical in nature, like Gmail&#39;s inability to properly handle responsive email layouts. When email doesn&#39;t look right people don&#39;t want to use your product. This is where everything goes bad...&lt;/p&gt;
&lt;p&gt;Your email looks like crap and nothing on your mobile device uses the right client.  So what do you do?  You start experimenting with other clients. This is fundamentally how Google is destroying the security of Gmail.  Since the shut down of Google Sync for the masses you&#39;ve seen a whole host of iOS email clients spring up.  I&#39;m looking at you &lt;a href=&#34;http://www.mailboxapp.com/&#34;&gt;Mailbox&lt;/a&gt;, &lt;a href=&#34;http://evomail.io/&#34;&gt;Evomail&lt;/a&gt;, &lt;a href=&#34;http://www.getboxer.com/&#34;&gt;Boxer&lt;/a&gt; and friends. Personally I don&#39;t have a beef with these products in and of themselves, but the problem is they all offer you push notifications &lt;strong&gt;at a cost&lt;/strong&gt;.  Not a financial cost, a risky security cost. In order for these applications to tell you the instant you get your email you have to give them &lt;strong&gt;full and absolute access to your inbox&lt;/strong&gt;.  Then you have to trust that &lt;a href=&#34;https://lastpass.com/adobe/&#34;&gt;no one at that company is stupid enough to become the next Adobe.&lt;/a&gt; I actually like some of the products I just mentioned, but I don&#39;t use them.  The reason is simple, I&#39;m not comfortable letting someone else comb my email every single day. Quite frankly, you shouldn&#39;t be either!&lt;/p&gt;
&lt;p&gt;What&#39;s the answer?  For me it&#39;s two fold...  Important email accounts use the Gmail iOS app.  Non-important email accounts stay in the native Mail app.  The important ones are there too, so that the rest of my iOS experience doesn&#39;t stink, but I have notifications and badges turned off for those accounts. It&#39;s not a pretty solution in my opinion, but it&#39;s the only solution that keeps your email safe.  Your email needs to be safe too.  There is no easier way for a hacker to gain access to everything else in your life than getting access to your email.  Most services allow you to reset everything under the sun using just your email address.  Keep your email safe!&lt;/p&gt;
&lt;p&gt;Both Google and Apple can help us out too, though I don&#39;t think either of them are going to do so.  Google can fix their technical problems.  Most of them should just not happen, it&#39;s inexcusable.  They can also work on making Gmail act more like an iOS app and less like a red-headed-Android app.  Meanwhile Apple can give us the ability to select a default email app, and they can also build out APIs to allow apps like Mailbox to poll an IMAP service like Gmail in the background of the device.  Yes, it&#39;s going to hurt your battery life but that&#39;s a price I&#39;m willing to pay for security. I just wouldn&#39;t expect Apple to do that anytime soon...&lt;/p&gt;
&lt;p&gt;There&#39;s one other option I haven&#39;t mentioned...  Ditch Gmail altogether.  If Google is content to encourage users to risk their email security then maybe it&#39;s time to look elsewhere?  Any Exchange based service will work, and quite honestly the dudes over at Microsoft have built a solid product with &lt;a href=&#34;http://outlook.com&#34;&gt;Outlook.com&lt;/a&gt;.  If that doesn&#39;t float your boat, &lt;a href=&#34;http://mail.yahoo.com&#34;&gt;Yahoo Mail&lt;/a&gt; also has a solid email solution.  And guess what... you can get push notifications for both!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Someone may be quick to point out that Apple&#39;s own iCloud solution does push too.  This is true, but anyone who has used iCloud knows, the spam filtering and phishing protection makes it nearly the worst solution to email available on the internet today.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 06 Dec 2013 11:23:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/12/06/why-google-is-making-gmail-insecure/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/12/06/why-google-is-making-gmail-insecure/</guid>
        
      </item>
    
      <item>
        <title>The DataMapper Ruse</title>
        <description>&lt;p&gt;There were some great articles today about ORMs, specifically &amp;quot;&lt;a href=&#34;http://programmingarehard.com/2013/10/21/is-orm-abstraction-a-pipe-dream.html&#34;&gt;Is ORM abstraction a pipe dream?&lt;/a&gt;&amp;quot; by David Adam and then &amp;quot;&lt;a href=&#34;http://paul-m-jones.com/archives/4757&#34;&gt;Publish Your Failure; or, The Way Of All Frameworks&lt;/a&gt;&amp;quot; by Paul Jones (the man who led me to good BBQ in Memphis).&lt;/p&gt;
&lt;p&gt;I&#39;ve been thinking about ORMs a lot lately and I&#39;ve been wanting to write something about what I consider to be the DataMapper farce. I should be clear up front, I&#39;m big Doctrine 2 fan.  &lt;strong&gt;BIG.&lt;/strong&gt; It&#39;s my ORM of choice every single time, or maybe it was... On principal I love Doctrine 2. My days as a Java developer made me grow fond of Hibernate and with time I&#39;ve come to really appreciate object hydration via the DataMapper pattern alongside the Repository pattern.  What I&#39;ve appreciated most is the fact that I can write a model with no implicit dependencies, meaning my class &amp;quot;Foo&amp;quot; does not extend &lt;em&gt;ActiveFoo&lt;/em&gt; or &lt;em&gt;QueryFoo&lt;/em&gt; or &lt;em&gt;BaseFoo&lt;/em&gt; or &lt;em&gt;FooTable&lt;/em&gt; or &lt;em&gt;GatewayFoo&lt;/em&gt; or &lt;em&gt;FooPeer&lt;/em&gt; or &lt;em&gt;MagicHotSauceFoo&lt;/em&gt;, it simply stands on it&#39;s own.  In the case of Doctrine 2 my model usually gets some love from annotations or maybe Yaml if I&#39;m looking to spice up my day.&lt;/p&gt;
&lt;p&gt;Here&#39;s the thing I&#39;ve been contemplating though and why I think this notion of portability is fundamentally a ruse (&lt;em&gt;for now&lt;/em&gt;). In the PHP universe what other library provides a DataMapper implementation that would allow you to freely move from Doctrine 2? If I choose to write stand alone models I am either stuck doing some sort of hydration myself (&lt;em&gt;all kinds of time consuming icky&lt;/em&gt;) or I am using Doctrine 2.  So this idea that ActiveRecord locks you in and Doctrine 2 doesn&#39;t, is, well simply not true...  Short of a viable alternative Doctrine 2 has a monopoly on the DataMapper pattern, making it as &#39;locked in&#39; as using Propel or any other ActiveRecord-styled ORM.&lt;/p&gt;
&lt;p&gt;Now don&#39;t get me wrong...  This doesn&#39;t change the fact that I will likely continue to gravitate toward&#39;s Doctrine 2.  I am going to hang tight and hope for some healthy competition that will allow me to write my models portable enough to swap in Doctrine 2 for odd days of the week and LibraryX for even days.&lt;/p&gt;
</description>
        <pubDate>Tue, 29 Oct 2013 03:01:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/10/28/the-datamapper-ruse/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/10/28/the-datamapper-ruse/</guid>
        
      </item>
    
      <item>
        <title>A Slice of Bundle Please</title>
        <description>&lt;p&gt;PHP has more frameworks then I have fingers and toes, and that diversity gives developers and architects alike a lot of choices when it comes to solving a problem. It can also be a total headache sifting through the options and making sense of what seems like chaos. As of late I&#39;ve found myself using Symfony 2 to solve my problems and I am increasingly a fan of it&#39;s underlying architecture and the freedom it gives developers to work in slices or components of an application.&lt;/p&gt;
&lt;p&gt;A fair amount of debate has hit the internet about the dependency model of certain Symfony 2 components. Some argue that component A with dependencies B and C is too much, or that because component A also requires dependencies D, E and F to run it&#39;s unit tests it&#39;s not a truly stand alone component and instead represent a &amp;quot;coupled&amp;quot; library or framework.  I actually think there is a lot of merit in these assessments, but I don&#39;t believe it discounts Symfony 2 from being my MVC framework of choice.  Nor do I think this somehow invalidates the fact that Symfony 2 stands distinctively different from the alternatives in the PHP community. Symfony 2 is a huge step forward from the land of tightly coupled frameworks (I&#39;m looking at you Cake!).  More importantly than the dependency model though, I think Symfony 2 presents an architecture of &amp;quot;Bundles&amp;quot; that simply doesn&#39;t get enough love in the current framework debates.&lt;/p&gt;
&lt;p&gt;A bundle in Symfony 2 is nothing more then a stand alone unit of code.  It may have dependencies, but it&#39;s stand alone in the sense that it represents a functional chunk of an application.  A well designed bundle could theoretically be deployed as distinct unit from an application.  Think about an application where you have an internal messaging system.  Wouldn&#39;t it be nice to be able to peel that message system out of the main app and to develop it independently?  When I say independently, I mean completely functioning on a web server without the rest of the application.  This is bundle development at its finest.&lt;/p&gt;
&lt;p&gt;Don&#39;t get me wrong, lots of bundles are not developed this way.  I&#39;ve seen applications where bundle divisions are completely arbitrary and others that had a nasty web of cross dependencies such that they should have just been in the same bundle.  There is a happy place however, where bundle development represents a unique sliver of a larger application, and that place is why I&#39;m so drawn to Symfony 2.&lt;/p&gt;
&lt;p&gt;I&#39;ve been working on a reporting bundle for a little while now. It&#39;s a simple concept, take an arbitrary query and translate it into a table. When I am developing it locally I actually have it bootstrapped into a vanilla Symfony Standard edition created by composer.  When I am done with changes I deploy them into two different apps I&#39;ve written that both use this bundle.  The apps themselves have very little knowledge of the bundle, just enough to put some links into their respective menus, import a routing configuration and that&#39;s about it. What&#39;s most important though is that the reporting bundle itself has no knowledge of the two apps, such that I can develop it independently and deploy it to both without disrupting anything.  The immediate benefits of this are rapid development and deployment, allowing for changes to trickle out to actual software faster.&lt;/p&gt;
&lt;p&gt;This sort of development, application by slice or bundle, in a big team can optimize workflow by an order of magnitude.  You can have a team iterating independently at a rapid pace without disrupting the other teams.  In the end you have a forward moving application of independent and highly functional units. What&#39;s not to love about that?&lt;/p&gt;
&lt;p&gt;Symfony 2&#39;s implementation is unique in my opinion because of things like extensions, compiler passes, bundle inheritance and the power of template inheritance. These aspects of Symfony 2 really empower unique slivers of code.  When done right it&#39;s completely possible to develop a bundle that doesn&#39;t even need Symfony 2.  Want to bootstrap a new framework and use your bundle?  You can do that - it just requires some deliberate planning at the onset (aka inject, inject, inject!).  Now some will read this an appeal to the awesomeness of Symfony’s dependency injection component and argue that’s really where the power of these slivers come into play.  I disagree, I think it’s a piece of the pie - but fundamentally there is an underlying architecture and set of principals that lends itself to lose coupling of pieces of an application.  What I wish though, is that this bundle mentality would materialize in some other frameworks!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;** After writing this I was challenged with the notion of “plugins” or “modules” as they appear in some other frameworks.  In my opinion most of the “things” that use this terminology lack the looseness of a Symfony bundle. A well written Symfony 2 bundle can in my opinion be bootstrapped without using Symfony.  It requires writing Controllers that stand alone and are injected and it requires having a full grasp of your dependencies (no $this-&amp;gt;createForm() please), but it can be done and the power of that independently deployable bundle is something that plugins and modules simply have not proven they can do just yet.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 24 Oct 2013 04:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/10/24/a-slice-of-bundle-please/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/10/24/a-slice-of-bundle-please/</guid>
        
      </item>
    
      <item>
        <title>Unlocked iPhone 5S</title>
        <description>&lt;p&gt;When I went to order my wife a new phone I couldn&#39;t get a straight answer as to whether or not the T-Mobile full-price version would be unlocked or not. The general consensus was that the device would ship with a T-Mobile SIM and be bound to T-Mobile&#39;s prepaid service at least for a couple of months.  The whole thing was terribly confusing because you could order an iPhone 5C without a SIM in it at all, which is what I was hoping I could do with the 5S.&lt;/p&gt;
&lt;p&gt;I pulled the trigger and ordered my wife an iPhone 5S from the Apple Store online, fully intending to cancel my largest bill, AT&amp;amp;T and move on with the latest and greatest.  I value my freedom and at the core I&#39;m cheap, so the long term savings and the short term monthly decrease was highly appealing to me.  I had pegged my eyes on StraightTalk, the details of which are destined for another post, and figured we would complete that transition in a few months.&lt;/p&gt;
&lt;p&gt;I ordered the phone and it arrived with a T-Mobile SIM.  Now I&#39;ve never done a prepaid plan before so I was a rookie at this in every sense of the word. I opened the box and I could not figure out how to get service started.  There was nothing in the box explaining what to do and when I called T-Mobile they basically told me I had invested in a precious paper weight and needed to take it into a store.  This was simply not the freedom that I coveted.&lt;/p&gt;
&lt;p&gt;I happened to have a StraightTalk SIM laying around and after two T-Mobile customer support calls and three AppleCare calls I came to the determination that this device was most likely unlocked and I could kick T-Mobile to the can.&lt;/p&gt;
&lt;p&gt;So here is the bottom line... &lt;strong&gt;If you are ordering an iPhone 5S, as best I can tell the device is in fact unlocked.&lt;/strong&gt;  It&#39;s worth nothing that I was not transferring a number and I did not have any previous accounts with T-Mobile.  I was fed up and frustrated with the ridiculousness of their customer support and took a chance by sticking a StraightTalk SIM into the device - and it worked!  My advice if you want to dramatically cut a bill and sport a new iPhone 5S is to not get hung up on T-Mobile when you order as it would appear these devices are free to roam about carriers as deemed fit by their owner.&lt;/p&gt;
</description>
        <pubDate>Tue, 22 Oct 2013 04:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/10/22/unlocked-iphone-5s/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/10/22/unlocked-iphone-5s/</guid>
        
      </item>
    
      <item>
        <title>Cut the Waste</title>
        <description>&lt;p&gt;Back in February my family moved from Pittsburgh to Southern Indiana.  When we made the move we didn&#39;t actually know where we would end up. We put most of our worldly goods into storage and settled in with my in-laws for an extended stay while we shopped for a house.  Whenever we&#39;ve moved in the past we go through a process of purging the stuff we don&#39;t use.  Trash bags get filled, car loads get taken to Good Will and we lighten the load for wherever it is we are moving to. This most recent move brought more purging then we&#39;ve done in the past, by about an order of magnitude.  Our house in Pittsburgh had an unfinished basement that was perfect for storage, so we quickly consumed every square inch of space with junk.  When we moved most all of the basement&#39;s contents stayed in Pittsburgh one way or another.&lt;/p&gt;
&lt;p&gt;When we finaly bought a house we settled for one without a basement or grandiose storage space. This caused us to yet again cut the waste from our lives. It&#39;s amazing how liberating it can be to become nimble by cutting the waste.&lt;/p&gt;
&lt;p&gt;I tend to cycle through this same process with my office desk too.  Every couple of months I empty my drawers and weed through everything, restoring only the necessities and essentially cutting the waste.  On the other end of this process I can find things faster and I free up storage for new things far more important than the ones I get rid of.&lt;/p&gt;
&lt;p&gt;Software development is no different.  Sometimes you need to sell the house.  Other times you just need to clean off the desk. In the end you need to cut the waste, trim the fat if you will. When I descend on a project one of the first questions I ask myself is, how can I remove as many lines of code as possible?  It seems like a silly question, but the truth is that clarity comes through simplicity.  Complex code often just needs to be gutted, whether through refactoring or rewriting. Understanding the initial problem is critical, but fundamentally cutting the waste creates a more nimble piece of software and this in turns translates to better results all around.  Don&#39;t believe me?  Pick a complex process and drop the gauntlet on it.  Try simplifying it and set a goal to reduce it&#39;s footprint by 20%. I&#39;m willing to bet the fruits of this labor will be profitable.&lt;/p&gt;
</description>
        <pubDate>Mon, 02 Sep 2013 02:04:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/09/01/cut-the-waste/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/09/01/cut-the-waste/</guid>
        
      </item>
    
      <item>
        <title>Project Based Interviews</title>
        <description>&lt;p&gt;I recently read, &amp;quot;&lt;a href=&#34;https://medium.com/lessons-learned/80ba19c55883&#34;&gt;I will not do your tech interview.&lt;/a&gt;&amp;quot; by Ike Ellis and it got me to thinking about the interviews I have been in, both as an interviewer and an interviewee.&lt;/p&gt;
&lt;p&gt;The article resonated with me initially as I thought about an in-person panel interview I once sat through.  The interview consisted mostly of brain teasers and had very little technical substance to it.  For example, I was asked &amp;quot;If you had to determine how many cars were in the world how would do it?&amp;quot; Still to this day I think this is one of the dumbest questions I have ever been asked in an interview. My initial response was that I would google it.  This only upset the interviewer because the whole purpose, in their opinion, of the question was to see how worked through problems. My appeal to them was that it was a question I would never encounter while working for them. The question was out of my wheel house as I knew very little about information measurement and market research gathering.  The interview reached it&#39;s pinnacle when I was asked the infamous &amp;quot;&lt;a href=&#34;http://www.glassdoor.com/Interview/Suppose-you-had-eight-identical-balls-One-of-them-is-slightly-heavier-and-you-are-given-a-balance-scale-What-s-the-fewes-QTN_10521.htm&#34;&gt;Eight Balls&lt;/a&gt;&amp;quot; question that is most notable for its use by Goldman Sachs when conducting interviews.  Needless to say I left that interview and called the recruiter to tell them I was no longer interested in the position.  I have no idea if they would have offered it to me, but the bottom line was that they had devalued their company during the interview and I no longer had a desire or interest to work with them.&lt;/p&gt;
&lt;p&gt;So Ellis article earlier noted then got me to thinking about the other side of the table and what I have done when I&#39;ve been responsible for interviewing potential candidates. When I first started conducting interviews for development positions I compiled a list of questions that I felt assessed  core technology to our product.  They weren&#39;t product specific and quite frankly they were pretty simple. One question involved two pieces of paper with tabular data on them.  The first question was about creating a relationship between table A and table B, with me ultimately looking for them to create a mapping table.  The second question was to write a SQL query that joined the data together in a single result set.  Answers were coded on a dry erase board, the least practical environment for any developer to write code.&lt;/p&gt;
&lt;p&gt;I was once asked by a supervisor why I valued questions like the above and at first I replied, &amp;quot;Do you really want to work with someone that can&#39;t write a simple SQL query?&amp;quot; In hind sight turning the question back on him fundamentally missed the goal I was trying to accomplish.  I was charged with finding the &lt;strong&gt;best&lt;/strong&gt; talent available for our company and rather then defend the process on it&#39;s merits I surrendered to the question.  The root of my problem came in evaluating or understanding what &amp;quot;best&amp;quot; meant for our company.  I simply didn&#39;t know what we valued in developers and that lack of understanding created a flawed interview process.&lt;/p&gt;
&lt;p&gt;I don&#39;t believe that &amp;quot;best&amp;quot; is the same in Company A as it is in Company B or that when Company C is hiring for position R it&#39;s the same as when they are hiring for position S.  That needs to be said because it&#39;s too easy to simplify the solution to &amp;quot;best&amp;quot; as hiring the most knowledgable Senior Developer in the given talent pool.&lt;/p&gt;
&lt;p&gt;Over time my questions proved to me that there aren&#39;t nearly as many senior developers around as management wanted to hire. So how do you fill gaps in technical leadership on a team?  When you can&#39;t hire them, you make them (this assumes company buy-in on this philosophy). This in turn shifted my thought process from my quiz style assessment to a project style assessment.  Perhaps I have my work with &lt;a href=&#34;http://www.projectfoundry.org&#34;&gt;Project Foundry&lt;/a&gt; to thank for this revelation, but the bottom line is that I reached a point where I felt like I would gain better assessment data by looking at practical project based work instead of the results of a quiz.&lt;/p&gt;
&lt;p&gt;My project based interview process involved a specification, poorly written like many of the ones I encountered at the time (this was deliberate), and some starting code to work from.  My unrealized dream for this process was to couple it with a &lt;a href=&#34;http://bitbucket.org&#34;&gt;BitBucket&lt;/a&gt; repository so I could witness the progression of work through commit history.  Eventually I also wanted to have deployment to &lt;a href=&#34;http://openshift.com&#34;&gt;OpenShfit&lt;/a&gt; for a working product because that&#39;s ultimately what developers do - they deploy the code they write. Here&#39;s the bottom line, with this process I hired three individuals.  They all had different solutions to the problem and they were able to work on the problem without me hovering over them through the project.  One guy was  a Junior Developer who far exceeded the expectations set for him in the project and that turned out to be trend in his career thereafter.  Another one of the other guys quickly moved up to a managerial role mentoring the younger developers on the team. His in person interview was memorable because of the awesome answers he gave when I asked him about his design decisions on the project.  He knew his stuff and the project had established that, so his interview turned into a friendly chat about coding like you might find on a Friday at 4 when the cases of beer were being opened at the dev shop.  The remaining developer remained a core code producer on the team up until the time I left that position. I considered all three of them victories for the new process.&lt;/p&gt;
&lt;p&gt;I do believe that skill assessment for developers is necessary. I do disagree with the way we conduct those assessments. When I took the position I described earlier I had a timed online quiz that I needed to pass to be offered a job. I didn&#39;t and still don&#39;t see any value in that form of assessment. Those quizzes eliminate the ability for feedback loops and they dumb down computer science to multiple choice, which simply doesn&#39;t happen on real projects.  My code questions involving a dry erase board for writing code also jeopardize a hiring managers ability to get good talent.  Most developers simply don&#39;t code in front of other people and even fewer are confined by time in the way that we run these interviews.  Our developers work on projects, either a spec or a ticket and that&#39;s where they are forced to be problem solvers and artisans.  If we want to see how they will succeed in our companies we should give them realistic scenarios to demonstrate success.&lt;/p&gt;
&lt;p&gt;Coming full circle we&#39;re back to the question of &amp;quot;brain teasers&amp;quot;.  What value do they hold?  &lt;a href=&#34;http://www.theatlantic.com/business/archive/2013/06/google-finally-admits-that-its-infamous-brainteasers-were-completely-useless-for-hiring/277053/&#34;&gt;It sounds like even Google, once notorious for these, has given up on using them.&lt;/a&gt;  I have to confess I don&#39;t usually excel at these challenges.  Sometimes I downright freeze as I struggle to comprehend what it is my interviewer wants to see me do. &lt;em&gt;It&#39;s like I&#39;m trying to defuse a bomb that needs four gallons of water and all I have is a three gallon and a five gallon gas can to do it with&lt;/em&gt; (&lt;a href=&#34;http://www.imdb.com/title/tt0112864/&#34;&gt;Die Hard 3&lt;/a&gt;).  I wonder if It might be helpful if we look at other industries and take a page from their book.  For example, how do Plumbers interview?  It starts with verifying that they have a license which is then bound concrete hours doing specific work.  Furthermore these positions have a license with it&#39;s own set of project-oriented assessment that is renewed and re-evaluated.  What about nurses?  They too are evaluated based upon on-the-ground experience doing actual nurse-work. There are verifications and accreditations based upon working experience that come into play. How do you decide to hire a contractor to work on your house?  You look at his past work, the projects he&#39;s completed and you use the referrals of that work to come to a conclusion about whether or not he can be successful on your project.  You don&#39;t ask a Plumber for an algorithm he&#39;ll never implement, you ask him to fix a toilet - which quite frankly just makes a whole lot more sense.&lt;/p&gt;
&lt;p&gt;Things are getting easier for those interviewing developers.  Thanks to tools like &lt;a href=&#34;http://github.com&#34;&gt;GitHub&lt;/a&gt; and &lt;a href=&#34;http://bitbucket.org&#34;&gt;BitBucket&lt;/a&gt; you can actually see things that developers are working on.  You can also see a progression of their thought process in code commit history, a highly valuable tool for assessment in my opinion. After all, how much of what we do boils down to refactoring existing work? How better to see that skill then to run &lt;em&gt;git log&lt;/em&gt;? Combine those tools with &lt;a href=&#34;http://c9.io&#34;&gt;Cloud 9&lt;/a&gt;, &lt;a href=&#34;http://openshift.com&#34;&gt;OpenShift&lt;/a&gt; and even &lt;a href=&#34;http://aws.amazon.com&#34;&gt;AWS&lt;/a&gt; and you have really easy ways to setup environments and projects that produce hearty evaluation data for potential candidates.  Data that corresponds to actual projects and projects that mirror what they&#39;re actually going to be doing for you in their role.  Lastly, a project-oriented interview process is more appealing to me as a developer too.  Technology jobs are plenty but technology workers are limited.  This means that as much as I need to sell myself as a product to you, you need to sell your company as a product to me.  Your first exposure is through your interview process, so why not make it something that excites me as a developer to come and be a part of your team?&lt;/p&gt;
</description>
        <pubDate>Sat, 24 Aug 2013 15:13:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/08/24/project-based-interviews/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/08/24/project-based-interviews/</guid>
        
      </item>
    
      <item>
        <title>Getting started with puppet</title>
        <description>&lt;p&gt;I am a firm believer in &lt;a href=&#34;http://puppetlabs.com&#34;&gt;Puppet&lt;/a&gt;.  I can&#39;t imagine provisioning a network of environments without it.  Getting started with Puppet is a mixed bag though, and finding a simple all in one for a master and client setup can be tough.  &lt;a href=&#34;http://vagrantup.com&#34;&gt;Vagrant&lt;/a&gt; makes setting this up easy though, you can get a master and couple of clients up and running in no time all on virtual infrastructure.  Here is a Vagrantfile I wrote to get a couple of CentOS base boxes dancing together using puppet:&lt;/p&gt;
&lt;p&gt;https://gist.github.com/stanlemon/5649465&lt;/p&gt;
</description>
        <pubDate>Sat, 25 May 2013 15:34:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/05/25/getting-started-with-puppet/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/05/25/getting-started-with-puppet/</guid>
        
      </item>
    
      <item>
        <title>Symfony\ICU and CentOS</title>
        <description>&lt;p&gt;I use CentOS for most of my development environments and I also use it in a number of production scenarios as well.  Where I don&#39;t use it I am most likely running something else RHEL based, like Amazon Linux over on AWS.  All of these distributions use an older version of the ICU library, 4.2 to be specific. Symfony has a component called ICU, which has a check for 4.4 or greater.  In my situation I don&#39;t need ICU, I just need composer to install it so I can move on with development. Running composer.phar install on the &lt;a href=&#34;https://github.com/symfony/symfony-standard&#34;&gt;symfony-standard&lt;/a&gt; caused me problems with lib-ICU compatibility.  &lt;em&gt;So what to do?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Well, &lt;a href=&#34;https://github.com/symfony/symfony/pull/7386&#34;&gt;this Pull Request&lt;/a&gt; provided me with a lot of helpful information in figuring out what to do.  The solution I went with was to change my composer.json and added this to it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;symfony/icu&amp;quot;: &amp;quot;1.0.*@dev&amp;quot;,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This will use an older version of the ICU library that doesn&#39;t necessitate an updated lib-ICU.  It&#39;s less then ideal, but it&#39;ll get composer.phar to install the standard edition packages so you can get to work.&lt;/p&gt;
</description>
        <pubDate>Fri, 24 May 2013 09:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/05/24/symfonyicu-and-centos/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/05/24/symfonyicu-and-centos/</guid>
        
      </item>
    
      <item>
        <title>s3cmd and GovCloud</title>
        <description>&lt;p&gt;If you&#39;re using &lt;a href=&#34;http://s3tools.org/&#34;&gt;&lt;em&gt;s3cmd&lt;/em&gt;&lt;/a&gt; to put files into an s3 bucket and need to do so into &lt;a href=&#34;http://aws.amazon.com/govcloud-us/&#34;&gt;GovCloud&lt;/a&gt; you can, but you need to override the end point URL&#39;s used for s3.  I had a hard time finding documentation for this, so hopefully this saves someone sometime in the future.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;s3cmd&lt;/em&gt; writes a configuration file, likely at ~/.s3cfg and in it are two options that you are not prompted for when going through the setup process, but are relevant when connecting to GovCloud.  Specifically &#39;host_base&#39; and &#39;host_bucket&#39; need to be changed from the default s3 end points, they need to be set like so:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;host_base = s3-us-gov-west-1.amazonaws.com&lt;br&gt;
host_bucket = %(bucket)s.s3-us-gov-west-1.amazonaws.com&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once these are set your GovCloud access key and secret should work.&lt;/p&gt;
</description>
        <pubDate>Thu, 23 May 2013 09:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/05/23/s3cmd-and-govcloud/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/05/23/s3cmd-and-govcloud/</guid>
        
      </item>
    
      <item>
        <title>The Demise of Posterous</title>
        <description>&lt;p&gt;I have written elsewhere about my frustrations over the demise of Posterous. It&#39;s now three days away and I have received yet another email reminding me to get my content off their site. Fortunately this time Posterous has a plan and a tool to enable its users to vacate its system. The whole mess bums me out thought. While not a prolific blogger, I really enjoyed the service and found their original model of email-to-blog profoundly simple and elegant. The problem is Posterous was a service without a plan or stream of income.&lt;/p&gt;
&lt;p&gt;As a developer you can build cool stuff, but without a way to pay for the commodities needed to run it you wind up operating at someone else&#39;s mercy. So when they get tired of their failed investment they either shut you down or sell you off, throwing the entire product you&#39;ve been working on up in the air. In the case of Posterous, Twitter wanted awesome development talent. I get that. Having functioned on the hiring side of software development I can tell you inconclusively it is tough to find top notch developers. So it makes sense to me that rather than search for them Twitter would just buy them.&lt;/p&gt;
&lt;p&gt;Unfortunately the fiscal irresponsibility of Posterous has left it&#39;s users in a lurch. I don&#39;t blame their CEO for selling, I blame him for starting the product in the first place. If I were him, making no money on my product, I would sell too. Why not? Better to sell then to fizzle away into irrelevance. People have to start thinking about this when they start a tech company. They need to develop with a business plan, not hope that one catches up to them later. Have a great idea for a start up? Awesome! Please don&#39;t build it until you can pay for it or at the very least know how you are going to pay for it.&lt;/p&gt;
&lt;p&gt;The worst part of a closure like this is that it breeds distrust. What services can I put my information on without worrying about them closing up? Will said service hold my data hostage from me when they do shutdown? And what obligations does a company like Posterous have to my privacy once they have closed the door. These questions only cause me to hold my breath every time a new service pops up. Yeah, it may look cool - but is it worth the risk as a user? What this in turn does is hurt the legitimate business that has an awesome idea and a business plan. That to me is just sad.&lt;/p&gt;
</description>
        <pubDate>Sat, 27 Apr 2013 14:47:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/04/27/the-demise-of-posterous/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/04/27/the-demise-of-posterous/</guid>
        
      </item>
    
      <item>
        <title>jGrowl on cdnjs</title>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/stanlemon/jGrowl&#34;&gt;jGrowl&lt;/a&gt; is officially on &lt;a href=&#34;http://cdnjs.com&#34;&gt;cdnjs&lt;/a&gt;.  This means that if you want to use &lt;a href=&#34;https://github.com/stanlemon/jGrowl&#34;&gt;jGrowl&lt;/a&gt; you don&#39;t even have to download it anymore.  Simply add this code to your page and get started:&lt;/p&gt;
&lt;p&gt;https://gist.github.com/stanlemon/5382662&lt;/p&gt;
&lt;p&gt;Looking for a full-fledged example, checkout:&lt;/p&gt;
&lt;p&gt;https://gist.github.com/stanlemon/5382659&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://jsbin.com/iqipox/1/edit&#34;&gt;&lt;strong&gt;Or click here to try it out on JS Bin right now!&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Many thanks to the good folk at &lt;a href=&#34;https://www.cloudflare.com&#34;&gt;CloudFare&lt;/a&gt; for &lt;a href=&#34;http://cdnjs.com&#34;&gt;cdnjs&lt;/a&gt;!&lt;/p&gt;
</description>
        <pubDate>Sun, 14 Apr 2013 13:08:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/04/14/jgrowl-on-cdnjs/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/04/14/jgrowl-on-cdnjs/</guid>
        
      </item>
    
      <item>
        <title>jGrowl 1.2.12 and cdnjs PR</title>
        <description>&lt;p&gt;As promised, with 100+ stargazers on GitHub &lt;a href=&#34;https://github.com/cdnjs/cdnjs/pull/1167&#34;&gt;I&#39;ve submitted a pull request&lt;/a&gt; to &lt;a href=&#34;http://cdnjs.com&#34;&gt;cdnjs&lt;/a&gt; from &lt;a href=&#34;https://www.cloudflare.com&#34;&gt;CloudFare&lt;/a&gt; for &lt;a href=&#34;http://github.com/stanlemon/jGrowl&#34;&gt;jGrowl&lt;/a&gt;. Before doing so I made a minor release update to jGrowl. There are no functional changes in 1.2.12, however I did improve the README to include documentation on the various configuration options and I also added a compressed version of the library with a source map.  If you don&#39;t know what a source map is &lt;a href=&#34;https://www.google.com/search?q=javascript+source+map&#34;&gt;I suggest you google it&lt;/a&gt;, because they&#39;re pretty awesome.&lt;/p&gt;
</description>
        <pubDate>Fri, 12 Apr 2013 20:21:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/04/12/jgrowl-1-2-12-and-cdnjs-pr/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/04/12/jgrowl-1-2-12-and-cdnjs-pr/</guid>
        
      </item>
    
      <item>
        <title>jGrowl in Chrome Extension</title>
        <description>&lt;p&gt;The other day someone on StackOverflow asked how to integrate &lt;a href=&#34;http://github.com/stanlemon/jGrowl&#34;&gt;jGrowl&lt;/a&gt; into a Chrome extension.  They had a pretty good start, but missed some important details.  I&#39;ve uploaded a complete working Chrome extension with jGrowl to Github as part of my response to the question.&lt;/p&gt;
&lt;p&gt;The question can be found here: &lt;a href=&#34;http://stackoverflow.com/questions/15870797/jgrowl-issue-in-chrome-extension&#34;&gt;http://stackoverflow.com/questions/15870797/jgrowl-issue-in-chrome-extension&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The GitHub repository with the example implementation can be found here: &lt;a href=&#34;https://github.com/stanlemon/jgrowl-chrome-ext&#34;&gt;https://github.com/stanlemon/jgrowl-chrome-ext&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 12 Apr 2013 09:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/04/12/jgrowl-in-chrome-extension/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/04/12/jgrowl-in-chrome-extension/</guid>
        
      </item>
    
      <item>
        <title>What is it that I do?</title>
        <description>&lt;p&gt;I get asked a lot what I do for a living.  I&#39;ve responded in a variety ways, &amp;quot;I&#39;m a developer&amp;quot;, &amp;quot;I&#39;m a software engineer&amp;quot;, &amp;quot;I write web applications&amp;quot;, &amp;quot;I&#39;m an application architect&amp;quot;, etc. Usually people respond by smiling, nodding their head and then professing that they have no idea what that means but they figure it&#39;s important.  The truth is I&#39;m not just a &amp;quot;developer&amp;quot; or an &amp;quot;architect&amp;quot;.  I do deal with a fair amount of architectural things, design related things and a myriad of operational things too.  Tonight I realized one way in which I can illustrate what it is I do...  Think of when you buy a new computer.  You invest a lot of time in setting that new computer up.  You transfer files from your old computer, you setup your email, install software, configure your software, etc. My job is to do all of those steps you take to setup your computer and do it in one step, the push of a button. So I spend part of my day trying to figure out how to setup the systems that your favorite web software runs on in a single step.&lt;/p&gt;
</description>
        <pubDate>Fri, 05 Apr 2013 01:52:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/04/04/what-is-it-that-i-do/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/04/04/what-is-it-that-i-do/</guid>
        
      </item>
    
      <item>
        <title>Stargazing jGrowl</title>
        <description>&lt;p&gt;I get a fair number of emails about jGrowl each week. Two common requests are 1.) Can you include a compressed version? 2.) Do you have a CDN?&lt;/p&gt;
&lt;p&gt;I used to ship a compressed version, but quite honestly I always forgot to update it so I wound up removing it. Plus, it never seemed like I was using the right one, as I was always getting suggestions to try a different compression process. Nonetheless I am willing to give this another shot, but with a specific purpose...&lt;/p&gt;
&lt;p&gt;CloudFare has their &lt;a href=&#34;cdnjs.com&#34;&gt;cdnjs.com&lt;/a&gt; site which is an awesome contribution to the community for providing a CDN for all of the other JavaScript libraries you want to use. CloudFare&#39;s cited criteria for putting a library up is 100 stargazers on github. So if you are reading this and either like, use or just admire jGrowl do me a favor and go star it over on github. If we reach 100 stargazers I&#39;ll submit a request to cdnjs.com and see if we can&#39;t get a compressed version of the library up on a CDN.&lt;/p&gt;
</description>
        <pubDate>Tue, 26 Mar 2013 11:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/26/stargazing-jgrowl/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/26/stargazing-jgrowl/</guid>
        
      </item>
    
      <item>
        <title>Premature Jesus</title>
        <description>&lt;p&gt;Normally on March 25th the church celebrates the Annunciation, when Mary is told that she will conceive and carry the Son of God in her womb. Typically this falls during Lent, which at first glance can seem odd, but then we remember a baby normally bakes for nine months, and nine months from now is Christmas... Well then it all adds up. Here&#39;s the thing though... This year Jesus is going to be premature when Christmas comes around. He&#39;s gonna bake about two weeks less this year because March 25th falls in the Monday of Holy Week. I&#39;m told this would normally transfer the festival to after Holy Week, because nothing trumps Holy Week. But then there is the Octave of Easter and you can&#39;t do the Sunday after Easter because Sundays during the seasons of Easter are privileged. So the Monday one week after Easter becomes the day we celebrate the Annunciation. That&#39;s April 8th, the Monday of Quasimodo Geniti if you weren&#39;t tracking yet.&lt;/p&gt;
&lt;p&gt;I&#39;ve been trying to think of how to adjust the algorithm on &lt;a href=&#34;http://sanctus.org&#34;&gt;Sanctus.org&lt;/a&gt; to make this happen and quite frankly I think I&#39;m going to take a Mulligan. Transferring a festival one day, I can handle, but transferring it two weeks and across a month presents some challenges. Nonetheless, in full disclosure I wanted to make it known that if you&#39;re looking around for the Annunciation you won&#39;t find it on Sanctus.org this year. Never fear though, &lt;a href=&#34;http://higherthings.org&#34;&gt;Higher Things&lt;/a&gt; has you covered with &lt;a href=&#34;http://higherthings.org/reflections/lent2013/2013-03-25&#34;&gt;an awesome Reflection for the Annunciation&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 25 Mar 2013 11:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/25/premature-jesus/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/25/premature-jesus/</guid>
        
      </item>
    
      <item>
        <title>Percona, MySQL and Puppet</title>
        <description>&lt;p&gt;MySQL is one of the most widely used database servers for web development.  It&#39;s &lt;em&gt;free&lt;/em&gt;, has a wide range of support and is easy to get up and going.  Add to this native bindings in just about every language and you&#39;ve got a pretty powerful databasing tool at your hands.  &lt;a href=&#34;http://www.percona.com&#34;&gt;Percona&lt;/a&gt; is a MySQL consulting company with a super-awesome distribution of MySQL tuned for performance. For the most part Percona packages should be a drop-in replacement with MySQL. When it comes to system administration tasks I like to throw &lt;a href=&#34;https://puppetlabs.com&#34;&gt;Puppet&lt;/a&gt; at the problem, it makes it easier to replay the configuration down the road and I can track the configuration changes in git. But there&#39;s a problem when you change the package name for the defacto-standard &lt;a href=&#34;https://github.com/puppetlabs/puppetlabs-mysql&#34;&gt;Puppet MySQL module&lt;/a&gt;.  The referencing of the service and the default pid file in the Percona distribution and subsequently the reload following install fails, as well as anything downstream of those items. This was unsatisfactory to me so I poked around to figure out a way to make this work, &lt;a href=&#34;http://projects.puppetlabs.com/issues/19562&#34;&gt;despite the bug in module&lt;/a&gt;. Below is a Puppet manifest with some hackey&#39;ness if you&#39;re using Percona that will get it working and allow you to use the rest of the Puppet MySQL module without problems.&lt;/p&gt;
&lt;p&gt;https://gist.github.com/stanlemon/5178407&lt;/p&gt;
</description>
        <pubDate>Sun, 24 Mar 2013 10:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/24/percona-mysql-and-puppet/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/24/percona-mysql-and-puppet/</guid>
        
      </item>
    
      <item>
        <title>MySQL Strict Mode on OS X</title>
        <description>&lt;p&gt;If you are a web developer on OS X you probably are sporting your own installation of your database server.  If you are running MySQL you might be haunted by strict mode.  MySQL has modes &lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html&#34;&gt;as documented here&lt;/a&gt; that effect the behavior of various parts of the system.  In strict mode values do not get casted between types, which is where I ran into issues.  My favorite ORM was passing a boolean &lt;em&gt;true&lt;/em&gt; into a &lt;em&gt;tinyint(1)&lt;/em&gt; and causing the transaction to abort.  This is thanks to &lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_strict_trans_tables&#34;&gt;STRICT_TRANS_TABLES&lt;/a&gt; in my case.  The first thing I checked was my &lt;em&gt;/etc/my.cnf&lt;/em&gt; to see if &amp;quot;sql_mode&amp;quot; was set in the [mysqld] section.  It was not.  So I tried setting it to something other than &lt;em&gt;STRICT_TRANS_TABLES&lt;/em&gt; and restarted MySQL.  No luck, the setting was still on.  After a lot of poking around I found out that MySQL for OS X from Oracle ships with a &lt;em&gt;/usr/local/mysql/my.cnf&lt;/em&gt; which is loaded on startup. In this file is a sole configuration directive for &lt;em&gt;sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES.&lt;/em&gt;  Once I commented this out and restarted the server strict mode was off, my ORM worked and I was happy.&lt;/p&gt;
</description>
        <pubDate>Sat, 23 Mar 2013 10:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/23/mysql-strict-mode-on-os-x/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/23/mysql-strict-mode-on-os-x/</guid>
        
      </item>
    
      <item>
        <title>Composer on OpenShift</title>
        <description>&lt;p&gt;Yesterday I talked about running &lt;a href=&#34;http://getcomposer.org&#34;&gt;composer&lt;/a&gt; on Amazon&#39;s Elastic Beanstalk.  There it is builtin and works out of the box for you.  If you are on &lt;a href=&#34;http://openshift.com&#34;&gt;OpenShift&lt;/a&gt; (my preferred PaaS) composer does not come out of the box.  &lt;a href=&#34;http://www.mwop.net&#34;&gt;Matthew Weier O&#39;Phinney&lt;/a&gt; has posted an article on the steps he took to get composer installing his project&#39;s dependencies, and that&#39;s definitely a worthy read.  However, my deployment hook for OpenShift is a little bit different and I wanted to share that.&lt;/p&gt;
&lt;p&gt;There were two things I wanted to accomplish.  First, I did not want &lt;em&gt;composer.phar&lt;/em&gt; in source control.  Second, I wanted to take advantage of composer&#39;s ability to cache dependencies to speedup my deployment process up.  So here is what I use in my &lt;em&gt;./.openshift/action_hooks/deploy&lt;/em&gt; script:&lt;/p&gt;
&lt;p&gt;https://gist.github.com/stanlemon/5177925&lt;/p&gt;
&lt;p&gt;&lt;em&gt;As a bonus here&#39;s a tip about markers... OpenShift will restart Apache and Zend Server with every deployment. You may not want or need to do this. If you don&#39;t, simply touch a file to ./.openshift/markers/hot_deply and then next time you push your changes up OpenShift will leave all those services running when it deploys.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 22 Mar 2013 10:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/22/composer-on-openshift/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/22/composer-on-openshift/</guid>
        
      </item>
    
      <item>
        <title>Composer on Elastic Beanstalk</title>
        <description>&lt;p&gt;&lt;a href=&#34;http://aws.amazon.com/elasticbeanstalk/&#34;&gt;Amazon&#39;s Elastic Beanstalk&lt;/a&gt; is another git-driven deployment service, this time directly to EC2 and RDS instances on Amazon Web Services.  It&#39;s similar to what Red Hat is doing with OpenShift conceptually.&lt;/p&gt;
&lt;p&gt;If you are a PHP developer like myself your first question is probably, will it install my &lt;a href=&#34;http://getcomposer.org&#34;&gt;composer dependencies&lt;/a&gt; for me?  The answer is &lt;strong&gt;YES&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Here&#39;s the kicker, and quite frankly this does not make any sense to me...  If you have stubbed your &lt;em&gt;vendor&lt;/em&gt; folder in place, so you&#39;ve either touched &lt;em&gt;./vendor/empty&lt;/em&gt; or &lt;em&gt;./vendor/.gitkeep&lt;/em&gt;, you are going to have to removed it.  Elastic Beanstalk will use composer based upon the presence of a &lt;em&gt;composer.json&lt;/em&gt; or &lt;em&gt;composer.lock&lt;/em&gt; file, but if it sees the &lt;em&gt;vendor&lt;/em&gt; folder it bails out and doesn&#39;t execute the install command. Again, I really don&#39;t know why this is and I could not find any documentation about it.  Yet this exactly what I needed to do to get my dependencies installed.&lt;/p&gt;
</description>
        <pubDate>Thu, 21 Mar 2013 10:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/21/composer-on-elastic-beanstalk/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/21/composer-on-elastic-beanstalk/</guid>
        
      </item>
    
      <item>
        <title>Naked Domain Workaround</title>
        <description>&lt;p&gt;I&#39;ve become a pretty big fan of Red Hat&#39;s &lt;a href=&#34;http://openshift.com&#34;&gt;OpenShift&lt;/a&gt; platform.  I &lt;strong&gt;love&lt;/strong&gt; the idea of doing deployments based off of DVCS operations. Almost two years ago when I was working for Wizzard Software we came up with a deployment process not to far off from this concept.  We were a Mercurial based team so the DVCS system was different, but we basically issuing pull&#39;s from repositories on the effected systems and out rolled new software that way.  OpenShift is a whole lot better then that though, because it&#39;s push triggered and deploys to the cloud and Red Hat has a bunch of awesome hooks tied in to make it even more powerful.  Did I mention it&#39;s &lt;em&gt;FREE&lt;/em&gt;?  Yes, free hosting driven by git in the cloud - it doesn&#39;t get much better then this!&lt;/p&gt;
&lt;p&gt;But what happens if you want to add a custom domain name to &lt;a href=&#34;http://openshift.com&#34;&gt;OpenShift&lt;/a&gt;?  In order to do this you have to do two things, first add the appropriate aliases to your &lt;a href=&#34;http://openshift.com&#34;&gt;OpenShift&lt;/a&gt; application, &lt;a href=&#34;https://openshift.redhat.com/community/blogs/custom-url-names-for-your-paas-applications-host-forwarding-and-cnames-the-openshift-way&#34;&gt;see here for more information&lt;/a&gt;. Second is to edit your DNS records and add CNAME records to point to the OpenShift subdomain for your application.  As with many things in the cloud, IP addresses are ever-changing so you cannot count on them when setting up your domain.  If you&#39;re lucky enough to have &lt;a href=&#34;http://namecheap.com&#34;&gt;NameCheap&lt;/a&gt; as your registrar this isn&#39;t a problem, because they let you add a CNAME record as your apex (not sure how they do this, but just go with it... it works!). If you are on &lt;a href=&#34;http://godaddy.com&#34;&gt;GoDaddy&lt;/a&gt; or a similar DNS service (like &lt;a href=&#34;http://aws.amazon.com/route53/&#34;&gt;Route 53&lt;/a&gt;) you aren&#39;t so lucky.&lt;/p&gt;
&lt;p&gt;Fortunately, Satoru systems has a naked domain redirect service &lt;em&gt;over at &lt;a href=&#34;http://wwwizer.com&#34;&gt;wwwizer&lt;/a&gt;&lt;/em&gt; that fills this need.  They basically give you an IP address to use for your A record and their system automatically redirects it to &amp;quot;www.domain.com&amp;quot; where &amp;quot;domain.com&amp;quot; is the apex entry. It&#39;s dead simple to use. Best of all, this too is &lt;em&gt;FREE&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;As with all cloud systems, you never know how long you can get these services before they are bought out, shutdown or just run out of money, so don&#39;t use them with mission critical systems. But if you&#39;re a hobbyist or have a pet-project this is a great way to get it out on the web without incurring a lot of costs.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://wwwizer.com/naked-domain-redirect&#34;&gt;Check out wwwizer&#39;s naked domain redirect service.&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 19 Mar 2013 10:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/19/naked-domain-workaround/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/19/naked-domain-workaround/</guid>
        
      </item>
    
      <item>
        <title>Mailbox &amp; Dropbox Sitting in a Tree</title>
        <description>&lt;p&gt;&lt;a href=&#34;http://www.mailboxapp.com&#34;&gt;Mailbox&lt;/a&gt; has garnered a lot of attention since it rolled out.  My concern from day 1, as has been with many a similar service, is how is it being paid for?  These startup services rollout free with no plan in place to make money.  Some of these startups are gunning to be bought out or &amp;quot;&lt;em&gt;funded&lt;/em&gt;&amp;quot; by venture capitalists, and others are hoping for bright lights and a revelation on high to show them the secret to success (here&#39;s looking at you Twitter).  The truth is they lack a plan to become financially solvent and while cloud computing is cheaper then the alternative, it&#39;s still expensive.  It&#39;s no wonder then that these startups belly-up or disappear into the annals of the world wide web. I&#39;ve been particularly upset about two as of late, &lt;a href=&#34;http://blog.posterous.com/thanks-from-posterous&#34;&gt;Posterous&lt;/a&gt; a year ago and more recently &lt;a href=&#34;http://www.sparrowmailapp.com&#34;&gt;Sparrow&lt;/a&gt;. In both of these cases the buyouts were about grabbing talent and had nothing to do with building the product.  In the end the consumers got screwed by dreams too big to pay be paid for.&lt;/p&gt;
&lt;p&gt;So I can&#39;t help but wonder what will happen with &lt;a href=&#34;http://www.mailboxapp.com&#34;&gt;Mailbox&lt;/a&gt;.  An announcement was just recently made that cloud-sync kingpin &lt;a href=&#34;https://blog.dropbox.com/2013/03/welcome-mailbox/&#34;&gt;Dropbox has bought them&lt;/a&gt;. I should disclose that I do have a Mailbox account and that I have not completely bought into their way of doing Email just yet.  I&#39;m not trying to knock it, it&#39;s just a dramatic change from the way I&#39;ve managed my inbox and I am still adjusting.  I&#39;m giving it a shot though.  &lt;a href=&#34;http://db.tt/eLppmBW&#34;&gt;I should also disclose that I am huge fan of Dropbox.&lt;/a&gt;  Nonetheless I can&#39;t help but wonder what Dropbox&#39;s purpose is in buying Mailbox.  To the best of my knowledge there is no income stream for Mailbox, only what I am speculating is an ever-growing &lt;a href=&#34;http://aws.amazon.com/ec2&#34;&gt;EC2&lt;/a&gt; bill.  The product models are completely different too.  So is it a talent grab?  It doesn&#39;t seem so, at least Dropbox&#39;s post does not give that indication.  Nonetheless I am skeptical...&lt;/p&gt;
&lt;p&gt;I wouldn&#39;t count on Mailbox being eternally available. I hope I&#39;m wrong, but I feel like we&#39;ve learned all too recently &lt;a href=&#34;http://www.usatoday.com/story/tech/personal/2013/03/13/google-reader-shutdown/1986337/&#34;&gt;not to depend on free cloud services&lt;/a&gt; for the kitchen sink.  Our data needs to be portable and we as consumers need to be startup-proof.  That means go ahead and use a service like Posterous, but make sure you can walk away from it when they shut it down.  And if they don&#39;t offer data portability, don&#39;t sign up.  With services like Mailbox that augment the way you do things, just make sure you can still function when they are gone.  In short:  &lt;em&gt;D__on&#39;t put all your eggs in one basket, be startup-proof&lt;/em&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 18 Mar 2013 10:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/18/mailbox-dropbox-sitting-in-a-tree/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/18/mailbox-dropbox-sitting-in-a-tree/</guid>
        
      </item>
    
      <item>
        <title>Thoughts on Google&#39;s Spring Cleaning</title>
        <description>&lt;p&gt;&lt;a href=&#34;http://googleblog.blogspot.com/2013/03/a-second-spring-of-cleaning.html&#34;&gt;Google announced its latest round of spring cleaning.&lt;/a&gt;  The most troubling part of the news announcement is the loss of Google Reader.  I&#39;ve been using Reader since 2005 when it first started. I had tried a variety of one-off RSS readers prior to it and Google Reader was perfect for me because it was &amp;quot;&lt;em&gt;in the cloud&amp;quot;&lt;/em&gt; before that was even in-vogue. Fast forward eight years and I&#39;m still maintaining the same list of feeds, though now I consume it through native app clients on the Mac, iPhone and iPad. I haven&#39;t used the actual web site for it in a long time.&lt;/p&gt;
&lt;p&gt;A lot of people are worried about what will happen when Reader shuts it&#39;s doors. &lt;a href=&#34;https://www.change.org/petitions/google-keep-google-reader-running&#34;&gt;There is even a big online petition going to ask Google to keep the service.&lt;/a&gt; Some have predicted that this will be the end of RSS as we know. Quite frankly I&#39;m not too worried about losing Google Reader.  My list of feeds has thinned out over time as I&#39;ve begun using services like Twitter more.  Where I once subscribed to feeds for news and sports I am now following various outlets on twitter. Most of my friends who still blog tweet when they post to, and quite often I am clicking over to an article because I saw it on a tweet first. That being said RSS still has it&#39;s place in my mind. Not everyone does the twitter thing and they shouldn&#39;t have to. The best part of RSS is still that it&#39;s an open and parsable standard.  It&#39;s friend OPML is great and also pretty portable.  These are two things Twitter won&#39;t give you.&lt;/p&gt;
&lt;p&gt;So what am I going to do?  Mostly wait.  I&#39;ve been using &lt;a href=&#34;http://reederapp.com&#34;&gt;Reeder&lt;/a&gt; for consuming Google Reader data for a long time now and the developer of that fantastic app says &lt;a href=&#34;https://twitter.com/reederapp/status/311995748482945025&#34;&gt;it&#39;s not going away just because Google Reader is&lt;/a&gt;.  This gives me hope that Marco Arment might be right and that this is an &lt;a href=&#34;http://www.marco.org/2013/03/13/google-reader-sunset&#34;&gt;opportunity for guys to build new replacement service&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sun, 17 Mar 2013 11:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/17/thoughts-on-googles-spring-cleaning/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/17/thoughts-on-googles-spring-cleaning/</guid>
        
      </item>
    
      <item>
        <title>jGrowl 1.2.11</title>
        <description>&lt;p&gt;I released a small updated to jGrowl today that fixes an issue when triggering the shutdown method (thank you &lt;a href=&#34;https://github.com/jupereira0920&#34;&gt;Joana&lt;/a&gt; for reporting it!), basically the multi-notification closer would be left behind (though not visible) and remain in limbo. The fix cleans out all nodes in the container emptying it completely out upon shutdown.  I&#39;ve also cleaned up text artifacts, space/tab discrepancies and extra space at the end of lines as well.&lt;/p&gt;
&lt;p&gt;If you hadn&#39;t noticed yet, jGrowl moved from BitBucket over to GitHub when jQuery rolled out their new plugin registry.  They&#39;ve got a pretty neat system for updating a plugin&#39;s page off of a manifest file in the git repository.  The move to GitHub has also been nice because it&#39;s resulted in several outside contributors issuing pull requests (thank you &lt;a href=&#34;https://github.com/serzhenko&#34;&gt;Dimitry&lt;/a&gt; and &lt;a href=&#34;https://github.com/ArtemGovorov&#34;&gt;Artem&lt;/a&gt;!). If you find a bug, please file it over at GitHub and always feel free to issue a pull request if you have an improvement, bug fix or feature request!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://plugins.jquery.com/jgrowl/&#34;&gt;Check out jGrowl on jQuery Plugin site.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/stanlemon/jGrowl&#34;&gt;Check out jGrowl on GitHub.&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 17 Mar 2013 00:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/16/jgrowl-1-2-11/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/16/jgrowl-1-2-11/</guid>
        
      </item>
    
      <item>
        <title>The New Sanctus.org</title>
        <description>&lt;p&gt;Today I released a new version of &lt;a href=&#34;http://sanctus.org&#34;&gt;Sanctus.org&lt;/a&gt;, my Lutheran lectionary calendar project. I started this project when I was in college at Concordia University, River Forest. I was studying theology and fascinated with liturgics and the church year. The project started with the purpose of assisting our dorm in planning our daily prayer services and quickly evolved into something bigger as other people gained interest in it as well. Today&#39;s release is the third time I have rewritten the site. Today&#39;s code is deployed on Red Hat&#39;s &lt;a href=&#34;http://openshift.com&#34;&gt;OpenShift&lt;/a&gt; platform and I am using &lt;a href=&#34;http://www.zend.com/en/products/server/&#34;&gt;Zend Server&lt;/a&gt;&#39;s page cache and data cache to keep things fast. The new layout utilizes Twitter&#39;s &lt;a href=&#34;http://twitter.github.com/bootstrap/&#34;&gt;Bootstrap&lt;/a&gt; library for a nice responsive design. Under the hood the actual calculation algorithm has been open sourced and can be found on &lt;a href=&#34;http://github.com/stanlemon/lectionary&#34;&gt;GitHub&lt;/a&gt;, the rest of the plumbing is &lt;a href=&#34;http://www.slimframework.com&#34;&gt;Slim&lt;/a&gt;, &lt;a href=&#34;http://doctrine-project.org/&#34;&gt;Doctrine&lt;/a&gt; and &lt;a href=&#34;http://twig.sensiolabs.org&#34;&gt;Twig&lt;/a&gt; respectively. I&#39;ve also restructured a good portion of the persistence layer to be more normalized and it runs on MySQL instead of SQLite too.  All in all I think it&#39;s a better piece of software then it was. I hope you enjoy the new look, faster response times and all around better experience of using &lt;a href=&#34;http://sanctus.org&#34;&gt;Sanctus.org&lt;/a&gt;.  &lt;a href=&#34;/contact&#34;&gt;Feel free to leave me some feedback on the redesign&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://revborghardt.wordpress.com&#34;&gt;&lt;em&gt;And as always... special thanks to Pastor Borghardt for donating the domain name sanctus.org!&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Mar 2013 01:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/15/the-new-sanctus-org/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/15/the-new-sanctus-org/</guid>
        
      </item>
    
      <item>
        <title>Fairwell BlogSCL</title>
        <description>&lt;p&gt;In the summer of 2004 I was a single college student with far too much free time on my hands. I had started writing web software in 2002 with my friend Erich Musick, now a super-star developer ninja at Microsoft.  At the time we were focussed on making plain old websites and solving the difficult challenges of managing content with consistent templates and automatic linking.  Life was easy back then.  Erich had this nifty news manager system written in Perl and he used it like a blog.  Meanwhile I was conquering server side includes while rigging together Apache on my Windows XP laptop.  Again, life was easy. Always striving to be unique I took a different path and started exploring PHP.  I had a singular goal of replicating Erich&#39;s new manager in my own special way.  What resulted was a rickety and clunky news management system that ran a pseudo-blog on my website into the summer of 2003.&lt;/p&gt;
&lt;p&gt;In the summer of 2003 my coding skills were getting better and I rewrote my news manager and it materialized as the first version of what I affectionately called BlogSCL.  Those letters, S-C-L, belong to me - they&#39;re my initials.  Blogging was new back then, there was no wordpress.com and blogger wasn&#39;t owned by Google, in fact it was some hackie CGI scripts you would upload to your own server and hope worked. I was determined to turn BlogSCL into something cool and so I rigged together a basic way for people to sign up.  After all, I had a shared hosting account on some ghetto-fabulous server costing me almost nothing and it has unlimited space on it.&lt;/p&gt;
&lt;p&gt;In early 2004 I became involved with an organization called Higher Things. It was a Lutheran Youth Organization and they had a website but it stunk.  They wanted something better and I was cheap, as in free. One of the things they wanted was a better way to manage news, so I introduced them to my super awesome BlogSCL platform. It worked and they were happy, but then some of the staff wanted their own blogs.  I began building out BlogSCL like crazy, adding comments, pingbacks, trackbacks, captcha, categories, pages and just about anything I could think of.  If I saw it on one of the up and coming blogging platforms I pulled it into mine.&lt;/p&gt;
&lt;p&gt;But the first version of BlogSCL was difficult to maintain and I had learned a lot, including how to write object oriented software.  I decided to rewrite it from the ground up and open up public signups. A half a bottle of tequila and a long night yielded the first working version of BlogSCL2, which served as the basis for the platform as I built it out over the next two years. Seven years later I am finally pulling the plug on the last of the BlogSCL blogs. I have just wrapped up migrating the Higher Things blogs to wordpress.com.    You might be wondering, why?  Well, it wasn&#39;t for the outstanding quality of wordpress code - that&#39;s for sure. There were a couple of reasons though, firstly I don&#39;t have the time to be spending developing a blogging platform when there are others out there being actively developed by large communities (yes, I&#39;m looking at you wordpress!).  Secondly, wordpress has a pretty simple format for exporting and importing and it was easy to write an exporter from BlogSCL to it.  Thirdly, while under the hood wordpress is nothing to gawk over it does have a robust UI, expansive plugin system, far reaching hosting service and an iOS app to boot.&lt;/p&gt;
&lt;p&gt;As a developer I constantly want to write my own stuff.  Not necessarily because I think I can do better (though I can), but because I enjoy the challenge.  Getting BlogSCL to the point it as was a challenge and it forced me to learn how to become a better developer.  I&#39;m very grateful for the learning exercise and also happy that it was able to get used by Higher Things as long as it did.&lt;/p&gt;
</description>
        <pubDate>Fri, 15 Mar 2013 01:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/14/fairwell-blogscl/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/14/fairwell-blogscl/</guid>
        
      </item>
    
      <item>
        <title>Welcome to GovCloud</title>
        <description>&lt;p&gt;Amazon Web Services is like the godfather of cloud computing.  In PCI or HIPPA/HI-TECH compliant environments though it doesn&#39;t quite cut it.  There are a bunch of fancy letters indicating various certifications that seal the compliance deal for those looking to provide services in the cloud under those regulations.  Fortunately Amazon developed the GovCloud as a compliant region to meet those needs.  GovCloud requires special approval from Amazon to get started with it.  I&#39;ve been &amp;quot;tinkering&amp;quot; around with GovCloud for a little while now and have come across some &lt;em&gt;gotchas&lt;/em&gt; that I wanted to document and share, if for no other reason then to save the next poor soul from all that googling around...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Web Interface&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If it&#39;s not clear from the website, don&#39;t be surprised: &lt;strong&gt;GovCloud does not have a web interface to it.&lt;/strong&gt;  All of the fancy tools that us EC2-lovers have grown accustomed to in the East and West regions are out of luck.  In GovCloud you have to use either the command line tools (all umpteen trillion of them) or you have to use a tool called &lt;a href=&#34;http://www.elasticwolf.com&#34;&gt;ElasticWolf&lt;/a&gt;. ElasticWolfe is a decent tool, when it works... and that right there is the problem with it.  I&#39;ve filed three tickets as of the writing of this post, and while turn around has been fast, I don&#39;t feel like I can trust it to do what I need, whenever I need it.  So get comfortable with the command line, as that&#39;s your primary place of operation in the GovCloud.  Don&#39;t worry though... it&#39;s only intimidating at first, you&#39;ll get used to it!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. White Listed Load Balancing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This was not disclosed to me upfront, but apparently the Elastic Load Balancing service has some sort of separate white list you need to be on when joining GovCloud.  Quite honestly this doesn&#39;t make sense, but nonetheless I found myself with everything working except the Elastic Load Balancer and when I finally appealed to my GovCloud sales rep, she directed me to a nice (and hardly responsive) technician who told me I needed to be white listed. Rumor is he took care of white listing my account, and while I now have an Elastic Load Balancer up and working in the GovCloud I am still waiting to hear from my Support Technician at Amazon. So if you want to use an ELB in GovCloud save yourself the time and trouble and pre-empt the white listing by telling your sales rep up front.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Elastic Beanstalk&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is a great service that basically powers the automation of a full AWS deployment using git.  It&#39;s akin to services like OpenShift from Redhat but with an order of magnitude more power by virtue of the plumbing underneath.  I was stoked when Beanstalk came out because it gave me a standard PHP AMI with RDS, an ELB  and an AS/CW configuration right out of the box.  I had dreams of spinning my service up with &lt;em&gt;git push&lt;/em&gt; and then walking away to enjoy a cold beverage of some sort.  Not on GovCloud though.  Despite having ALL of the services that make up the underpinning of Beanstalk, the tools for Beanstalk themselves are not actually configured for the GovCloud region.  This isn&#39;t spelled out anywhere clearly and the Beanstalk website is sort of misleading when it describes the service as a management wrapper around existing services.  It seems that there is some dedicated plumbing in there too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Endpoint URLs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most of the command line tools that Amazon ships are not configured to run with GovCloud out of the box.  You have to change the endpoint URLs for them in order to make magic happen.  Unfortunately try as I might I couldn&#39;t find all of the necessary environment variables that needed changing documented anywhere.  The endpoint URL&#39;s can be found &lt;a href=&#34;http://docs.aws.amazon.com/general/latest/gr/rande.html#govcloud_region&#34;&gt;here&lt;/a&gt;.  But what variables should you set?  I am not sure I have discovered all of them just yet, but here are the ones I have found and have been using:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;export EC2_URL=&amp;quot;https://ec2.us-gov-west-1.amazonaws.com&amp;quot;   export AWS_IAM_URL=&amp;quot;https://iam.us-gov.amazonaws.com&amp;quot;   export AWS_CLOUDWATCH_URL=&amp;quot;https://monitoring.us-gov-west-1.amazonaws.com&amp;quot;   export RDS_URL=&amp;quot;https://rds.us-gov-west-1.amazonaws.com&amp;quot;   export AWS_ELB_URL=&amp;quot;https://elasticloadbalancing.us-gov-west-1.amazonaws.com&amp;quot;   export AWS_AUTO_SCALING_URL=&amp;quot;https://autoscaling.us-gov-west-1.amazonaws.com&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What threw me for a loop was &amp;quot;EC2_URL&amp;quot; and then &amp;quot;AWS_ELB_URL&amp;quot; and then &amp;quot;RDS_URL&amp;quot; and then &amp;quot;AWS_CLOUDWATCH_URL&amp;quot;... what the rhyme and reason was for when &amp;quot;AWS_&amp;quot; was prefixed is beyond me, but knowing this inconsistency would have saved me some time and I hope it saves you some too!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hopefully there won&#39;t be any more surprises in GovCloud, but if they are expect a followup!&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 12 Mar 2013 02:00:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/11/welcome-to-govcloud/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/11/welcome-to-govcloud/</guid>
        
      </item>
    
      <item>
        <title>Goodbye Posterous</title>
        <description>&lt;p&gt;Unfortunately as I predicted when Posterous was bought, the product is dying. It&#39;s going to get shutdown soon and that leaves those of us who loved it searching for something instead. It&#39;s a bummer, but I don&#39;t blame Twitter. Rather, I blame the CEO of Posterous and its investors for creating a fantastic product with no way to make money on it. More and more this seems to be the story of Silicon Startups and it really kind of stinks. I find myself at this juncture wanting my next blog solution to be portable and Wordpress seems to fit that ticket. I&#39;m tired of hosting a blog, that&#39;s why I went to Posterous in the first place. The fact that Wordpress has a good mobile presence is also a win in my book. So I am going to give this a shot and see what happens.&lt;/p&gt;
</description>
        <pubDate>Mon, 11 Mar 2013 03:46:00 +0000</pubDate>
        <link>https://stanlemon.com/2013/03/10/goodbye-posterous/</link>
        <guid isPermaLink="true">https://stanlemon.com/2013/03/10/goodbye-posterous/</guid>
        
      </item>
    
  </channel>
</rss>
