<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Delusions of Grandeur</title>
    <description>The personal writing of Rob Rhyne, a developer, designer, and writer, on topics covering technology, cinema, music, and photography. Features original writing, design, photography, and music from Rob.</description>
    <link>http://rd2.io</link>
    
      
      <item>
        <title>Ants Bury their Dead</title>
        <description>&lt;h2 id=&quot;ants-bury-their-dead&quot;&gt;Ants Bury their Dead.&lt;/h2&gt;

&lt;p&gt;The lessons we learn from children. The boys got an ant farm for their birthday last year. The kind many of my friends had when I was a child. Clear plastic rectangle filled with sand, and holes on top for air to get in. I generally don’t care for nature—particularly insects—so I did my best to ignore the ant farm. &lt;/p&gt;

&lt;p&gt;Over the winter break, the boys made solariums, and became fascinated with plants, nature, and things which grow. In the Fall, I took my youngest son’s Cub Scout den on a nature walk around our neighborhood. The boys had a blast. I was not thrilled, but I’ve learned to adapt. &lt;/p&gt;

&lt;p&gt;Did you know you can have ants mailed to you? I didn’t until yesterday.&lt;/p&gt;

&lt;p&gt;They shipped in a clear plastic tube, that seems too small, packed with small carrots for them to eat during their journey. I can’t imagine being shipped through US Mail in a space that small. It struck me as inhumane as we opened the package. But they’re &lt;em&gt;ants&lt;/em&gt;. Insects.&lt;/p&gt;

&lt;p&gt;Insects that bite, it turns out. Yeah, there’s a warning on the package. Ants bite. My oldest stood a good distance away as the Architect opened the tube of ants, and dumped them onto the sand. As she did, I noticed a few of our ants didn’t survive their journey.&lt;/p&gt;

&lt;p&gt;My six year old noticed as well.&lt;/p&gt;

&lt;p&gt;It bothered him. The sorrow started with a tremble in his chin. Then his eyes become long, and he stood still, suddenly quiet. The tears soon came, followed by wails. &lt;/p&gt;

&lt;p&gt;There is a point in every parent’s life when they’re confronted with a harsh reality: &lt;em&gt;you can’t comfort them&lt;/em&gt;. He was inconsolable at the sight of death. All we could offer were hugs, and tissues. Thoughts, and prayers.&lt;/p&gt;

&lt;p&gt;Just as I was becoming emotional, the Architect graciously offered to lay down with him until he fell asleep. As I retreated back to the living room, I walked past the ant farm, and what I saw was extraordinary.&lt;/p&gt;

&lt;p&gt;The ants were burying their dead.&lt;/p&gt;

&lt;p&gt;I could hear the sobs of my son, muffled by his bedroom door. His mother would tell him, “the ants are with their friends.” And I watched the ants, as they methodically picked up their dead friends, and built a cemetery. &lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;When we lose our children, we lose their innocence—we lose their light. We cannot always comfort them, but we &lt;em&gt;must&lt;/em&gt; protect them. And until we learn this lesson from children, we’ll continue to bury our dead. &lt;/p&gt;

&lt;p&gt;Just like the ants. &lt;/p&gt;
</description>
        <pubDate>Thu, 15 Feb 2018 15:00:00 -0500</pubDate>
        <link>http://rd2.io/2018/02/ants-bury-their-dead/</link>
        <guid isPermaLink="true">http://rd2.io/2018/02/ants-bury-their-dead/</guid>
      </item>
      
    
      
      <item>
        <title>Background Thinking</title>
        <description>&lt;h2 id=&quot;background-thinking&quot;&gt;Background Thinking.&lt;/h2&gt;
&lt;p&gt;Last weekend I flew out to Vegas to meet my brother. During the trip I started reading &lt;em&gt;Leviathan Wakes&lt;/em&gt;, the first book in &lt;em&gt;The Expanse&lt;/em&gt; series by authors&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; James S.A. Corey. I’ve made no secret of my love for the show, and I’m reading the books hoping for more detail about the broader universe. &lt;/p&gt;

&lt;p&gt;One character, Josephus Miller, stands out as my favorite both in the show, and the books. For those who haven’t read the books or seen the show: Miller is a washed-up detective, divorced, and well past his prime. Certain parts of his character are cliche—e.g., &lt;em&gt;he’s an alcoholic&lt;/em&gt;—but what fascinates me is how he thinks. &lt;/p&gt;

&lt;p&gt;He’s a detective, so his brain is constantly mulling over a mystery. Corey describes his mind like a &lt;em&gt;computer&lt;/em&gt; spawning background threads. He observes crime scenes, then puts that train of thought on the back burner while attempting to solve a crime.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The &lt;em&gt;back burner&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;I’ve noticed many people use this metaphor to mean “forgotten”. But the pot on a back burner &lt;em&gt;continues to cook&lt;/em&gt;, you just aren’t paying attention to it. I’ve always used this phrase to mean “something I haven’t &lt;em&gt;finished&lt;/em&gt; thinking about.” The thought is there, without bothering concentration on primary tasks, but some part of me keeps churning. &lt;/p&gt;

&lt;p&gt;Hardly forgotten. &lt;/p&gt;

&lt;p&gt;At times, I feel incredibly slow to pick up on things. I watch others catch on to ideas much faster. Other times I wonder if anyone else in the room will ever catch up. Past managers have labeled me an “intuitive thinker”, but that never felt right.&lt;/p&gt;

&lt;p&gt;Anyone who knows me well, would confirm that I’m incredibly &lt;em&gt;un&lt;/em&gt;-intuitive. Nor am I quick witted—a trait common to intuitive thinkers. Given enough time, however, I can out think anyone. I believe this due to my ability to effectively put thoughts on the back burner, and continue to think about them, until something clicks. I’m always &lt;em&gt;thinking&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;I rely on my sub-conscious brain to churn through what I observe, and process everything into a cohesive picture. The shower, the dinner table, and the car are most often the places where an idea will surface that pulls everything together for me. At times I’ll gaze into the distance. Other times, I need a monotonous task which requires only a little attention. &lt;/p&gt;

&lt;p&gt;An early manager—&lt;em&gt;who really understands engineers&lt;/em&gt;—used to tell me I was a “burst worker”. That is, I would sit on a problem, and think it completely through. Then I’d open a text editor and dash out a solution in an afternoon. The process was neither slower, or faster, than my fellow engineers. But unless you observed an entire cycle, I would either appear a procrastinator, or a 10x engineer. &lt;/p&gt;

&lt;p&gt;I’ve always loved that manager&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;, because she taught me to stop feeling lazy when I was in the middle of a deep think. She helped me realize I couldn’t defy the laws of physics either, and solve a problem in hours. &lt;/p&gt;

&lt;p&gt;Years later, I’ve refined my understanding. My system works best when I keep things in front of me, with enough time to cogitate. I’m not reactive. I’m methodical, and aggravatingly&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; slow to reach a conclusion. &lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Back to Miller. His super-power isn’t the ability to put thoughts on the back burner. His real power is the ability to see patterns, and piece them into a cohesive picture from disconnected trains of thought. Like a great chess player, he sees the entire board. Understands that even the tiniest interaction is often a mask for something larger.&lt;/p&gt;

&lt;p&gt;Unfortunately for Miller, he &lt;em&gt;needs&lt;/em&gt; a big mystery. He’s lost without one. I often wonder if Miller’s untold fall-from-grace involve him manufacturing such a mystery.&lt;/p&gt;

&lt;p&gt;The background thinker needs a huge problem. Without one large enough, they cannot spawn the desired volume of individual thought processes to digest. Like Miller, I over think the mundane in search of the grandiose. Greater satisfaction follows the increased cognitive load. The more back burners, the better.&lt;/p&gt;

&lt;p&gt;Miller is an addict. I don’t believe you &lt;em&gt;become&lt;/em&gt; an addict—you are, or you aren’t. Exposure to the right vice surfaces this condition. I believe Miller was addicted to mysteries before he became addicted to drugs. &lt;/p&gt;

&lt;p&gt;Am I addicted to thinking? Probably not a discussion appropriate for a blog post. But I found it easy to associate with how Miller thinks…&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Not a typo. It’s a pen name for two different authors: Daniel Abraham and Ty Franck. Abraham originally wrote the chapters in the head of the Miller’s character.  &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;She knows who she is… if she’s reading. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;I married the exact opposite. Oh, she is methodical, but—goddamn—she’s a much faster thinker.  &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 30 May 2017 10:00:00 -0400</pubDate>
        <link>http://rd2.io/2017/05/background-thinking/</link>
        <guid isPermaLink="true">http://rd2.io/2017/05/background-thinking/</guid>
      </item>
      
    
      
      <item>
        <title>On Loss</title>
        <description>&lt;h2 id=&quot;on-loss&quot;&gt;On Loss.&lt;/h2&gt;
&lt;p&gt;On my way home from work, I was getting supplies to decorate the house in early December; The night before the Architect’s birthday. It took me about 30 minutes to find everything. Walking back to the car, I stumbled upon a violent scene. &lt;/p&gt;

&lt;p&gt;The front passenger window was smashed. Glass was scattered inside the car, and outside on the pavement. &lt;/p&gt;

&lt;p&gt;Some bastard broke into my car, and &lt;em&gt;stole my bag&lt;/em&gt;. &lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Car windows, computers, iPads, and headphones all share something in common: &lt;em&gt;they can be replaced&lt;/em&gt;. That’s undoubtedly what the thieves were after, but that’s not all they took. For years I’ve searched, bought, and tested every pen and bag I could find. What I carried that night were the best. My favorites. &lt;/p&gt;

&lt;p&gt;Yes, I can buy new pens, and packs of the same make and model. But this particular pen—&lt;em&gt;my favorite pen&lt;/em&gt;—and this particular pack had been lovingly used for years. They were one-of-a-kind. They were mine. &lt;/p&gt;

&lt;p&gt;My pack, a Goruck GR1 had traveled the world, and seen new places with me. The pen, a Retro 51 Tornado, had signed the legal documents forming MartianCraft. It had written untold numbers of articles, press releases, and love letters to my wife.  &lt;/p&gt;

