<?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: eheiberg</title>
    <description>The latest articles on Forem by eheiberg (@eheiberg).</description>
    <link>https://forem.com/eheiberg</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%2F163228%2Fc161c753-c8ba-4ae8-8d63-55c977f3120c.jpeg</url>
      <title>Forem: eheiberg</title>
      <link>https://forem.com/eheiberg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/eheiberg"/>
    <language>en</language>
    <item>
      <title>"One hand down, one hand up" - the ideal work environment</title>
      <dc:creator>eheiberg</dc:creator>
      <pubDate>Tue, 24 May 2022 21:07:51 +0000</pubDate>
      <link>https://forem.com/eheiberg/one-hand-down-one-hand-up-the-ideal-work-environment-77b</link>
      <guid>https://forem.com/eheiberg/one-hand-down-one-hand-up-the-ideal-work-environment-77b</guid>
      <description>&lt;p&gt;In the last 20+ years, I've seen plenty of success and plenty of dysfunction across companies, teams, and projects. But the teams I wanted to be on - the companies that performed the best and had the most fun doing it - always had one very distinct similarity: from the top down, every person would have "one hand down and one hand up". &lt;/p&gt;

&lt;p&gt;This can be a personal mantra, or a company-wide philosophy, but in then end, the people and teams I want to work with are &lt;em&gt;explicitly asserting value&lt;/em&gt; to these concepts. &lt;/p&gt;

&lt;h2&gt;
  
  
  One hand down
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;tldr; Be the kind of person that gives the next person a leg up.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;A person who extends a hand down ensures that a portion of their workload is making sure the next person can follow. This can manifest as clean code that tells the story of the code as well as the implementation. It could mean adding documentation when you hit a snag and don't want someone else to hit the same one. It could mean deliberately carving out time out of your work schedule to ensure that other people have resources and guidance that you might not have had. Whatever it is, you have "one hand down" to lift someone else up. It's ready and available, and most importantly &lt;em&gt;you advertise it&lt;/em&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  One hand up
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;tldr; Be the kind of person that looks for advice and direction.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not looking for advice or direction is a sure-fire way to lock everyone on a path that only you know how to navigate. &lt;/p&gt;

&lt;p&gt;It makes no difference what your position is within a team or a company - there is always something to learn for the truly curious. Even getting advice from someone who is not at your skill-level can be incredibly illuminating. It can show you better ways to have a "hand down" as well - and in ways that will always surprise you.&lt;/p&gt;

&lt;p&gt;Most of all, a person with a hand up shows that they are listening and are &lt;em&gt;willing to be changed by what is said&lt;/em&gt;. This isn't just something that benefits you, but is a model that extends to anyone who is inspired &lt;em&gt;by you&lt;/em&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why we need both
&lt;/h2&gt;

&lt;p&gt;Below are my personal observations of what I've found to happen when both conditions are not met. These are not at all uncommon, and you've likely encountered at least one of these before, if not all of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "arms crossed" effect
&lt;/h3&gt;

&lt;p&gt;Many of the bureaucratic companies and organizations I've worked at or had adjacent experiences with wind up ensnared in this model. Everyone is waiting for their pension, and everyone's top priority is simply to keep their job, so they keep their head down and only concentrate on the work that was assigned to them. This is the "arms crossed" effect. &lt;/p&gt;

&lt;p&gt;Nobody is looking for advice or direction because this will make them look stupid and incompetent.  &lt;/p&gt;

&lt;p&gt;Nobody is trying to help anyone else up because, what if someone else learns how to do what &lt;em&gt;you&lt;/em&gt; do?&lt;/p&gt;

&lt;h3&gt;
  
  
  The "one hand down only" effect
&lt;/h3&gt;

&lt;p&gt;One very over-taxed person or team is handling everything. This one over-taxed person quickly becomes a single point of failure, and when they leave or retire, the whole company enters into...&lt;/p&gt;

&lt;h3&gt;
  
  
  The "one hand up only" effect
&lt;/h3&gt;

&lt;p&gt;At this point, everyone is looking for direction, but everyone is too busy getting their work done to help anyone else. This is where you have "write-only" code that nobody wants to wrangle. There is no attempt at documentation or training.&lt;/p&gt;

