<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Joe L. Wroten</title>
    <description>The latest articles on Forem by Joe L. Wroten (@gaiety).</description>
    <link>https://forem.com/gaiety</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F18216%2Fcba343ff-f38c-43b3-a483-8afdfc6ea814.png</url>
      <title>Forem: Joe L. Wroten</title>
      <link>https://forem.com/gaiety</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gaiety"/>
    <language>en</language>
    <item>
      <title>Non-Ember Things in Ember</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Thu, 26 Apr 2018 00:00:00 +0000</pubDate>
      <link>https://forem.com/gaiety/non-ember-things-in-ember-55a3</link>
      <guid>https://forem.com/gaiety/non-ember-things-in-ember-55a3</guid>
      <description>&lt;p&gt;The Ember community is great and &lt;a href="https://www.npmjs.com/search?q=ember"&gt;full of great ember-cli friendly addons&lt;/a&gt; to add to your project. Using &lt;a href="https://github.com/reactjs/redux"&gt;Redux&lt;/a&gt;? Check out &lt;a href="https://www.npmjs.com/package/ember-redux"&gt;ember-redux&lt;/a&gt;. Need &lt;a href="https://github.com/ftlabs/fastclick"&gt;FastClick&lt;/a&gt;? Check out... well, actually your best bet is &lt;a href="https://www.npmjs.com/package/ember-hammertime"&gt;ember-hammertime&lt;/a&gt; but you get the point.&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;sometimes you just &lt;em&gt;need&lt;/em&gt; to incorporate something that isn't Ember ready&lt;/strong&gt;. Today that's easier than ever!&lt;/p&gt;

&lt;h2&gt;
  
  
  Show Me
&lt;/h2&gt;

&lt;p&gt;In this example we'll be adding &lt;code&gt;url-polyfill&lt;/code&gt; to our Ember app. &lt;em&gt;I know &lt;code&gt;ember-url&lt;/code&gt; is out there but it lacks some of the functionality &lt;code&gt;url-polyfill&lt;/code&gt; offers.&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;yarn add url-polyfill&lt;/code&gt; or &lt;code&gt;npm install --save url-polyfill&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In your &lt;code&gt;ember-cli-build.js&lt;/code&gt; within the &lt;code&gt;module.exports = function() {&lt;/code&gt; add the following...
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node_modules/url-polyfill/url-polyfill.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You're done!&lt;/p&gt;

&lt;p&gt;For bonus points, you can even configure which import you use based on the environment...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;development&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PATH/file.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;production&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PATH/file.min.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This also works with css files to bring in your favorite CSS framework, animation library or other tool. If you're still using bower, simply point your import path to &lt;code&gt;bower_components/DEPENDENCY/FILE.EXT&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  But, wait, I have some setup I need to do!
&lt;/h3&gt;

&lt;p&gt;That's cool too! An initializer is likely what you'll want.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ember generate initializer myInitializer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then within there you can run any initialization code your heart desires and it'll run at app load.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to go further?
&lt;/h2&gt;

&lt;p&gt;Make an ember-addon for your favorite tool and publish it on npm! The community would appreciate it and love the easy of an &lt;code&gt;ember install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Go make great things. Or... combine great things into an even greater thing!&lt;/p&gt;

</description>
      <category>ember</category>
    </item>
    <item>
      <title>Faster Test Suites, Less Code, Embracing Writing Addons.</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Fri, 17 Nov 2017 06:06:38 +0000</pubDate>
      <link>https://forem.com/gaiety/faster-test-suites-less-code-embracing-writing-addons-81h</link>
      <guid>https://forem.com/gaiety/faster-test-suites-less-code-embracing-writing-addons-81h</guid>
      <description>

&lt;p&gt;Less code, a faster test suite, and a tighter focus on core functionality can be achieved through embracing open source. &lt;a href="https://www.emberaddons.com/"&gt;Ember addons&lt;/a&gt; are on point in delivering such a promise as I've learned while open sourcing a widely used &lt;a href="https://github.com/q2ebanking/ember-select-light"&gt;component at work&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The key is a separation of concerns. Modifying code rebuilds the app and, before shipping, all tests must be verified again regardless of what the modifcations touch. Moving chunks of an app, such as a component, to an open source addon grants all the benefits that come with code isolation. Admittedly similar can be achieved with careful abstraction and no open source, but I feel it's the right direction for myself and likely others to aim for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less code&lt;/strong&gt; a developer must retain in their heads the easier they may reason about the way an app flows. A well tested and well documented addon promises a level of functionality not often afforded by yet another file to be debugged within the app. While addon code eventually gets compiled into the final output, I've found the act of isolating code into an addon forces me to code more concisely and clearly for public consumption. Without the goal of open sourcing the addon I may cut corners thinking "it's just for me, no big deal" which can do more harm than good longterm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Faster test suite&lt;/strong&gt; runs, without the cost of coverage, comes isolating tests to separate addon projects. This goes both ways in fact. Tests get removed from the original app and an addon will have just the tests to cover itself resulting in a quick build and test time. Isolated testing concerns can lead to higher relative code coverage and a quicker feedback loop for &lt;a href="https://www.youtube.com/watch?v=2b1vcg_XSR8"&gt;test-driven development&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tighter focus on core functionality&lt;/strong&gt; arises from the need to isolate an addon's concern to a concise idea. Assigning a name and writing documentation for an addon is a healthy exercise in producing a highly intentional and hopefully valuable addon.&lt;/p&gt;