&lt;p&gt;Both were companions. I could not replace the scars, dents, scratches, and other imperfections that fondly reminded me of our journey together. Now, I only have memories.&lt;/p&gt;

&lt;p&gt;It wasn’t the end of the world. I am sad to have lost them, but with their loss I gained an opportunity to start anew. Clean slates, which can provide new memories, and new adventures. &lt;/p&gt;

&lt;p&gt;I replaced each with something &lt;em&gt;slightly&lt;/em&gt; different. I traded my &lt;a href=&quot;http://amzn.to/2q4O7gZ&quot;&gt;Retro 51 Deluxe Stealth Tornado&lt;/a&gt; with a different style of the Tornado—the &lt;a href=&quot;http://amzn.to/2quj6UO&quot;&gt;Vintage Blacksmith Roosevelt&lt;/a&gt;. Instead of the standard &lt;a href=&quot;http://www.goruck.com/gr1-rucksack-black-/p/GEAR-000574&quot;&gt;black 21L GR1&lt;/a&gt;from Goruck, I purchased the &lt;a href=&quot;http://www.goruck.com/gr2-rucksack-coyote-brown-/p/GEAR-000865&quot;&gt;34L GR2 in Coyote&lt;/a&gt;. Each choice had a link to the prior, which was lost, but was different. &lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;After a painless conversation with my insurance company, my replacements were purchased and on their way. But the assholes also took my novel journal, a black small Moleskine&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; I purchased back in November. It contained random thoughts, and musings about the characters I was writing, including my notes from my first writing weekend. I would never get those thoughts back.&lt;/p&gt;

&lt;p&gt;As soon as I first grasped the Roosevelt, I was compelled to write something. I cracked open the brand new small Moleskine journal, and wrote this on the first page:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Is it better to dwell on what was lost, or focus on what is ahead?&lt;br /&gt;My last journal was stolen. This journal represents a rebirth.&lt;br /&gt;Not from ashes or fresh from the womb.&lt;br /&gt; 
I’m reborn with the knowledge of what came before.&lt;br /&gt;An iteration of an original. Sown in the knowledge of what came before.&lt;br /&gt;Bravely looking forward to what will change.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every other page of this journal will be filled with random plot ideas, and character explorations. I wanted the first page to recognize this particular journal as the second version—a reminder of what was lost.&lt;/p&gt;

&lt;p&gt;Like my pen and pack, I was starting fresh, but not from scratch. Every thought I wrote would be influenced by a prior thought, which I might or might not have written down in the old journal. &lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The Architect would confirm I can be quite melodramatic. However, my usual penchant for drama isn’t to blame this time. Two of my dear friends felt &lt;em&gt;actual&lt;/em&gt; loss in 2016, and I’m fretting over things which can be replaced.&lt;/p&gt;

&lt;p&gt;But what you might consider an over-reaction was actually catharsis. Well… &lt;em&gt;sort of&lt;/em&gt;. Relief not from my own emotions, but Mara’s&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. Her story is a common tale of discovering one’s identity, and I was stuck trying to place myself in the middle of her search for purpose. It’s one of the central themes in my novel.&lt;/p&gt;

&lt;p&gt;This might sound strange to some, but it doesn’t feel like I wrote those words in the journal. Rather my main character, Mara, &lt;em&gt;spoke&lt;/em&gt; them to me. At the time I wrote them, I was deep into character writing. I was thinking (and dreaming) in the voices of my characters. &lt;/p&gt;

&lt;p&gt;The burglary was a perfect vehicle to focus on Mara’s loss of innocence. When I sat down to write about my own loss, I found words for her moment instead. Below is a re-write that found its way into the first draft, &lt;em&gt;in her voice&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Is it better to dwell on what was lost, or focus on the path ahead?&lt;br /&gt;
My parents were stolen from me. I am a rebirth.&lt;br /&gt;
Not from ashes or from any Creator’s womb.&lt;br /&gt;I’m reborn with the knowledge of what came before.&lt;br /&gt;The iteration of an original, sown in the wisdom which proceeded me.&lt;br /&gt; 
I look forward, bravely, and accept what has to change.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a pivotal moment in the novel. One where Mara realizes she’s come of age, faced with choices and responsibilities. &lt;/p&gt;

&lt;p&gt;Months later, I barely remember writing the original passage, but it feels genuine. It &lt;em&gt;sounds&lt;/em&gt; like her. My loss was transferred, and in the process transformed into her loss. &lt;/p&gt;

&lt;p&gt;And that’s pretty cool. &lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://rd2.io/2016/11/writing-novel-finally/#fnref:4&quot;&gt;http://rd2.io/2016/11/writing-novel-finally/#fnref:4&lt;/a&gt; &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;It’s early and I’m still writing my first draft, so Mara’s name could change. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 11 May 2017 10:00:00 -0400</pubDate>
        <link>http://rd2.io/2017/05/on-loss/</link>
        <guid isPermaLink="true">http://rd2.io/2017/05/on-loss/</guid>
      </item>
      
    
      
      <item>
        <title>The Artist and the Technician</title>
        <description>&lt;h2 id=&quot;the-artist-and-the-technician&quot;&gt;The Artist and the Technician.&lt;/h2&gt;
&lt;p&gt;Sometime in late March, I got my groove back. It was in a room, surrounded by nerds a lot smarter than me. It was a reach. I wasn’t completely sure what I was doing there, but—&lt;em&gt;holy shit!&lt;/em&gt;—they listened. And then it happened. &lt;em&gt;I felt it.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;I was back, motherfuckers.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Was it burn out? Hard to say. I slept a lot in 2016. Felt like shit. Downtrodden, and worn. &lt;em&gt;Doesn’t matter&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;I don’t have any advice for people who are burning out. I can add little to the discussion that hasn’t been explained by smarter people. You hit bottom, then you keep falling. In the end, all you get is a story. Mine isn’t very interesting. &lt;/p&gt;

&lt;p&gt;Running MartianCraft was never an easy gig. In 2015 it became a lot harder. I wasn’t the only one at the helm. &lt;em&gt;I had help&lt;/em&gt;. Then we hit the point in the movie where the protagonist figures out how to save everyone, but there’s a cost; You can right the ship, and save your friends, but it’ll push you too far. You can’t come back. &lt;/p&gt;

&lt;p&gt;Was I done? Hardly. I took the lemons, and made lemonade. Again, &lt;em&gt;I had help&lt;/em&gt;. An awesome family, with more patience and understanding than I deserve. I have a badass job, that challenged me right from the beginning. &lt;/p&gt;

&lt;p&gt;But, I wasn’t ready for it. I was wounded, and incomplete. And I had to learn to be a technician again.&lt;/p&gt;

&lt;p&gt;In hindsight, this was the easy part. Like riding a bike. Stupidly, I thought I could be 100% working for someone else. I learned quickly why your best employees only give you 60%. It’s hard to go full bore when you don’t have all the information. &lt;/p&gt;

&lt;p&gt;A lot of start and stop, only this time I didn’t always know why. &lt;em&gt;How did I ever do this?&lt;/em&gt; Turns out, quite easily. Just needed some practice. So I dug in… and tried to remember how to run the debugger.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;After binge-watching Netflix for the first few months, I noticed a hole, which wanted to be filled. What do &lt;em&gt;normal&lt;/em&gt; people do in the evening&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;? &lt;/p&gt;

&lt;p&gt;I started writing more, started exercising regularly. Reading too—lots of novels, and keeping up on current events. And then in the Fall, I finally sat down to write my novel. There were a lot of fits and starts, but nothing stuck. I would stumble, and couldn’t maintain any momentum. &lt;/p&gt;

&lt;p&gt;I had lost my edge.&lt;/p&gt;

&lt;p&gt;At first, I didn’t take it seriously. I ignored it. I have a fulfilling job. I have a loving family, and I spend much more time with them now. On the outside, life was good, and I wore a smile. But on the inside, I was still dragging ass. Still worn, and still down.&lt;/p&gt;

&lt;p&gt;A job gives me purpose, but art gives me meaning.  &lt;/p&gt;

&lt;p&gt;I’m a builder, and I like to fix things. A problem solver. A &lt;strong&gt;technician&lt;/strong&gt;. But I was never &lt;em&gt;only&lt;/em&gt; a technician. I needed to put myself out there, throw caution to the wind, and risk rejection. &lt;/p&gt;

&lt;p&gt;Which brings us back to that conference room, filled with smarty pants. I’m not sure how much convincing I managed. The jury is still out. But I convinced myself of one thing: &lt;em&gt;I have plenty more to give&lt;/em&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;April was a month filled with art. I tried things and experimented, with a confidence I haven’t felt in a long time. I explored some new, and rediscovered some old. It’s been a lot of fun. &lt;/p&gt;

&lt;p&gt;Next month, I’ll have something new to share. I can’t way to show it to you. It has a good backstory.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;See you in May.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Beyond the obvious: spending &lt;em&gt;more&lt;/em&gt; time with my family. I’m a night owl, so I’m concerned about the time of evening after everyone else is in bed. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 30 Apr 2017 10:00:00 -0400</pubDate>
        <link>http://rd2.io/2017/04/artist-and-the-technician/</link>
        <guid isPermaLink="true">http://rd2.io/2017/04/artist-and-the-technician/</guid>
      </item>
      
    
      
      <item>
        <title>What Sounds Good</title>
        <description>&lt;h2 id=&quot;what-sounds-good&quot;&gt;What Sounds Good.&lt;/h2&gt;
&lt;p&gt;The end of March marked a year at Apple, and a year living in California. Things are coming into focus, and I’m beginning to settle. As that happens, I revisit old goals, and uncover things I wanted to do before &lt;em&gt;the big change&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;I’ve &lt;a href=&quot;http://rd2.io/2016/12/star-of-wonder/&quot;&gt;written about music&lt;/a&gt; in the past year, especially &lt;a href=&quot;http://rd2.io/2016/09/frozen-memories/&quot;&gt;film music&lt;/a&gt;. I’ve &lt;a href=&quot;http://rd2.io/2016/12/music-of-rogue-one/&quot;&gt;reviewed albums&lt;/a&gt;, and made a &lt;a href=&quot;http://rd2.io/2016/09/bose-qc35-review/&quot;&gt;few&lt;/a&gt; &lt;a href=&quot;http://rd2.io/2016/09/playlist-world-needs-you/&quot;&gt;playlists&lt;/a&gt;. When I tweaked the style of this site &lt;a href=&quot;http://rd2.io/2016/08/errata-week32/&quot;&gt;towards conversations with friends&lt;/a&gt;, it was to write more casual pieces. For example, quick blurbs about interesting reads, or the latest music I’m listening to. &lt;/p&gt;