&lt;p&gt;Ultimately, a re-write of the entire code-base is going to be suggested, because the archaeology of trying to figure out what the heck is going on would just take longer, and likely just perpetuate the cycle. Needless to say, this is costly. &lt;/p&gt;

&lt;h2&gt;
  
  
  In a perfect world...
&lt;/h2&gt;

&lt;p&gt;From the get-go, apportion time in every person's workload for "putting a hand down" and "putting a hand up". It's never too late to stabilize the cycle. &lt;/p&gt;

&lt;p&gt;This is a much better model than just getting into trouble and hiring as many 10X developers you can to help you row the boat faster toward the rocks. &lt;/p&gt;

&lt;h2&gt;
  
  
  Final note: nomenclature persists
&lt;/h2&gt;

&lt;p&gt;Hopefully you find this concept and phrasing useful. For me, an easily grokable concept that can be boiled down into simple phrasing gives me the most movement toward that idea. This idiom happens to represent my personal approach. I hope it has some merit for you as well. &lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>culture</category>
      <category>teamwork</category>
      <category>ideals</category>
    </item>
    <item>
      <title>The 10 Times Rule - Be kind to yourself [and others]</title>
      <dc:creator>eheiberg</dc:creator>
      <pubDate>Mon, 10 Feb 2020 21:01:59 +0000</pubDate>
      <link>https://forem.com/eheiberg/the-10-times-rule-be-kind-to-yourself-and-others-4me2</link>
      <guid>https://forem.com/eheiberg/the-10-times-rule-be-kind-to-yourself-and-others-4me2</guid>
      <description>&lt;p&gt;In 2000, I was a small business IT contractor. I would rove from small business to small business putting out fires and setting up networks. &lt;/p&gt;

&lt;p&gt;If I'm to set the stage for what a layperson's idea of "computers" was at that time, I could probably sum it up in the following bullet-points:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;People's resumes would commonly contain a "Computing Skills" section, which  more frequently than not, contained every app they had ever used: "Microsoft Word 98, Microsoft Excel 95, Microsoft Word 2000...", as well as broad concepts like "Ethernet &lt;em&gt;and&lt;/em&gt; Internet"&lt;/li&gt;
&lt;li&gt;Most people were still talking about the Internet as something that a computer &lt;em&gt;had&lt;/em&gt; or &lt;em&gt;didn't have&lt;/em&gt;. &lt;/li&gt;
&lt;li&gt;I would frequently get calls to replace the toner in the printer, because "the printer isn't working, and I don't want to mess it up".&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Much of the small business computing world was in a churn that they never signed up for, but were now suddenly obligated to participate in. &lt;/p&gt;

&lt;p&gt;That being said, a sizable portion of my job was convincing people that "computers" was not something they could work around, and that they were going to have to fit some basic computer-operation fundamentals into their brain-space just to be competent. &lt;/p&gt;

&lt;p&gt;I made a passing effort to be gentle, but, to my shame, I frequently fell into the "Brilliant Jerk" role more than once.&lt;/p&gt;

&lt;h3&gt;
  
  
  One day...
&lt;/h3&gt;

&lt;p&gt;One day, a sales manager at one of these businesses, Preston, called me in for a computer issue. &lt;/p&gt;

&lt;p&gt;This was a computer issue that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Was a user error.&lt;/li&gt;
&lt;li&gt;I had fixed before.&lt;/li&gt;
&lt;li&gt;I had shown him, in detail, with written instructions, how to not perpetuate.&lt;/li&gt;
&lt;li&gt;I had shown him, in detail, with written instructions, how to fix if he did mess it up. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Frustrated, I snapped at him, "How many times do I have to tell you not to do this?!"&lt;/p&gt;

&lt;p&gt;Without blinking an eye, or with any hesitation he replied, "Ten".&lt;/p&gt;

&lt;p&gt;"What?"&lt;/p&gt;

&lt;p&gt;"Ten. Ten times", he was calm about it. He was calm about things in general. &lt;/p&gt;

&lt;p&gt;"Look, I've got a million things I'm doing and having to remember at any given moment - things that have nothing to do with computers. I know I'm asking you something you've already explained to me before - I get that. I understand that frustration - anyone would. So I'm making a deal with you - if, after 10 times, I don't get it, you can yell a blue-streak at me. Ok?"&lt;/p&gt;

