<?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>DEV Community: Grumpy</title>
    <description>The latest articles on DEV Community by Grumpy (@craser).</description>
    <link>https://dev.to/craser</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%2F27341%2F0ffcd27a-e532-4acb-83a7-b35e0625aa35.jpg</url>
      <title>DEV Community: Grumpy</title>
      <link>https://dev.to/craser</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/craser"/>
    <language>en</language>
    <item>
      <title>Some of the Best Coding Tools Aren't Coding Tools</title>
      <dc:creator>Grumpy</dc:creator>
      <pubDate>Tue, 28 Nov 2017 21:41:38 +0000</pubDate>
      <link>https://dev.to/craser/some-of-the-best-coding-tools-arent-coding-tools-4c</link>
      <guid>https://dev.to/craser/some-of-the-best-coding-tools-arent-coding-tools-4c</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"That which hinders your task... is your task." -Sanford Meisner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Okay, so you've got Sublime cooking, IntelliJ is a seamless extension of your will, and &lt;a href="https://www.charlesproxy.com/" rel="noopener noreferrer"&gt;Charles&lt;/a&gt; is watching your web traffic. QUnit, jUnit &amp;amp; Jenkins have teamed up and have your back like the little floating "bit" from Tron. &lt;/p&gt;

&lt;p&gt;Good start.&lt;/p&gt;

&lt;p&gt;But some of the best coding tools out there aren't &lt;em&gt;specifically&lt;/em&gt; coding tools. Let's talk about &lt;em&gt;those&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Password Manager: Test logins, addresses &amp;amp; credit cards.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You're already using a password manager to hold your credentials for your dev box, test server, Jenkins, Jira, Splunk, GitHub, StackOverflow, and the dozen or so other logins you need to do your job, right? Good.&lt;/p&gt;

&lt;p&gt;It can do more.&lt;/p&gt;

&lt;p&gt;When I need to test with a certain type of account, I have one ready to roll in &lt;a href="https://1password.com/" rel="noopener noreferrer"&gt;1Password&lt;/a&gt;. Ditto for fake MasterCard, VISA, AmEx, and PayPal accounts.  If I need to test the international shipping form, I have addresses for Antwerp, London, Beijing, Dubai, Lima, Seoul, Harare, and Vancouver. No more copy &amp;amp; paste, no more typos.&lt;/p&gt;

&lt;p&gt;No, this is &lt;em&gt;not&lt;/em&gt; a substitute for actual automated testing. But it &lt;em&gt;seriously&lt;/em&gt; helps when you get a note from customer service saying, "Drop shippers can't use the international shipping form! Help!"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Snippet Tool: Code boilerplate, branch names, ticket links, etc.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://textexpander.com" rel="noopener noreferrer"&gt;TextExpander&lt;/a&gt;, &lt;a href="http://www.16software.com/breevy/" rel="noopener noreferrer"&gt;Breevy&lt;/a&gt;, and &lt;a href="https://www.alfredapp.com/" rel="noopener noreferrer"&gt;Alfred&lt;/a&gt; are perennial favorites in this area. &lt;a href="https://kapeli.com/dash" rel="noopener noreferrer"&gt;Dash&lt;/a&gt; is also popular, and &lt;a href="https://www.jetbrains.com/help/pycharm/creating-and-applying-live-templates-code-snippets.html" rel="noopener noreferrer"&gt;IntelliJ&lt;/a&gt; and other IDEs have good built-in support for snippets.&lt;/p&gt;

&lt;p&gt;They're all good, but I like TextExpander, mostly because it has a lot of great functionality built in, and lets me use my snippets in &lt;em&gt;any&lt;/em&gt; app on my machine.&lt;/p&gt;

&lt;p&gt;TextExpander runs in the background and listens to your keyboard input. When you type a particular string, it instantly replaces it with a stored value. For example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;I type...&lt;/th&gt;
&lt;th&gt;I get...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;tstampx&lt;/td&gt;
&lt;td&gt;2017.11.28-12.21.48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;todayx&lt;/td&gt;
&lt;td&gt;Tuesday, Nov 28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;yesterdayx&lt;/td&gt;
&lt;td&gt;Monday, Nov 27&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I also use it for typo correction:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;I type...&lt;/th&gt;
&lt;th&gt;I get...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;retrun&lt;/td&gt;
&lt;td&gt;return&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chirs&lt;/td&gt;
&lt;td&gt;Chris&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You get the idea.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html" rel="noopener noreferrer"&gt;java.text.DecimalFormat&lt;/a&gt; uses the symbol &lt;strong&gt;¤&lt;/strong&gt; to indicate where you want the locale-specific currency symbol. Do &lt;em&gt;you&lt;/em&gt; know how to type a &lt;strong&gt;¤&lt;/strong&gt;? Me neither. So I bound that character as a snippet, and now when I type &lt;strong&gt;currx&lt;/strong&gt;, I get &lt;strong&gt;¤&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;I type...&lt;/th&gt;
&lt;th&gt;I get...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;currx&lt;/td&gt;
&lt;td&gt;¤&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;How often do I use that? Rarely. But I &lt;em&gt;never have to look up that symbol again.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I need placeholder text in web pages, I just type &lt;strong&gt;loremx&lt;/strong&gt;, and I get 200 words of &lt;a href="http://www.lipsum.com/" rel="noopener noreferrer"&gt;pseudo-Latin nonsense&lt;/a&gt;. Simple, but incredibly useful. &lt;/p&gt;