&lt;p&gt;Below are three albums currently in heavy rotation.&lt;/p&gt;

&lt;h3 id=&quot;the-expanse-original-television-soundtrack&quot;&gt;The Expanse (Original Television Soundtrack).&lt;/h3&gt;
&lt;p&gt;Now that I have a day job with no evening hobby, I have time to watch television again. I love &lt;em&gt;The Expanse&lt;/em&gt;. It’s the best sci-fi I’ve seen in years, and the soundtrack is really good too. &lt;/p&gt;

&lt;p&gt;Most opening themes wear on me after the third or fourth listen, because you &lt;em&gt;always&lt;/em&gt; hear it when watching the show. This theme is different. It instantly throws me into the zone. I often start the album just to hear the opening sequence. &lt;/p&gt;

&lt;p&gt;Clinton Shorter’s score is standard fare for deep space. You’ll hear the Taiko drums from Bear McCreary’s &lt;em&gt;Battlestar Galatica&lt;/em&gt;, and tones from Gregson-William’s excellent score for &lt;em&gt;The Martian&lt;/em&gt;. Themes often linger, similar to the way melodies from Hans Zimmer’s &lt;em&gt;Interstellar&lt;/em&gt; will linger over quiet space sequences. &lt;/p&gt;

&lt;p&gt;It’s familiar, but doesn’t break new ground for the genre. Instead of innovation, it’s simply a solid execution that adds to the show, and provides a deft amount of atmosphere to the vacuum of space. &lt;/p&gt;

&lt;p&gt;It’s my favorite new listen in 2017. I’ve been known to play this album twice a day during the work week. You can listen to it &lt;a href=&quot;https://itun.es/us/PLDKcb&quot;&gt;on Apple Music&lt;/a&gt; or &lt;a href=&quot;http://amzn.to/2nnGqNG&quot;&gt;Amazon Music&lt;/a&gt; (free with a Prime membership).&lt;/p&gt;

&lt;h3 id=&quot;oj-made-in-america-original-motion-picture-soundtrack&quot;&gt;OJ: Made in America (Original Motion Picture Soundtrack).&lt;/h3&gt;
&lt;p&gt;Ezra Edelman’s Oscar-winning documentary is a must watch for any child of the 80s. It’s raw, and leaves a lot for the viewer to think about after the credits roll. &lt;/p&gt;

&lt;p&gt;Gary Lionelli’s score strikes a sad, somber tone throughout. Notes of slow, urban jazz are punctuated by felt piano, glockenspiel, and vibraphone. It feels fresh and modern, similar in character to Jeff Beal’s score for &lt;em&gt;House of Cards&lt;/em&gt;, and Dominic Lewis’ score for the second season of &lt;em&gt;The Man in the High Castle&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Unlike Shorter in &lt;em&gt;The Expanse&lt;/em&gt;, Lionelli writes an aggressive score that establishes the tone of a scene, instead of merely supporting it. I saw the music as the narrator, guiding you between interviews, and news reels. &lt;/p&gt;

&lt;p&gt;One of my favorite tracks is &lt;a href=&quot;https://itun.es/us/LFc5hb?i=1206135119&quot;&gt;&lt;em&gt;Buffalo Baryshnikov&lt;/em&gt;&lt;/a&gt;. This cue plays underneath slow motion footage of Simpson rushing for the Buffalo Bills the year he broke the single season rushing record. A graceful piece to establish the elegant pace of Simpson’s rushing style&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;It’s a good album for times when you need to ponder, or reflect—especially if you’re sad. &lt;/p&gt;

&lt;p&gt;Listen to it on &lt;a href=&quot;https://itun.es/us/LFc5hb&quot;&gt;Apple Music&lt;/a&gt; or free with &lt;a href=&quot;http://amzn.to/2nrMnub&quot;&gt;Amazon Music Unlimited&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;vanquish&quot;&gt;Vanquish.&lt;/h3&gt;
&lt;p&gt;The final album is another in-your-face, epic motivational number, for which &lt;em&gt;Two Steps from Hell&lt;/em&gt; is known. All of the familiar characters are here, with sonorous vocals over top boisterous brass, and strings. &lt;/p&gt;

&lt;p&gt;Standouts include two vocal-heavy tracks: the titular &lt;em&gt;Vanquish&lt;/em&gt;, and &lt;em&gt;Dangerous&lt;/em&gt;. The former feels like it could be the title song for a Bond movie. My boys frequently ask me to repeat it whenever they hear it in the car. If you’re looking more for the signature &lt;em&gt;Two Steps&lt;/em&gt; sound, I’d recommend these tracks: &lt;em&gt;Siege&lt;/em&gt; (9), &lt;em&gt;Turin&lt;/em&gt; (13), and &lt;em&gt;Inferni&lt;/em&gt; (17). &lt;/p&gt;

&lt;p&gt;Finally, &lt;em&gt;High C’s&lt;/em&gt; (14), is a standout for what it isn’t. Most of albums from &lt;em&gt;Two Steps from Hell&lt;/em&gt; are heavily produced, with effects common for modern cinema trailers. &lt;em&gt;High C’s&lt;/em&gt; eschews this for traditional orchestration. It makes me nostalgic for my band and orchestra days from high school, and college. &lt;/p&gt;

&lt;p&gt;You can listen to &lt;em&gt;Vanquish&lt;/em&gt; on &lt;a href=&quot;https://itun.es/us/1IBkgb&quot;&gt;Apple Music&lt;/a&gt; or free with &lt;a href=&quot;http://amzn.to/2oP15vz&quot;&gt;Amazon Music Unlimited&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;It’s a setup for the next scene where Edelman first introduces Nicole Brown at the end of the Part I. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 03 Apr 2017 10:00:00 -0400</pubDate>
        <link>http://rd2.io/2017/04/what-sounds-good/</link>
        <guid isPermaLink="true">http://rd2.io/2017/04/what-sounds-good/</guid>
      </item>
      
    
      
      <item>
        <title>Capturing Film on iPhone</title>
        <description>&lt;h2 id=&quot;capturing-film-on-iphone&quot;&gt;Capturing Film on iPhone.&lt;/h2&gt;
&lt;p&gt;My original inspiration for this weekend project was to capture RAW photos from my iPhone. A lot of new camera apps capture RAW, but none of them captured it in the manner I preferred. &lt;/p&gt;

&lt;p&gt;On my Fuji cameras, I have the option to capture a JPEG alongside a RAW frame. This mode, &lt;strong&gt;RAW+JPEG&lt;/strong&gt;, gives me a lot of freedom. I can quickly share a JPEG on social media until I have time to process, and properly edit the RAW version of the image. Most often I only use the JPEG, but I like having the RAW as backup—should I desire to push a photo in post. &lt;/p&gt;

&lt;p&gt;Alas, this weekend experiment will uncover how to take &lt;strong&gt;RAW+JPEG&lt;/strong&gt; stills from iPhone. My Fuji cameras can also apply digital filters to the JPEG. I’d like to do the same, and apply my &lt;a href=&quot;/2016/10/shooting-film-iphone/&quot;&gt;own digital film filters&lt;/a&gt;. &lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Before we jump into code, let’s talk about the workflow:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Tell our &lt;code class=&quot;highlighter-rouge&quot;&gt;AVCapturePhotoOutput&lt;/code&gt; to capture RAW and RGBA&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; frames.&lt;/li&gt;
  &lt;li&gt;Write the RAW frame to disk. &lt;/li&gt;
  &lt;li&gt;Process the RGBA frame using our filter(s) and save it to disk.&lt;/li&gt;
  &lt;li&gt;Copy both the RAW and the processed RGBA to the Photo Library, and combine them into a single entry.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There’s a few unexpected wrinkles, which we’ll discuss along the way. You’ll also need the code you built for the &lt;a href=&quot;/2016/10/shooting-film-iphone/&quot;&gt;last weekend project&lt;/a&gt;, since we’ll build upon that infrastructure. &lt;/p&gt;

&lt;p&gt;Don’t forget my disclaimer&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;: &lt;em&gt;I’m just an ordinary citizen, hacking on my phone to take pictures. I claim no copyright, nor do I warrant the code in any way. This is probably not the best way to build an app.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;configuration-and-capture&quot;&gt;1. Configuration and Capture.&lt;/h3&gt;
&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;AVCapturePhotoOutput&lt;/code&gt; wants to be configured each time you attempt to capture a frame. &lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AVCapturePhotoOutput&lt;/code&gt; provides a means to capture a JPEG and a RAW frame in a single capture request. However, this mode disables image stabilization for &lt;em&gt;both captures&lt;/em&gt;&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. Shooting in this mode produces photos that have more motion blur, and much more noise.&lt;/p&gt;

&lt;p&gt;To avoid this, we’re gonna request two captures back-to-back, so our JPEG frame can take advantage of image stabilization, and the other processing goodies provided by iPhone’s DSP. It’s more work, and more complicated code, but it will produce &lt;em&gt;better&lt;/em&gt; photos. &lt;/p&gt;

&lt;p&gt;We start with a simple UI action to trigger the capture:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;@IBAction&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;takePhoto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;sender&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AnyObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;rawFormat&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;kCVPixelFormatType_14Bayer_RGGB&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;processedFormat&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;NSNumber&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;kCVPixelFormatType_32BGRA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	        
    &lt;span class=&quot;c1&quot;&gt;// ... take the RAW photo and JPEG Photo&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Inside of this method, we’re going to actually take &lt;em&gt;two&lt;/em&gt; photos: (1) our RAW photo, and (2) our JPEG. Since both photos are requested simultaneously, they’ll appear to be the same frame&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. &lt;/p&gt;