&lt;p&gt;That moment did a couple things for me. I put some pretty obvious things back in perspective that I had woefully overlooked: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your priorities can't be everyone else's, and rarely are.&lt;/li&gt;
&lt;li&gt;Repetition is not just a valid path to learning, it's a useful one -  particularly when the thing to be learned is not someone else's priority or is something they feel is even their problem to solve.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Introducing The 10 Times Rule
&lt;/h1&gt;

&lt;p&gt;I tried it out, of course, and not just internally; I was explicit when I used it. &lt;/p&gt;

&lt;p&gt;What I mean is, whenever someone made a mistake they had made before, they would apologize to me profusely, and begin either the process of (a) self-flagellation or (b) become defensive and despondent. &lt;/p&gt;

&lt;p&gt;Before any of that could happen, I would tell them about the 10 Times Rule. I would tell them that they're &lt;em&gt;fine&lt;/em&gt;, they've got &lt;em&gt;at least&lt;/em&gt; [7] more shots at this. This is simply part of the process. &lt;/p&gt;

&lt;p&gt;[&lt;strong&gt;IMPORTANT&lt;/strong&gt;: This isn't holding someone to "10 Mistakes" - this is 10 times making the &lt;em&gt;same mistake&lt;/em&gt;. Thus, every mistake has a queue of 10.]  &lt;/p&gt;

&lt;h3&gt;
  
  
  The results
&lt;/h3&gt;

&lt;p&gt;The results were probably what you'd expect if you've read this far:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;People usually need the repetition 2-4 times; nobody ever gets close to 10. &lt;/li&gt;
&lt;li&gt;The issue becomes part of &lt;em&gt;their&lt;/em&gt; habits and rules, as opposed to an obligation to adhere to "someone else's" rules.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;I&lt;/em&gt; actually feel better, knowing that this is simply &lt;em&gt;part of the process&lt;/em&gt; as opposed to a &lt;em&gt;failure in the process&lt;/em&gt;. &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Note: This isn't just blanket forgiveness
&lt;/h3&gt;

&lt;p&gt;This is better than blanket forgiveness - it's an easily achievable shot at accountability. After doing this for well over a decade, I found that when you give people a chance to make the problem &lt;em&gt;their own&lt;/em&gt;, they begin to care about it in a way that is, again, &lt;em&gt;their own&lt;/em&gt;. And when they feel it's their own, they truly become your ally in solving that problem, or even keeping it solved.&lt;/p&gt;

&lt;h3&gt;
  
  
  "Not my problem!"
&lt;/h3&gt;

&lt;p&gt;Conversely, if you berate someone, or treat them unkindly for ruining something that they they feel is largely &lt;em&gt;your problem&lt;/em&gt; to begin with, you perpetuate the idea that it is, indeed, &lt;em&gt;your problem&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;They're problem&lt;/em&gt;, by extension is simply finding ways to &lt;em&gt;avoid having to deal with you&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;And remember, blanket forgiveness doesn't work either. If you apply blanket forgiveness to everything, it will also never garner the result of the problem being &lt;em&gt;their problem too&lt;/em&gt;, as you will always be their own personal airbag for their reckless driving. &lt;/p&gt;

&lt;p&gt;By giving them an easily achievable goal, they can claim mastery, and as it turns out, humans really seem to dig being good at stuff. &lt;/p&gt;

&lt;h3&gt;
  
  
  Wait a minute, isn't this just building in room for failure?
&lt;/h3&gt;

&lt;p&gt;Good eye! It is! And it turns out, people much more well-versed than I have written extensively on this. This was simply my own personal path to get there. Maybe it will help you too. &lt;/p&gt;

&lt;h3&gt;
  
  
  But wait! What about...
&lt;/h3&gt;

&lt;p&gt;This next paragraph is mostly for the Edge-Casers out there (I count myself as one of them, so I get you). &lt;/p&gt;

&lt;p&gt;Yes, if you're a doctor who keeps amputating the wrong leg, or a firefighter who sprays the wrong house, or a zookeeper who keeps leaving the lion cage door open - if the mistake is something that we cannot allow to happen more than once, then yes, you probably shouldn't try to apply the 10 Times Rule. &lt;/p&gt;

&lt;p&gt;What I am asking of you is to evaluate if the 10 Times Rule is even possible, and if it is, try it, and let the results speak for themselves. &lt;/p&gt;

&lt;h4&gt;
  
  
  As with anything, let the Practice prove itself to &lt;em&gt;you&lt;/em&gt;.
&lt;/h4&gt;

&lt;p&gt;And as always, thanks for listening.&lt;/p&gt;

</description>
      <category>failure</category>
      <category>workculture</category>
      <category>habits</category>
    </item>
    <item>
      <title>Better lessons from [No] semicolons in Javascript</title>
      <dc:creator>eheiberg</dc:creator>
      <pubDate>Thu, 06 Feb 2020 23:41:14 +0000</pubDate>
      <link>https://forem.com/eheiberg/better-lessons-from-no-semicolons-in-javascript-4fa8</link>
      <guid>https://forem.com/eheiberg/better-lessons-from-no-semicolons-in-javascript-4fa8</guid>
      <description>&lt;h4&gt;
  
  
  Full disclosure: I don't like semicolons in Javascript
&lt;/h4&gt;

&lt;p&gt;I started like most people, using semicolons, and when I switched to &lt;em&gt;no semicolons&lt;/em&gt;, it did feel a little strange. In time, I found I really enjoyed not having them, despite some potential pitfalls&lt;sup id="fnref1"&gt;1&lt;/sup&gt; that I rarely [if ever] run across. &lt;/p&gt;

&lt;h2&gt;
  
  
  Wait! Don't go!
&lt;/h2&gt;

&lt;p&gt;Believe it or not, this is NOT just another article about semicolons in Javascript. This is really about a tool you can use when trying to make decisions with your team. &lt;/p&gt;

&lt;p&gt;Actually, this is actually an article about something far more ambitious:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;I want to propose a tool to help you make decisions in things outside code as well&lt;/em&gt;.
&lt;/h3&gt;

&lt;p&gt;Ok, this is likely a promise I can't deliver on, but bear with me for a bit; for now let's just take that statement as a clear LIE, and maybe by the end of the article we'll see just how true [or false] it is. Thank you for reading! &lt;strong&gt;You're the best!&lt;/strong&gt; &lt;/p&gt;

&lt;h1&gt;
  
  
  How this started
&lt;/h1&gt;

&lt;p&gt;I'm not a great Javascript programmer. If I had to describe myself, I would say I'm just someone who &lt;em&gt;hangs in there&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;One day, my brilliant devops manager dropped in some code to standardize and set up the codebase properly. One of his changes was to take out all my custom linter rules [like &lt;code&gt;semi: never'&lt;/code&gt;] in favor of the standard, out-of-the-box rules. &lt;/p&gt;

&lt;p&gt;Not being a great Javascripter, I thought maybe he knew something I didn't, but it turns out that wasn't the case, and so the discussion began:&lt;/p&gt;

&lt;h3&gt;
  
  
  Our individual points, boiled down
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ME&lt;/strong&gt;: "WAAH! I don't &lt;em&gt;want&lt;/em&gt; to use semicolons!"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DEVOPS&lt;/strong&gt;: "Uh, Javascript uses semicolons, my dude."&lt;/p&gt;

&lt;p&gt;And thus, the research began! To the Internet!&lt;/p&gt;

&lt;h3&gt;
  
  
  The resulting research
&lt;/h3&gt;

&lt;p&gt;I'll spare you the headache of having to look all this stuff up on your own with a nice, easy, bulleted list of what we found:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;There's no clear winner, one way or another&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. (sorry!)&lt;/li&gt;
&lt;li&gt;USE A FORMATTER, YOU FOOLS!&lt;/li&gt;
&lt;li&gt;People who write about this claim they don't &lt;em&gt;really&lt;/em&gt; care, but their words usually betray a clear preference - one that if they &lt;em&gt;had&lt;/em&gt; to go against, they would very much grit their teeth through. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So which should we use? I don't know the answer for you or your team, but this was a good opportunity for me to apply a tool I've been using for the past 6 years to police my thinking somewhat. &lt;/p&gt;

&lt;h1&gt;
  
  
  The Tool
&lt;/h1&gt;

&lt;p&gt;You made it this far. Thank you. Here's the tool I was talking about earlier: &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;When given an option to switch to something else, flip the history and see if your opinion changes.&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;This tool has been invaluable to me in making decisions, and in policing myself when I find myself resisting change. "We've always done it this way!" isn't useful in life, let alone in the ever-changing world of computing.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it to the test
&lt;/h2&gt;

&lt;p&gt;Let's take this thing out for a spin, shall we?&lt;/p&gt;

&lt;p&gt;Let's flip the history of Javascript semicolon policy. Let's say that Javascript &lt;em&gt;always&lt;/em&gt; had the policy of "no semicolons"&lt;sup id="fnref1"&gt;1&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;One day, maybe a decade ago, someone pitches the NEW idea: "&lt;em&gt;Explicit&lt;/em&gt; semicolons!". Now, we can &lt;em&gt;finally&lt;/em&gt; start adding them, not &lt;em&gt;just&lt;/em&gt; to the edge-case lines in our code, but to &lt;em&gt;every&lt;/em&gt; line that we feel should have explicit termination. And obviously, we're not dummies, so we'll get our formatter to do it for us as well, just as we do now. Better, right? &lt;/p&gt;

&lt;p&gt;Yes? No? Maybe?&lt;/p&gt;

&lt;p&gt;Regardless of what you choose, we've removed the condition of &lt;em&gt;which came first&lt;/em&gt; as a criteria for which version to implement. Because &lt;a href="https://en.wikipedia.org/wiki/Serial-position_effect#Primacy_effect"&gt;primacy&lt;/a&gt; is a real thing that we're all going to struggle with, so it's great to have tools to address it when we can.&lt;/p&gt;

&lt;h2&gt;
  
  
  I've struggled with this before
&lt;/h2&gt;

&lt;p&gt;When I moved from PHP to Ruby years ago, Ruby introduced me to the world of &lt;a href="https://franzejr.github.io/best-ruby/idiomatic_ruby/implicit_return.html"&gt;&lt;em&gt;implicit return&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The dirty summary of &lt;em&gt;implicit return&lt;/em&gt; is this: Ruby will automatically return the last line automatically.&lt;/p&gt;

&lt;p&gt;Now, if you were like me, you would probably have thought "This is crazy. I'm gonna be making mistakes all over the place". In a small way, you're right. After programming in Ruby for ~15 years, I can tell you there are plenty of times where I've accidentally screwed myself by putting a logging statement at the end of a method, and then wondered why the method was returning the wrong value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;allow_mega_super_access?&lt;/span&gt;
  &lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;admin?&lt;/span&gt;
  &lt;span class="no"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Only super-privileged users should get through! WE ARE SOOO SECURE!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And yeah, I have fun dreaming up the worst example I can think of, but you know what? I make mistakes constantly, and when weighing all the mistakes I've made from my improper use/reading of &lt;em&gt;implicit return&lt;/em&gt; VS all the benefits I've garnered from &lt;em&gt;implicit return&lt;/em&gt;, the tally isn't even close. &lt;em&gt;Implicit return&lt;/em&gt; is the bees knees, y'all. &lt;/p&gt;

&lt;p&gt;And when I apply the tool and flip history - either way I flip it, &lt;em&gt;implicit return&lt;/em&gt; is the reigning champ in my mind, hands down. I wish all languages had this. Of course, your results may vary.&lt;/p&gt;

&lt;p&gt;But let's take a look at this tool &lt;em&gt;outside&lt;/em&gt; of the realm of programing, as promised.&lt;/p&gt;

&lt;h2&gt;
  
  
  I seriously just applied this technique as I was writing this article
&lt;/h2&gt;

&lt;p&gt;Ok, in some kind of cosmic lesson, I self-applied this rule to &lt;em&gt;this very article as I was writing it&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;In my original draft, I was using title-case &lt;code&gt;For All My Headings and Titles&lt;/code&gt;. In the middle of writing one of the headings, I asked myself, "Is title-case better?" Even if it is considered grammatically correct, &lt;strong&gt;should I&lt;/strong&gt; use it?&lt;/p&gt;

&lt;p&gt;So, once again, I &lt;em&gt;flipped history&lt;/em&gt; to see if my opinion changed: &lt;/p&gt;

&lt;p&gt;What if we had always used "Sentence-casing" for our titles, and someone, very recently introduced the idea of using title-case. Would we see that as a better alternative?&lt;/p&gt;

&lt;p&gt;Now there might be &lt;em&gt;really great reasons&lt;/em&gt; to title-case your headings that I'm woefully ignorant of&lt;sup id="fnref3"&gt;3&lt;/sup&gt;; if that's the case, I hope those &lt;em&gt;really great reasons&lt;/em&gt; will inform my future self when I re-evaluate based on that new information. &lt;/p&gt;

&lt;p&gt;For now though, my only reason to use title-case for headings is &lt;em&gt;"It's always been done that way"&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;And if that's true, then it might be time to re-think that idea. &lt;/p&gt;

&lt;h2&gt;
  
  
  PLEASE UNDERSTAND: This is not a silver-bullet for decision making!
&lt;/h2&gt;

&lt;p&gt;What this &lt;em&gt;is&lt;/em&gt; is a tool to &lt;em&gt;minimize primacy/recency&lt;/em&gt; from your decision making. That's it. &lt;/p&gt;

&lt;p&gt;You don't have to defend against it or for it, because, as of now, it is your &lt;em&gt;own&lt;/em&gt; thought-experiment. Yours. Use it as you see fit. &lt;/p&gt;

&lt;h3&gt;
  
  
  Promise kept?
&lt;/h3&gt;

&lt;p&gt;That's it. Hopefully you found/find value in the tool I mentioned, and my ambitious statement at the top wasn't &lt;em&gt;too much&lt;/em&gt; of a lie. The only way to know is to try it. &lt;/p&gt;

&lt;p&gt;Thanks for listening.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;"no semicolons" is a misnomer, as you still have to use semicolons on &lt;a href="https://flaviocopes.com/javascript-automatic-semicolon-insertion/"&gt;certain cases&lt;/a&gt;  ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;Hey look, the AirBnB styleguide makes a really great point about how you &lt;em&gt;should&lt;/em&gt; use semicolons &lt;a href="https://github.com/airbnb/javascript#semicolons"&gt;here&lt;/a&gt;. The dirty summary being &lt;em&gt;javascript changes a lot; semicolons keep us safe[r] during these changes&lt;/em&gt;. Which is weird, because the ready-acceptance of all the constant javascript changes is actually a big part of why I think I should not use semicolons.  ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;I bet Chicago and AP style-guides have reasons - reasons I would probably look up if I was a diligent writer... Which kind of makes this "footnote" completely worthless when you think about it. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>javascript</category>
      <category>semicolons</category>
      <category>codestyle</category>
      <category>decisionmaking</category>
    </item>
    <item>
      <title>Code-Signing a Windows app on a Mac using electron-builder</title>
      <dc:creator>eheiberg</dc:creator>
      <pubDate>Thu, 30 May 2019 18:06:01 +0000</pubDate>
      <link>https://forem.com/eheiberg/code-signing-a-windows-app-on-a-mac-using-electron-builder-5flm</link>
      <guid>https://forem.com/eheiberg/code-signing-a-windows-app-on-a-mac-using-electron-builder-5flm</guid>
      <description>&lt;p&gt;tldr; skip to the end for the step-by-step instructions. &lt;/p&gt;




&lt;p&gt;I made my first desktop app, using Electron (and Vue).&lt;/p&gt;

&lt;p&gt;If you don't know what Electron is, the high-level description is that it's a lovely wrapper around a chromium browser. This means you can turn a nice single-page web app into a desktop application, using web tech you already know - javascript, css, html. It's pretty great. &lt;/p&gt;

&lt;p&gt;[And if you don't want to start from scratch, you can use Vue, and the amazing electron vue-cli builder plugin (&lt;a href="https://nklayman.github.io/vue-cli-plugin-electron-builder/"&gt;https://nklayman.github.io/vue-cli-plugin-electron-builder/&lt;/a&gt;), which is what I did because I am &lt;em&gt;lazy&lt;/em&gt;]&lt;/p&gt;

&lt;h3&gt;
  
  
  App Created! We're done! Right?
&lt;/h3&gt;

&lt;p&gt;Well, no. You've made the electron app and now you have to code-sign it, unless you don't mind that your users are getting security warnings. &lt;/p&gt;

&lt;p&gt;I'm on a mac. The actual code-signing was a pretty easy process once I managed to find the relevant links. With adequate google-fu, you'll find out how to do it without too much fuss. I'll skip past code-signing mac apps, because other folks can tell you how to do that ok. &lt;/p&gt;

&lt;h3&gt;
  
  
  Windows, on the other hand ...
&lt;/h3&gt;

&lt;p&gt;Trying to code-sign the Windows build of your application from a Mac is dark magic, it turns out, or at least that's the way it seems to be described; lot's of "brew install" this and "source compile" that. You'll find plenty of articles on it. Do they work? Who knows? None of them seem to be saying the same thing, and if they are, I'm certainly not proficient enough to figure out what they're trying to get me to do. And when I do follow those old instructions, it turns out something else breaks or doesn't work. This is rough going. There has to be an easier way, right?&lt;/p&gt;

&lt;h2&gt;
  
  
  electron-builder
&lt;/h2&gt;

&lt;p&gt;It turns out there are different plugins you can use to compile your source into a nice build. The one that was chosen for me by the Vue Cli was &lt;code&gt;electron-builder&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;They have some decent documentation, but as of 2019, some of it gets really confusing really fast. I'm not going to link to the documentation in question, because I'm sure at one point, it was working great. Just like this will probably work great for you in 2019 and maybe not so much in 2023, etc etc. &lt;/p&gt;

&lt;h1&gt;
  
  
  Get to it already!
&lt;/h1&gt;

&lt;p&gt;Here are the steps I took to code-sign a Windows app from a Mac in 2019&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make a CSR (certificate signing request) using Keychain Access (a program on your mac). Use "Certificate Assistant" from the menu.&lt;/li&gt;
&lt;li&gt;Make sure to select "Save to Disk" for the CSR&lt;/li&gt;
&lt;li&gt;Buy a code signing cert from a cert authority (&lt;a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/dashboard/get-a-code-signing-certificate"&gt;https://docs.microsoft.com/en-us/windows-hardware/drivers/dashboard/get-a-code-signing-certificate&lt;/a&gt;). Use the CSR you generated earlier when it asks you for it.&lt;/li&gt;
&lt;li&gt;Download that cert. Install it in your keychain. (using Keychain Access)&lt;/li&gt;
&lt;li&gt;In Keychain Access, find the cert, and export it as a &lt;code&gt;.p12&lt;/code&gt; cert.&lt;/li&gt;
&lt;li&gt;On export, notice that you have an option to supply a password for the cert. You can if you want to, but you can also just hit 'enter' and provide NO password.&lt;/li&gt;
&lt;li&gt;When you build your electron app for windows, specify the path to the &lt;code&gt;.p12&lt;/code&gt; cert. &lt;code&gt;WIN_CSC_LINK=/path/to/your/cert.p12 yarn electron:build --win&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: in Step 6, you do not need to add a password, but if you do, then in Step 7, you need to also add in the ENV variable of &lt;code&gt;WIN_CSC_KEY_PASSWORD=YourPassword&lt;/code&gt; as well to that command line in order for it to be able to parse the certificate properly.&lt;/p&gt;

&lt;p&gt;You should be able to see by looking at the build log that the certificate is signed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Last Note - Microsoft SmartScreen
&lt;/h3&gt;

&lt;p&gt;Microsoft Smartscreen doesn't &lt;em&gt;just&lt;/em&gt; care that your app is code-signed properly; it's also looking at your &lt;em&gt;reputation&lt;/em&gt;. And thus, if your app is new, then your users will likely get a warning screen from Microsoft SmartScreen until your app has proven itself to not be some kind of password-stealing ransomware sleeper agent. The cert is published though, and so this should be the only warning, if any, that you get. &lt;/p&gt;

</description>
      <category>codesigning</category>
      <category>electron</category>
      <category>electronbuilder</category>
      <category>windows</category>
    </item>
  </channel>
</rss>
