Jekyll2018-09-26T01:41:50+00:00https://bear454.github.io/B E A R 4 5 42 parts tech, 1 part sarcasm.
BLUG Logo Drafts (v1)2018-09-25T00:00:00+00:002018-09-25T00:00:00+00:00https://bear454.github.io/2018/09/25/blog-logo-drafts-v1<p>Over at LFNW, we’ve been working with a student in graphic design, who has done some great work for us. She designed both the well received Individual Supporter and Staff t-shirts, and she’s working on a new logo and visual design for LFNW, which we’re pretty excited about.</p>
<p>As a side project, we also asked for some drafts of a logo for the Bellingham Linux Users Group - we’ve never had a proper logo, but as LFNW grows, we want to highlight BLUG’s role in creating the event, and so want to have a better “visual profile”.</p>
<p>Here are the first round of drafts… we’ll discuss these briefly at the <a href="https://www.meetup.com/Bellingham-Linux-User-Group-BLUG/events/ffprjmyxnbgb/">next BLUG meeting</a>.</p>
<p><a href="/assets/blug_logo_drafts_v1.pdf"><i class="far fa-file-download"></i> blug_logo_drafts_v1.pdf</a></p>Over at LFNW, we’ve been working with a student in graphic design, who has done some great work for us. She designed both the well received Individual Supporter and Staff t-shirts, and she’s working on a new logo and visual design for LFNW, which we’re pretty excited about.Goodbye (and good riddance) Bookmarks2018-09-06T00:00:00+00:002018-09-06T00:00:00+00:00https://bear454.github.io/2018/09/06/goodbye-bookmarks<p>I hop browsers. I admit it, readily. I find no shame in it; I’m not “flip-flopping”; I’m looking for the best tool for the job, and when it comes to web browsers, they are still rapidly evolving. This habit, though, is not without drawbacks.</p>
<!--more-->
<p>Even the definition of what a browser should do is evolving; 20 years ago, your browser was either part of a comprehensive application for all things “online”, or itself a complete suite of online tools… think <em><a href="https://discover.aol.com/products-and-services/aol-desktop-for-windows">AOL</a></em> or <a href="https://www.youtube.com/watch?v=RyGu0LE4cxM">Netscape Communicator</a> (which included a browser, mail client, news reader, a WYSIWYG HTML editor…). Today, the browser is more of an application framework (think <a href="https://electronjs.org/">Electron</a> - which is based on <a href="https://www.chromium.org/Home">chromium</a>), and increasingly a tool for managing personal data (e.g. “privacy”). Both <a href="https://developer.mozilla.org/en-US/docs/Archive/B2G_OS">Mozilla</a> and <a href="https://www.google.com/chromebook/">Google</a> have built operating systems based, primarily, on hosting a web browser. Features like Chrome’s <a href="https://support.google.com/chrome/answer/95464?co=GENIE.Platform%3DDesktop&hl=en">Incognito</a> mode, and browsers like <a href="https://brave.com/">Brave</a>, <a href="https://iridiumbrowser.de/">Iridium</a>, and <a href="https://www.torproject.org/projects/torbrowser.html.en">Tor Browser</a> focus on limiting how you are tracked online, and how your information is shared (or preferably not shared). <a href="https://www.opera.com/computer/features/free-vpn">Opera</a> and <a href="https://www.epicbrowser.com/our-key-features.html">Epic</a> boast built-in support for VPNs. As we’ve moved from ‘gateway’ to ‘platform’, superfluous features have been stripped out, and browser development has turned towards performance, consistency, and stability: Google’s <a href="https://developers.google.com/v8/">V8</a> Javascript engine is at the core of Electron and <a href="https://nodejs.org/api/v8.html#v8_v8">Node.js</a>, and the <a href="https://wiki.gnome.org/JavaScript">GNOME Desktop</a> is built on Mozilla’s <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey">Spidermonkey</a>; Firefox’s <a href="https://blog.mozilla.org/blog/2017/11/14/introducing-firefox-quantum/">Quantum</a> release boasted a massive rewrite of the rendering engine into new multi-threaded model. The downside is, that all the browsers move at their own speed, so it’s impossible to say, after any release, that there is a Lord of the Browsers, one browser to rule them all. Some releases are huge steps forward, some are shocking steps backwards.</p>
<p>The problem is, browsers are still clinging to some ‘gateway’ features, some unhealthy attachment to bygones that haven’t been clearly replaced by better, independent products, or so I thought. Bookmarks, password managers, start page content… <em>blech</em>. All these things are still carried around in every browser, and no browser handles them well, <em>because they’re not the core function</em>. They’re afterthoughts now, and they <em>don’t play nice with each other</em>. These appendices, this cruft, is what makes switching browsers harder than it ought to be.</p>
<p>My problem with this, simply, is I have a lot of bookmarks. Not a big heap of bookmarks, but carefully curated folders of folders of entries I use on a regular and daily basis. Hundreds of them. I maintain my bookmarks; I curate them. They keep my work organized, and I pay back the favor… you get the idea. Yet, every time I switch browsers, I end up fixing things up again. Firefox offers to import your bookmarks… into the “From [some other browser]” <a href="https://support.mozilla.org/en-US/kb/import-bookmarks-google-chrome">folder</a>. Chrome <a href="https://support.google.com/chrome/answer/96816?hl=en">relegates</a> them to some position that’s not displayed on the bookmarks bar. God forbid you try using a few browsers together… the only plugin that made any earnest effort to keep things in sync was <a href="https://news.slashdot.org/story/18/04/27/1924210/bookmark-syncing-service-xmarks-closes-for-good-on-may-1">XMarks</a>, and it’s been relegated to the trash heap. This is just on the desktop… I’ve not even touched on the mess that is getting those bookmarks to work on some mobile browser. <em>Shudder</em>.</p>
<p>Well, I <em>had</em> a lot of bookmarks. I couldn’t deal with the back and forth anymore. It’s enough just to keep the bookmarks neat and functional; trying to get browsers to play nice was just more than I was ready to deal with.</p>
<blockquote>
<p>Side Note:
I am actually pursuing a side project that will make those damn browsers play nice… but it’s a <em>long way off</em>…</p>
</blockquote>
<p>Well, I’m a developer. I make software, and I’d like to think I’m fairly good at it. So, I decided to look at this like any software problem… and the clear solution was to <em>refactor my bookmarks</em>; abstract them away from the browsers in a way that maintained usability. So… here we go… “<a href="https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean Code</a>” meets “bookmark hell”:</p>
<h3 id="1-there-are-two-kinds-of-bookmarks-applications-one-uses-and-media-one-experiences-documents-to-read-videos-to-watch-you-get-the-idea-separate-them">1. There are two kinds of bookmarks. Applications one uses, and media one experiences (documents to read, videos to watch, you get the idea). Separate them.</h3>
<h3 id="2-application-bookmarks-are-redundant-with-your-password-manager-so-make-use-of-it">2. Application bookmarks are redundant… with your password manager. So make use of it.</h3>
<p>I work with public clouds, so I <del>have</del> had a top-level bookmark folder of all the cloud provider portals. But all the credentials for those unique portals are in my <a href="https://lastpass.com">Lastpass</a> vault as well, <em>including the URL</em>. It turns out most password managers have built-in <a href="https://support.logmeininc.com/lastpass/help/organize-your-vault-with-folders-lp040010">functionality</a> for sorting/grouping entries… this is a perfect place to keep <em>all</em> your application URLs. I duplicated my bookmark folder structure into Lastpass, and proceeded to delete all the bookmarks that are redundant. Lastpass plugs into every browser I care to use, from Firefox to Brave, and maintains it’s own sync behind the scenes. You may prefer another password manager, but I’m sure you’ll find that if it integrates with browsers, it integrates with almost all browsers; or it doesn’t integrate at all, and that’s exactly how you want it… you Luddite.</p>
<h3 id="3-media-can-be-further-subdivided-into-things-you-keep-for-reference-and-things-you-just-want-to-consume-but-havent-had-time-for-further-sort-these-into-two-piles-this-also-a-great-time-to-reflect-on-all-those-blog-posts-you-bookmarked-four-years-ago-but-never-got-around-to-reading-discard-what-is-obviously-no-longer-relevant">3. Media can be further subdivided into things you keep for reference, and things you just want to consume but haven’t had time for. Further sort these into two piles. This also a great time to reflect on all those blog posts you bookmarked four years ago, but never got around to reading. Discard what is obviously no longer relevant.</h3>
<p>Now, there are two paths you can go down here… and I ended up going down both.</p>
<p>Pick out a “pinboard” app, if you don’t have one already. I decided to go with <a href="https://getpocket.com">Pocket</a>, and again it plays nicely with every browser I care to use and syncs nicely. <a href="https://help.getpocket.com/article/938-tagging-in-pocket-on-your-computer">Tags</a> took the place of folders here, but that’s fine, it’s still searchable, and if <em>one good thing</em> has come out of Gmail, it’s that tags and folders can be <a href="https://askleo.com/how-do-gmail-labels-relate-to-folders/">interchangeable</a>. Those docs you want to keep for reference? Favorite them. Star them. Make a ‘reference’ tag. Whatever.</p>
<p>I found I also had a few documents I wanted quicker access to than with Pocket… so I added those to Lastpass as favorites as well. Now, whether I start searching in Lastpass, or Pocket, I always have my <a href="https://youtu.be/m5csNO3oMrQ?t=21s">Circus Music youtube video</a> readily accessible.</p>
<h3 id="4-hide-your-bookmarks-and-test-things-out">4. Hide your bookmarks, and test things out.</h3>
<p>You may find that your password manager isn’t making searches easy, or that your pinboard just takes too long to load. Fine tune your folders & tags until you find and arrangement that works. If you’re trying out a new tool and it’s not working out, try another one before you get too invested! I ended up flattenning things a bit in Lastpass, to make navigation easier, and made my Pocket index my “home” page and “new tab” page, so things were quickly within reach.</p>
<h3 id="5-when-it-works-delete-your-bookmarks">5. When it works, <em>delete your bookmarks</em>.</h3>
<p>Avoid the temptation to go back and get stuck in that rat trap again. Delete all your bookmarks in each browser, and hide the bookmarks bar as far away as you can. Disable the feature if you can. Make sure you’re living in your new bookmarkless world for real. (It’s okay to keep that backup you made before you started. You <em>did</em> make a backup, right?)</p>
<h3 id="6-bonus-win-at-mobile">6. Bonus: win at mobile!</h3>
<p>I found, as a bonus, that it was now easier than ever to also do things on my smartphone, when I needed to. The tradeoff there was relatively simple; I just needed to stop trying to use a <em>single</em> browser on my phone, and accept the browser component built into apps. Lastpass on Android lets me add fingerprint security, and still get to things quickly (and wipe out my sessions when I’m done.) Pocket makes it super easy to read some of those blog posts I’d been sitting on when I’m otherwise just sitting.</p>
<p>Vice versa, when some app wants me to register, I can generate the credentials in Lastpass, instead of resorting to “that one password I can remember” - it will also fill them in again after I wipe the data out. That site I want to check out mentioned in a podcast? Pocket’ed… for reading later.</p>
<h3 id="final-thoughts">Final thoughts.</h3>
<p>So here I am, a month into <em>not having bookmarks</em>, and I’m just as happy with the decision as the moment I figured out it would work; all the trepidation about deleting my bookmarks.html files is gone, and I’m not looking back. What I am looking at is why I’m seeing some rendering glitches in Brave that I don’t see in Chromium; Google Chrome (and it’s weird relationship with <a href="https://www.wired.com/story/google-chrome-ad-blocker-change-web/">online ads</a>) are just handling those janky DRM-laden media sites, and Firefox 61 has solved most of the performance issues I saw in early Quantum releases. Multi-browser living is easy!</p>I hop browsers. I admit it, readily. I find no shame in it; I’m not “flip-flopping”; I’m looking for the best tool for the job, and when it comes to web browsers, they are still rapidly evolving. This habit, though, is not without drawbacks.BLUG: Developer Tools for Desktop Users2017-11-03T00:00:00+00:002017-11-03T00:00:00+00:00https://bear454.github.io/2017/11/03/blug<p>On <a href="https://www.meetup.com/Bellingham-Linux-User-Group-BLUG/events/244192000/">Thursday, Nov 2, 2017</a>, I presented for the <a href="http://blug.org">Bellingham Linux Users Group</a> “Developer tools for Desktop Users”.</p>
<p>We talked about using <code class="highlighter-rouge">git</code> for versioning documents & configuration, using diff tools like <code class="highlighter-rouge">meld</code> to analyze system logs, and did a little Q&A on some deeper topics.</p>
<p>Of course, no presentation is truly complete without a failed demo - I tried to post this last night (showing <a href="https://jekyllrb.com/">Jekyll</a> + <a href="https://pages.github.com/">github pages</a> for quick, easy, free web hosting) and totally failed. I’ve spent a little time this morning digging through, and as far as I can tell, the problem was upstream at github… but the error message is sufficiently vague to prevent ever knowing <em>why</em>.</p>
<blockquote>
<p>Your site is having problems building: unable to build page. Please try again later.</p>
</blockquote>
<p>Oh well. One day later, here are the <a href="https://bear454.github.io/assets/DTfDU.pdf">slides</a>. Thanks to those who attended!</p>On Thursday, Nov 2, 2017, I presented for the Bellingham Linux Users Group “Developer tools for Desktop Users”.Firefox Klar2017-09-13T00:00:00+00:002017-09-13T00:00:00+00:00https://bear454.github.io/2017/09/13/firefox-klar<p><strong>TL;DR: Firefox Klar (a.k.a Focus) is free enough to hit F-Droid</strong></p>
<p>I’m trying harder to protect my personal privacy, and in order to guarantee that I’m trying to use more open source apps.</p>
<p>I was really excited about <a href="https://www.mozilla.org">Mozilla</a>’s <a href="https://blog.mozilla.org/blog/2017/06/20/firefox-focus-new-to-android-blocks-annoying-ads-and-protects-your-privacy/">launch</a> of <a href="https://www.mozilla.org/en-US/firefox/focus/">Firefox Focus</a> on Android, a mobile browser designed around privacy. Ironically, Firefox Focus was not avialable on F-Droid, because it contains non-free, binary tracking libraries(here’s the <a href="https://gitlab.com/fdroid/rfp/issues/171">report</a>). <em>sigh</em>. Back to <a href="https://f-droid.org/packages/acr.browser.lightning/">Lightning</a> I went.</p>
<blockquote>
<p><strong>SIDEBAR:</strong> check out <a href="https://github.com/anthonycr/Lightning-Browser">Lighting</a>, if you’re looking for a lightweight, but more conventionally featured browser. It’s got really cool <a href="https://lh3.googleusercontent.com/1pKW8t_4p73Ac2oheH6PH2QxK72leuhpucpAZdmv1ASg764hRQnTrLjC5iI5tSyJrQ=h900-rw">tab</a> & <a href="https://lh3.googleusercontent.com/CgXeLv11CXF1Cl-tfKwWqSods7l0em-xpEZfq-cnkBX951Q59ToM3jXPr8NDynKJq-c=h900-rw">bookmark</a> interfaces!</p>
</blockquote>
<p>Well, apparently the Germans wouldn’t stand for that, and <a href="https://support.mozilla.org/en-US/kb/what-firefox-klar-android">Firefox Klar</a> was released, sans trackers. It’s <a href="https://support.mozilla.org/en-US/kb/difference-between-firefox-focus-and-firefox-klar">Focus</a>, just without all the tracking binaries… and it’s in <a href="https://f-droid.org/packages/org.mozilla.klar/">F-Droid</a>. <em>W00t.</em></p>TL;DR: Firefox Klar (a.k.a Focus) is free enough to hit F-DroidBlog, v2.02017-09-11T00:00:00+00:002017-09-11T00:00:00+00:00https://bear454.github.io/2017/09/11/blog-two-dot-oh<p><strong>Time for a fresh start.</strong></p>
<p>I’m done with Blogger, and I don’t even have to link over to the old blog, as <a href="http://import.jekyllrb.com/">jekyll-import</a> did a dandy job of bringing it all along.</p>
<p>Hopefully, now that I can write in my editor of choice, review locally, and post as easily as <code class="highlighter-rouge">git push</code>, I’ll actually get back around to doing the short, semiregular content I’ve always wanted to post here. <em>Wish me luck!</em></p>Time for a fresh start.‘Web’ applications and the circle of life.2017-01-20T18:24:00+00:002017-01-20T18:24:00+00:00https://bear454.github.io/2017/01/20/web-applications-and-circle-of-life<div class="separator" style="clear: both; text-align: center;"><a href="https://upload.wikimedia.org/wikipedia/commons/8/86/8-UX-Pitfalls-To-Avoid-In-Mobile-App-Design.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Dijoantonycj (https://commons.wikimedia.org/wiki/File:8-UX-Pitfalls-To-Avoid-In-Mobile-App-Design.jpg), „8-UX-Pitfalls-To-Avoid-In-Mobile-App-Design“, https://creativecommons.org/licenses/by-sa/4.0/legalcode" border="0" height="320" src="https://upload.wikimedia.org/wikipedia/commons/8/86/8-UX-Pitfalls-To-Avoid-In-Mobile-App-Design.jpg" title="So many 'apps'" width="320" /></a></div><br /><br />Web technologies are a funny thing. There's no doubt that web applications have improved far beyond what was imagined in the early days of the web... everything is more performant, more interactive, and designs are more immersive. JS engines have gotten faster, HTML specifications have embraced more resources, including local integration, and CSS has grown to allow rich, robust styling. We continue to push the envelope with technologies that will serve the web faster, like HTML 2 and websockets. Web development has become a huge field. The combination of fast moving technology, developed by a growing workforce has, inevitably, allowed "web" technologies to migrate into other areas: node.js runs many server-side applications; the gnome desktop relies heavily on CSS and JS for implementing basic UI elements; HTML documentation pervades.<br /><br />It's natural, then, that user-facing applications would escape the browser frame. In multiple different iterations now, "web applications" have become just "applications" on the desktop or mobile platform. Somehow, though, they're never 'good enough' for general adoption by both the consumer and developer communities: adoption rises and falls like waves on the sea, each wave a new round of applications driven by advances in web technologies, only to be eclipsed by 'native' (C++, CLR/.net, Objective-C, GTK/Qt) applications, over and over. Why? And when will web applications truly be 'good enough'?<br /><br />I noticed, as I installed yet-another Electron app, that I'm sitting at the top of another wave, while simultaneously, a prior wave of web applications is being eclipsed, and it made me reflect on just how many times we've been through this.<br /><br />In 2007, Apple released the iPhone, with the expectation that developers would use mobile Safari to build apps, for which 'installation' meant, mostly, adding a shortcut on the phone. Steve Jobs has been quoted[<a href="https://9to5mac.com/2011/10/21/jobs-original-vision-for-the-iphone-no-third-party-native-apps/" target="_blank">1</a>]:<br /><br /><blockquote class="tr_bq">The full Safari engine is inside of iPhone. And so, you can write amazing Web 2.0 and Ajax apps that look exactly and behave exactly like apps on the iPhone. And these apps can integrate perfectly with iPhone services. They can make a call, they can send an email, they can look up a location on Google Maps.<br />And guess what? There’s no SDK that you need! You’ve got everything you need if you know how to write apps using the most modern web standards to write amazing apps for the iPhone today. So developers, we think we’ve got a very sweet story for you. You can begin building your iPhone apps today.</blockquote><br />The App Store is largely viewed as a response to early jailbreakers, and complaints from a developer community that did not want to embrace web technologies, and since, the volume of (native) apps in the App Store has been a regular measure of the success of the platform.<br /><br />In 2012, Mozilla once again brought web-based applications to the forefront, launching FirefoxOS which was described as "powered completely by Web technologies and offer everything you expect from a smartphone"[<a href="https://blog.mozilla.org/blog/2013/07/01/mozilla-and-partners-prepare-to-launch-first-firefox-os-smartphones/" target="_blank">2</a>]. In 2016, Mozilla demoted the project, although this is typically associated with the lackluster sales, and continuous stream of negative reviews, as Mozilla pushed toward their ultra-low price point goal of a $25 smartphone.<br /><br />Google has found much more success with ChromeOS, and the broad market of Chromebooks available with the lightweight, web-centric OS. While early announcements appeared in 2009, the first hardware didn't ship until mid 2011, the CR-48 from Google. ChromeOS may have had a slow start, but it quickly picked up steam, and hasn't slowed, despite having, basically, one native app: the Chrome web browser. Chrome apps, which run on both desktop Chrome and ChromeOS, "let you use HTML5, CSS, and JavaScript to deliver an experience comparable to a native application."[<a href="https://developer.chrome.com/apps/about_apps" target="_blank">3</a>].<br /><br />Despite accelerating sales of Chromebooks[<a href="http://www.digitaltrends.com/computing/chromebook-sales-up-end-2015/" target="_blank">4</a>][<a href="http://www.theverge.com/2016/5/19/11711714/chromebooks-outsold-macs-us-idc-figures" target="_blank">5</a>], fed by their low price points, security improvements based largely on their small footprint and native image delivery systems, and their ease of administration, Google still felt pressure to bring 'native' apps to ChromeOS. This is, ironically, a complete inversion of the native application. With Chrome as the foundation, and the Android marketplace chosen as the source for a larger application pool, we've seen an evolving series of Android emulation layers be bolted onto Chrome... while this does pave the way for the larger pool of Android apps to run on Chromebooks, Chrome remains the native environment here, and Android apps will, for the near term at least, be burdened by the performance losses inherent in any emulation layer.<br /><br />The newest wave of Chromebooks feature much beefier specs than their web-centric predecessors, driving up price points from the $200 range on average to the $500 range[<a href="https://chromeunboxed.com/ces-2017-samsung-chromebook-pro-price-announced/" target="_blank">6</a>][<a href="http://www.zdnet.com/article/ces-2017-asus-flip-c302-is-499-full-hd-convertible-chromebook-with-intel-skylake-cpu/" target="_blank">7</a>], largely in support of Android apps, but also to meet the needs of power users who like the basic design principles of an OS with a smaller attack surface, simplified maintenance, and easy access to developer tools, over increasingly expensive Macbooks[<a href="https://www.washingtonpost.com/news/the-switch/wp/2016/10/27/what-to-expect-from-apples-new-mac-event/?utm_term=.e93147025038" target="_blank">8</a>] or Windows machines whose resources are ever-more consumed by the OS itself[<a href="http://superuser.com/questions/987608/what-is-the-approximate-installation-size-of-a-clean-windows-10-upgrade-post" target="_blank">9</a>].<br /><br />And yet, simultaneously, web applications are rising again. Github's Electron[<a href="http://electron.atom.io/docs/tutorial/about/" target="_blank">10</a>] project paves the way for desktop applications based on chromium (the open source upstream of Google Chrome) and Node.js, with tooling and instructions around packaging for Windows, MacOS, and Linux (!!!). Electron grew out of the Atom project[<a href="https://atom.io/" target="_blank">11</a>], an effort to provide an open-source, extensible code editor based on web technologies. (Full disclosure... Atom is my IDE of choice... for now.) Electron, serendipitously, released in the midst of a wave of next-generation communication tools, and has found it's killer app in providing an easy way for Slack[<a href="http://thenextweb.com/apps/2016/09/14/slack-beta-app/" target="_blank">12</a>], rocket.chat[<a href="https://github.com/RocketChat/Rocket.Chat.Electron" target="_blank">13</a>], Riot[<a href="https://github.com/vector-im/riot-web#running-as-a-desktop-app" target="_blank">14</a>], Wire[<a href="https://github.com/wireapp/wire-desktop#wire-desktop" target="_blank">15</a>] and Discord[<a href="https://twitter.com/discordapp/status/698706512844226560" target="_blank">16</a>] to easily move their web-based applications to the desktop. Today, I installed yet-another Electron app just recently: Simplenote[<a href="https://github.com/automattic/simplenote-electron" target="_blank">17</a>], an open-source tool for jotting quick notes and syncing them _everywhere_. I stepped back and realized that nearly all the new apps I'm trying, and most of the apps I'm using, are web-based. Either packaged Electron apps like Atom and rocket.chat, or Chrome apps/frames like Trello[<a href="https://chrome.google.com/webstore/detail/trello/dmdidbedhnbabookbkpkgomahnocimke" target="_blank">18</a>], Signal[<a href="https://chrome.google.com/webstore/detail/signal-private-messenger/bikioccmkafdpakkkcpdbppfkghcmihk" target="_blank">19</a>], and Autodesk's TinkerCAD[<a href="https://chrome.google.com/webstore/detail/tinkercad/bhggmehigifnpflipbkdfcjiacpcgidn" target="_blank">20</a>]. And the native apps on my desktop? Web browsers mostly (both Chrome and Firefox), along with a couple of 'legacy' apps: Pidgin for old-school chat, and Evolution, for connection to my work mail.<br /><br />So, where are you in the lifecycle of web applications? Riding the crest of Electron apps, or waiting for that shiny new Chromebook that lets you run emulated Android apps? Or, do you live in iOS or Android, and just can't even tell (or care) what technologies are underneath the hood of your apps? Are you surprised to find more web technology on your desktop than you expected? I'd love to hear!<br /><br /><br />[1] <a href="https://9to5mac.com/2011/10/21/jobs-original-vision-for-the-iphone-no-third-party-native-apps/">https://9to5mac.com/2011/10/21/jobs-original-vision-for-the-iphone-no-third-party-native-apps/</a><br />[2] <a href="https://blog.mozilla.org/blog/2013/07/01/mozilla-and-partners-prepare-to-launch-first-firefox-os-smartphones/">https://blog.mozilla.org/blog/2013/07/01/mozilla-and-partners-prepare-to-launch-first-firefox-os-smartphones/</a><br /><div>[3] <a href="https://developer.chrome.com/apps/about_apps">https://developer.chrome.com/apps/about_apps</a></div><div>[4] <a href="http://www.digitaltrends.com/computing/chromebook-sales-up-end-2015/">http://www.digitaltrends.com/computing/chromebook-sales-up-end-2015/</a></div><div>[5] <a href="http://www.theverge.com/2016/5/19/11711714/chromebooks-outsold-macs-us-idc-figures">http://www.theverge.com/2016/5/19/11711714/chromebooks-outsold-macs-us-idc-figures</a></div><div>[6] <a href="https://chromeunboxed.com/ces-2017-samsung-chromebook-pro-price-announced/">https://chromeunboxed.com/ces-2017-samsung-chromebook-pro-price-announced/</a></div><div>[7] <a href="http://www.zdnet.com/article/ces-2017-asus-flip-c302-is-499-full-hd-convertible-chromebook-with-intel-skylake-cpu/">http://www.zdnet.com/article/ces-2017-asus-flip-c302-is-499-full-hd-convertible-chromebook-with-intel-skylake-cpu/</a></div><div>[8] <a href="https://www.washingtonpost.com/news/the-switch/wp/2016/10/27/what-to-expect-from-apples-new-mac-event/?utm_term=.e93147025038">https://www.washingtonpost.com/news/the-switch/wp/2016/10/27/what-to-expect-from-apples-new-mac-event/?utm_term=.e93147025038</a></div><div>[9] <a href="http://superuser.com/questions/987608/what-is-the-approximate-installation-size-of-a-clean-windows-10-upgrade-post">http://superuser.com/questions/987608/what-is-the-approximate-installation-size-of-a-clean-windows-10-upgrade-post</a></div><div>[10] <a href="http://electron.atom.io/docs/tutorial/about/">http://electron.atom.io/docs/tutorial/about/</a></div><div>[11] <a href="https://atom.io/">https://atom.io/</a></div><div>[12] <a href="http://thenextweb.com/apps/2016/09/14/slack-beta-app/">http://thenextweb.com/apps/2016/09/14/slack-beta-app/</a></div><div>[13] <a href="https://github.com/RocketChat/Rocket.Chat.Electron">https://github.com/RocketChat/Rocket.Chat.Electron</a></div><div>[14] <a href="https://github.com/vector-im/riot-web#running-as-a-desktop-app">https://github.com/vector-im/riot-web#running-as-a-desktop-app</a></div><div>[15] <a href="https://github.com/wireapp/wire-desktop#wire-desktop">https://github.com/wireapp/wire-desktop#wire-desktop</a></div><div>[16] <a href="https://twitter.com/discordapp/status/698706512844226560">https://twitter.com/discordapp/status/698706512844226560</a></div><div>[17] <a href="https://github.com/automattic/simplenote-electron">https://github.com/automattic/simplenote-electron</a></div><div>[18] <a href="https://chrome.google.com/webstore/detail/trello/dmdidbedhnbabookbkpkgomahnocimke">https://chrome.google.com/webstore/detail/trello/dmdidbedhnbabookbkpkgomahnocimke</a></div><div>[19] <a href="https://chrome.google.com/webstore/detail/signal-private-messenger/bikioccmkafdpakkkcpdbppfkghcmihk">https://chrome.google.com/webstore/detail/signal-private-messenger/bikioccmkafdpakkkcpdbppfkghcmihk</a></div><div>[20] <a href="https://chrome.google.com/webstore/detail/tinkercad/bhggmehigifnpflipbkdfcjiacpcgidn">https://chrome.google.com/webstore/detail/tinkercad/bhggmehigifnpflipbkdfcjiacpcgidn</a></div><div><br />Cover image:<br /><a href="https://commons.wikimedia.org/wiki/User:Dijoantonycj">Dijoantonycj</a>, <a href="https://commons.wikimedia.org/wiki/File:8-UX-Pitfalls-To-Avoid-In-Mobile-App-Design.jpg">8-UX-Pitfalls-To-Avoid-In-Mobile-App-Design</a>, <a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode">CC BY-SA 4.0</a></div>James MasonWeb technologies are a funny thing. There's no doubt that web applications have improved far beyond what was imagined in the early days of the web... everything is more performant, more interactive, and designs are more immersive. JS engines have gotten faster, HTML specifications have embraced more resources, including local integration, and CSS has grown to allow rich, robust styling. We continue to push the envelope with technologies that will serve the web faster, like HTML 2 and websockets. Web development has become a huge field. The combination of fast moving technology, developed by a growing workforce has, inevitably, allowed "web" technologies to migrate into other areas: node.js runs many server-side applications; the gnome desktop relies heavily on CSS and JS for implementing basic UI elements; HTML documentation pervades.It's natural, then, that user-facing applications would escape the browser frame. In multiple different iterations now, "web applications" have become just "applications" on the desktop or mobile platform. Somehow, though, they're never 'good enough' for general adoption by both the consumer and developer communities: adoption rises and falls like waves on the sea, each wave a new round of applications driven by advances in web technologies, only to be eclipsed by 'native' (C++, CLR/.net, Objective-C, GTK/Qt) applications, over and over. Why? And when will web applications truly be 'good enough'?I noticed, as I installed yet-another Electron app, that I'm sitting at the top of another wave, while simultaneously, a prior wave of web applications is being eclipsed, and it made me reflect on just how many times we've been through this.In 2007, Apple released the iPhone, with the expectation that developers would use mobile Safari to build apps, for which 'installation' meant, mostly, adding a shortcut on the phone. Steve Jobs has been quoted[1]:The full Safari engine is inside of iPhone. And so, you can write amazing Web 2.0 and Ajax apps that look exactly and behave exactly like apps on the iPhone. And these apps can integrate perfectly with iPhone services. They can make a call, they can send an email, they can look up a location on Google Maps.And guess what? There’s no SDK that you need! You’ve got everything you need if you know how to write apps using the most modern web standards to write amazing apps for the iPhone today. So developers, we think we’ve got a very sweet story for you. You can begin building your iPhone apps today.The App Store is largely viewed as a response to early jailbreakers, and complaints from a developer community that did not want to embrace web technologies, and since, the volume of (native) apps in the App Store has been a regular measure of the success of the platform.In 2012, Mozilla once again brought web-based applications to the forefront, launching FirefoxOS which was described as "powered completely by Web technologies and offer everything you expect from a smartphone"[2]. In 2016, Mozilla demoted the project, although this is typically associated with the lackluster sales, and continuous stream of negative reviews, as Mozilla pushed toward their ultra-low price point goal of a $25 smartphone.Google has found much more success with ChromeOS, and the broad market of Chromebooks available with the lightweight, web-centric OS. While early announcements appeared in 2009, the first hardware didn't ship until mid 2011, the CR-48 from Google. ChromeOS may have had a slow start, but it quickly picked up steam, and hasn't slowed, despite having, basically, one native app: the Chrome web browser. Chrome apps, which run on both desktop Chrome and ChromeOS, "let you use HTML5, CSS, and JavaScript to deliver an experience comparable to a native application."[3].Despite accelerating sales of Chromebooks[4][5], fed by their low price points, security improvements based largely on their small footprint and native image delivery systems, and their ease of administration, Google still felt pressure to bring 'native' apps to ChromeOS. This is, ironically, a complete inversion of the native application. With Chrome as the foundation, and the Android marketplace chosen as the source for a larger application pool, we've seen an evolving series of Android emulation layers be bolted onto Chrome... while this does pave the way for the larger pool of Android apps to run on Chromebooks, Chrome remains the native environment here, and Android apps will, for the near term at least, be burdened by the performance losses inherent in any emulation layer.The newest wave of Chromebooks feature much beefier specs than their web-centric predecessors, driving up price points from the $200 range on average to the $500 range[6][7], largely in support of Android apps, but also to meet the needs of power users who like the basic design principles of an OS with a smaller attack surface, simplified maintenance, and easy access to developer tools, over increasingly expensive Macbooks[8] or Windows machines whose resources are ever-more consumed by the OS itself[9].And yet, simultaneously, web applications are rising again. Github's Electron[10] project paves the way for desktop applications based on chromium (the open source upstream of Google Chrome) and Node.js, with tooling and instructions around packaging for Windows, MacOS, and Linux (!!!). Electron grew out of the Atom project[11], an effort to provide an open-source, extensible code editor based on web technologies. (Full disclosure... Atom is my IDE of choice... for now.) Electron, serendipitously, released in the midst of a wave of next-generation communication tools, and has found it's killer app in providing an easy way for Slack[12], rocket.chat[13], Riot[14], Wire[15] and Discord[16] to easily move their web-based applications to the desktop. Today, I installed yet-another Electron app just recently: Simplenote[17], an open-source tool for jotting quick notes and syncing them _everywhere_. I stepped back and realized that nearly all the new apps I'm trying, and most of the apps I'm using, are web-based. Either packaged Electron apps like Atom and rocket.chat, or Chrome apps/frames like Trello[18], Signal[19], and Autodesk's TinkerCAD[20]. And the native apps on my desktop? Web browsers mostly (both Chrome and Firefox), along with a couple of 'legacy' apps: Pidgin for old-school chat, and Evolution, for connection to my work mail.So, where are you in the lifecycle of web applications? Riding the crest of Electron apps, or waiting for that shiny new Chromebook that lets you run emulated Android apps? Or, do you live in iOS or Android, and just can't even tell (or care) what technologies are underneath the hood of your apps? Are you surprised to find more web technology on your desktop than you expected? I'd love to hear![1] https://9to5mac.com/2011/10/21/jobs-original-vision-for-the-iphone-no-third-party-native-apps/[2] https://blog.mozilla.org/blog/2013/07/01/mozilla-and-partners-prepare-to-launch-first-firefox-os-smartphones/[3] https://developer.chrome.com/apps/about_apps[4] http://www.digitaltrends.com/computing/chromebook-sales-up-end-2015/[5] http://www.theverge.com/2016/5/19/11711714/chromebooks-outsold-macs-us-idc-figures[6] https://chromeunboxed.com/ces-2017-samsung-chromebook-pro-price-announced/[7] http://www.zdnet.com/article/ces-2017-asus-flip-c302-is-499-full-hd-convertible-chromebook-with-intel-skylake-cpu/[8] https://www.washingtonpost.com/news/the-switch/wp/2016/10/27/what-to-expect-from-apples-new-mac-event/?utm_term=.e93147025038[9] http://superuser.com/questions/987608/what-is-the-approximate-installation-size-of-a-clean-windows-10-upgrade-post[10] http://electron.atom.io/docs/tutorial/about/[11] https://atom.io/[12] http://thenextweb.com/apps/2016/09/14/slack-beta-app/[13] https://github.com/RocketChat/Rocket.Chat.Electron[14] https://github.com/vector-im/riot-web#running-as-a-desktop-app[15] https://github.com/wireapp/wire-desktop#wire-desktop[16] https://twitter.com/discordapp/status/698706512844226560[17] https://github.com/automattic/simplenote-electron[18] https://chrome.google.com/webstore/detail/trello/dmdidbedhnbabookbkpkgomahnocimke[19] https://chrome.google.com/webstore/detail/signal-private-messenger/bikioccmkafdpakkkcpdbppfkghcmihk[20] https://chrome.google.com/webstore/detail/tinkercad/bhggmehigifnpflipbkdfcjiacpcgidnCover image:Dijoantonycj, 8-UX-Pitfalls-To-Avoid-In-Mobile-App-Design, CC BY-SA 4.0Pumpkin Art2016-11-02T03:46:00+00:002016-11-02T03:46:00+00:00https://bear454.github.io/2016/11/02/pumpkin-artOne of the oddities of holidays is how language changes context. Aside from the week before Halloween, imagine the rarity of the question "what are you carving on your pumpkin?"<br /><br />Having heard this question a fair number of times last week, I reflected on some of my own pumpkin art, and <a href="https://goo.gl/photos/YsTskcNw12DRmmRd8" target="_blank">wanted to share</a>.<br /> <br /><div class="separator" style="clear: both; text-align: center;"></div><div style="text-align: center;"><a href="https://3.bp.blogspot.com/--T87leBIdHs/WBlgn4wPi_I/AAAAAAAAnbo/aIy2umY5-bAklgTawGthesSxlpVI3UkbgCLcB/s1600/IMG_20161101_200654290_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/--T87leBIdHs/WBlgn4wPi_I/AAAAAAAAnbo/aIy2umY5-bAklgTawGthesSxlpVI3UkbgCLcB/s320/IMG_20161101_200654290_HDR.jpg" width="180" /></a></div><div style="text-align: center;"><a href="https://goo.gl/photos/YsTskcNw12DRmmRd8" target="_blank"> https://goo.gl/photos/YsTskcNw12DRmmRd8</a></div>James MasonOne of the oddities of holidays is how language changes context. Aside from the week before Halloween, imagine the rarity of the question "what are you carving on your pumpkin?"Having heard this question a fair number of times last week, I reflected on some of my own pumpkin art, and wanted to share. https://goo.gl/photos/YsTskcNw12DRmmRd8Impossible problems, simple solutions2016-11-01T18:52:00+00:002016-11-01T18:52:00+00:00https://bear454.github.io/2016/11/01/impossible-problems-simple-solutions<p>Everyday we confront problems with no viable solution. Sometimes we simply accept them; sometimes we struggle against them for years. Some are critical, but most are simple annoyances; to the careful negative observer: subtle, regular signs of failure.</p> <p>For example, let me share a ridiculous lifelong struggle: microwaving a frozen burrito. This, it turns out, is an impossible problem. Sure, any idiot can throw a burrito in the microwave for a couple minutes, and have something edible, but it won't be good. The center might still be cold, or the tortilla may be hard as a rock. The filling may boil out, and most likely, the wrap will be soggy on at least one side. In short, there is nothing you can do to make a frozen burrito come out of a microwave well cooked. I should know; I've tried every possible thing. I've cooked it fast, and slow, and slow then fast. I've cooked it on a wet towel, under plastic wrap, on a special microwave cooking plate. <i>It's impossible</i>.</p> <p>If this were code, the solution would be clear: deconstruct the problem. Break it up into smaller problems, and with enough iterations and subdivisions, eventually you're not even solving smaller problems, but just following the obvious, simple course from problem to solution. On the rare occasion that doesn't work, change the scope: go back to the original premise... you're likely to find you've made an incorrect assumption. Even for software developers trained in this mindset though, applying this technique to everyday problems isn't obvious. If it was, <i>there wouldn't be frozen burritos</i>.</p> <p>I'm writing this for a couple reasons: aside from the obvious advice, reminding developers that the tools we have for coding apply in real life as well, I'm also marking a turning point for this blog... which has long been an impossible problem for me. As much as I've wanted to fill it with good content centered around open-source technologies, I'm rarely able to find a subject that isn't better covered elsewhere. I <i>want</i> to blog more. I've been asked to blog more, but always the subjects elude me. It turns out the simple solution was a problem of scope: like this post, the things I want to share, that aren't said enough, simply aren't related to open-source. So, starting with this post, I'm solving the problem... by changing the scope. From here on in, I'm writing about whatever I want, whatever I feel needs to be said, shared, repeated. Stick around, and see if we can have some interesting conversations.</p> <p>P.S. Here's the solution to frozen burritos: <ul><li>Microwave it whole, at high power, just long enough to defrost the tortilla completely.<br />Usually 45 - 75 seconds.</li><li>Open it up and scrape the filling out into a bowl.</li><li>Microwave the filling at medium heat until it's at a safe temp - I look for boiling. <br />Usually 3 - 4 minutes at 60%.</li><li>Spoon the filling back into the tortilla, wrap it back up, and cook the whole thing for 30 seconds to get the tortilla warmed up nicely.</li><li>Enjoy!</li></ul></p>James MasonEveryday we confront problems with no viable solution. Sometimes we simply accept them; sometimes we struggle against them for years. Some are critical, but most are simple annoyances; to the careful negative observer: subtle, regular signs of failure. For example, let me share a ridiculous lifelong struggle: microwaving a frozen burrito. This, it turns out, is an impossible problem. Sure, any idiot can throw a burrito in the microwave for a couple minutes, and have something edible, but it won't be good. The center might still be cold, or the tortilla may be hard as a rock. The filling may boil out, and most likely, the wrap will be soggy on at least one side. In short, there is nothing you can do to make a frozen burrito come out of a microwave well cooked. I should know; I've tried every possible thing. I've cooked it fast, and slow, and slow then fast. I've cooked it on a wet towel, under plastic wrap, on a special microwave cooking plate. It's impossible. If this were code, the solution would be clear: deconstruct the problem. Break it up into smaller problems, and with enough iterations and subdivisions, eventually you're not even solving smaller problems, but just following the obvious, simple course from problem to solution. On the rare occasion that doesn't work, change the scope: go back to the original premise... you're likely to find you've made an incorrect assumption. Even for software developers trained in this mindset though, applying this technique to everyday problems isn't obvious. If it was, there wouldn't be frozen burritos. I'm writing this for a couple reasons: aside from the obvious advice, reminding developers that the tools we have for coding apply in real life as well, I'm also marking a turning point for this blog... which has long been an impossible problem for me. As much as I've wanted to fill it with good content centered around open-source technologies, I'm rarely able to find a subject that isn't better covered elsewhere. I want to blog more. I've been asked to blog more, but always the subjects elude me. It turns out the simple solution was a problem of scope: like this post, the things I want to share, that aren't said enough, simply aren't related to open-source. So, starting with this post, I'm solving the problem... by changing the scope. From here on in, I'm writing about whatever I want, whatever I feel needs to be said, shared, repeated. Stick around, and see if we can have some interesting conversations. P.S. Here's the solution to frozen burritos: Microwave it whole, at high power, just long enough to defrost the tortilla completely.Usually 45 - 75 seconds.Open it up and scrape the filling out into a bowl.Microwave the filling at medium heat until it's at a safe temp - I look for boiling. Usually 3 - 4 minutes at 60%.Spoon the filling back into the tortilla, wrap it back up, and cook the whole thing for 30 seconds to get the tortilla warmed up nicely.Enjoy!(As a rubyist) Python sucks.2016-02-02T00:19:00+00:002016-02-02T00:19:00+00:00https://bear454.github.io/2016/02/02/as-rubyist-python-sucksI've been writing <a href="https://www.ruby-lang.org/en/" target="_blank">Ruby</a> for almost 9 years now, and I love it. Ruby, for those who don't know it, is an extremely expressive, natural coding language with roots in Perl and Smalltalk. I comment less in Ruby than any other language I've ever used, because the code tends to be clear and self-documenting. The community has a great ethos, driven by concepts like TDD/BDD (test or behavior driven development), DRY (don't repeat yourself), YAGNI (you ain't gonna need it), and convention-over-configuration.<br /><br />I've been writing <a href="https://www.python.org/" target="_blank">Python</a> for about 18 months now, and it's an amazingly powerful language, with a huge wealth of libraries and resources. I don't love it. In fact, the more I use it, the less I like it. Doing a project in Django has really spiked that feeling. It's not that Python sucks, per se, I just feel like a lot of the lessons I've learned in the last 35 years of coding, and many of the concepts I've gotten used to as a Rubyist just don't apply, and that makes me grumpy.<br /><br />This <a href="http://blug.org/meetings/general/blug-meeting-thurs-feb-4th-btc" target="_blank">Thursday, February 4th</a>, I'll be presenting for the <a href="http://blug.org/" target="_blank">Bellingham Linux Users Group</a>, where I'll expound further, hopefully amusingly and enlighteningly, on this topic.<br /><br />Thursday, Feb 4, at 7pm in <a href="http://www.btc.edu/AboutBTC/HowToFindUs/indexHowToFindUs.aspx?tab=tab3" target="_blank">BTC</a> room <a href="http://www.btc.edu/images/AboutBTC/HowToFindUs/CampusMaps-General-Large.jpg" target="_blank">CC201</a>.James MasonI've been writing Ruby for almost 9 years now, and I love it. Ruby, for those who don't know it, is an extremely expressive, natural coding language with roots in Perl and Smalltalk. I comment less in Ruby than any other language I've ever used, because the code tends to be clear and self-documenting. The community has a great ethos, driven by concepts like TDD/BDD (test or behavior driven development), DRY (don't repeat yourself), YAGNI (you ain't gonna need it), and convention-over-configuration.I've been writing Python for about 18 months now, and it's an amazingly powerful language, with a huge wealth of libraries and resources. I don't love it. In fact, the more I use it, the less I like it. Doing a project in Django has really spiked that feeling. It's not that Python sucks, per se, I just feel like a lot of the lessons I've learned in the last 35 years of coding, and many of the concepts I've gotten used to as a Rubyist just don't apply, and that makes me grumpy.This Thursday, February 4th, I'll be presenting for the Bellingham Linux Users Group, where I'll expound further, hopefully amusingly and enlighteningly, on this topic.Thursday, Feb 4, at 7pm in BTC room CC201.Why I have a Moto G.2016-01-12T23:47:00+00:002016-01-12T23:47:00+00:00https://bear454.github.io/2016/01/12/why-i-have-moto-g<div class="separator" style="clear: both; text-align: center;"><a href="http://tctechcrunch2011.files.wordpress.com/2010/08/phonestone.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://tctechcrunch2011.files.wordpress.com/2010/08/phonestone.jpg" height="200" width="133" /></a></div>My Moto X (1st gen) is dying. The camera can no longer focus on anything more than about a foot away. The radio reports 'no service' on a regular basis, requiring a reboot in order to find the LTE signal again (mind you, I can see the tower from my home). Bluetooth has gone from flaky to downright frustrating, making my Moto 360 less useful, and listening to podcasts in the car is nearly impossible. None of these are what I would call "design flaws" or reasons for you not to buy a Moto X; mine is just a few years old, with a few too many drops, splashes and slides in its history. In short - it was time for a new phone.<br /><br /><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody><tr><td style="text-align: center;"><a href="http://cdn.slashgear.com/wp-content/uploads/2009/09/nokia_n900_preview_1.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://cdn.slashgear.com/wp-content/uploads/2009/09/nokia_n900_preview_1.jpg" height="137" width="200" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">The 'shapely' Nokia N900</td></tr></tbody></table>I didn't want a new phone. Especially not right now: every phone manufacturer seems to think bigger is better, and I'd rather have something with the form factor of a deck of cards than that of a notepad. I'd hoped my 4"ish X would last long enough for trends to change. Alas, it didn't.<br /><br />So, since I couldn't get what I wanted, a small-screened powerhouse, I decided to revisit what I really wanted in a phone, and I decided to be a bit more pragmatic this time around, and not just get the most awesome phone I could find. To that end, I made a new list of priorities<b>:</b><br /><br /><h4>1. Durability is important. Elegance is not.</h4><br />My phone lives in my pants pocket. My pants pocket, it turns out, is a relatively dangerous place. It gets mashed against my thigh. My kids sit on it. It gets laundered. Sometimes it's unceremoniously dropped in a pile on the floor and kicked approximately towards the laundry hamper. In short, not at all the kind of place to be keeping something fragile, or elegant, or svelte even. If the first adjectives a device evokes are about its style, it most likely doesn't belong in my pocket. If it can be described using similar words as an NFL Linebacker, than it might stand a chance. <br /><br /><h4>2. Cheaper is better.</h4><br />As I mentioned, anything that's going to be living in my pants pocket needs to be replaceable. I don't see any reason to keep nearly a $1000 computer in my pants pocket; that would be insane. (I'm looking at you <a href="http://www.apple.com/shop/buy-iphone/iphone6s/5.5-inch-display-128gb-silver" target="_blank">iPhone</a> owners.) I'm not going to put my phone in a <a href="http://www.lifeproof.com/en-us/iphone-6s-plus-cases" target="_blank">$90 case</a>, either, no matter how "life proof" it is.<br /><br /><h4>3. Unlocked is important.</h4><br />I don't want to borrow, or lease, or rent my phone from my carrier. I don't want a contract, and I don't want a monthly payment for anything but the services I'm provided. My carrier knows I can leave at the drop of a hat, and they provide me a satisfactory service experience, every month, to keep me around. I may have stayed with the same carrier for most of the last 12 years, but that's not to say I'll stay next month. I ask, when I pay every bill "what have you done for me lately?" I can't do that if I'm beholden for 2 years of payments, or if my phone won't take another provider's SIM.<br /><br /><h4>4. Stock Android is the best Android.</h4><br />Want to make a bunch of techies groan? Start naming phone manufacturer's Android skins: HTC Sense UI. "Argh." Samsung Touchwiz. "Ugh." Moto Blur. "Eww." You get the picture. Stock Android is cleaner, faster, more usable, and the individual parts are easier to replace should you choose to, than any of the vendor skins. Don't like the home screen? Install <a href="https://play.google.com/store/apps/details?id=com.teslacoilsw.launcher" target="_blank">Nova Launcher</a>. Not enough keys on the keyboard? Try <a href="https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard" target="_blank">Hacker's Keyboard</a>. Crappy light sensor? Use <a href="https://play.google.com/store/apps/details?id=com.vito.lux" target="_blank">Lux</a>. If your vendor has mixed and mangled services, you won't be able to do one of those. For example, don't bother installing a custom keyboard if you have an Asus Transformer tablet - unless you like having an on-screen keyboard using up half your screen while the physical keyboard is attached.<br /><br />Updates are seriously affected by this as well, which makes perfect sense. What's going to take longer - validating and shipping stock Android, or reworking a skin on top of a new version? This is the #1 reason most phones don't get updates.<br /><br /><h4>5. Phones make great cameras.</h4><br /><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody><tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-xx76o3NlVbo/VpWL0iF51RI/AAAAAAAAiPk/V5czBXqpqCY/s1600/IMG_20151113_134322664_HDR.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="180" src="http://3.bp.blogspot.com/-xx76o3NlVbo/VpWL0iF51RI/AAAAAAAAiPk/V5czBXqpqCY/s320/IMG_20151113_134322664_HDR.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">No one thought to bring a 'camera' to the beach that day.</td></tr></tbody></table>Having a decent point-and-shoot camera in my pocket has changed the way I live my life, especially how naturally I can share photos with distant loved ones. Click. Share. Send. All of my best photos are impromptu, taken at a moment's notice, without staging or posing, with my phone. Having lived without this capability for the last few months, I've missed a lot, and therefore the whole family has missed a lot. Cameras are the best part of smartphones, and having one that's both high quality and convenient is critical.<br /><br /><h3 style="text-align: center;">Time to choose.</h3><br />So... where do I look? Well, the "stock android" limitation really thins the herd. Basically, you've got the Nexus line, Moto, and some random Asian vendors who just don't do much business in the US, yet. And while it's not the most important thing in the world, I may need service from the vendor, and Chinese phone vendors are notorious for bad service. Moto, on the other hand, offers 'Moto Care', no-questions-asked accidental damage protection, and I've exercised that on the Moto X (before the warranty ran out) - their service is flawless. I don't know what to say about Google's Nexus devices, as I've never needed service on any of them during warranty period... so that's both awesome and questionable at the same time.<br /><br /><br />Looking to purposely avoid high-end phones, I eliminated the current-gen Moto X and Moto X Pure, as well as Google's Nexus 6 (also Moto) and 6P. While the Moto E's price tag is really appealing, the 5MP rear camera (and no front camera) is too much of a step backwards. The last-gen Moto G seems like a great value too, but my provider has awesome LTE service, so buying a device with a 3G radio seemed like a waste. This left me deciding between the Nexus 5, and the current-gen Moto G.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://fi.google.com/about/static/images/fi_logo_2x.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://fi.google.com/about/static/images/fi_logo_2x.png" /></a></div>The Nexus 5 had a lot going for it. They've packed a lot of cool new tech into a device that's still reasonably priced: support for <a href="https://fi.google.com/about/" target="_blank">Google Fi</a>; an ergonomic fingerprint scanner, USB-C charging, etc. But, $349 felt pretty steep. I felt like the Nexus 5 was defying the direction I wanted to go; giving me cool tech instead of a reliable tool. Also, the <a href="http://www.theverge.com/2015/11/9/9696774/google-nexus-5x-upside-down-camera" target="_blank">"upside-down" photo sensor</a> really turns me off.<br /><br /><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; text-align: left;"><tbody><tr><td style="text-align: center;"><a href="http://cdn2.expertreviews.co.uk/sites/expertreviews/files/2015/07/moto_g_shells.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://cdn2.expertreviews.co.uk/sites/expertreviews/files/2015/07/moto_g_shells.jpg" height="133" width="200" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Eat your heart out, rose gold.</td></tr></tbody></table>The Moto G, on the other hand, was just the opposite - I'd have to give up some tech toys I was used to with my Moto X: NFC, hands-free interaction ("OK Moto X"), the pure black of an OLED screen. In exchange, I get the durability I'm looking for: Corning Gorilla glass; cheap, replaceable shells that maintain a waterproof (!!!) seal over the solid metal frame. For fun, those shells are available in a <a href="http://www.motorola.com/us/accessories/moto-g-3rd-gen-color-shells.html" target="_blank">rainbow of colors</a>, and even with a <a href="http://www.motorola.com/us/accessories/cases-shells/shells/moto-g-3rd-gen-flip-shells.html" target="_blank">flip-back magnetic screen cover</a>. Not to mention that the G starts at about half the price of the Nexus 5: $179 for an 8GB with 1GB RAM.<br /><br />I also get to keep using some of Moto's pioneering improvements, which I've gotten really used to - like their awesome <a href="https://play.google.com/store/apps/details?id=com.motorola.camera" target="_blank">camera app</a>. Two flicks of my wrist, and I'm taking photos: no other phone offers more convenient access to the camera. Their 'click anywhere on the screen' (or on my watch) approach continues to make my life easy. The 1080p video, or 720p slo-mo video, with live snapshotting during video recording, rivals any other devices camera tools. The pictures coming out of its 13MP camera look great both in printed snapshots, or when shared online. The 5MP front camera is more than adequate for videoconferencing as well.<br /><br /><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody><tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-hdSoC-MFqoM/VpWJWA6v9zI/AAAAAAAAiPI/7Znlr93W66w/s1600/Screenshot_20160112-150836.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="106" src="http://3.bp.blogspot.com/-hdSoC-MFqoM/VpWJWA6v9zI/AAAAAAAAiPI/7Znlr93W66w/s200/Screenshot_20160112-150836.png" width="200" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">32GB of that is a class-10 SD card.</td></tr></tbody></table><a href="http://1.bp.blogspot.com/-wCIUocbGBLk/VpWI3p7ogkI/AAAAAAAAiOw/SpMUcdQ3-mw/s1600/Screenshot_20160112-150836.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>I liked the Moto G's scaling factor as well - $40 more doesn't just bump up the storage to 16GB, but the RAM as well to 2GB. With an SD slot, and Marshmallow's ability to integrate SD storage seamlessly into the system, I ended up with plenty of storage, and plenty of RAM.<br /><br /><br />In short, I got everything I wanted: A durable, relatively inexpensive, unlocked phone running stock Android with a camera that makes my whole family smile. For fun, the <a href="https://plus.google.com/+JamesMason-bear454/posts/3ScinsoAzBj" target="_blank">shell I chose</a> is reasonably close to SUSE green. Do I miss NFC? Sure. Do I regret my choice? Not even a little. This phone is going to last me a few years, and who knows what will be out by the time it dies...<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://vignette1.wikia.nocookie.net/starwars/images/e/e0/The_Ultimate_Weapon.jpg/revision/latest" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://vignette1.wikia.nocookie.net/starwars/images/e/e0/The_Ultimate_Weapon.jpg/revision/latest" height="237" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">My next phone will project the Death Star in lieu of a ringtone.</td></tr></tbody></table><br />James MasonMy Moto X (1st gen) is dying. The camera can no longer focus on anything more than about a foot away. The radio reports 'no service' on a regular basis, requiring a reboot in order to find the LTE signal again (mind you, I can see the tower from my home). Bluetooth has gone from flaky to downright frustrating, making my Moto 360 less useful, and listening to podcasts in the car is nearly impossible. None of these are what I would call "design flaws" or reasons for you not to buy a Moto X; mine is just a few years old, with a few too many drops, splashes and slides in its history. In short - it was time for a new phone.The 'shapely' Nokia N900I didn't want a new phone. Especially not right now: every phone manufacturer seems to think bigger is better, and I'd rather have something with the form factor of a deck of cards than that of a notepad. I'd hoped my 4"ish X would last long enough for trends to change. Alas, it didn't.So, since I couldn't get what I wanted, a small-screened powerhouse, I decided to revisit what I really wanted in a phone, and I decided to be a bit more pragmatic this time around, and not just get the most awesome phone I could find. To that end, I made a new list of priorities:1. Durability is important. Elegance is not.My phone lives in my pants pocket. My pants pocket, it turns out, is a relatively dangerous place. It gets mashed against my thigh. My kids sit on it. It gets laundered. Sometimes it's unceremoniously dropped in a pile on the floor and kicked approximately towards the laundry hamper. In short, not at all the kind of place to be keeping something fragile, or elegant, or svelte even. If the first adjectives a device evokes are about its style, it most likely doesn't belong in my pocket. If it can be described using similar words as an NFL Linebacker, than it might stand a chance. 2. Cheaper is better.As I mentioned, anything that's going to be living in my pants pocket needs to be replaceable. I don't see any reason to keep nearly a $1000 computer in my pants pocket; that would be insane. (I'm looking at you iPhone owners.) I'm not going to put my phone in a $90 case, either, no matter how "life proof" it is.3. Unlocked is important.I don't want to borrow, or lease, or rent my phone from my carrier. I don't want a contract, and I don't want a monthly payment for anything but the services I'm provided. My carrier knows I can leave at the drop of a hat, and they provide me a satisfactory service experience, every month, to keep me around. I may have stayed with the same carrier for most of the last 12 years, but that's not to say I'll stay next month. I ask, when I pay every bill "what have you done for me lately?" I can't do that if I'm beholden for 2 years of payments, or if my phone won't take another provider's SIM.4. Stock Android is the best Android.Want to make a bunch of techies groan? Start naming phone manufacturer's Android skins: HTC Sense UI. "Argh." Samsung Touchwiz. "Ugh." Moto Blur. "Eww." You get the picture. Stock Android is cleaner, faster, more usable, and the individual parts are easier to replace should you choose to, than any of the vendor skins. Don't like the home screen? Install Nova Launcher. Not enough keys on the keyboard? Try Hacker's Keyboard. Crappy light sensor? Use Lux. If your vendor has mixed and mangled services, you won't be able to do one of those. For example, don't bother installing a custom keyboard if you have an Asus Transformer tablet - unless you like having an on-screen keyboard using up half your screen while the physical keyboard is attached.Updates are seriously affected by this as well, which makes perfect sense. What's going to take longer - validating and shipping stock Android, or reworking a skin on top of a new version? This is the #1 reason most phones don't get updates.5. Phones make great cameras.No one thought to bring a 'camera' to the beach that day.Having a decent point-and-shoot camera in my pocket has changed the way I live my life, especially how naturally I can share photos with distant loved ones. Click. Share. Send. All of my best photos are impromptu, taken at a moment's notice, without staging or posing, with my phone. Having lived without this capability for the last few months, I've missed a lot, and therefore the whole family has missed a lot. Cameras are the best part of smartphones, and having one that's both high quality and convenient is critical.Time to choose.So... where do I look? Well, the "stock android" limitation really thins the herd. Basically, you've got the Nexus line, Moto, and some random Asian vendors who just don't do much business in the US, yet. And while it's not the most important thing in the world, I may need service from the vendor, and Chinese phone vendors are notorious for bad service. Moto, on the other hand, offers 'Moto Care', no-questions-asked accidental damage protection, and I've exercised that on the Moto X (before the warranty ran out) - their service is flawless. I don't know what to say about Google's Nexus devices, as I've never needed service on any of them during warranty period... so that's both awesome and questionable at the same time.Looking to purposely avoid high-end phones, I eliminated the current-gen Moto X and Moto X Pure, as well as Google's Nexus 6 (also Moto) and 6P. While the Moto E's price tag is really appealing, the 5MP rear camera (and no front camera) is too much of a step backwards. The last-gen Moto G seems like a great value too, but my provider has awesome LTE service, so buying a device with a 3G radio seemed like a waste. This left me deciding between the Nexus 5, and the current-gen Moto G.The Nexus 5 had a lot going for it. They've packed a lot of cool new tech into a device that's still reasonably priced: support for Google Fi; an ergonomic fingerprint scanner, USB-C charging, etc. But, $349 felt pretty steep. I felt like the Nexus 5 was defying the direction I wanted to go; giving me cool tech instead of a reliable tool. Also, the "upside-down" photo sensor really turns me off.Eat your heart out, rose gold.The Moto G, on the other hand, was just the opposite - I'd have to give up some tech toys I was used to with my Moto X: NFC, hands-free interaction ("OK Moto X"), the pure black of an OLED screen. In exchange, I get the durability I'm looking for: Corning Gorilla glass; cheap, replaceable shells that maintain a waterproof (!!!) seal over the solid metal frame. For fun, those shells are available in a rainbow of colors, and even with a flip-back magnetic screen cover. Not to mention that the G starts at about half the price of the Nexus 5: $179 for an 8GB with 1GB RAM.I also get to keep using some of Moto's pioneering improvements, which I've gotten really used to - like their awesome camera app. Two flicks of my wrist, and I'm taking photos: no other phone offers more convenient access to the camera. Their 'click anywhere on the screen' (or on my watch) approach continues to make my life easy. The 1080p video, or 720p slo-mo video, with live snapshotting during video recording, rivals any other devices camera tools. The pictures coming out of its 13MP camera look great both in printed snapshots, or when shared online. The 5MP front camera is more than adequate for videoconferencing as well.32GB of that is a class-10 SD card.I liked the Moto G's scaling factor as well - $40 more doesn't just bump up the storage to 16GB, but the RAM as well to 2GB. With an SD slot, and Marshmallow's ability to integrate SD storage seamlessly into the system, I ended up with plenty of storage, and plenty of RAM.In short, I got everything I wanted: A durable, relatively inexpensive, unlocked phone running stock Android with a camera that makes my whole family smile. For fun, the shell I chose is reasonably close to SUSE green. Do I miss NFC? Sure. Do I regret my choice? Not even a little. This phone is going to last me a few years, and who knows what will be out by the time it dies...My next phone will project the Death Star in lieu of a ringtone.