&lt;p&gt;Next we add this to our method, which requests the &lt;code class=&quot;highlighter-rouge&quot;&gt;BGRA&lt;/code&gt; frame to be captured:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;settings&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCapturePhotoSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kCVPixelBufferPixelFormatTypeKey&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;processedFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isAutoStillImageStabilizationEnabled&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;capturePhoto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;delegate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;For each frame, we create a settings object of type &lt;code class=&quot;highlighter-rouge&quot;&gt;AVCapturePhotoSettings&lt;/code&gt;. This data structure stores the configuration of each capture. &lt;/p&gt;

&lt;p&gt;To request the RAW frame, we follow a similar process:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;rawSettings&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCapturePhotoSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;rawPixelFormatType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rawFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;capturePhoto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rawSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;delegate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Our final task for the &lt;code class=&quot;highlighter-rouge&quot;&gt;takePhoto(_:)&lt;/code&gt; method is to cache the settings information for both capture requests, so we can later combine the JPEG and RAW frame for storage in the photo library.&lt;/p&gt;

&lt;p&gt;Create a &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt; data structure to store the information for each request:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CaptureRequest&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;jpegUniqueId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Int64&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;rawUniqueId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Int64&lt;/span&gt;
    
    &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;jpegURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;rawURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;uniqueId&lt;/code&gt; fields correspond to the ID generated each time an instance of &lt;code class=&quot;highlighter-rouge&quot;&gt;AVCapturePhotoSettings&lt;/code&gt; is created (remember, we create a new settings bundle each time we take a photo). You need to cache a &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt; at the end of the &lt;code class=&quot;highlighter-rouge&quot;&gt;takePhoto(_:)&lt;/code&gt; method:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;cr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CaptureRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;jpegId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uniqueID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;rawId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rawSettings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uniqueID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;write-raw-frame-to-disk&quot;&gt;2. Write RAW Frame to Disk.&lt;/h3&gt;
&lt;p&gt;Now that we’ve created the requests, we have to implement a pair of delegate methods to handle the RAW and BGRA frames. &lt;/p&gt;

&lt;p&gt;Let’s start with the RAW capture delegate method:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;capture&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;captureOutput&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCapturePhotoOutput&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;didFinishProcessingRawPhotoSampleBuffer&lt;/span&gt;
             &lt;span class=&quot;nv&quot;&gt;rawSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CMSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?,&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;previewPhotoSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CMSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?,&lt;/span&gt;
            &lt;span class=&quot;nv&quot;&gt;resolvedSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCaptureResolvedPhotoSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
             &lt;span class=&quot;nv&quot;&gt;bracketSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCaptureBracketedStillImageSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        
    &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;sourceBuffer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rawSampleBuffer&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCapturePhotoOutput&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;dngPhotoDataRepresentation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;forRawSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; 
        &lt;span class=&quot;n&quot;&gt;sourceBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;previewPhotoSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;previewPhotoSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rawUniqueId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;resolvedSettings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uniqueID&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;indexOfRequest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;indexOfRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;writeRAW&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This method is self-explanatory. First, we convert the captured data into a DNG representation. Then we get the &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt; object we cached in our &lt;code class=&quot;highlighter-rouge&quot;&gt;takePhoto(_:)&lt;/code&gt; method, and use it to write a temporary RAW file to disk.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;writeRAW(data:)&lt;/code&gt; method on &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt; looks like this:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;mutating&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;writeRAW&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;tempURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;withPathExtension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;dng&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;atomicWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rawURL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            
    &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Write to RAW file FAILED&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This method caches the RAW data into a temporary file, and keeps a path variable. We’ll need this path—&lt;em&gt;later&lt;/em&gt;—when we move the RAW file to the Photo Library, after the capture is finalized.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;tempURL(withPathExtension:)&lt;/code&gt; method yields a temporary path with a &lt;code class=&quot;highlighter-rouge&quot;&gt;UUID&lt;/code&gt; for a unique file name:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;tempURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;withPathExtension&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;URL&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;uuid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;NSUUID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uuidString&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;fileURLWithPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;NSTemporaryDirectory&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;appendingPathComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uuid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;appendingPathExtension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;process-bgra-and-write-it-to-disk&quot;&gt;3. Process BGRA and Write it to Disk.&lt;/h3&gt;
&lt;p&gt;We’ll follow the same process for our JPEG, but we also need to filter it. The code is very similar to the code used to process the BGRA frames for the viewfinder &lt;a href=&quot;/2016/10/shooting-film-iphone/&quot;&gt;in our last project&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Below is the delegate method for our BGRA frame, where we’ve already extracted the &lt;code class=&quot;highlighter-rouge&quot;&gt;CVPixelBuffer&lt;/code&gt; to process:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;capture&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;captureOutput&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCapturePhotoOutput&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;didFinishProcessingPhotoSampleBuffer&lt;/span&gt;                   
           &lt;span class=&quot;nv&quot;&gt;photoSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CMSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?,&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;previewPhotoSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CMSampleBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?,&lt;/span&gt;
            &lt;span class=&quot;nv&quot;&gt;resolvedSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCaptureResolvedPhotoSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
             &lt;span class=&quot;nv&quot;&gt;bracketSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCaptureBracketedStillImageSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        
    &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;sourceBuffer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;photoSampleBuffer&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;pb&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CMSampleBufferGetImageBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sourceBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;sourceBuffer does not contain a CVPixelBuffer.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        
    &lt;span class=&quot;c1&quot;&gt;// TODO: filter image&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// TODO: convert to JPEG and write to disk&lt;/span&gt;
    
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The code to process the BGRA image should look familiar. First, we create a &lt;code class=&quot;highlighter-rouge&quot;&gt;CIImage&lt;/code&gt;, and correct the orientation. Then, we use our &lt;code class=&quot;highlighter-rouge&quot;&gt;FilterManager&lt;/code&gt; instance to apply the selected filter.&lt;/p&gt;

&lt;p&gt;Add the code below to our delegate method:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simulatedOrientation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;asCGImagePropertyOrientation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ci&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CIImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;cvPixelBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;applyingOrientation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;or&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;filteredImage&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filterManager&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;convertedImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;forSelectedFilter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ci&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;context&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;CIContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;cg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;createCGImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filteredImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filteredImage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;extent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;couldn't create a CGImage from the filter source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now that we have our filtered &lt;code class=&quot;highlighter-rouge&quot;&gt;CGImage&lt;/code&gt;, we compress it into a JPEG using &lt;code class=&quot;highlighter-rouge&quot;&gt;UImageJPEGRepresentation&lt;/code&gt;. We then use the &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt; to persist the JPEG data.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;UIImageJPEGRepresentation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;UIImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;cgImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;couldn't create JPEG data from the filtered source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;$0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;jpegUniqueId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;resolvedSettings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uniqueID&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;indexOfRequest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;indexOfRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;writeJPEG&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;writeJPEG(data:)&lt;/code&gt; method is nearly identical to the &lt;code class=&quot;highlighter-rouge&quot;&gt;writeRaw(data:)&lt;/code&gt;, except we set the &lt;code class=&quot;highlighter-rouge&quot;&gt;jpegURL&lt;/code&gt; property on our &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;mutating&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;writeJPEG&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;tmpURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;withPathExtension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;jpg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;atomicWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;jpegURL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            
    &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Write to JPEG file FAILED&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;store-in-the-photo-library&quot;&gt;4. Store in the Photo Library.&lt;/h3&gt;
&lt;p&gt;Now that we’ve cached locally both our RAW and JPEG images, this final step will store them as a single entry in the device photo library. We want our images to appear as the filtered JPEG in the Photos app, but provide a RAW &lt;em&gt;alternative&lt;/em&gt; for apps that can request a RAW version.&lt;/p&gt;

&lt;p&gt;This gives the desired behavior: quickly share the filtered image on social media, but retain the RAW original for further image processing.&lt;/p&gt;

&lt;p&gt;This is accomplished with a single method from our &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt; object:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;moveToSharedLibrary&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;jpeg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jpegURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;raw&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rawURL&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;kt&quot;&gt;PHPhotoLibrary&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;shared&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;performChanges&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;creationRequest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;PHAssetCreationRequest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;forAsset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;creationOptions&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;PHAssetResourceCreationOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;creationOptions&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shouldMoveFile&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
        
        &lt;span class=&quot;n&quot;&gt;creationRequest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;addResource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;PHAssetResourceType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                &lt;span class=&quot;nv&quot;&gt;fileURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jpeg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;creationOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;creationRequest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;addResource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;with&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;PHAssetResourceType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;alternatePhoto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                &lt;span class=&quot;nv&quot;&gt;fileURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;raw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;creationOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;

    &lt;span class=&quot;nv&quot;&gt;completionHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;success&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Bool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;success&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nf&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;YAY! ...PROCESSED photo saved to Camera Roll&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;BOOM! ...something went wrong &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;PHPhotoLibrary.shared()&lt;/code&gt; is the singleton used to store images in the photo library. We create a &lt;code class=&quot;highlighter-rouge&quot;&gt;PHAssetCreationRequest&lt;/code&gt; and add two resources to it. By using the type &lt;code class=&quot;highlighter-rouge&quot;&gt;.alternatePhoto&lt;/code&gt; for the RAW image, we hide it from any photo apps that don’t specifically request a RAW version of a photo. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you use a &lt;code class=&quot;highlighter-rouge&quot;&gt;PHAssetResourceCreationOptions&lt;/code&gt; bundle, with the &lt;code class=&quot;highlighter-rouge&quot;&gt;shouldMoveFile&lt;/code&gt; property set, the creation request will automatically clean up our temporary files. It keeps things tidy.&lt;/p&gt;

&lt;p&gt;There is a wrinkle: we don’t know which request will finish first, the JPEG, or the RAW request. Each time &lt;em&gt;any&lt;/em&gt; request finishes, we have to check and see if its sibling request has also completed. If it has, we can save both to the photo library.&lt;/p&gt;

&lt;p&gt;Add this check to your &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt; struct:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;isReady&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Bool&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jpegURL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rawURL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This lets us know if we have both images cached—i.e., we’re &lt;em&gt;ready&lt;/em&gt;—so we can save everything to the photo library.&lt;/p&gt;