&lt;p&gt;The &lt;em&gt;real&lt;/em&gt; magic starts when you use TextExpander to run scripts in the background and emit the output. (It'll run shell scripts &amp;amp; JavaScript directly.) I type &lt;strong&gt;jtitlex&lt;/strong&gt;, and TextExpander runs a script that fetches the title of the ticket I'm working on from Jira's REST API. If I type &lt;strong&gt;tlx&lt;/strong&gt;, I get the URL of that ticket. &lt;strong&gt;tkx&lt;/strong&gt; gets me its Jira ID.&lt;/p&gt;

&lt;p&gt;Why would I do such a thing? Just think back to every email you've ever received that asked, "What's the status on the frob issue?" When I get those, the first line always clarifies &lt;em&gt;exactly&lt;/em&gt; what issue is being discussed, with a ticket number, title, and link to the ticket in the ticket system. That's done using a few TextExpander snippets, so it takes three seconds and I never have to switch windows. &lt;/p&gt;

&lt;p&gt;Part of communicating well is quickly clearing away confusion. A snippet tool is a &lt;em&gt;powerful&lt;/em&gt; means of making that easier.&lt;/p&gt;

&lt;p&gt;I have another script called &lt;a href="https://github.com/craser/practical-dev-tools/blob/master/vm-boilerplate" rel="noopener noreferrer"&gt;vm-boilerplate&lt;/a&gt; that reads a &lt;a href="http://velocity.apache.org" rel="noopener noreferrer"&gt;Velocity&lt;/a&gt; template file and generates some Java boilerplate for binding the necessary input values. So I just type &lt;em&gt;vmtx&lt;/em&gt;, hand TextExpander the name of the file, and TextExpander then runs my vm-boilerplate script and drops the output into whatever editor I'm using. Works everywhere, less typing, no typos, no missing parameters. (Because after decades of bitter conflict, we still haven't settled the &lt;code&gt;fileName&lt;/code&gt; vs. &lt;code&gt;filename&lt;/code&gt; debate.)&lt;/p&gt;

&lt;p&gt;I also have a little script called &lt;a href="https://github.com/craser/practical-dev-tools/blob/master/tebind" rel="noopener noreferrer"&gt;tebind&lt;/a&gt; that I use to bind TextExpander snippets from the command line, or from other scripts. So snippets don't have to be hard-coded values; I can re-bind them on the fly based on other processes.&lt;/p&gt;

&lt;p&gt;TextExpander is &lt;em&gt;far&lt;/em&gt; more than just a text replacement tool. Its scripting capabilities let you automate any quick information lookup you do, or to trigger scripts that automate text generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To-Do List Manager: Keep your act together.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The choice of what to-do list manager to use, how to use it, or even &lt;em&gt;whether&lt;/em&gt; to use one is a hugely individual one. If your system works, I'd never presume to tell you how to improve it. &lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://www.omnigroup.com/omnifocus" rel="noopener noreferrer"&gt;OmniFocus&lt;/a&gt;, but there are &lt;em&gt;lots&lt;/em&gt; of good options out there. For years, I used a &lt;a href="https://us.moleskine.com/12-month-daily-planner-black/p0269?variantName=z1DaaFormat&amp;amp;variantValue=Pocket%20(cm%209x14)" rel="noopener noreferrer"&gt;Moleskine datebook&lt;/a&gt;, and that worked great. I also used &lt;a href="https://culturedcode.com/things/" rel="noopener noreferrer"&gt;Things&lt;/a&gt; for a while, and liked it. And there's a great note here at dev.to about &lt;a href="https://dev.to/peter/programmers-should-be-good-at-email-too-here-is-my-guide-to-leveling-up-your-gmail-game"&gt;building a great system right into Gmail&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For me, it's invaluable to be able to hit &lt;code&gt;Alt-space&lt;/code&gt;, type in a to-do item &amp;amp; due date, and then get back to what I was doing. This is &lt;em&gt;awesome&lt;/em&gt; in meetings. I can quickly capture all the stuff I need to follow up on without losing track of the conversation. &lt;/p&gt;