&lt;p&gt;After becoming no longer afraid of the world of open source I've learned to embrace the advantages that come from creating a wide range of projects. Addons are a new and exciting world for me and hopefully for you as well.&lt;/p&gt;


</description>
      <category>git</category>
      <category>opensource</category>
      <category>ember</category>
      <category>testing</category>
    </item>
    <item>
      <title>Less Blue Light, Better Sleep</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Sat, 02 Sep 2017 00:00:00 +0000</pubDate>
      <link>https://forem.com/gaiety/less-blue-light-better-sleep</link>
      <guid>https://forem.com/gaiety/less-blue-light-better-sleep</guid>
      <description>&lt;p&gt;Actively limiting blue light, both artificial and natural, can make you a healthier and happier person. No, really, it can.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fs4h5wvjxk9vu11cfr8eo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fs4h5wvjxk9vu11cfr8eo.jpg" alt="Blurry Blue Light on Face with Light Leaks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Photo by &lt;a href="https://unsplash.com/photos/anhQGEYbnV4?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Juil Yoon&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;

&lt;p&gt;Imagine a workday without eye strain or grogginess. Regaining control over your ability to fall asleep comfortably. With some tweaks to daily habits and reducing blue light intake this can be a reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  What? Why blue light?
&lt;/h2&gt;

&lt;p&gt;Briefly, the more harmful spectrum of light is within a band of blue light. This narrow band of harmful light contributes the most to eye strain and wakefulness. &lt;a href="http://www.allaboutvision.com/cvs/blue-light.htm" rel="noopener noreferrer"&gt;Learn More&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  On Eye Strain
&lt;/h2&gt;

&lt;p&gt;Sitting for eight or more hours staring at a screen isn't what you're paid for - you're paid to produce results. You can only achieve that if you're healthy. Eye strain can lead to headaches and health problems resulting in your eyes degrading slowly over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get up. Move around.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Take a break&lt;/strong&gt; from the computer screen. Converse with your colleagues. &lt;strong&gt;Avoid eating lunch at your desk&lt;/strong&gt;. While we're reducing our blue, let's up our green - &lt;strong&gt;go outside&lt;/strong&gt; and see some grass, trees, plants &lt;strong&gt;to feel refreshed and revitalized&lt;/strong&gt;. Some time in the sun can help too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Filtering Blue Light
&lt;/h3&gt;

&lt;p&gt;Just as there are glasses to protect from the sun, &lt;strong&gt;some glasses filter out blue light&lt;/strong&gt;. Over the counter blue light filtering lenses are available or you may &lt;em&gt;speak with your eye doctor&lt;/em&gt; on &lt;strong&gt;adding them to your next pair&lt;/strong&gt;. I personally use blue light filters in my primary pair of glasses and can happily say there is no color noticeable color distortion to disrupt my design work.&lt;/p&gt;

&lt;p&gt;UPDATE: Some applications you already use such as Amazon's Kindle book reading service offers dark or sepia themes for reading with reduced eye strain.&lt;/p&gt;