&lt;p&gt;We call everything in the &lt;code class=&quot;highlighter-rouge&quot;&gt;capture(_:didFinishCaptureForResolvedSettings:  resolvedSettings:error:)&lt;/code&gt; delegate method:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;capture&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;captureOutput&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCapturePhotoOutput&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;didFinishCaptureForResolvedSettings&lt;/span&gt; 
            &lt;span class=&quot;nv&quot;&gt;resolvedSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;AVCaptureResolvedPhotoSettings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                       &lt;span class=&quot;nv&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rawUniqueId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;resolvedSettings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uniqueID&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;jpegUniqueId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;resolvedSettings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uniqueID&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;indexOfRequest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;indexOfRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isReady&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;indexOfRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;moveToSharedLibrary&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;captureRequests&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;at&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;indexOfRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The code is straightforward, we get the &lt;code class=&quot;highlighter-rouge&quot;&gt;CaptureRequest&lt;/code&gt; for the frame that finished, and move it to the library if it’s ready.&lt;/p&gt;

&lt;h3 id=&quot;next-steps&quot;&gt;Next Steps.&lt;/h3&gt;
&lt;p&gt;This looks like a bunch of code just to store RAW files, and it is. Originally, I used &lt;code class=&quot;highlighter-rouge&quot;&gt;AVPhotoCaptureOutput&lt;/code&gt;’s ability to create a RAW+JPEG combined request, but I wasn’t happy with the results. Turns out iPhone’s DSP does a lot.&lt;/p&gt;

&lt;p&gt;This completes all of the camera infrastructure needed to begin development of our own digital film. In the first article, we covered the basic filter infrastructure, and described a way to preview our filters before capture. In this article, we covered how to save our filtered JPEGs to the photo library, along with a RAW original. &lt;/p&gt;

&lt;p&gt;Our next weekend project will dive into image processing, and describe how to create your own digital film. Stay tuned.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;There is an option to capture JPEG buffers, however our filter workflow expects an uncompressed RGBA frame. It doesn’t make sense to have the phone compress a JPEG, only to immediately decompress it.  &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: I claim no copyright for the following code. I’m releasing it into the public domain, and there is no warranty expressed or implied. Please refer to Apple Documentation for best practices. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Image stabilization is always disabled for RAW captures. Because of this, the RAW+JPEG mode also disables it. Makes sense, when you think about it, albeit still frustrating. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;At best, they’ll be 1/30th of a second apart. Imperceptible, unless there is a fast moving subject, and you’re comparing side-by-side. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 24 Feb 2017 10:00:00 -0500</pubDate>
        <link>http://rd2.io/2017/02/capturing-film-on-iphone/</link>
        <guid isPermaLink="true">http://rd2.io/2017/02/capturing-film-on-iphone/</guid>
      </item>
      
    
      
      <item>
        <title>That Writing Feeling</title>
        <description>&lt;h2 id=&quot;that-writing-feeling&quot;&gt;That Writing Feeling.&lt;/h2&gt;
&lt;p&gt;I can’t recall when I first referred to myself as a &lt;em&gt;writer&lt;/em&gt;. Writing has always felt like a state-of-mind, but writer—&lt;em&gt;someone who has better grammar, and a more sophisticated understanding of the language&lt;/em&gt;—sounds like a profession. &lt;/p&gt;

&lt;p&gt;Published at 19 (in a mathematics research journal), I didn’t think much of how often I wrote. At best it was for fun, but most often it was a means to an end. Email, status updates, and boring white papers.&lt;/p&gt;

&lt;p&gt;Then one day it hit me—&lt;em&gt;I enjoyed writing&lt;/em&gt;. How did that happen? English was always one of those filler classes, which I endured between those I really enjoyed. &lt;/p&gt;

&lt;p&gt;After college, I paid more attention to how things were written. Instead of looking for mistakes when I read, I’d observe the writer’s style. Notice how they setup a scene or phrased a question. Eventually, my focus would turn from structure to voice. &lt;/p&gt;

&lt;p&gt;It was then my own writing style began to emerge.&lt;/p&gt;

&lt;h3 id=&quot;no-automation&quot;&gt;No Automation.&lt;/h3&gt;
&lt;p&gt;Emails from friends, and loved ones are flagged after I read them. I prefer to reflect on what was said. When I return to it, I draft and read over my response multiple times before I hit send. My first drafts have atrocious grammar, are riddled with typos, and—because I’m mildly dyslexic—often written out of order.&lt;/p&gt;

&lt;p&gt;Posts to this site are subjected to even more rigor. I write two drafts at a minimum before I begin basic editing. Once the content edit is complete, I format the site in my publishing system, and edit the post again for layout. &lt;/p&gt;

&lt;p&gt;It’s a slow, manual process. Deliberate, and lovely.&lt;/p&gt;

&lt;p&gt;Every word on the page, screen, or email is written by hand. I avoid scripts, templates, and expansion tools. It may go against the nature of my day-to-day work—&lt;em&gt;software development&lt;/em&gt;—but I want writing to remain a slow, deliberate process. &lt;/p&gt;

&lt;p&gt;I can hear you ask, “Doesn’t that limit the amount of writing you can do?” Yes, it does. &lt;em&gt;Intentionally&lt;/em&gt;. There is an upper limit to the number of correspondence&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, stories, and articles I can write. Automation would only fuel my desire to write &lt;em&gt;more&lt;/em&gt;, and distract me from the enjoyment of writing &lt;em&gt;well&lt;/em&gt;. &lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ jekyll build -d ../public_html
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The above is the most satisfying command I can type into a terminal. It’s the command I use to rebuild this site, after I complete a new post. In Mail the equivalent is &lt;code class=&quot;highlighter-rouge&quot;&gt;ctrl-cmd-A&lt;/code&gt; (On iOS it’s a satisfying swipe-right&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;), which archives the email I had flagged for response. &lt;/p&gt;

&lt;p&gt;Automating this final step would remove some of the pleasure in the completion of a well-considered response. &lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Writing is exercise for my brain. It requires my complete conscious thought, which banishes unresolved thoughts to my sub-conscious. That is where I want them—unresolved shit annoys me.&lt;/p&gt;

&lt;p&gt;I go for a walk when I want to swim in my thoughts. When I’m ready to empty thoughts from my head, I sit down to write. &lt;/p&gt;

&lt;p&gt;I once heard&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; that “…&lt;em&gt;writing well is the sign of an organized mind&lt;/em&gt;.” Organized is not an adjective I’d use to describe myself, but I sure feel it while writing. &lt;/p&gt;

&lt;p&gt;Perhaps &lt;em&gt;writer&lt;/em&gt; is simply an aspiration.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;I don’t include work correspondence, which is often requests for meetings, and sending documents. The emails I reference are personal correspondence with close friends—the very type of emails I want to write my very best. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;You have to set this preference on your device. I have swipe-left set to delete a message, and swipe-right to archive. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Probably a stupid podcast. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 16 Feb 2017 09:30:00 -0500</pubDate>
        <link>http://rd2.io/2017/02/that-writing-feeling/</link>
        <guid isPermaLink="true">http://rd2.io/2017/02/that-writing-feeling/</guid>
      </item>
      
    
      
      <item>
        <title>The Thing about Trucks</title>
        <description>&lt;h2 id=&quot;the-thing-about-trucks&quot;&gt;The Thing about Trucks.&lt;/h2&gt;

&lt;p&gt;About a year ago, a friend and I were talking about geeks—specifically how do you know if someone is &lt;em&gt;really&lt;/em&gt; a geek. He came up with an interesting question to ask someone. Consider a scenario where someone unplugged your computer from the internet. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;How long before you become bored and step away from the computer?&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;His point—&lt;em&gt;the degree to which you’re a geek is directly proportional to the amount of time you remained occupied&lt;/em&gt;—may sound nostalgic, but there’s a more interesting distinction. Not about the extent to which you’re a geek&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, but how you use a computer and what you want from that experience.&lt;/p&gt;

&lt;p&gt;There were two arguments about computing that I found interesting from 2016. The first comes from a camp of iPad-only users. There’s a fair amount of zealotry, and dogma amongst this group, but I found the following a well-balanced summary of their argument:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Yes, you may not be able to use an iPad full time, but that’s not the point of what I, and many others, are saying. What we are saying is the same thing which got many to the Mac in 2004-5: life is better here, come take a stroll.  &lt;/p&gt;

  &lt;p&gt;I couldn’t use my Mac as my only machine in 2004, but in 2005 I could. A big enough user base in any one category means that people take the platform seriously.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p class=&quot;caption&quot;&gt;Excerpt from &lt;a href=&quot;https://brooksreview.net/2017/01/ipad-report-1217/&quot;&gt;&lt;em&gt;iPad Productivity Report – 1/2/17&lt;/em&gt;&lt;/a&gt;, Ben Brooks&lt;/p&gt;

&lt;p&gt;Brooks’ argument is astute. For many, I imagine (lack of) app support is what &lt;em&gt;mentally&lt;/em&gt; blocks iPad (and other iOS devices) from broader adoption as a primary computer. However, iPad does not lack for the kind of apps that plagued my use of a Mac in the early 2000s. iPad is supported by Microsoft Exchange, and a full complement of Microsoft Office apps are available.&lt;/p&gt;

&lt;p&gt;The issue isn’t that corporations and software companies won’t take iPad seriously. The problem is &lt;em&gt;customers&lt;/em&gt;. At the end of 2015, after purchasing the 12.9” iPad Pro, I went iPad-only&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; for a week to try it out. A month later, it was no longer an experiment. &lt;/p&gt;

&lt;p&gt;It took a dedicated keyboard, but I finally saw the iPad as a viable computer for day-to-day work. What changed wasn’t the iPad or iOS, it was my perception of the device and its viability as a general purpose computer.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The second argument stems from angst over a perceived lack of excitement in the 2016 Mac line-up. I’m certainly too biased to comment on the current state of the Mac line-up, but I am curious about why the Mac still matters to so many. Consider this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[…] it took so long — not years but decades — for MacOS to get to where it is that I don’t think any other OS could ever catch up. That’s what’s driving the arguably paranoid fear that Apple is abandoning the Mac… if the Mac goes away, the world will be left without a Mac-quality desktop OS.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p class=&quot;caption&quot;&gt;Excerpt from &lt;a href=&quot;http://daringfireball.net/linked/2017/01/03/moore-macos-alternative&quot;&gt;&lt;em&gt;Wesley Moore’s Search for an Alternative To MacOS&lt;/em&gt;&lt;/a&gt;, John Gruber&lt;/p&gt;