&lt;p&gt;And I don't just put &lt;em&gt;my&lt;/em&gt; to-do items in there. I also enter items like "Expect data flow chart from Thor" with tomorrow as the due date. That's my reminder to check in with Thor if I don't get that chart I need.&lt;/p&gt;

&lt;p&gt;And once it's on my to-do list, I &lt;em&gt;completely clear my mind and get back to what I was doing&lt;/em&gt;. OmniFocus remembers all my tasks and due dates so I don't have to.&lt;/p&gt;

&lt;p&gt;In general, I'm a &lt;a href="https://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280" rel="noopener noreferrer"&gt;Getting Things Done&lt;/a&gt; guy. Use whatever philosophy/method works for you. If you haven't seen &lt;a href="https://www.youtube.com/watch?v=oTugjssqOT0" rel="noopener noreferrer"&gt;Randy Pausch's lecture on Time Management&lt;/a&gt;, stop reading this article and go watch it. It'll be time &lt;em&gt;very&lt;/em&gt; well spent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Switching &amp;amp; Automation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here, I like &lt;a href="https://www.alfredapp.com" rel="noopener noreferrer"&gt;Alfred&lt;/a&gt;, but there are free options out there that are just as good. (I use Alfred for other stuff too, so I've elected to pay for the license. I have it, so I might as well use it.)&lt;/p&gt;

&lt;p&gt;I have a set of keyboard shortcuts that launch or switch focus to particular apps. &lt;code&gt;Cmd-Shift-Ctrl-J&lt;/code&gt; pulls up my browser. &lt;code&gt;Cmd-Shift-Ctrl-K&lt;/code&gt; pulls up my IDE. &lt;code&gt;Cmd-Shift-Ctrl-L&lt;/code&gt; opens Terminal. I like this &lt;em&gt;much&lt;/em&gt; better than &lt;code&gt;Cmd-TAB&lt;/code&gt;. It lets me switch apps purely by muscle memory. (Also: yes, I have &lt;strong&gt;chordx&lt;/strong&gt; bound in TextExpander to &lt;code&gt;Cmd-Shift-Ctrl-&lt;/code&gt;.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Big Picture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ultimately, all of these tools are about clearing away organizational and mental clutter so you can focus your attention instead of being constantly pulled into the weeds. &lt;/p&gt;

&lt;p&gt;When faced with any hindrance, there are two solutions. One is to sidestep the problem and make it irrelevant. The other is to get so good at dealing with it that it stops being a hindrance and becomes an advantage.&lt;/p&gt;

&lt;p&gt;When I first started taking CS classes, I'd hear classmates say things like, "Why do we have to use cvs? Why can't we just keep a copy of the project on the network drive? That should be fine, right?" Having to check files in and out, deal with merge conflicts, etc, felt like a hindrance, and they were tempted to sidestep it. &lt;/p&gt;

&lt;p&gt;But we all know that having a version control system is &lt;em&gt;so much better&lt;/em&gt; that it simply never comes up for discussion on real software teams. The right solution is to get good at using git/hg/svn that we can reap the benefits with minimal pain. &lt;/p&gt;

&lt;p&gt;Effective coding rests atop a foundation of general-purpose organizational and communication skill. If you find yourself constantly pulled away from productive work to spend time on housekeeping stuff, shaking your fist at the sky won't help. What &lt;em&gt;will&lt;/em&gt; help is getting really good at that housekeeping stuff so that it doesn't pull you into the weeds any more.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tools</category>
      <category>gtd</category>
      <category>coding</category>
    </item>
    <item>
      <title>Hi, I'm Chris Raser</title>
      <dc:creator>Grumpy</dc:creator>
      <pubDate>Mon, 24 Jul 2017 18:37:58 +0000</pubDate>
      <link>https://dev.to/craser/hi-im-christopher-raser</link>
      <guid>https://dev.to/craser/hi-im-christopher-raser</guid>
      <description>&lt;p&gt;I have been coding for 15 years doing back end Java and front-end JavaScript/HTML/CSS. I recently moved to Orange County, in southern California, USA.&lt;/p&gt;

&lt;p&gt;You can find me on GitHub as &lt;a href="https://github.com/craser" rel="noopener noreferrer"&gt;craser&lt;/a&gt; or find my personal blog (mostly mountain biking related) at &lt;a href="http://dreadedmonkeygod.net" rel="noopener noreferrer"&gt;DreadedMonkeyGod&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'm currently interested in ways of attacking what I've started calling the Nightmare Scenario: a revenue-impacting bug in 100k lines of horrible code (1k-line methods, no tests, no docs, piles of global variables, long if/else chains with short-circuit returns, etc).&lt;/p&gt;

&lt;p&gt;I'm looking to find (or build!) tools to let developers carve out major chunks of horrible code and refactor with confidence that no behavior has been changed unintentionally.&lt;/p&gt;

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