&lt;p&gt;Applications like &lt;a href="https://justgetflux.com/" rel="noopener noreferrer"&gt;F.lux&lt;/a&gt; (or &lt;a href="https://support.apple.com/en-us/HT207570" rel="noopener noreferrer"&gt;iOS Night Shift&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.urbandroid.lux" rel="noopener noreferrer"&gt;Android Twilight&lt;/a&gt;, &lt;a href="http://jonls.dk/redshift/" rel="noopener noreferrer"&gt;Linux Redshift&lt;/a&gt; and others) allow for removing or reducing &lt;em&gt;the output&lt;/em&gt; of blue light from your device. Some of these tools can intelligently fade the amount of blue light based on the time of day or be disabled based on a timer.&lt;/p&gt;

&lt;h2&gt;
  
  
  On Sleep
&lt;/h2&gt;

&lt;p&gt;Blue light activates "wake up" signals in our brain (what? this isn't a science blog). &lt;strong&gt;Avoid these wake up signals 30-60 minutes before bed&lt;/strong&gt; and you'll not only &lt;em&gt;fall asleep more easily&lt;/em&gt;, but you'll be &lt;em&gt;awaken more smoothly&lt;/em&gt; without that groggy sensation.&lt;/p&gt;

&lt;p&gt;If you're unable to get 30-60 minutes away from a screen before bed then reconsider your nighttime habits. Worse yet, if you're coding late into the night then immediately attempt going to sleep your mind is at its most active state or you could burn yourself out. Instead, consider shutting off the screen a little early and let your mind problem solve during the downtime and while you're sleeping - you'll likely be more productive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality of sleep is far more important than the quantity of sleep you receive&lt;/strong&gt;. If you're not waking up feeling refreshed then you'll need to reconsider your sleep habits.&lt;/p&gt;




&lt;p&gt;For bonus points, cut out caffeine from your diet some or entirely. Avoid eating just before bed and sleep in a dark room without interruptions whenever possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;To truly live a healthy work life balance we must take care of ourselves physically and mentally. The quality of sleep we receive drastically affects our moods and health in both the short and long term. Better managing the excess of blue light from our modern world into our lives can result in better sleep and longer lasting good eyesight with fewer health problems.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Enjoy this article? I've also written about &lt;a href="https://wrotenwrites.com/polyphasic-sleep-and-passion/" rel="noopener noreferrer"&gt;What Polyphasic Sleep Taught Me About Passion&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>sleep</category>
      <category>life</category>
      <category>health</category>
      <category>workplace</category>
    </item>
    <item>
      <title>The Great App Store Trials</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Sun, 13 Aug 2017 00:00:00 +0000</pubDate>
      <link>https://forem.com/gaiety/the-great-app-store-trials</link>
      <guid>https://forem.com/gaiety/the-great-app-store-trials</guid>
      <description>&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=io.cordova.myspells"&gt;Today marks my first day as a published app store developer&lt;/a&gt;. It's been a dream of mine to release work I've done not just on the web, but as something native you can put in your pocket without needing a browser. Some stories are of great heroes who overcome dangerous challenges through incredible feats of might; this one is of the problems and solutions of releasing a web app to the Play Store.&lt;/p&gt;

&lt;h2&gt;
  
  
  Act I: Building the App
&lt;/h2&gt;

&lt;p&gt;I chose the &lt;a href="http://quasar-framework.org/"&gt;Quasar Framework&lt;/a&gt; powered by &lt;a href="https://vuejs.org/"&gt;Vue.js&lt;/a&gt; with &lt;a href="https://cordova.apache.org/"&gt;Cordova&lt;/a&gt; mobile conversion built in. &lt;strong&gt;Choosing tools that played well together&lt;/strong&gt; assured me that if I &lt;em&gt;read the documentation&lt;/em&gt; and put in the effort &lt;strong&gt;I'd eventually succeed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Release often&lt;/strong&gt;. Advice I give to anyone and even easier to follow for a hobbyist project. Hit your &lt;strong&gt;minimum viable product then release&lt;/strong&gt; the app to the public.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem: Releasing a Web App Cheaply and Easily
&lt;/h3&gt;

&lt;p&gt;I'm no server admin. I've built my app and just wish to see it online for public consumption.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Netlify
&lt;/h4&gt;

&lt;p&gt;Open Source projects can be automatically deployed and built directly from a Github repo for free to the &lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt; servers. Once hosted you get a simple URL to include in your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem: Bugs
&lt;/h3&gt;

&lt;p&gt;They happen, bugs are a natural part of application development. Keeping a todo list on your computer seems counter to the connected open source world we live in.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Github Issues
&lt;/h4&gt;

&lt;p&gt;Being transparent in logging bugs has a number of benefits. &lt;a href="https://guides.github.com/features/issues/"&gt;Github Issues&lt;/a&gt; is a great tool for this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As easy as a todo list.&lt;/li&gt;
&lt;li&gt;Great practice, especially if you &lt;em&gt;follow &lt;a href="http://semver.org/"&gt;SemVer&lt;/a&gt;&lt;/em&gt; and write &lt;em&gt;clean commits&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Users know what's busted and have a window into helping to &lt;em&gt;fix the bugs themselves&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forms a public history for the project&lt;/strong&gt; while &lt;em&gt;encouraging a changelog&lt;/em&gt; as the app evolves.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Act II: Building for Android
&lt;/h2&gt;

&lt;p&gt;Generally &lt;a href="http://quasar-framework.org/guide/quasar-play-app.html"&gt;Quasar makes compiling for Android easy&lt;/a&gt; and enjoyable. Running their mobile dev tools unveiled several mobile specific bugs, which I logged then fixed.&lt;/p&gt;

&lt;p&gt;Quasar's easy tools are great for quick feedback but are nothing compared to a real debugging APK running on your phone. Luckily there are docs for &lt;a href="http://quasar-framework.org/guide/cordova-wrapper.html"&gt;wrapping your Quasar app in Cordova&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem: Running Cordova Built APK
&lt;/h3&gt;

&lt;p&gt;The documentation drops off quickly after Cordova has done its job.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You find yourself in a wolf's den of opinions and tools in a world of assumed knowledge.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Emulation through &lt;a href="https://developer.android.com/studio/index.html"&gt;Android Studio&lt;/a&gt; is possible, but I could never get it to work with my non-Android-Studio app.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Cordova compile to device.
&lt;/h4&gt;

&lt;p&gt;After some digging, the most successful way to compile to my Android device was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;quasar build&lt;/code&gt; from my &lt;strong&gt;root&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;quasar run --device&lt;/code&gt; from the &lt;strong&gt;cordova directory&lt;/strong&gt; while my &lt;strong&gt;phone was plugged&lt;/strong&gt; in with &lt;strong&gt;USB Debugging&lt;/strong&gt; turned on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This automatically compiles and opens the app on your connected Android device.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;P.S. Android Studio may still be required here.&lt;/em&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Also... Overcoming USB Debugging
&lt;/h5&gt;

&lt;p&gt;Enabling USB Debugging on modern Android phones is the opposite of obvious. Luckily, &lt;a href="https://www.kingoapp.com/root-tutorials/how-to-enable-usb-debugging-mode-on-android.htm"&gt;this guide to Android USB debugging&lt;/a&gt; explains the process.&lt;/p&gt;

&lt;h5&gt;
  
  
  Also... Overcoming USB Cable Differences
&lt;/h5&gt;

&lt;p&gt;I encountered times where USB debugging refused to work. Turns out &lt;em&gt;some usb cables only transfer power and not data&lt;/em&gt;. Use the correct USB cable type to avoid wasted time for silly reasons.&lt;/p&gt;

&lt;h4&gt;
  
  
  Problem: Local Ajax Calls Don't Work
&lt;/h4&gt;

&lt;p&gt;JSON cannot be fetched locally as we could on Netlify. I did not wish to bake in all of my data on the web app to slow down initial load.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Bake in data for the app build only.
&lt;/h4&gt;

&lt;p&gt;For my web app, the only concern with baking in data was app size for first load. On mobile that's not a problem. In fact, baking in the data means an even easier offline solution.&lt;/p&gt;

&lt;p&gt;I wrote a &lt;a href="https://github.com/sharpshark28/my_spells/blob/master/build/process_spells.js"&gt;data processor&lt;/a&gt; node script that could either compile my data to a JSON file or to a JS importable module (with &lt;code&gt;export default ...&lt;/code&gt;) along with some &lt;a href="https://github.com/sharpshark28/my_spells/blob/master/package.json"&gt;package.json build scripts&lt;/a&gt; to simplify the process during development and releases. In the app, I always import the JS module and if there is &lt;code&gt;data.length &amp;gt; 0&lt;/code&gt; I use it, else I attempt to fetch the JSON file.&lt;/p&gt;

&lt;p&gt;It took effort, but assured that my both the web and android app were quick to launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  ACT III: Publishing
&lt;/h2&gt;

&lt;p&gt;Congratulations! You have an app that runs on Android. Next, you must fumble through the &lt;em&gt;app publishing process&lt;/em&gt;. I've done my best to list the steps, problems and solutions below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step: You Want Money and My Soul?
&lt;/h3&gt;

&lt;p&gt;First step is registering for a Publisher Account with your Google User. This involves agreeing to many terms of services and paying a &lt;strong&gt;fee of $25&lt;/strong&gt; that separates you from the potential onslaught of crapware and spam that may otherwise reach the Play Store. Relatively straightforward and &lt;em&gt;a necessary evil&lt;/em&gt; to progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem: Releasable APK file
&lt;/h3&gt;

&lt;p&gt;Up until now &lt;em&gt;we've been using a debugging APK&lt;/em&gt; file. That's not good enough for release.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Cordova Build
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;cordova build&lt;/code&gt; will create an android-release-unsigned.apk that is, as the filename implies, an &lt;strong&gt;unsigned but otherwise ready to release APK&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Problem: Signing the APK file
&lt;/h3&gt;

&lt;p&gt;One of the least documented parts of the process is signing the APK outside of a completely Android Studio made app.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Android App Studio, Keystore, jarsigner
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://developer.android.com/studio/index.html"&gt;Android Studio&lt;/a&gt; and launch it&lt;/li&gt;
&lt;li&gt;Open an Existing Project... choose the cordova created project directory for the app&lt;/li&gt;
&lt;li&gt;Build -&amp;gt; Generate Signed APK&lt;/li&gt;
&lt;li&gt;Key Store Path: Create New (follow onscreen prompts)

&lt;ul&gt;
&lt;li&gt;Note the place you've saved it, and what the key alias is (key0 is fine)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Close Android Studio, we'll instead use jarsigner to sign our apk:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  jarsigner &lt;span class="nt"&gt;-verbose&lt;/span&gt; &lt;span class="nt"&gt;-sigalg&lt;/span&gt; SHA1withRSA &lt;span class="nt"&gt;-digestalg&lt;/span&gt; SHA1 &lt;span class="nt"&gt;-keystore&lt;/span&gt; &amp;lt;~/path/to/keystore.jks&amp;gt; &amp;lt;~/path/to/android-release-unsigned.apk&amp;gt; &amp;lt;KEY ALIAS&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Problem: Installing onto Android Device
&lt;/h3&gt;

&lt;p&gt;Let's get it running on our Android once again, signed and ready to release.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;adb install ~/path/to/android-release-signed.apk&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Installing &lt;code&gt;adb&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;adb&lt;/code&gt; can be installed from the Android Studio Preferences screen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Appearance &amp;amp; Behavior &amp;gt; System Settings &amp;gt; Android SDK &amp;gt; SDK Tools&lt;/li&gt;
&lt;li&gt;Check Android SDK Build-Tools, Android SDK Platform-Tools, Android SDK Tools&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;adb&lt;/code&gt; still isn't available, correct your path like so: &lt;a href="https://stackoverflow.com/questions/10303639/adb-command-not-found"&gt;https://stackoverflow.com/questions/10303639/adb-command-not-found&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now running &lt;code&gt;adb install&lt;/code&gt; on your apk will install directly to your device.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem: zipalign
&lt;/h3&gt;

&lt;p&gt;While uploading to the Play Store you may see a notice that the apk is not zipaligned.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: zipalign it
&lt;/h4&gt;

&lt;p&gt;Unfortunately this is not a tool we can install by itself, but it does come with Android Studio.&lt;/p&gt;

&lt;p&gt;The command we desire to run is something like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;zipalign -v 4 ~/path/to/file.apk ~/path/to/newfile.apk&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;zipalign&lt;/code&gt; with the path to it on your machine, likely under your android studio sdk directory. &lt;/p&gt;




&lt;p&gt;Finally we have a &lt;strong&gt;signed, zipaligned, releasable APK file ready for the Play Store&lt;/strong&gt;. Follow the prompts on the site and your app will hopefully be published within a day.&lt;/p&gt;

&lt;p&gt;I encourage others to write about their experiences building apps for the Play Store. I'm sure there are simpler ways to achieve the same result with fewer headaches. Ultimately, having a published app on the Play Store is a very satisfying experience and this document will serve as a reminder of the trials I've been through in an attempt to inform others of the problems that may be encountered along the way with some solutions that worked for me.&lt;/p&gt;

&lt;p&gt;Stuck with a similar project? Reach out to me on Twitter @SharpShark28&lt;/p&gt;

</description>
      <category>app</category>
      <category>retrospective</category>
      <category>appstore</category>
    </item>
    <item>
      <title>Performance Reviews - You and Your Peers</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Thu, 01 Jun 2017 20:21:25 +0000</pubDate>
      <link>https://forem.com/gaiety/performance-reviews---you-and-your-peers</link>
      <guid>https://forem.com/gaiety/performance-reviews---you-and-your-peers</guid>
      <description>&lt;p&gt;You possess something invaluable. Management relies on you to give honest feedback of your coworkers when its time for peer performance reviews.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Perhaps writing a performance review feels boring or mandatory.&lt;/em&gt; An empty, white, often-too-small text box with the ask of summarizing a coworker's qualities as an employee can be daunting. Never underestimate its importance, however, just as we see importance in reviewing a peer's code before its added to the project we consider our own, we should equally consider our peers themselves at the company we associate with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provide Feedback Often - Not Just On Judgment Day ðŸš«
&lt;/h2&gt;

&lt;p&gt;Imagine you're in a college class. You feel you're doing well. You take your final. Suddenly you're given a failing grade for the course.&lt;/p&gt;

&lt;p&gt;Being given poor marks when it's too late isn't fair and doesn't support a healthy culture. &lt;strong&gt;Give feedback regularly throughout the year&lt;/strong&gt; to &lt;em&gt;avoid surprise criticism&lt;/em&gt; and &lt;em&gt;give time to improve&lt;/em&gt; and fix any critiques you may have.&lt;/p&gt;

&lt;p&gt;Write any critique given as with an actionable solution. Instead of "they made me miss the deadline" perhaps "if we communicate better we should be able to make the next deadline as a team".&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions To Reflect Upon ðŸ’­
&lt;/h2&gt;

&lt;p&gt;Below are the questions I consider when reflecting upon my experiences and understanding of a colleague I'm trying to qualify.&lt;/p&gt;

&lt;h3&gt;
  
  
  Has This Person Ever Made Your Day Easier? ðŸ‘
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"Colleague pair programmed with me to solve a difficult problem while teaching me how to debug similar problems in the future."&lt;/li&gt;
&lt;li&gt;"Colleague wrote a well documented component that solved my needs and saved me many hours of work."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Acknowledge when a coworker has saved you time, stress, or helped you learn a new skill. These are often selfless offerings from people just looking to help their fellow workers and make the company a better place to work.&lt;/p&gt;

&lt;p&gt;Conversely, if an individual has made more days difficult than they have made easier that is an indicator of a problem worth speaking up about.&lt;/p&gt;

&lt;h3&gt;
  
  
  Has This Person Helped You Grow? ðŸŒ±
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"Colleague made me rethink how I approach testing my code."&lt;/li&gt;
&lt;li&gt;"Colleague provided a great example of how to reach a work-life balance."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Positive influences, critical thinkers, and industry leaders often surround us at work. It's easy to presume these are already known qualities to everyone. It's important to be explicit and state what may seem obvious to us, but may not be to others such as management.&lt;/p&gt;

&lt;p&gt;If you've learned from those around you it's only fair to acknowledge the source of the growth for the teachers to be rewarded. This not only could lead to their promotion, but also to a positive feedback loop of them desiring to continue to help others.&lt;/p&gt;

&lt;h3&gt;
  
  
  Has This Person Shown Any or All The Skills of a &lt;a href="http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/"&gt;Senior Engineer or Equivalent&lt;/a&gt;? ðŸ·
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"Colleague was very receptive to my code feedback despite it being my first few weeks on the job."&lt;/li&gt;
&lt;li&gt;"Colleague was eager to help me learn an otherwise obscure skill."&lt;/li&gt;
&lt;li&gt;"Colleague showed professionalism in their demeanor by addressing core problems while never making excuses. A real doer, not a complainer"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Potential promotions are a primary goal of peer reviews. &lt;a href="http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/"&gt;On Being a Senior Engineer&lt;/a&gt; offers a new perspective on what makes a mature engineer while dismissing false qualities like years of experience.&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Mature engineers seek out constructive criticism of their designs.&lt;/li&gt;
&lt;li&gt;Mature engineers understand the non-technical areas of how they are perceived.&lt;/li&gt;
&lt;li&gt;Mature engineers do not shy away from making estimates, and are always trying to get better at it.&lt;/li&gt;
&lt;li&gt;Mature engineers have an innate sense of anticipation, even if they don't know they do.&lt;/li&gt;
&lt;li&gt;Mature engineers understand that not all of their projects are filled with rockstar-on-stage work.&lt;/li&gt;
&lt;li&gt;Mature engineers lift the skills and expertise of those around them.&lt;/li&gt;
&lt;li&gt;Mature engineers make their trade-offs explicit when making judgements and decisions.&lt;/li&gt;
&lt;li&gt;Mature engineers don't practice CYAE ("Cover Your Ass Engineering").&lt;/li&gt;
&lt;li&gt;Mature engineers are empathetic.&lt;/li&gt;
&lt;li&gt;Mature engineers are aware of cognitive biases.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Conversely, if an individual meets very few or none of the items on this list it may be an indicator of room for improvement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Has This Person Shown Healthy Levels of Involvement or &lt;a href="https://www.mindtools.com/pages/article/newCDV_36.htm"&gt;Desire to Job Craft&lt;/a&gt;? ðŸ»
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"Despite colleague being from team X, they were passionate while collaborating on my project."&lt;/li&gt;
&lt;li&gt;"Project lead improved the designs of their reports to help in understanding the data. Their background in design really shows through their work."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's all too easy to sit at a desk and trudge through the &lt;em&gt;minimum amount of work&lt;/em&gt; assigned to earn a paycheck. It's also &lt;em&gt;all too common to overwork&lt;/em&gt; oneself accepting an ever increasing quantity of that same work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mindtools.com/pages/article/newCDV_36.htm"&gt;Job Crafting&lt;/a&gt; shows a strive for &lt;strong&gt;work-life balance&lt;/strong&gt; through utilizing one's own &lt;strong&gt;unique set of skills&lt;/strong&gt;. A colleague who works on a &lt;strong&gt;diverse range of projects&lt;/strong&gt; while &lt;strong&gt;collaborating with multiple teams&lt;/strong&gt; is a great quality to acknowledge during a peer review. Your acknowledgment will help encourage management to consider what the individual is already doing in a more official capacity to assist in further developing their career.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Writing
&lt;/h2&gt;

&lt;p&gt;Extracting answers to these questions into their &lt;strong&gt;qualities&lt;/strong&gt; is the last step in writing a quality peer review. As with any professional writing, be &lt;strong&gt;concise&lt;/strong&gt;. Be &lt;strong&gt;fair&lt;/strong&gt;. &lt;em&gt;Write about others as you wish they'd write about you.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>workplace</category>
      <category>empathy</category>
    </item>
    <item>
      <title>Getting Started Gets Better With You</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Fri, 05 May 2017 12:34:14 +0000</pubDate>
      <link>https://forem.com/gaiety/getting-started-gets-better-with-you</link>
      <guid>https://forem.com/gaiety/getting-started-gets-better-with-you</guid>
      <description>&lt;p&gt;&lt;strong&gt;How was your onboarding experience?&lt;/strong&gt; How were your first moments of any development job in recent recollection?&lt;/p&gt;

&lt;p&gt;If you recall it being a pleasant experience, then I'm glad for you. Generally, onboarding a new developer involves a process of awkwardly asking people you barely know what feel like stupid questions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting Started Gets Better With You
&lt;/h1&gt;

&lt;p&gt;Write down your questions no matter how seemingly simple they may be. Then follow up on your notes with the answers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Where is the app's repo?&lt;/li&gt;
&lt;li&gt;How do I install the app's dependencies?&lt;/li&gt;
&lt;li&gt;How do I launch the app?&lt;/li&gt;
&lt;li&gt;Where do I find work to do?&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Suddenly you wind up with something akin to an &lt;em&gt;FAQ&lt;/em&gt; (Frequently Asked Questions). Passing along these questions and answers to the next new hire can make a dramatic impact on their &lt;strong&gt;first impression&lt;/strong&gt; and ability to &lt;strong&gt;ramp up quickly&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making It Real
&lt;/h2&gt;

&lt;p&gt;Asking for forgiveness rather than permission can be daunting when you're new. A safe way to spread and better your notes is sharing them with the next new hire. Be sure to gather any questions they have and improve your notes with each person you work with.&lt;/p&gt;

&lt;p&gt;Ideally publishing these notes internally in an internal knowledge base, wiki, or the README.md of the project repo can be a great resource. I encourage&lt;br&gt;
anyone to submit a pull request to clean up the often neglected README's in repositories to answer the typical questions that currently may be answered by repetitive word of mouth.&lt;/p&gt;

&lt;h1&gt;
  
  
  See a problem? Be the solution.
&lt;/h1&gt;

&lt;p&gt;Anyone can make a positive impact on company culture by sharing what you've learned with others.&lt;/p&gt;

&lt;p&gt;Take notes. Share them. Don't be afraid of taking initiative. Imagine the impact such an effort could've had on your first days and don't let the trend of ignoring onboarding continue.&lt;/p&gt;

</description>
      <category>workplace</category>
    </item>
    <item>
      <title>Self Code Review with Git Add Patch</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Fri, 05 May 2017 12:31:34 +0000</pubDate>
      <link>https://forem.com/gaiety/self-code-review-with-git-add-patch</link>
      <guid>https://forem.com/gaiety/self-code-review-with-git-add-patch</guid>
      <description>

&lt;p&gt;Code reviews reduce logical errors, call out typos, and prevents accidentally committing more code than intended (&lt;a href="https://www.atlassian.com/agile/code-reviews"&gt;1&lt;/a&gt;). They're essential for &lt;em&gt;all sized teams&lt;/em&gt; pushing to the same code base while &lt;em&gt;maintaining sanity&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Should a developer find themselves discovering any accidental "oops!" in their pull request it's a good indicator of a flaw in workflow. &lt;strong&gt;Introducing the interactive self code review:&lt;/strong&gt;&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nt"&gt;--interactive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Interactive adding in git offers a choose-your-own-adventure style "What Now&amp;gt;" series of options.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Useful Bit: &lt;em&gt;Git Patch&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Today let's look at the &lt;em&gt;&lt;strong&gt;p&lt;/strong&gt;atch&lt;/em&gt; option. We can skip to the patch option in the future with this handy shortcut:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example pretends we have file.ext and have added a line that defines a version...&lt;/em&gt;&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nt"&gt;-p&lt;/span&gt;

diff &lt;span class="nt"&gt;--git&lt;/span&gt; a/file.ext b/file.ext
index sha1..sha2 sha3
&lt;span class="nt"&gt;--&lt;/span&gt; a/file.ext
++ b/file.ext
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"name"&lt;/span&gt;: &lt;span class="s2"&gt;"example json"&lt;/span&gt;,
  +&lt;span class="s2"&gt;"version"&lt;/span&gt;: &lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;,
  &lt;span class="s2"&gt;"private"&lt;/span&gt;: &lt;span class="nb"&gt;true&lt;/span&gt;,
Stage this hunk &lt;span class="o"&gt;[&lt;/span&gt;y,n,q,a,d,/,e,?]?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Looks like a huge chunk of stuff! Broken down, the response describes what file was modified followed by a chunk of color coated git diff.&lt;/p&gt;

&lt;h3&gt;
  
  
  Now What? Staging Hunks of Code
&lt;/h3&gt;

&lt;p&gt;Many options are provided in the "Stage this hunk?" prompt following a git add patch.&lt;/p&gt;

&lt;p&gt;Pressing &lt;code&gt;?&lt;/code&gt; in response to the prompt explains each valid response. These are some essentials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;y&lt;/strong&gt; - stage this hunk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n&lt;/strong&gt; - do &lt;em&gt;not&lt;/em&gt; stage this hunk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;q&lt;/strong&gt; - quit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You'll find that by going through this process you can read every line you'd like to add to a commit and make better choices about them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Splitting &lt;code&gt;s&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;These "magical" feeling chunks aren't always smart enough. Sometimes there's a need to split (with the &lt;code&gt;s&lt;/code&gt; response) a chunk into smaller chunks. This comes up more often than you'd think if you're developing empathetically.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;a&lt;/code&gt; Add or &lt;code&gt;d&lt;/code&gt; Don't Add Entire File
&lt;/h3&gt;

&lt;p&gt;An &lt;code&gt;a&lt;/code&gt; response will stage the current hunk and all the following within the current file automatically. This is &lt;strong&gt;&lt;em&gt;not&lt;/em&gt; recommended because you're opting to skip parts of your personal code review&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However, &lt;code&gt;d&lt;/code&gt; is a nice way to skip adding anything from an entire file and can save a lot of time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manually Editing
&lt;/h3&gt;

&lt;p&gt;Typos or "oops!" can be quickly corrected with the &lt;code&gt;e&lt;/code&gt; response. This will open just the chunk for quick adjustments including line adding and removal.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Git patch has become a core part of my workflow to &lt;strong&gt;ensure quality&lt;/strong&gt; and boost &lt;strong&gt;personal confidence in the code I ship&lt;/strong&gt;. Give it a try today!&lt;/p&gt;


</description>
      <category>git</category>
      <category>workplace</category>
      <category>codereview</category>
    </item>
    <item>
      <title>Easy Git Commit Targeting</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Fri, 05 May 2017 12:26:13 +0000</pubDate>
      <link>https://forem.com/gaiety/easy-git-commit-targeting</link>
      <guid>https://forem.com/gaiety/easy-git-commit-targeting</guid>
      <description>

</description>
      <category>git</category>
      <category>tipsandtricks</category>
    </item>
    <item>
      <title>Hi, I'm Joe L. Wroten</title>
      <dc:creator>Joe L. Wroten</dc:creator>
      <pubDate>Fri, 05 May 2017 12:20:50 +0000</pubDate>
      <link>https://forem.com/gaiety/hi-im-joe-l-wroten</link>
      <guid>https://forem.com/gaiety/hi-im-joe-l-wroten</guid>
      <description>&lt;p&gt;I have been coding for 6+ years.&lt;/p&gt;

&lt;p&gt;You can find me on Twitter as &lt;a href="https://twitter.com/SharpShark28" rel="noopener noreferrer"&gt;@SharpShark28&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I live in Austin, TX.&lt;/p&gt;

&lt;p&gt;I work for &lt;a href="https://www.q2ebanking.com/" rel="noopener noreferrer"&gt;Q2ebanking&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I mostly program in these languages: JS, HTML/HBS, CSS/Sass.&lt;/p&gt;

&lt;p&gt;I am currently learning more about Haskell.&lt;/p&gt;

&lt;p&gt;A pleasure to meet you!&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