&lt;p&gt;While Brooks and others are arguing that iPad will eventually replace the Mac, Gruber is arguing there will always be a need for macOS—specifically a &lt;em&gt;desktop&lt;/em&gt; operating system. Despite what my aforementioned dalliance with iPad might suggest, I’m firmly in Gruber’s camp. &lt;/p&gt;

&lt;p&gt;Here’s the thought experiment, which I used to inform my opinion: If you could take only one device&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; with you, &lt;em&gt;which one would you take&lt;/em&gt;? &lt;a href=&quot;https://brooksreview.net/2016/12/evovling-ipad-desktop-usage/&quot;&gt;Ben Brooks&lt;/a&gt; or &lt;a href=&quot;https://www.macstories.net/stories/one-year-of-ipad-pro/&quot;&gt;Federico Viticci&lt;/a&gt; would almost certainly choose an iPad. &lt;/p&gt;

&lt;p&gt;However, I’d take a Mac. &lt;a href=&quot;http://rd2.io/2016/08/for-love-of-mac/&quot;&gt;Exactly the 11” MacBook Air&lt;/a&gt;, which I’m using to write this article. &lt;/p&gt;

&lt;p&gt;My thinking goes like this: I can borrow someone else’s phone if I need to make a call, but I want &lt;em&gt;my&lt;/em&gt; Mac if I need to do any sort of deep thinking. This feeling of personalization runs deep in a desktop operating system. It’s much more than wallpaper, or color schemes. My Mac is loaded with software and utilities that &lt;em&gt;I have written&lt;/em&gt; custom for my specific use. I’m not talking about general software development, but scripting, and automation which ease my everyday tasks.  &lt;/p&gt;

&lt;p&gt;This level of customization is nigh impossible on iOS devices, &lt;em&gt;by design.&lt;/em&gt; Might sound like I’m being facetious or setting up a strawman argument. In fact, I believe this capability for deep customization is the crux of the division between the iPad-only and Mac loyalist camps. &lt;/p&gt;

&lt;hr /&gt;

&lt;blockquote&gt;
  &lt;p&gt;A new computer is barely usable until I’ve tricked it out with my macros, and launchers, and scripts, and customisations. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p class=&quot;caption&quot;&gt;Excerpt from &lt;a href=&quot;http://mattgemmell.com/lifting-the-mouse/&quot;&gt;&lt;em&gt;Lifting the Mouse&lt;/em&gt;&lt;/a&gt;, Matt Gemmell&lt;/p&gt;

&lt;p&gt;Deep customization comes at a cost to the general experience of using a computer. If you remove this capability, you can create a computer that is more secure, more predictable, and more adaptable. That is why the iPad (and iOS in general) feels like such a revelation. It makes—&lt;em&gt;meaningless to many&lt;/em&gt;—tradeoffs in customization for meaningful improvements to the user experience for those who don’t need it. &lt;/p&gt;

&lt;p&gt;If you want deep customization that only a desktop operating system can provide—but still desire a &lt;em&gt;high-quality experience&lt;/em&gt;—your best option is macOS.&lt;/p&gt;

&lt;p&gt;Motivated by Wesley Moore’s search, I wiped my soon-to-be-retired 11” MacBook Air, and gave &lt;a href=&quot;https://elementary.io&quot;&gt;Elementary OS&lt;/a&gt; a spin. Or at least, I tried.&lt;/p&gt;

&lt;p&gt;Do you know anything about EFI bootloaders? If you don’t, you’ll have a hard time getting eOS to run on anything but a USB key plugged into your Mac. It’s a pain-in-the-ass to install, even with several tutorials available online. &lt;/p&gt;

&lt;p&gt;Even though I was unsuccessful with eOS, I was struck with an epiphany during the process. &lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-mac-experiment&quot;&gt;The Mac Experiment.&lt;/h3&gt;

&lt;p&gt;Before I started, I knew an eOS computer wouldn’t have access to the App store, iCloud, or iMessage. In order to determine if a Linux computer &lt;em&gt;could&lt;/em&gt; be useful, I had to consider alternatives based on what was available for the platform, or simply live without them. Turns out the latter was the simpler option for an experiment. &lt;/p&gt;

&lt;p&gt;Instead of a full replacement for my Macs, the Linux computer would be dedicated to writing code, and writing for this website. Available were a cocktail of terminal commands, small single-purpose programs, and text editors such as vim and emacs. &lt;/p&gt;

&lt;p&gt;When I finally gave up on eOS, two things happened. First, I remembered why I loved the 11” MBA hardware so much. The compact size, extended battery life, and true widescreen aspect ratio all came back to me. I also took the time to properly calibrate the display, and now it portrays color more precisely&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Second, I realized a Mac with the same restricted app use, and minimal network services would make for a powerful machine—even with outdated hardware. So, I rebuilt the machine from scratch using the recovery partition. Seems this Mac isn’t ready to retire, after all.&lt;/p&gt;

&lt;p&gt;No iMessage. Haven’t logged into the App store, and the only iCloud service I have enabled is &lt;em&gt;Find My Mac&lt;/em&gt;. I haven’t configured Mail, Photos, or Facetime. I did install iTunes, because I prefer to control music from my computer when I’m deep in thought.&lt;/p&gt;

&lt;p&gt;I had to install &lt;a href=&quot;https://developer.apple.com/download/more/&quot;&gt;Xcode from here&lt;/a&gt;&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. And since both have left the App store recently, I have direct licenses for &lt;a href=&quot;http://www.barebones.com/products/bbedit/index.html&quot;&gt;BBEdit&lt;/a&gt; and &lt;a href=&quot;https://www.sketchapp.com&quot;&gt;Sketch&lt;/a&gt;. The rest of the apps I installed are open-source utilities.&lt;/p&gt;

&lt;p&gt;I’ve also installed &lt;a href=&quot;http://quoteunquoteapps.com/courierprime/&quot;&gt;Courier Prime Code&lt;/a&gt;, my favorite monospace font. Just about everything I will see on this computer will be set in Courier Prime or San Francisco. Then there’s all of the scripts, and tweaks I’ve installed, including my custom prompt for &lt;a href=&quot;http://fishshell.com&quot;&gt;fish shell&lt;/a&gt;, software I’ve built to publish my site, and numerous minor customizations that make life easier.&lt;/p&gt;

&lt;p&gt;The resulting machine is fast, and nimble, with ample hard drive space for future projects. I get 10-11 hours of battery life—enough to drive it multiple days between charges. And a quick 20 minute top-off from the Architect’s 85W MacBook Pro charger&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; gets me to 70%.&lt;/p&gt;

&lt;p&gt;Stripped down, and perfect.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;I can’t describe how much I enjoy using this Mac. And that’s the real point here. I use an iPhone, and iPad daily to write emails, look up references, read the news, listen to music, get directions, and edit documents. In many ways, the iOS devices are my &lt;em&gt;work&lt;/em&gt; devices—i.e., the devices I use to accomplish things I &lt;em&gt;have&lt;/em&gt; to do.   &lt;/p&gt;

&lt;p&gt;The Mac is where I go to accomplish what I &lt;em&gt;want&lt;/em&gt; to do. If you enjoy playing games or reading&lt;sup id=&quot;fnref:7&quot;&gt;&lt;a href=&quot;#fn:7&quot; class=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;, you’ll probably think of the iPad as your &lt;em&gt;fun&lt;/em&gt; machine. It’s okay. That is why there is more than one camp. &lt;/p&gt;

&lt;p&gt;If you prefer a cleaner experience, and don’t need to customize your machine heavily or build your own utilities, then an iPad is an excellent primary computer. It is arguably the &lt;em&gt;best&lt;/em&gt; realization of a general purpose computer, to date.&lt;/p&gt;

&lt;p&gt;But if you’re like me, and want a machine that you can customize, and expand at your whim, there is no computer quite like a Mac.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Geeks come in all shapes, sizes, colors, and gender. The trick is that we know one when we see one, so make sure you own it. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;It was primarily a work experiment, which is the lion-share of time I spent in front of a computer.  &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Presumably a Mac, iPhone, or iPad, but you are free to substitute whichever computer, phone, or tablet you wish. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;The MacBook Airs have a reputation for awful color reproduction out of the box. Specifically, the grays of the macOS chrome are extremely washed out, and the color temperature of the display has a strong blue bias. If you run through the calibration on expert mode, in plenty of neutral light, you can correct for most of the bias. However, I still wouldn’t recommend this screen for photography or other work which requires precise handling of color. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;Not really, but I can’t share the links I &lt;em&gt;actually&lt;/em&gt; used. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;Actually, &lt;em&gt;chargers&lt;/em&gt;. She has a few strategically placed around the house. The smaller 45W brick usually stays in my bag.  &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot;&gt;
      &lt;p&gt;I use a B/W Kindle for reading. It’s light, easy to hold, and is never without a charge, despite only needed a power brick once a month. You’re probably noticing a trend: I prefer devices I don’t need to charge &lt;em&gt;every single night&lt;/em&gt;. &lt;a href=&quot;#fnref:7&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 09 Jan 2017 09:30:00 -0500</pubDate>
        <link>http://rd2.io/2017/01/macs-and-trucks/</link>
        <guid isPermaLink="true">http://rd2.io/2017/01/macs-and-trucks/</guid>
      </item>
      
    
      
      <item>
        <title>Music of ROGUE ONE</title>
        <description>&lt;h2 id=&quot;music-of-rogue-one&quot;&gt;Music of Rogue One.&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;There are spoilers in this review. If you haven’t seen Rogue One yet, stop what you’re doing and go see it.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;I’ve eagerly anticipated &lt;em&gt;Rogue One&lt;/em&gt;—even more than &lt;em&gt;The Force Awakens&lt;/em&gt;—since I first read about it two years ago. Along with &lt;em&gt;Star Wars&lt;/em&gt;, I loved the swashbuckling war movies from the 1960s as a young adult. &lt;/p&gt;

&lt;p&gt;When rumors began that &lt;em&gt;Rogue One&lt;/em&gt; was a “war movie set in the Star Wars Universe”, my expectations only increased. Just as &lt;em&gt;Star Wars&lt;/em&gt; is an homage to the &lt;em&gt;Flash Gordon&lt;/em&gt; serials, I hoped &lt;em&gt;Rogue One&lt;/em&gt; could be an homage to movies such as &lt;em&gt;The Guns of Navarone&lt;/em&gt;, &lt;em&gt;The Great Escape&lt;/em&gt;, and &lt;em&gt;Bridge over the River Kwai&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Then a month ago, news spread that Michael Giacchino would compose the &lt;em&gt;Rogue One&lt;/em&gt; score. It is no secret &lt;a href=&quot;http://rd2.io/2016/09/frozen-memories/&quot;&gt;I love his music&lt;/a&gt;. His prior work on the &lt;a href=&quot;http://www2.ea.com/medal-of-honor&quot;&gt;Medal of Honor&lt;/a&gt; series of games seemed to support my fantasy for a throwback war movie. I even &lt;a href=&quot;https://itunes.apple.com/us/playlist/war-movie-music/idpl.23defca5b47e433da50a1fab24e575ab&quot;&gt;put together a playlist&lt;/a&gt; which combined a few 60s soundtracks with some of Giacchino’s work on Medal of Honor.&lt;/p&gt;

&lt;p&gt;I’m happy to say that &lt;em&gt;Rogue One&lt;/em&gt; delivers, and so does its soundtrack. It seems my Top Ten has a new resident. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://itun.es/us/b21Ogb&quot;&gt;Start listening on Apple Music&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;big-shoes&quot;&gt;Big Shoes.&lt;/h3&gt;
&lt;p&gt;The movie is a departure from the classic episodic &lt;em&gt;Star Wars&lt;/em&gt; movies we all know and love&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. I knew &lt;em&gt;Rogue One&lt;/em&gt; was rumored to be different, so I was particularly curious how it’d open. Since it’s a standalone story, the directors decided it didn’t need an opening crawl. More on that in a moment.&lt;/p&gt;

&lt;p&gt;Alterations to the format weren’t the only changes—Giacchino is only the third composer to write music for &lt;em&gt;Star Wars&lt;/em&gt;. He’s the first to write for a feature movie, who’s name isn’t &lt;a href=&quot;https://itun.es/us/eKp&quot;&gt;John Williams&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was Williams who sparked my original interest in film scores, with his 1977 score for &lt;em&gt;Star Wars&lt;/em&gt;&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. I remember clearly the first time I heard the flute and french horn melody from &lt;a href=&quot;https://itun.es/us/KZWqy?i=407047485&quot;&gt;&lt;em&gt;Princess Leia’s Theme&lt;/em&gt;&lt;/a&gt;, and the foreboding low brass choir from &lt;a href=&quot;https://itun.es/us/KZWqy?i=407047399&quot;&gt;&lt;em&gt;Imperial Attack&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When it comes to film scores, the &lt;em&gt;Star Wars&lt;/em&gt; soundtrack was my first love. &lt;/p&gt;

&lt;p&gt;Giacchino had large shoes to fill. I wanted the character from his &lt;a href=&quot;https://itun.es/us/qeIhn&quot;&gt;&lt;em&gt;Medal of Honor&lt;/em&gt;&lt;/a&gt; scores, and the bombastic brass from &lt;a href=&quot;https://itun.es/us/f8sr5&quot;&gt;&lt;em&gt;Jupiter Ascending&lt;/em&gt;&lt;/a&gt; adapted to the Star Wars universe. But I also wanted the quiet sadness he brought to his &lt;a href=&quot;https://itun.es/us/Pp43Q&quot;&gt;&lt;em&gt;LOST&lt;/em&gt;&lt;/a&gt; scores—something which isn’t common in the &lt;em&gt;Star Wars&lt;/em&gt; music canon. &lt;/p&gt;

&lt;p&gt;Put another way, I wanted a great &lt;em&gt;Star Wars&lt;/em&gt; score, and also a great Giacchino score. We got both.&lt;/p&gt;

&lt;h3 id=&quot;about-that-opening&quot;&gt;About that Opening.&lt;/h3&gt;
&lt;p&gt;Last week the Architect found my AirPlay speaker from my office in Virginia, hidden in a random box at the back of our garage. Since my replacement set of QC35s were still in transit, I decided to give my old friend first crack at the score.&lt;/p&gt;

&lt;p&gt;You know the delay when an AirPlay speaker first connects? Combine that with an unknown speaker volume, which turned out to be unnecessarily loud for the room, and well… &lt;a href=&quot;https://itun.es/us/b21Ogb?i=1185111586&quot;&gt;the first track&lt;/a&gt; scared the shit out of everyone in the house.&lt;/p&gt;

&lt;p&gt;Despite the terror inflicted on my young children, I really enjoy the cold open. The sharp glissando pulls you directly into the movie, and pairs well with the cut from black to the moon and star-field. &lt;/p&gt;

&lt;p&gt;The second half of the opening occurs at the end of the &lt;a href=&quot;https://itun.es/us/b21Ogb?i=1185111587&quot;&gt;Track 2, &lt;em&gt;A Long Ride Ahead&lt;/em&gt;&lt;/a&gt;, which starts with the death of Jyn’s mother, followed by the search for her by Krennic’s guards. Then at the 3:30 mark, we are treated to a brief title fanfare. It lasts for about thirty seconds. &lt;/p&gt;

&lt;p&gt;It’s not William’s iconic opening fanfare, but definitely sounds from the same family. It’s little more than an aperitif—teasing what Giacchino could’ve done with a longer sequence that included a crawl. I really like it.&lt;/p&gt;

&lt;p&gt;There are little touches that allow this score to stand on its own, yet feel like a natural addition to the &lt;em&gt;Star Wars&lt;/em&gt; musical universe.&lt;/p&gt;

&lt;p&gt;You can argue the delayed title card is evidence that &lt;em&gt;Rogue One&lt;/em&gt; is like every other non-&lt;em&gt;Star Wars&lt;/em&gt; action movie, but I won’t hear it. It &lt;em&gt;sounds&lt;/em&gt; familiar, so it can get away with altering the format. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Star Wars&lt;/em&gt; is an ethos, not a rigid set of rules.  &lt;/p&gt;

&lt;h3 id=&quot;adapting-a-masterpiece&quot;&gt;Adapting a Masterpiece.&lt;/h3&gt;
&lt;p&gt;Listening to the score, it’s clear where Giacchino adapted certain themes. Jyn Erso’s theme has elements of Williams’ Rebellion theme&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. The modest theme for the Guardians of the Whills borrows from William’s Force theme, and Anakin &amp;amp; Padme’s love theme&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; heard in &lt;em&gt;Attack of the Clones&lt;/em&gt;&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. &lt;/p&gt;

&lt;p&gt;Unexplored and new characters required their own themes. Giacchino’s talent shines here as well. He used a musical vocabulary—orchestration, and chord structures—similar to Williams’ &lt;em&gt;Star Wars&lt;/em&gt; sound to fuse with his own. &lt;/p&gt;

&lt;p&gt;In my opinion, the best example of this on the entire album is Tarkin’s theme. Technically, I think it’s the Imperial theme&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;, but the most memorable use in the film can be heard in Track 5, &lt;em&gt;When Has Become Now&lt;/em&gt;. This line—spoken by Tarkin—is an instant classic, and reminiscent of Vader’s iconic missives from earlier movies&lt;sup id=&quot;fnref:7&quot;&gt;&lt;a href=&quot;#fn:7&quot; class=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;The music also draws parallels to Vader. When you listen to Track 20, &lt;em&gt;The Imperial Suite&lt;/em&gt;, you can hear the familiarity to &lt;em&gt;The Imperial March&lt;/em&gt; from &lt;em&gt;Empire Strikes Back&lt;/em&gt;. Giacchino’s theme almost sounds like it could’ve been written by Williams. &lt;em&gt;Almost&lt;/em&gt;&lt;sup id=&quot;fnref:8&quot;&gt;&lt;a href=&quot;#fn:8&quot; class=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;. It’s brilliant. &lt;/p&gt;

&lt;p&gt;It feels similar where it marries tone and phrases from William’s original Imperial theme—&lt;em&gt;Imperial Attack&lt;/em&gt; from &lt;em&gt;Star Wars&lt;/em&gt;—with staccato triplets that can feel quite Vader-esque. It differs in moments where the phrasing becomes more exaggerated. Giacchino’s theme is more regal, like Tarkin. Williams gave Vader’s melody a haunting, almost imposing feel, while Tarkin’s melody is pompous.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Imperial March&lt;/em&gt; is one of William’s most recognizable themes&lt;sup id=&quot;fnref:9&quot;&gt;&lt;a href=&quot;#fn:9&quot; class=&quot;footnote&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;, and Giacchino rarely uses this motif—only when Vader is on screen. He could’ve made heavy use of the melody. However, since Imperial &lt;em&gt;officers&lt;/em&gt;—not quasi-religious monks—play the larger role in &lt;em&gt;Rogue One&lt;/em&gt;, I enjoy that he fashioned a theme just for them. &lt;/p&gt;

&lt;h3 id=&quot;standouts&quot;&gt;Standouts.&lt;/h3&gt;
&lt;p&gt;These tracks are my personal favorites. Most of them feature Giacchino’s own themes, without much of Williams’. Some of them blend flourishes or instrumentations from Williams’ scores to create a familiar sound for the new music. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track 8&lt;/strong&gt;, &lt;a href=&quot;https://itun.es/us/b21Ogb?i=1185111593&quot;&gt;&lt;em&gt;Star-Dust&lt;/em&gt;&lt;/a&gt;: If I first heard this track before seeing the movie, I would know—instantly—it was Giacchino. His signature soft piano adds emotional weight to one of my favorite scenes in the movie. &lt;/p&gt;

&lt;p&gt;This is the music for Galen Erso’s hologram, as he performs the film’s signature retcon. This scene is why you cast Mads Mikkelson for a character with only a modicum of screen time. As the track softens, I can hear Erso’s line: “We call it the ‘Death Star’. There is no better name for it.” &lt;em&gt;So good&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track 9&lt;/strong&gt;, &lt;a href=&quot;https://itun.es/us/b21Ogb?i=1185111594&quot;&gt;&lt;em&gt;Confrontation on Eadu&lt;/em&gt;&lt;/a&gt;: This is the best sequence in the entire score. It has everything that punctuates action scenes throughout the movie: the frenetic pace, soaring themes, and percussive brass. The track opens up at the 2:25 mark before exploding at the 3:30 mark as X-wings flood into the canyon on their attack run. &lt;/p&gt;

&lt;p&gt;When you think the track is nearly spent, around the 5:50 mark, Giacchino jumps in again with the heart strings. I can hear Jyn’s calls to her father, “Papa”.  Soft, twisting strings unravel as Galen’s voices his final line “I have so much to tell you”. The piece then crescendos into Jyn’s theme. The closing fanfare is defiant, as though the music itself is refusing to let go. &lt;/p&gt;

&lt;p&gt;This sort of emotional rollercoaster is what Giacchino does best, and why his scores are always heavy in my rotation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track 17&lt;/strong&gt;, &lt;a href=&quot;https://itun.es/us/b21Ogb?i=1185111620&quot;&gt;&lt;em&gt;Your Father Would be Proud&lt;/em&gt;&lt;/a&gt;: This track got me in the theater. It’s arguable if the script gave you enough story to truly feel for Jyn and Cassian in their final moments. Movies aren’t just dialogue and character development. A lot of story can be told with music and visuals, both of which are in full force during this track.&lt;/p&gt;

&lt;p&gt;The closing moments of &lt;em&gt;Rogue One&lt;/em&gt; are poetic and unfiltered. The plans for the Death Star were purchased with blood from the ordinary, and courageous, who are unceremoniously cut down by the might of an elite.&lt;/p&gt;

&lt;p&gt;By Jefferson’s definition&lt;sup id=&quot;fnref:10&quot;&gt;&lt;a href=&quot;#fn:10&quot; class=&quot;footnote&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;, Jyn Erso is a patriot. An insurgent, raised by an extremist. Daughter of a man who betrayed his government. You might think that is too deep for a Star Wars movie, but the music brought me there.&lt;/p&gt;

&lt;p&gt;The sub-title for the movie could’ve easily been “The Jyn Erso Story”. Like Luke Skywalker, she is fated to do terrible, and heroic things to redeem her father. But there are no medal ceremonies in her future. There isn’t even a brass fanfare to signal the triumph of good over evil. &lt;/p&gt;

&lt;p&gt;This track is her eulogy. Her music humbly acknowledges her noble sacrifice, in the name of a cause. Simple, somber, and haunting. Not how you’d expect a &lt;em&gt;Star Wars&lt;/em&gt; story to end. &lt;/p&gt;

&lt;p&gt;You can listen to &lt;a href=&quot;https://itun.es/us/b21Ogb&quot;&gt;&lt;em&gt;Rogue One&lt;/em&gt; on Apple Music&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;A safe assumption, when I consider that you’re reading a 1500 word review of a &lt;em&gt;Star Wars&lt;/em&gt; movie soundtrack. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;I refuse to call it “A New Hope”, or worse: &lt;em&gt;Episode IV&lt;/em&gt;.  &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;My favorite example of the Rebellion theme is the final track, &lt;a href=&quot;https://itun.es/us/KZWqy?i=407047731&quot;&gt;&lt;em&gt;The Throne Room/End Titles&lt;/em&gt;&lt;/a&gt;, from &lt;em&gt;Star Wars&lt;/em&gt;. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;Track 2, &lt;a href=&quot;https://itun.es/us/mil2x?i=400077366&quot;&gt;&lt;em&gt;Across the Stars&lt;/em&gt;&lt;/a&gt; from &lt;em&gt;Attack of the Clones&lt;/em&gt;. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;I think this is a nod to Luke and Leia. The Guardians are undoubtedly awaiting the return of the Jedi. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;This theme is first heard in Track 1, &lt;a href=&quot;https://itun.es/us/b21Ogb?i=1185111586&quot;&gt;&lt;em&gt;He’s Here for Us&lt;/em&gt;&lt;/a&gt;, as Krennic’s ship approaches the Erso’s farm. &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot;&gt;
      &lt;p&gt;How could you forget “I want that ship, not excuses”, or “The emperor does not share your optimistic appraisal”? &lt;a href=&quot;#fnref:7&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:8&quot;&gt;
      &lt;p&gt;The instrumentation in the second stanza is decidedly Giachinno.  &lt;a href=&quot;#fnref:8&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:9&quot;&gt;
      &lt;p&gt;Synonymous in college football with stout defense. &lt;a href=&quot;#fnref:9&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:10&quot;&gt;
      &lt;p&gt;“The tree of liberty must be refreshed from time to time with the blood of patriots and tyrants.” –&lt;a href=&quot;http://wiki.monticello.org/mediawiki/index.php/The_tree_of_liberty...(Quotation)&quot;&gt;&lt;em&gt;Thomas Jefferson&lt;/em&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:10&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 23 Dec 2016 09:30:00 -0500</pubDate>
        <link>http://rd2.io/2016/12/music-of-rogue-one/</link>
        <guid isPermaLink="true">http://rd2.io/2016/12/music-of-rogue-one/</guid>
      </item>
      
    
      
      <item>
        <title>Star of Wonder</title>
        <description>&lt;h2 id=&quot;star-of-wonder&quot;&gt;Star of Wonder.&lt;/h2&gt;

&lt;p&gt;Winter is here. It’s nine in the evening, and I’m comfortably writing, clothed in my flannel pajamas and warm socks. No fire tonight—&lt;em&gt;I live in California after all&lt;/em&gt;. The low tonight won’t dip below forty degrees. Cool enough for to remind me of winter, but not too cold.&lt;/p&gt;

&lt;p&gt;The end of the year is approaching, and with it, the desire to look back on the year that’s passed. Of course, this year has been anything but kind. &lt;/p&gt;

&lt;p&gt;Every morning brings another unwelcome appointment from the Trump administration. Disaster feels upon us. For me personally, the year has been trying in different ways. Our move West hasn’t gone exactly as planned, leaving us lonely, and worn. I would give anything to remember the optimism that swept me into this year. &lt;/p&gt;

&lt;p&gt;Optimism, that’s what this time of year is about—right? &lt;strong&gt;Holidays.&lt;/strong&gt; Time with family. The promise of a new year. Hope for better. &lt;/p&gt;

&lt;p&gt;That optimism is easy to forget. Malls blasting the same holiday music over and over, and the abundance of cinnamon scent. Does &lt;em&gt;everything&lt;/em&gt; have to peppermint flavored?  &lt;/p&gt;

&lt;p&gt;Then yesterday, after we finished decorating the tree, I was reminded. It was during a refrain in &lt;em&gt;We Three Kings&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;As a child, we sang it every year. Like many Christmas hymns, I know the words by heart. I think it was Father Edmund’s favorite. I can perfectly remember him strolling down the aisle—no hymnal in hand—belting the lyrics as the mass started. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;There was the optimism&lt;/em&gt;. It was the joy in his face. Unbridled, enthusiastic like a child’s.&lt;/p&gt;

&lt;p&gt;Whenever I hear certain Christmas hymns, I remember Father Edmund and it makes me smile. I &lt;em&gt;love&lt;/em&gt; Christmas music. People would always sing louder because they knew the words.&lt;/p&gt;

&lt;p&gt;My parents divorced when I was young, and as a teenager I lived with my Dad. When it was my mom’s turn for Christmas, we would attend a church on Christmas Eve that had a special music service. My brother and sister usually didn’t go. My mother and I both love music, so it was our thing.&lt;/p&gt;

&lt;p&gt;My step-mother and father are Catholic, but my mother’s church used to meet in a high school auditorium. They didn’t usually have a service on Christmas. Instead we went to this particular church for their music. &lt;/p&gt;

&lt;p&gt;It was a small Methodist church, in downtown Raleigh. We didn’t know anyone. We just wanted to sing hymns and listen to the organ and choir.&lt;/p&gt;

&lt;p&gt;My childhood wasn’t particularly fun. Holidays were always split between families. It made it hard to have your usual holiday traditions, when each year was different. So, it was the little things for me. Like Father Edmund singing &lt;em&gt;We Three Kings&lt;/em&gt;, and the Christmas eve service I attended with my mom. &lt;/p&gt;

&lt;p&gt;Music was my tradition.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Silent Night&lt;/em&gt;. &lt;em&gt;Come all ye Faithful&lt;/em&gt;. &lt;em&gt;O Holy Night&lt;/em&gt;. When I would sing these songs, things felt hopeful. Music gave me optimism that the new year would bring better tidings, just like the words told me.&lt;/p&gt;

&lt;p&gt;It was that same music which brought me hope again this year. I took notice of my boys decorating the tree. I watched as they recounted tales for each ornament. And my heart ached as they placed certain homemade trimmings, which were created by smaller, younger versions of themselves. I was reminded that I was fortunate, and blessed. &lt;/p&gt;

&lt;p&gt;In that brief moment, I forgot about the loved ones lost this year, the stupid election, and even those assholes who broke into my car and stole my bag earlier this week. The uncertainty, upheaval, and frustration of the year melted away. I felt joy.&lt;/p&gt;

&lt;p&gt;That is the magic of winter. Despite all that has happened, I can still be hopeful for the next year. I need only remember to look in the right places. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“O star of wonder, star of night,&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Star with royal beauty bright,&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Westward leading, still proceeding,&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Guide us to thy perfect Light.”&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However you celebrate this winter, be it religious or not, I hope you can share it with friends and family. And remind yourself, to find joy.&lt;/p&gt;
</description>
        <pubDate>Mon, 12 Dec 2016 09:30:00 -0500</pubDate>
        <link>http://rd2.io/2016/12/star-of-wonder/</link>
        <guid isPermaLink="true">http://rd2.io/2016/12/star-of-wonder/</guid>
      </item>
      
    
  </channel>
</rss>