<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Bryan Hughes on Medium]]></title>
        <description><![CDATA[Stories by Bryan Hughes on Medium]]></description>
        <link>https://medium.com/@nebrius?source=rss-3bbd87f7acb7------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*_KMUuHxpWd5zUn98EGHymA.jpeg</url>
            <title>Stories by Bryan Hughes on Medium</title>
            <link>https://medium.com/@nebrius?source=rss-3bbd87f7acb7------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 24 Jun 2026 08:20:39 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@nebrius/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[You and I Will Always Be Back Then: A Love Letter to JSConf EU, Again]]></title>
            <link>https://medium.com/@nebrius/you-and-i-will-always-be-back-then-a-love-letter-to-jsconf-eu-again-9b8333ef9201?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/9b8333ef9201</guid>
            <category><![CDATA[community]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[belonging]]></category>
            <category><![CDATA[evolving]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Tue, 04 Jun 2019 15:27:38 GMT</pubDate>
            <atom:updated>2019-06-04T15:27:38.318Z</atom:updated>
            <content:encoded><![CDATA[<p>I have attended JSConf EU in Berlin three times. I have spoken there twice. This piece is about JSConf EU.</p><p>I often tend to be late to the party. So I suppose it’s no surprise that I didn’t start watching Adventure Time until <em>after </em>I watched Steven Universe, both of which I started last year. Both series are brilliant, each in their own ways. But this piece is not about Steven Universe.</p><p>I finished getting through all of Adventure Time a few months ago, save for the series finale. I noticed the final episode was 45 minutes, which was <em>just</em> long enough that I kept putting it off.</p><p>Flying to Europe from San Francisco is exhausting because long travel is exhausting. And jet lag makes it feel as if bed time is mid-afternoon-snack time. And anxiety makes my brain never shut up and keeps me awake anyways. I needed to relax, so I decided to finally watch the series finale of Adventure time. I had no idea it would so perfectly set the stage for the week to come. “Time Adventure,” a song towards the end of the finale, has been playing on repeat in my mind because it perfectly captures, well, everything about this week.</p><p>—</p><p>I wrote a <a href="https://medium.com/@nebrius/an-open-love-letter-to-jsconf-eu-and-how-it-ended-my-2016-40f0b441e9d5">blog post after JSConf EU 2017 about it</a>, the last time I attended. In it, I said that JSConf EU “really is on the forefront and is the single best JavaScript conference in the entire world.” History repeats itself, and this is still true today. I was as impacted by JSConf EU 2019 as I was by JSConf EU 2017, maybe more so.</p><p>This year was also the last year of JSConf EU as we know it. There will be a future, and I’m excited to see what the future holds, but this JSConf EU we know and love is no more.</p><p><em>It seems unforgiving when a good thing ends.</em></p><p>This conference was a reunion for me. I ran into dozens and dozens of people I wanted to spend an entire afternoon catching up with. But there were only three afternoons.</p><p>There were a small handful of individuals that I wanted to spend a lot more time with than an afternoon. I wanted to bend space-time to create an infinite quiet corner to just be with them and to know their current selves, and for them to know mine. Now I’m a practical person…more so than most folks I know. Sometimes by a <em>lot.</em> For me to wish for the fantastical and the magical like this is a rare occurrence indeed. JSConf EU is a rare occurrence indeed.</p><p>I don’t feel bad for not getting to spend the time with friends that I wanted to. I’m grateful to have that desire at all.</p><p>—</p><p>I gave a talk at JSConf EU about queerness and tech. This talk has been percolating in my brain ever since I came up with the idea at JSConf EU 2017 and randomly blurted it to Jan (one of the incredible organizers of JSConf EU) at the after party. Now, I come up with all sorts of interesting random ideas all the time, only to be discarded a day later. As people do. But this idea stuck, and there was something to it.</p><p>My talk was risky, for a whole host of reasons I won’t go into. And I don’t think it was perfect at all. There’s a subtweet indicating where I probably did, in fact, fuck up. And I’m going to work to understand that better.</p><p>Ya know what though, if we aren’t willing to put ourselves out there to advance these hard discussions, if we’re not willing to fuck up, then that’s not real activism. We <em>have</em> to be willing to fuck up, because we <em>have</em> to have these conversations, and when we have these conversations we will inevitably fuck up. Silence is complicity in the status quo, and the status quo is fucked.</p><p>Or, to put it another way that I say over and over and over and over: If we as underprivileged folks aren’t advocating for those less privileged or differently underprivileged than us, then we’re not <em>activists</em>. We’re just <em>selfish</em>. White queer and/or trans folks <em>must </em>support<em> </em>queer BIPoC (Black, Brown and Indigenous People of Color). Cis queer folks and cis BIPoC folks <em>must </em>support trans folks. And so on.</p><p>But I’m getting ahead of myself, I suppose. I was super anxious about this talk. I actually wrote no less than 3 different endings for it! I kept going back and forth on how to end it, how I wanted the audience to feel.</p><p>I decided the night before I gave the talk to go with the happy(er) ending, coupled with a call to action. It was 100% the right choice. And this talk was <em>fucking tough.</em> It’s the toughest talk I’ve ever given, even tougher than my <a href="https://nebri.us/talk/jsconf-us-2018-hacking-with-my-anxiety.html">JSConf US talk last year</a>.</p><p>After I was done, I had such a strong need to be alone that I bolted. I found a quiet, isolated spot overlooking the Spree river to sit by myself. And I cried for 20 minutes.</p><p>That talk was not cathartic for me<em> </em>at all. It felt like sacrifice<em>.</em></p><p>And I wouldn’t take it back for anything.</p><p>Because my fellow queers mean so incredibly much to me. Because the future is queer.</p><p><em>—</em></p><p>The previous evening, I watched <a href="https://2019.jsconf.eu/c-j-silverio/the-economics-of-open-source.html">CJ Silverio’s talk</a> on the economics of open source. And I was stunned. And shaken. And provoked. As I said in a tweet, I think CJ’s talk is the most important JavaScript talk of the last 5 years.</p><p>I could write an entire blog post on the implications of this talk alone, but instead I’ll share this single slide from her talk:</p><h3>Bryan Hughes @ JSConf EU on Twitter</h3><p>👏👏👏👏👏👏👏👏 @ceejbot @jsconfeu</p><p>It’s no coincidence that this is my most popular tweet of all time. It says so much with so little. It cuts to the heart of everything about our industry. You should watch it.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FMO8hZlgK5zc%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DMO8hZlgK5zc&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FMO8hZlgK5zc%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/bd9a873644d453417d01f5a02ab7d643/href">https://medium.com/media/bd9a873644d453417d01f5a02ab7d643/href</a></iframe><p>The most important thing it has to tell me specifically is that the community should be my number one priority in my career. My number one <em>loyalty</em> in my career. Jobs and companies come and go, this community doesn’t. This community has been a part of my life since that fateful JSConf US in 2013. Six years of my life.</p><p>I had a feeling hit me during the conference: “We are becoming the old guard. And I couldn’t be happier.” Me along with a number of others entered the community around the same time. Many of us are now leaders in some form or fashion. Some of us lead projects like Node.js. Some of us give the top talks that shape conferences. And there are so many incredible talented folks coming after us. And I can’t wait to see the amazing things they do and the amazing ways they shape the community.</p><p>My priority is and has been community for some time, but I think I became complacent recently. I need to do better, and I have to have some difficult conversations with myself in the days and weeks to come.</p><p>—</p><p>My last night in Berlin, after JSConf EU 2019 ended, was remarkably similar to my final night in Berlin after JSConf 2017. I went out with friends new and old and we partied and celebrated the conference, each other, and life.</p><p>As the evening drew to a close, a small group of us watched the sun rise over the Spree river. We chatted and joked about so many things. We told stories of living life, of memories past, and when that day might come in the future when we <em>finally </em>get top-level async/butts in Node.js. We were together, we were present, another moment frozen in time. A mirror to that time in 2017 when a friend and I watched the sun rise over the Spree river on the Oberbaum Bridge not far from this very spot.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MV6EuCRZY4o3-99AecKIMg.jpeg" /><figcaption>Watching the sun rise over the Spree River</figcaption></figure><p><em>And hang each moment up like pictures on the wall<br>Inside a billion tiny frames so that we can see it all, all, all</em></p><p>JSConf EU is over, and we’ll never be able to attend one like it again. It’s not gone though. It will always be here, because we’re still here, moving through the world, shaping it. Through the projects we create, through the teams we’re with, through the communities we build. The friends we make. The relationships that <em>will happen, happening, happened</em>.</p><p>The heartache and the joy. The pain and the pleasure. The mistakes and the successes.</p><p>The love in our lives.</p><p>JSConf EU is in all of those because we are in all of these.</p><p><em>Time is an illusion that helps things make sense<br>So we are always living in the present tense<br>It seems unforgiving when a good thing ends<br>But you and I will always be back then<br>You and I will always be back then</em></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FXr53S9vIbCE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DXr53S9vIbCE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FXr53S9vIbCE%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/20401dd423822a07f4bb193491d2c386/href">https://medium.com/media/20401dd423822a07f4bb193491d2c386/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9b8333ef9201" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Converting to TypeScript: Part 1, Unit Tests]]></title>
            <link>https://medium.com/microsoftazure/converting-to-typescript-part-1-unit-tests-87c20329d6c7?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/87c20329d6c7</guid>
            <category><![CDATA[typescript]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[iot]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[unit-testing]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Wed, 21 Nov 2018 16:05:07 GMT</pubDate>
            <atom:updated>2019-02-26T00:41:36.458Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Writing Unit Tests For A Rewrite: A Case Study</strong></h3><p><em>This blog post is the first post in a series that discusses my efforts to convert </em><a href="https://github.com/nebrius/raspi-io/"><em>Raspi IO</em></a><em> to TypeScript and modernize its architecture. This blog post series will explore how to write unit tests specifically for rearchitecting or rewriting a project, how to create TypeScript base classes and functionality that is shared across multiple TypeScript and non-TypeScript projects, and how to convert an existing code base to TypeScript all in one go.</em></p><p>All codebases age and mature over time. With age brings stability, and older projects are typically more reliable as a result.</p><p>However, age also brings with it creaks and groans as the original architecture struggles to keep up with modern user needs. Time also brings newer, better ways of developing these projects, and what was once cutting edge often becomes clunky and slow.</p><p>So the question for these projects becomes: to rewrite, or not to rewrite? I faced such a question with my oldest project still under development: <a href="https://github.com/nebrius/raspi-io/">Raspi IO</a>.</p><p>Raspi IO is a plugin for the <a href="http://johnny-five.io/">Johnny-Five</a> Node.js robotics and IoT framework that enables Johnny-Five to run on the Raspberry Pi. I first created it as a monolith in 2014, but the original architecture quickly ran into limitations as I added more features. I rewrote the library the following year and split it into multiple modules. This rewrite allowed the project to scale as more features were added.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qAcItOYRwANMXlORrhHzCA.png" /><figcaption>Raspi IO Architecture Diagram</figcaption></figure><p>Raspi IO currently consists of 11 modules. Nine of these modules comprise what I call <a href="https://github.com/nebrius/raspi">Raspi.js,</a> which can be used independently of Raspi IO and Johnny-Five. These modules together provide a complete API for interacting with hardware on the Raspberry Pi in a uniform way. Raspi IO and Raspi IO Core together provide a translation layer from Raspi.js to the <a href="https://github.com/rwaldron/io-plugins">IO Plugin spec</a> for Johnny-Five. Raspi IO Core is platform independent, and Raspi IO injects Raspi.js into Raspi IO Core to create a Raspberry Pi specific IO plugin.</p><p>Over time, all of Raspi.js has been converted to TypeScript and updated to modern coding practices. Raspi IO and Raspi IO Core, however, have remained more or less unchanged for three years. This is fine for Raspi IO, which only contains 32 lines of code, but not for Raspi IO Core. Inside, there are 1000 lines of dense JavaScript, replete with hacks for strange edge cases and bugs. This codebase definitely falls under the classic case of “afraid to make changes because it might break everything.” It’s also in dire need of updating to TypeScript and modern coding conventions.</p><p>With the need clear in my head, I sat down and devised a plan to rewrite Raspi IO Core without breaking it for my users. The first step in this rewrite was to implement unit tests with a high degree of code coverage, as Raspi IO Core did not have unit tests for historical reasons (unit tests involving hardware are tough).</p><p>While major refactors and rewrites bring a lot of advantages to them, such as state-of-the-art best practices and modern tooling, they are inherently risky from the standpoint of breaking your users. Unit tests act as insurance to make sure that the rewrite is as transparent to users as possible.</p><h3>Methodology</h3><p>So how does one implement unit tests for a project that has no unit tests and needs to be rewritten? Very methodically, and following a specification.</p><p>As previously mentioned, Raspi IO Core implements a published specification called the <a href="https://github.com/rwaldron/io-plugins">IO Plugin Spec</a>. This spec provides a blueprint for how the module is supposed to behave, and in effect provides a blueprint for the unit tests themselves.</p><p>Not all projects implement an API spec, but hopefully there are design documents or other documentation describing what the project is supposed to do. If not, then the first step in implementing unit tests is to write such a spec. It’s a lot of work, but I promise it will help tremendously down the road. In addition to making it easier to implement unit tests, it provides a place for all stakeholders, not just coders, to provide input on the project and make it better. If you’re unsure where to start, <a href="https://apiguide.readthedocs.io/en/latest/build_and_publish/documentation.html">Read the Docs</a> has good content on writing quality specifications.</p><p>Next up was to decide on a unit testing tech stack. I decided to go with a common stack for open source Node.js modules because I’m already familiar with them, and didn’t want to learn new tools or platforms at this time:</p><ul><li><a href="https://jasmine.github.io/">Jasmine</a>: a <a href="https://en.wikipedia.org/wiki/Behavior-driven_development">Behavior Driven Development</a> (BDD) test framework.</li><li><a href="https://istanbul.js.org/">Istanbul</a>: a JavaScript code coverage tool. <a href="https://en.wikipedia.org/wiki/Code_coverage">Code coverage</a> tools measure how much of your codebase is executed by your unit tests, and provides a useful proxy measure of how much of your code is tested by unit tests.</li><li><a href="https://travis-ci.org/">Travis CI</a>: a hosted unit testing platform that makes it easy to run unit tests on GitHub activity (e.g. when a PR is submitted, when pushing/merging to master, etc). Although not strictly required for the rewrite, it’s generally a good idea to wire up unit tests to a hosted platform such as Travis CI. This allows developers who are considering using your library to see unit test results without having to download your code and run tests themselves.</li><li><a href="https://coveralls.io/">Coveralls</a>: a hosted code coverage platform that integrates with Travis CI, and provides all the value that Travis CI does, except for code coverage instead of unit tests themselves.</li></ul><p>With the specification and unit testing infrastructure in place, it was time to write my unit tests!</p><h3>Walkthrough of a Unit Test</h3><p>To illustrate how to write an effective unit test, I’m going to do a deep-dive walkthrough for one part of the IO spec: the <a href="https://github.com/rwaldron/io-plugins#digitalreadpin-handler">digitalRead</a> method. The IO Plugin spec has this to say about the digitalRead method:</p><p><strong>digitalRead(pin, handler)</strong></p><ul><li>Initiate a new data reading process for pin</li><li>The recommended new data reading frequency is greater than or equal to 200Hz. Read cycles may reduce to 50Hz per platform capability, but no less.</li><li>Invoke handler for all new data reads in which the data has changed from the previous data, with a single argument which is the present value read from the pin.</li><li>A corresponding digital-read-${pin} event is created and emitted for all new data reads in which the data has changed from the previous data, with a single argument which is the present value read from the pin (This can be used to invoke handler).</li></ul><p>We can break the things this spec says we must do down into a few different things we need to test, which will become our set of unit tests. Reading through the spec, I identified the following five tests:</p><ul><li>The third bullet point indicates we need to test reading a value via the handler argument as the pin value changes over time.</li><li>The fourth bullet point indicates we need to test reading a value via the digital-read-${pin} event as the pin value changes over time.</li><li>The second bullet point indicates we need to test that handler is called at 50hz or faster.</li><li>The third and fourth bullet points indicate we need to test that the method doesn’t report the same value twice in a row.</li><li>Implicit in this and other parts of the spec is that we need to test that digitalRead continues to read even when the mode is changed to output mode and reports the output value that was set via digitalWrite.</li></ul><p>Now that we’ve identified five unit tests we want to write, the next step is to figure out <em>how </em>to write them. At the end of the day, unit tests exist to confirm that the correct outputs are generated given a reasonably complete sampling of inputs. So the first step in any unit test is to identify the inputs and outputs.</p><p>We tend to think of inputs and outputs as the arguments we pass to functions, and the values they return. These are not the only inputs that exist though. For example, if we’re testing a function that saves a value to the database, then the call to the database is also an output, in addition to what the function returns or the callback it calls. In the case of digitalRead, we’re calling other modules that talk to hardware (more outputs and inputs!). In general, it’s quite common for there to be two <em>or more</em> sets of inputs and outputs.</p><p>The trick in unit testing is to figure out how to measure the inputs and outputs on the “back end” of the diagram below. Most often, this is done using <a href="https://en.wikipedia.org/wiki/Mock_object">mocking</a>, and is the solution I chose to use here. The architecture of Raspi IO Core makes this pretty straightforward to do because we can pass in <a href="https://github.com/nebrius/raspi-io-core/blob/master/spec/mocks.js">mocked versions of all the modules in Raspi.js</a>. The full set of inputs and outputs we’re testing are shown below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*39Syli3JcFfWtK6EP9e7QA.png" /><figcaption>All Inputs and Outputs for digitalRead Tests</figcaption></figure><p>These mocked versions include a virtual implementation of hardware, and expose the inputs/outputs to this module such that we can verify them in our unit tests. For this unit test, we use the DigitalInput mock, which has the following code:</p><pre>class DigitalInput extends Peripheral {<br>  constructor(...args) {<br>    super([ 0 ]);<br>    this.value = OFF;<br>    this.args = args;<br>  }<br>  read() {<br>    return this.value;<br>  }<br>  setMockedValue(value) {<br>    this.value = value;<br>  }<br>}</pre><p>We’ve added an extra method called setMockedValue that doesn’t exist in the real Raspi GPIO DigitalInput class. This allows us to precisely control what Raspi IO Core will be reading. We also add a new property called args that we can use to see what parameters were passed to the class constructor. With this in place, we can measure all of the inputs and outputs to the “back end” of the black box we’re testing.</p><p>Now it’s time for the unit tests themselves. We’re going to take a look at a single unit test that tests using the callback to read the value</p><pre>it(&#39;can read from a pin using the `digitalRead` method&#39;,<br>    (done) =&gt; createInstance((raspi) =&gt;<br>{<br>  const pin = raspi.normalize(pinAlias);<br>  raspi.pinMode(pinAlias, raspi.MODES.INPUT);<br>  const { peripheral } = raspi.getInternalPinInstances()[pin];</pre><pre>  let numReadsRemaining = NUM_DIGITAL_READS;<br>  let value = 0;<br>  peripheral.setMockedValue(value);<br>  raspi.digitalRead(pinAlias, (newValue) =&gt; {<br>    expect(value).toEqual(newValue);<br>    if (!(--numReadsRemaining)) {<br>      done();<br>      return;<br>    }<br>    value = value === 1 ? 0 : 1;<br>    peripheral.setMockedValue(value);<br>  });<br>}));</pre><p>We start with some initialization code to get a test pin ready to read. We then call getInternalPinInstances, which is a special hook method that’s only exposed when we’re running unit tests. This returns the mocked instance of DigitalInput so we can access the hooks in DigitalInput we discussed above.</p><p>Then, we set up some state monitoring variables. Since this method is supposed to read data continuously, we must test that it can read more than once. numReadsRemaining tracks how many reads we’ve performed and how many we have left to go. We toggle the value each callback since it won’t call the callback if the value doesn’t change. In each callback, we test that the value that Raspi IO Core reports is the same value that we set in the mocked DigitalInput class.</p><p>And with that, the unit test is complete! If you’d like to see all of the unit tests that comprise the DigitalInput tests, you can <a href="https://github.com/nebrius/raspi-io-core/blob/master/spec/gpio.spec.js#L86-L237">find them on GitHub</a>.</p><h3>Lessons Learned</h3><p>Throughout this process, I’ve learned several important lessons about unit tests and rewrites.</p><p><strong>Edge cases are <em>more</em> important than common cases.</strong></p><p>We test our common cases a lot, and our code is written with these common cases in mind. Edge cases, more often than not, are found through trial and error, or user reports. As such, when we’re rewriting an existing codebase, we want to make sure that we port the edge cases over as they’re much less likely to be fixed “out of the gate.” Getting unit tests to test these edge cases is the most effective way to ensure we get these edge cases included in the rewrite.</p><p><strong>Always be specific, not general</strong></p><p>When writing unit tests, it’s easy to write something quick that more or less tests what we want. For example, if we’re testing whether or not a function throws an exception when it’s given an incorrect parameter, we could write something like this:</p><pre>expect(() =&gt; {<br>  add(NaN, `I&#39;m not a number`);<br>}.toThrow();</pre><p>This will indeed pass, but how do we know it passed because the add method correctly detected that we tried to add two non-numbers? What if there was a legitimate bug in the code that coincidentally threw on the same inputs? We should instead write this test as:</p><pre>expect(() =&gt; {<br>  add(NaN, `I&#39;m not a number`);<br>}.toThrow(new Error(`non-numbers passed as arguments to &quot;add&quot;`);</pre><p>This way, we can ensure that it’s throwing the way we expect. This also helps us to prevent typos if we aren’t copy-pasting the error message over. This may not seem like a big deal, but sometimes user’s code depends on the content of the error message because they need to make a decision based on <em>which </em>error is thrown. If we change our error message, we break this code. For an in-depth discussion of why error messages are important (and tricky), I recommend reading how the Node.js project itself is <a href="https://medium.com/the-node-js-collection/node-js-errors-changes-you-need-to-know-about-dc8c82417f65">changing how it does error handling</a>.</p><p><strong>Good code coverage is more important for rewrites than it is for day-to-day development.</strong></p><p>In an ideal world we’d all have 100% code coverage. In practice, however, 100% code coverage is rarely ideal, and sometimes impossible. Indeed, Raspi IO Core sits at 93% coverage because most of the code not being testing is dead code. Most of this dead code is runtime code introduced by Babel itself, which is admittedly an outdated version. The rest is code that I thought was necessary but is most likely dead code in practice. There are also cases where some code is so tightly bound to something not present during testing (like, say, an external sensor), that mocking everything necessary would lead to a unit test that really is only testing the mocks, not the code itself.</p><p>It’s expected not to have 100% code coverage, but it’s more important to have high code coverage for a rewrite than for day-to-day coding. This is because of statistics. During a rewrite, we are changing vast swaths of our code which end up being covered by large numbers of unit tests, and thus large numbers of edge cases. Day to day coding rarely has such far reaching changes though. As such, the chance of regressions is higher during a rewrite. Having high code coverage is the most effective way at preventing regressions in general, and so high code coverage is especially important when we’re dealing with changes that have high risk of regressions, such as a rewrite.</p><p><strong>Writing unit tests against a spec also improves the spec</strong></p><p>As much as we want to view specifications as infallible, they’re created by humans. And just like humans who create code, humans who create specifications sometimes make mistakes and introduce bugs in the spec. Writing unit tests against a spec will often highlight areas of the spec that are ambiguous or contain errors. In creating the unit tests for Raspi IO Core, I uncovered multiple issues with the spec. In <a href="https://github.com/rwaldron/io-plugins/pull/17">three</a> of <a href="https://github.com/rwaldron/io-plugins/pull/21">the</a> <a href="https://github.com/rwaldron/io-plugins/pull/19">cases</a>, we simply forgot to update the spec with some new features that were added. In <a href="https://github.com/rwaldron/io-plugins/issues/16">two </a>other <a href="https://github.com/rwaldron/io-plugins/issues/18">cases</a>, the spec was ambiguous. Going through the process of writing unit tests can be a surprisingly effective way at sussing out issues in the specification.</p><h3>Conclusion</h3><p>I’ve attempted to convert Raspi IO Core to TypeScript probably 4 or 5 times in the past. Each previous attempt failed because I quickly became uncertain that I could provide a painless upgrade path for my users. Without unit tests, I was not confident in my changes. Writing these unit tests was the key missing ingredient in these previous attempts, and now I’m set to move forward with converting Raspi IO Core to TypeScript, and re-architecting major parts of it in the process.</p><p>This effort has really reiterated the importance of unit tests, as well as the importance of understanding what we test, how we test it, and why.</p><p><em>Bryan Hughes is a Cloud Developer Advocate at Microsoft, long-time member of the Node.js and NodeBots communities, and tech activist. Follow him on twitter at </em><a href="http://twitter.com/nebrius"><em>@nebrius</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=87c20329d6c7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/microsoftazure/converting-to-typescript-part-1-unit-tests-87c20329d6c7">Converting to TypeScript: Part 1, Unit Tests</a> was originally published in <a href="https://medium.com/microsoftazure">Microsoft Azure</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why I Won't be Speaking at OSCON]]></title>
            <link>https://medium.com/@nebrius/why-i-wont-be-speaking-at-oscon-575fde0c2abd?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/575fde0c2abd</guid>
            <category><![CDATA[oscon]]></category>
            <category><![CDATA[social-justice]]></category>
            <category><![CDATA[code-of-conduct]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Thu, 12 Jul 2018 21:15:09 GMT</pubDate>
            <atom:updated>2018-07-12T23:00:56.130Z</atom:updated>
            <content:encoded><![CDATA[<h3>Why I Won’t be Speaking at OSCON</h3><p>As you may have <a href="https://twitter.com/_sagesharp_/status/1017112425399660544">seen recently on Twitter</a>, some problematic language was slipped into OSCON’s Code of Conduct that added “political affiliation” as a protected class. In addition, there was language in the speaker agreement that stated:</p><blockquote>8. In keeping with the O’Reilly Code of Conduct, I agree to refrain from any political or religious commentary while I am on stage.</blockquote><p>Sage Sharp and Coraline Ada Ehmke have both wrote extensively on why this is problematic, and I highly encourage you to read <a href="https://where.coraline.codes/blog/oscon/">Coraline’s blog post</a> and <a href="https://twitter.com/_sagesharp_/status/1017232942760771584">Sage’s Twitter threads</a>. I specifically want to highlight this point that Coraline wrote:</p><blockquote>You might think that politics don’t belong at a technology conference, but I would argue that politics and software are so tangled that they cannot be reasonably separated. Consider the GPS software that tells you how to get to a restaurant, that is also used to power military drones. Or the facial recognition software that unlocks your phone, being used to record, track, and target the activities of political dissenters. Or even simple things, like he/she pronoun selections on sign-up forms. Or health and wellness apps that assume that all women menstruate, or that none of their users menstruate. All of these technologies are inherently political. There is no neutral political position in technology. You can’t build systems that can be weaponized against marginalized people and take no responsibility for them.</blockquote><p>All technical decisions are political.</p><p>Everything we build in tech has political ramifications. Any claims that “I don’t get involved in politics” is just another way of saying “I’m ignoring the harm and impact that my technical decisions make.”</p><p>As a Gen X queer atheist from Texas, I am <em>keenly</em> aware of the harm that politics inflicts on the underprivileged and marginalized. I’m sure Tim O’Reilly has good intentions and does not intend for this marginalization to occur. However, as I <a href="https://medium.com/@nebrius/intention-and-racism-we-have-it-all-backwards-94f3f441e43a">recently wrote</a>, intentions are irrelevant when your actions result in the oppression of marginalized groups. It <em>does not matter</em> if you intended the opposite.</p><p>Tim O’Reilly’s <a href="https://www.linkedin.com/pulse/political-speech-conference-codes-conduct-tim-o-reilly/?published=t">response on LinkedIn</a> does nothing to convince me that he and others will effectively enforce OSCON’s Code of Conduct, as they removed the language but stuck with the intent of the language. This is not effective action, this is trying to PR your way out of a crisis. In addition, OSCON has already failed to effectively enforce their Code of Conduct against a serial abuser in the past, further illustrating how their words and actions do not correlate:</p><h3>Thursday Bram on Twitter</h3><p>I want to talk about a time when I had to take a code of conduct report to @OSCON when it was here in Portland. It&#39;s one of the worst code of conduct experiences I&#39;ve had and I&#39;ve taken some pretty shitty reports as a CoC responder at multiple conferences.</p><p>This is completely unacceptable. I <em>will not</em> support or speak at any conference that is unwilling to make privileged folks uncomfortable to ensure the safety of marginalized individuals.</p><p>As such, I am withdrawing from speaking at OSCON.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=575fde0c2abd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Intention and Racism: We Have It All Backwards]]></title>
            <link>https://medium.com/@nebrius/intention-and-racism-we-have-it-all-backwards-94f3f441e43a?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/94f3f441e43a</guid>
            <category><![CDATA[privilege]]></category>
            <category><![CDATA[racism]]></category>
            <category><![CDATA[intentions]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Tue, 26 Jun 2018 16:53:21 GMT</pubDate>
            <atom:updated>2018-06-26T16:53:21.990Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xMOnw_ITYY_vHJs6llMDyA.jpeg" /></figure><p><em>Author’s note: This article is written specifically for an audience of white liberal folks. This article assumes that you are white and you already agree racism is an issue in this country and that we need to work to end it. Just so we’re clear, when I say things like “you,” “we,” “us,” etc., I mean “you liberal white person,” “we liberal white people,” and “us liberal white people.” This is true regardless of any other privilege, or lack thereof. I’m talking to cis straight white men, yes. I’m also talking to cis queer non-neurotypical white men like myself, white women, white queer and/or non-binary folks of all stripes, white non-neurotypical folks, and so on. I’m talking to all of you, and no one gets a pass. Not even myself, as I’m no exception to everything I’m about to say.</em></p><p><em>I also want to thank </em><a href="http://twitter.com/kimcrayton1"><em>Kim Crayton</em></a><em> and </em><a href="https://twitter.com/soniagupta504"><em>Sonia Gupta</em></a><em> for everything I’ve learned from them on this topic so far, and for everything I still have let to learn from them. You should go follow them right now if you haven’t already, they’re both totally badass.</em></p><p>I’m sure you’ve seen this argument before, you’ve probably even been the one arguing. I know I have. You get called out for something racist. Maybe you’re called out individually, maybe someone called out white folks in general. The result is the same.</p><p>“But I had good intentions, and you just came in here getting angry and divisive. We’re allies and you should treat me as such, instead of dividing the movement.”</p><p>This is all bullshit of course, but perhaps not <em>quite</em> in the way most people make this out to be bullshit. When a white person who was called out for being racist says they had good intentions, they’re telling the truth. They actually did have good intentions. And they still screwed up, because intentions are <em>irrelevant</em>. One of my favorite sayings is a very old one, dating back almost a thousand years, that remains true to this day:</p><p><em>The road to hell is paved with good intentions.</em></p><p>Let’s put this another way: virtually everyone has good intentions. The number of people who wake up in the morning and consciously say “gee, I’d sure love to go oppress some African Americans today” are so incredibly few and far between that they’re statistically irrelevant. For example, there are only between 5,000 and 8,000 KKK members in the US today [1]. Saying you had good intentions is like saying water is wet: it’s completely true <em>and</em> it’s apropos of nothing.</p><p><em>Worse, it’s a defense mechanism we subconsciously use to ignore the harm we cause others.</em></p><p>Let me go on a bit of a tangent, but I promise there’s a reason. White west coast liberals <em>love</em> to talk about how racist white Southerners are. And the South is very racist, no doubt about it. I grew up there, I know. I’ve lived in San Francisco for 9 years now, so I also know west coast liberals. I’ve learned over the years that the vision west coast liberals have of Southern racists bears little resemblance to reality. It’s a <em>laughably </em>wrong caricature, like propaganda videos out of Iran and North Korea lambasting the US. Worse, this caricature gives white west coast liberals a chance to ignore their own racism and harm because “clearly we’re not anything like this thing we just made up, therefore there’s no way we could be racist like them.”</p><p>The reality is that white west coast liberals are only <em>marginally</em> less racist than white folks in the South, and they get unbelievably defensive when you point this out to them. Just one tiny example: a former coworker of mine, and white male self-avowed social justice activist, utterly flipped out when I called him on this. He immediately proceeded to call me a Nazi and blocked me on all social media, f<em>or saying liberal white people are racist.</em> White fragility indeed.</p><p><em>White west coast liberals: white Southern conservatives are a mirror into your own racism. Stop looking away from it!</em></p><p>Think I’m exaggerating? Look into our own history in California. Research the Compromise of 1850, and how California almost became a slave state [2]. Research Kearneyism and the 1879 constitution of California, and how it included provisions that were precursors to the Chinese Exclusion Act [3]. Research the Chinese Exclusion Act [4]. Research the role that California farmers and labor unions played in Japanese internment during World War II [5]. Research how San Francisco destroyed the Western Edition in the name of “fixing blight,” which really was code for getting rid of African Americans…which worked by the way [6]. Research why the Black Panthers were founded in Oakland, and not the South, and why their activism was (and is) desperately needed in Oakland [7]. Research the shooting of Oscar Grant [8]. Research the brutality of the Oakland Police Department during the Occupy protests [9] (I saw them in person, SWAT officers are frightening in a way I could never have imagined before and they weren’t even paying attention to me). I could go on, but you get the point.</p><p><em>The San Francisco Bay Area’s past and present is racist.</em></p><p>There’s a reason that the population of San Francisco shifted from 13% African American to 6% in only 40 years, and there’s a reason we’re <em>still</em> only at 6% [10]. San Francisco, that bastion of inclusivity, is effectively tied with Phoenix, Arizona and San Antonio, Texas for the <em>lowest</em> percentage of African Americans among the top 15 largest cities in the US [11].</p><p>Which brings us back to the point: San Franciscans also have good intentions. We don’t <em>want</em> to be racist…but we are. And there’s the rub: if good intentions mattered, then why is this place with some of the best intentions also the worst at results? It’s because there’s something deeper and more powerful going on.</p><p>Most bigotry is subconscious but all intention is conscious, meaning our intentions don’t even know our bigotry exists most of the time! They’re unrelated in our brains, and our subconscious brain is almost always more powerful than our conscious brain. Just look at how addiction works for one example. So when we talk about the harm done by racism, sexism, homophobia, etc. we’re talking about the harm that our subconscious brain does. Yet when we get called out for things our <em>subconscious</em> brain did, we push back and get defensive based on what our <em>conscious </em>brain is telling us, a.k.a. our intentions.</p><p>And we go round and round on this seemingly never-ending groundhog day nightmare where a person of color calls one of us out for bad behavior, and we push back saying “but that wasn’t my intention.” Everyone gets angry, nothing is accomplished, and the problem persists.</p><p>So what do we do about this?</p><p>We need to see ourselves clearly and stop conflating what different parts of our brain are doing. We have to recognize that this seemingly rational explanation for why we aren’t racist isn’t actually rational…it’s a defense mechanism that causes us to miss what our subconscious brain is doing.</p><p>We need to stop viewing ourselves as a “good person.” None of us are actually good people because the concept itself is an oversimplification. We’re all humans, and we innately have the capacity for good and bad, and regularly do both good and bad. So let’s stop focusing on the concept of a good person, and instead lets start focusing on good actions. Like ally-ship, it’s not a title that gets conferred, it’s a value placed on a specific good deed we do that gets interspersed with all the other deeds we do. We also need to stop weaponizing this concept to ignore the harm we cause. “But I’m one of the good ones” isn’t a real thing.</p><p>We have to learn about ourselves, and see ourselves for what we are: complicated beings who were shaped by our history.</p><p>For those of us that are white but underprivileged in some other way, we have to be especially careful. In addition to being a cis white guy, I’m also queer and deal with a fair amount of anxiety, both of which have social justice aspects to them. Same thing with white women. But. The ways in which we lack privilege are not comparable to what people of color deal with in this country, especially African Americans and Native Americans.</p><p>Whenever we get called out by a person of color and we want to respond with “that’s homophobic,” or “that’s sexist” or anything else similar, we must tread <em>very very carefully. W</em>hat we feel was bigoted coming from the person of color <em>may</em> be accurate, but it’s a lot more likely that it’s just our brain trying to defend ourselves and find a reason for it to not be our fault. Resist the urge to do this, because it will only make things worse. Even more specifically: if you are a woman, <em>do not</em> weaponize the whisper network against women of color! I’ve seen this happen before, this is not a hypothetical, and it’s straight up racist oppression.</p><p>I want to end back where we started: with intention. We don’t intend to cause harm, and we don’t intend to be racist. We’re usually trying for the opposite of that. But intentions don’t matter, and we need to let that concept go entirely. Don’t start at the beginning (intention) and work your way to the end (harm). Instead, start at the end with the results of our actions devoid of intention, and then try and make things right.</p><p>I’m learning how to do it, and you can too. It all starts with understanding the actual effects of our actions, and not how our brains perceive them.</p><p>I know it sounds like I’m being hard on white west coast liberals, and I am. I think deep down though it’s because, at the end of the day, this is my home now. I am one of you, not apart from you. I grew up in the 80s and 90s in various parts of Texas that ranged from moderate to deeply conservative…all while queer. In my own smaller way I got a glimpse of what it’s like to be an outcast. I know what it feels like when everyone around you hates you because of an innate part of who you are. Something you have no control over, something you were born with. I came to San Francisco almost a decade ago to get away from all that, and I can’t bear the thought that we’re doing the same and worse to others that was done to me.</p><p>Let’s strive to become that better place we envision this to be, and it starts with ourselves.</p><p>[1] <a href="https://www.splcenter.org/fighting-hate/extremist-files/ideology/ku-klux-klan">https://www.splcenter.org/fighting-hate/extremist-files/ideology/ku-klux-klan</a><br>[2] <a href="https://en.wikipedia.org/wiki/Compromise_of_1850">https://en.wikipedia.org/wiki/Compromise_of_1850</a><br>[3] <a href="http://www.sfmuseum.org/hist6/kearneyism.html">http://www.sfmuseum.org/hist6/kearneyism.html</a><br>[4] <a href="https://en.wikipedia.org/wiki/Chinese_Exclusion_Act">https://en.wikipedia.org/wiki/Chinese_Exclusion_Act</a><br>[5] <a href="https://fee.org/articles/special-interests-and-the-internment-of-japanese-americans-during-world-war-ii/">https://fee.org/articles/special-interests-and-the-internment-of-japanese-americans-during-world-war-ii/</a> (Yes this is a Libertarian think tank, but this specific article is spot on)<br>[6] <a href="https://www.sfgate.com/bayarea/article/Sad-chapter-in-Western-Addition-history-ending-3203302.php">https://www.sfgate.com/bayarea/article/Sad-chapter-in-Western-Addition-history-ending-3203302.php</a><br>[7] <a href="https://en.wikipedia.org/wiki/Black_Panther_Party">https://en.wikipedia.org/wiki/Black_Panther_Party</a><br>[8] <a href="https://en.wikipedia.org/wiki/Shooting_of_Oscar_Grant">https://en.wikipedia.org/wiki/Shooting_of_Oscar_Grant</a><br>[9] <a href="https://www.theguardian.com/world/2013/jul/03/occupy-oakland-protesters-1m-police">https://www.theguardian.com/world/2013/jul/03/occupy-oakland-protesters-1m-police</a><br>[10] <a href="https://en.wikipedia.org/wiki/San_Francisco#Race,_ethnicity,_religion,_and_languages">https://en.wikipedia.org/wiki/San_Francisco#Race,_ethnicity,_religion,_and_languages</a><br>[11] <a href="https://en.wikipedia.org/wiki/List_of_United_States_cities_by_population">https://en.wikipedia.org/wiki/List_of_United_States_cities_by_population</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=94f3f441e43a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Stuck In The In-Betweens of Queerness]]></title>
            <link>https://medium.com/@nebrius/stuck-in-the-in-betweens-of-queerness-506cbb8dde4c?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/506cbb8dde4c</guid>
            <category><![CDATA[generation-x]]></category>
            <category><![CDATA[millennials]]></category>
            <category><![CDATA[introspection]]></category>
            <category><![CDATA[lgbtq]]></category>
            <category><![CDATA[self-awareness]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Tue, 27 Feb 2018 03:31:34 GMT</pubDate>
            <atom:updated>2018-02-27T03:36:15.591Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DHI6RCE2WLMXr1s3yKFCSQ.jpeg" /><figcaption><a href="https://500px.com/photo/218509765/stacks-of-forgotten-by-bryan-hughes">“Stacks of Forgotten”</a> by Bryan Hughes</figcaption></figure><p>I find myself reflecting on my queerness tonight. It’s certainly not an unusual topic; I think almost every other queer person I know contemplates about their queerness a lot.</p><p>I sit in a strange spot. I’m older than the majority of queer folks I know. It’s not that I’m particularly old, I’m 35. And it’s not that younger people are more likely to be queer. Instead, queer people who are younger are more likely to be out. Regardless, my story is starting to feel more and more unique as time marches on.</p><p>I’m not a Millennial, according to most definitions. I’m technically Gen X according to those definitions, although I don’t feel like I relate that much more to Gen X than to the Millennial generation. I suppose that doesn’t particularly matter.</p><p>What matters is that I grew up in an era and in a place where coming out as queer meant disownment for many people, and violence for more than a few of them.</p><p>I didn’t come out when I was young. That would wait until I was in my 30s.</p><p>Being bisexual played a crucial role in that. When my mind was younger, it framed the narrative as “you’re into women, so that’s that.” That wasn’t that, of course, but I don’t blame myself for it. Straight passing privilege helped me avoid physical violence. Violent homophobes tortured and then murdered Matthew Shepard when I was just a sophomore in high school. Because he was queer. Of course I was going to prioritize my physical safety over my mental health, I lived in Texas for fuck’s sake.</p><p>Being queer in the 20th century almost invariably meant choosing between physical safety and mental health. There was no way to have both back then. But staying closeted didn’t just magically make everything ok. Coming out has helped the mental health of every queer person I know, myself included. But it’s not like I was fully conscious of any of this anyways.</p><p>Queer representation in the 80s and 90s was in its infancy. The first episode of Will and Grace didn’t air until I was already a sophomore in high school (a show I’ve never watched, oddly). South Park, also in its infancy, was on the cutting edge of representation with episodes like “Big Gay Al’s Big Gay Boat Ride,” as was The Simpson’s “Homer’s Phobia.” We now know that both of those episodes reveled in caricature that today would rightfully be classified as offensive.</p><p><em>But the 90&#39;s aren’t now.</em></p><p>Those two episodes were quintessential to me, and mean a lot to me to this day. I don’t expect millennial queers to understand, and that’s fine. Stepping stones are just that, an intermediate stopping point on the long moral arc towards justice. But my stepping stones matter a hell of a lot to me.</p><p>They helped me to understand that being queer isn’t a death sentence. They helped me to realize that maybe, just maybe, being queer was something to be proud of. They played an early role in jogging me out of the straight mindset that I was embodying as a defense mechanism.</p><p>At this time, cis white gay representation itself was in its infancy, so of course there were no bisexual role models for me then. These early instance of gay representation weren’t some lightbulb, some watershed moment that led to me realizing the truth about myself, as they were for many gay men I know. I wasn’t gay, after all, even if I wasn’t straight either. And that doesn’t even begin to talk about representation for PoC and gender non-conforming folks.</p><p><em>But it was something.</em></p><p><em>And at least I had that.</em></p><p>Just as I live in between Generation X and the Millennial generation, I also live in between the generation of queer folks who had nothing but trauma awaiting them when they came out, and queer folks now who have a pretty good chance of being truly supported when they come out. I lived in the in between of gay and trans folks who had to actively lie about themselves to stay closeted, and straight folks who never had a closet to begin with. My closet only required lies of omission, of never completing that sentence “I’m interested in women, and…”</p><p>So I’m left, as always, feeling stuck in a sort of purgatory on how I’m supposed to feel about myself. Knowing there’s no black-and-white answer, all the while relating to all the extremes who hate each other.</p><p><em>Stuck in the in-betweens.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=506cbb8dde4c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My Journey to Stable Anxiety]]></title>
            <link>https://medium.com/@nebrius/stable-anxiety-aece59c83bc0?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/aece59c83bc0</guid>
            <category><![CDATA[personal-development]]></category>
            <category><![CDATA[mental-health]]></category>
            <category><![CDATA[self-awareness]]></category>
            <category><![CDATA[anxiety]]></category>
            <category><![CDATA[therapy]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Mon, 29 Jan 2018 18:28:01 GMT</pubDate>
            <atom:updated>2018-01-30T19:59:55.922Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kDKZjNuFidhm4eaGD7_6HA.jpeg" /><figcaption><a href="https://500px.com/photo/238010901/the-artistic-decay-of-the-cold-war-by-bryan-hughes">“The Artistic Decay of the Cold War”</a> by Bryan Hughes</figcaption></figure><blockquote>“And it feels like I can’t win<br>I’m growing up and I’m giving in<br>And it’s starting to hurt<br>And it feels like I can’t win<br>I couldn’t wait to be alone again<br>And I’m getting worse”</blockquote><blockquote>- PUP</blockquote><p>If ever there were a theme song to a segment of my life, PUP’s “<a href="https://open.spotify.com/track/4RocPdq45Qt51yb0YwY5Xh">Can’t Win</a>” was it for November and December of last year.</p><p>2017 was one fucking hell of a year, very much a continuation of 2016, which began in 2015. I thought I had gotten over it at <a href="https://medium.com/@nebrius/an-open-love-letter-to-jsconf-eu-and-how-it-ended-my-2016-40f0b441e9d5">various points in time last year</a>, but there was always something else that came up.</p><p><em>And each time I felt unstable again.</em></p><p>It’s unfortunate how we use the word “unstable” when describing someone’s life. We have this image in our heads of someone who is incredibly self-destructive, addicted to all kinds of drugs, sleeping with everyone they can, a stone’s skip and a throw away from homelessness (if they’re not already), etc. While there are people whose lives are that tumultuous, and we should have sympathy for them, that’s a very egregious view of what “unstable” means. There are a lot of different ways that someone’s life can become unstable, some more subtle and nuanced than others.</p><p><em>Mine was decidedly in the “subtle and nuanced” category.</em></p><p>I think this categorization of unstable as meaning “self-destructive to the point of rock bottom” stems from how much we stigmatize mental health in this society. We so often force our view to be as extreme as possible to avoid facing the challenges in our own lives and brains.</p><p><em>We don’t want to be “one of the crazy ones.”</em></p><p>And yet, many folks do deal with mental health challenges of all sorts of types and all sorts of degrees.</p><p><em>Myself included.</em></p><p>I deal with low but constant levels of anxiety in my life. It’s not bad enough to be classified as Generalized Anxiety Disorder or anything else in the anxiety disorder family, but it’s enough that it colors how I view, well, everything. And how I respond to everything. And everyone.</p><p>Anxiety itself doesn’t make me unstable, nor does it cause the problems in my life. It’s a lens through which I view the world; it colors my interactions. What makes my life feel unstable is when external events collide with my mental health and put me in a headspace where I regularly feel in conflict with my surroundings. In other words, I feel unstable when enough external events are happening in my life that my anxiety takes over and everything is a constant tumult.</p><p>I realized I had been in this headspace for a long, long time, caused by a long series of mostly unrelated events that ensured I was never really able to recover from one thing before the next thing happened.</p><p>So I stepped back and took stock of my life, and decided to focus on stabilizing it. But how does one do that, per se?</p><p><em>Therapy. Mostly.</em></p><p>I started therapy at the beginning of last December, and it has been a godsend. I have gained greater clarity of how my brain and the world around me intersect. I have started learning to perceive how things actually affect me, and how to take stock of whether or not something is healthy for me on the whole. My therapist said something in particular that stuck with me:</p><p>“Your anxiety is excitement that is unsupported.”</p><p>That “unsupported” bit stuck with me. I realized that almost everything happening in my life in fall of 2017 was lacking support, in one way or another.</p><p>I <a href="https://medium.com/@nebrius/why-im-leaving-the-node-js-project-bff946845a77">resigned from the Node.js project</a> when the core of what I’d been working towards fell through. Unsupported.</p><p>I switched to evangelism from doing full-time engineering at Microsoft. I joined right before a large-scale reorg, and then the reorg lasted considerably longer than anyone anticipated, so I was left spinning my wheels for many months. For the record, I hold no animosity towards anyone at Microsoft for this. The reorg was quite tricky to get right, and I don’t think I could have done it any better. Nonetheless, I wasn’t able to do my job very well. Unsupported.</p><p>I realized that the social circle I was a part of wasn’t healthy for me, for a variety of reasons I won’t go into here. What I will say is that I wasn’t able to be myself there. Unsupported.</p><p><em>Unsupported.</em></p><p>This single phrase wove a common thread through everything that had been making my life difficult and spiking my anxiety. So I focused on that. Honestly, the only genuinely stable thing in my life last year was my spouse, who is incredible in so many ways and has been so supportive throughout all of this.</p><p>Over the last two months, I have focused on judiciously cutting things and people out of my life. Specifically:</p><ul><li>I walked away from the social circle I’d been a part of for two years. I have since begun the process of reconnecting with other friends with whom I’d fallen out of touch.</li><li>I radically changed how I use Facebook. Now, I only read my notifications, and I solely “auto-post” a small set of things: photos, blog posts, and travel. I do not look at my feed anymore, whatsoever.</li><li>I altered my Twitter usage. I’ve decided to make it a lot more focused, and I continually gauge how it’s affecting my anxiety. Holding it at arm’s length is the best way to describe it.</li><li>Work fixed itself, fortunately, since it was just a matter of time for the reorg to finish. I am now careful to focus on a few big things and not let myself get distracted by all the other possibilities at work. (there’s so much cool stuff!)</li><li>I have decided to focus all of my diversity and inclusivity attention on a project I’m working on with a friend. I am staying abreast of everything else going on, but I’m choosing not to engage with them, other than retweeting what other’s have to say. Honestly, as a privileged cis white albeit-not-straight guy, this is the best approach anyways.</li></ul><p>In short, I’m prioritizing my own happiness. This prioritization doesn’t mean I’m ignoring others, in fact doing so would make me profoundly unhappy. It does mean that I’m more judicious about how and with what and whom I engage. I try always to ask “will this make me happy and fulfilled?”</p><p>And it’s already working. I’m happier now than I’ve been in a long, long time, and I feel a lot more stable.</p><p><em>And therapy is working.</em></p><p>If you are struggling with anxiety, depression, or life in general and you’re not already seeing a therapist, therapy is the first place you should start. If your first therapist doesn’t work, find another one. Keep at it until it starts working.</p><p><em>It’s worth it, I promise.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aece59c83bc0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Intersection of Gender Power Dynamics and Bisexuality, A.K.A My Life]]></title>
            <link>https://medium.com/@nebrius/the-intersection-of-gender-power-dynamics-and-bisexuality-a-k-a-my-life-46af5429e72a?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/46af5429e72a</guid>
            <category><![CDATA[sexism]]></category>
            <category><![CDATA[harassment]]></category>
            <category><![CDATA[bisexual]]></category>
            <category><![CDATA[lgbtq]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Wed, 11 Oct 2017 21:28:46 GMT</pubDate>
            <atom:updated>2017-10-11T21:28:46.403Z</atom:updated>
            <content:encoded><![CDATA[<p>You may have seen an article floating around on Twitter or Facebook, titled <a href="https://medium.com/@annevictoriaclark/the-rock-test-a-hack-for-men-who-dont-want-to-be-accused-of-sexual-harassment-73c45e0b49af">“The Rock Test: A Hack for Men Who Don’t Want To Be Accused of Sexual Harassment.”</a> It’s great, you should go read it. Wonderfully tongue-in-cheek, there is a lot of truth to it. I want to add a more serious note to the conversation, based on my own life experiences.</p><p>I’m bisexual. I’ve been with both men and women, and had to navigate life as someone who is attracted to people regardless of their gender. This may not sound like anything meaningful to those of you who aren’t bi/pan, but it matters far more than even <em>I</em> knew when I was younger.</p><p>There’s this saying that “you can’t be friends with people of the opposite sex.” It’s perpetuated by many men <em>and</em> women, and I feel that it has become a sort of “societal truth.”</p><p>It’s mostly bullshit, for a ton of different reasons.</p><p>It’s a saying that, for cisgendered straight folks, isn’t based on any sort of core concept or known truth. Rather, it’s a coping mechanism for underlying problems that aren’t being dealt with. I suspect this is mostly subconscious in men and mostly conscious in women.</p><p>Straight men who perpetuate this myth do so because they’re weak and unable to control themselves. They take their weakness to not do something as simple as <em>not sexually harass female friends and colleagues</em>, and pass the <em>responsibility</em> of that on to those women. They’re saying “I can’t be trusted with you, so I’m not going to have you as part of my life. I’m also not strong enough to enforce this myself, so you do it.” None of this is conscious though. It’s all feelings of anxiety that men need to explore, but don’t.</p><p>And women pay much of the cost for men not exploring their feelings.</p><p>This isn’t to say this doesn’t cause psychological harm in men though, it <em>absolutely</em> does. Sexism hurts men too. Repression fucks us up <em>far</em> more than most realize. Believe me, I’m a polyamorous bisexual atheist who spent much of his life in conservative parts of Texas, so I know a thing or two about repression. Straight men continually repress themselves and each other throughout their lives, leaving lasting scars that run deep.</p><p>Men: explore your feelings and be open about them, because it hurts yourself and others when you don’t.</p><p>So back to the “you can’t be friends with people of the opposite sex” thing. Women typically tend to say this for very different reasons than men. It’s a defense mechanism, straight up. Straight men often can’t be trusted to not sexually harass female friends (or coworkers, or service staff, or any random woman on the street), so it only makes sense that many women don’t even want to take the risk. They don’t try to be friends with men as a form of risk reduction. Yes, some men actually can be trusted to not sexually harass women, but enough <em>can’t</em> be trusted that it becomes a statistical likelihood issue. It’s <a href="http://geekfeminism.wikia.com/wiki/Schr%C3%B6dinger%27s_Rapist">Schrödinger’s Rapist</a>.</p><p>Now, here’s the thing. The “you can’t be friends with people of the opposite sex” statement is false on the face of it, even if there is some truth to why<em> women</em> perpetuate this. However, there’s something more insidious going on. I have only talked about cisgendered straight men/women so far. I haven’t even gotten to the biggest problem with the statement “you can’t be friends with people of the opposite sex” It ignores those of us who aren’t straight and/or not cisgendered.</p><p>The thing about “people of the opposite sex” is that there is am embedded assumption of a gender binary here. It implies only two genders, which isn’t true. It straight up erases trans folks, as society is sadly wont to do.</p><p>The thing about “you can’t be friends with” is that it assumes you’re only attracted to one gender, that gender attraction is a binary, oh and fuck you if that attraction isn’t for “the opposite” gender. It straight up erases non-straight folks, as society is sadly wont to do.</p><p>This phrase tells me, a bisexual guy, that I’m not allowed to be friends with <em>anyone</em>. Or work with <em>an</em>yone. Or have dinner alone with <em>anyone</em> (fuck you Mike Pence)<em>.</em></p><p>If we men are not able to control ourselves, to the point that we can’t be friends or colleagues with people whose gender we’re attracted to, then, what? I’m supposed to go live in a cave and not talk to anyone ever unless I’m having sex with them? Fuck that erase-y bullshit.</p><p>There’s another option and it’s called “don’t be a harassing sexist asshole.”</p><p>Which brings me back to the original article. Straight men need to understand that it’s possible to be attracted to someone and <em>not act on it. </em>Seriously, you don’t have to try and fuck everything that moves. You’ll be just fine if you don’t, I promise. In fact, if you stop trying to fuck everything that moves, <em>you’ll have more and better sex. </em>I know, it sounds backwards, but I promise it’s true. It’s funny how not being annoying and creepy causes people to actually like you.</p><p>I think this comes down to life experiences though. Straight men just don’t have experience with the interrelation between flirting and fear. They don’t have to deal with Schrödinger’s rapist, or Schrödinger’s gay basher, so they don’t know what that’s like. What it feels like to not show interest out of fear for your own personal safety. I don’t know how to give straight men these experiences, much as I desperately wish I could.</p><p>The world would truly be a better place if we could.</p><p>In the meantime, I’m left stuck between worlds, screaming into the void.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=46af5429e72a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Life is a Series of Steps]]></title>
            <link>https://medium.com/@nebrius/life-is-a-series-of-steps-ddacd8dbf597?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/ddacd8dbf597</guid>
            <category><![CDATA[introspection]]></category>
            <category><![CDATA[personal-growth]]></category>
            <category><![CDATA[burning-man]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Fri, 08 Sep 2017 23:17:17 GMT</pubDate>
            <atom:updated>2018-08-03T21:17:49.799Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3bW_qwTZjt0wccg0KkiANA.jpeg" /><figcaption>The Sun Rising Over Burning Man</figcaption></figure><p><em>CW: brief discussion of suicide</em></p><p>I have a quote that I’ve been working on for some time, a mantra if you will. Something to guide me through my long and winding life. It has shifted over the years, with words being trimmed, rephrased, parts added and removed. I attended my first Burning Man last week, and it was here that I feel like I finalized my mantra.</p><blockquote>Life is a series of steps that has led you to now. Good, bad, or indifferent, do not forget them. Remember and hold space for all of them, for they are you, and you are them.</blockquote><p>I’m turning 35 years old at the end of this month. 35 years of life. I’ve changed so much during this time, discovered so much about myself. I’m so much happier now than I was when I was younger, largely because I’m now living authentically. I’ve accepted and embraced my queerness, my atheism, my polyamory, and many more.</p><p>I didn’t live authentically when I was younger. I didn’t know who I was, much less how to live authentically as that person. This is in no small part due to the enormous pressure that conservative-leaning suburban Texas exerted on all of us as kids in the 80’s and 90&#39;s.</p><p>Most of the time I didn’t even know there <em>were</em> alternatives to what I was taught.</p><p>It took me many years and moving half-way across the country to figure it out, to learn what the possibilities are. Only then was I able to figure out who I actually was. I lost so many years of my life living someone else’s.</p><p>It’s hard to describe to people who haven’t been through this transition what it feels like. To learn that all of society lied to you, tricked you into believing something innate and fundamental about yourself that isn’t true. To feel that you weren’t allowed to live your own life, and that you were a willing participant in your own oppression because you were so inculcated.</p><p>I was angry for a long time.</p><p>I had every right to be angry, and processing that anger was a really important step in becoming who I am today.</p><p>I’m not angry anymore.</p><p>At least, I’m not angry about the history of my own oppression. I’m angry that this oppression still occurs, and I weep for those suffering under it throughout this country and this world. I have found peace with my own history at least. I am exactly where I want to be, and I like the person I am today. It’s impossible to separate who I am with where I came from. This presents something of a conundrum, but it is a conundrum to be understood, not disproven.</p><p>I have clarity now, understanding, and peace. I cannot really explain why or how. It rests entirely in emotional understanding. It is crystal clear, yet resistant to words. I think an important aspect in gaining this understanding has been allowing myself to grieve.</p><p>Which brings me back to Burning Man.</p><p>My first burn was a truly unique experience. It was sometimes fun, sometimes awe-inspiring, sometimes difficult, sometimes introspective, sometimes silly, sometimes boring, sometimes flirty, sometimes uplifting, sometimes confusing, sometimes tragic.</p><p>I supposed it’s cliched to say, but Burning Man gave me a lot of perspective, and taught me a lot about what’s really important, and what’s irrelevant. Watching someone commit suicide will do that.</p><p>So it goes.</p><p>The most personally impactful thing I experienced was the temple. I spent several hours there, contemplating and reflecting. I left five offerings over the course of two visits, representing five things I’ve struggled with over the last two years.</p><p>I cried for them all.</p><p>After I finished writing my final offering on the temple, someone came up to me. She gave me an envelope, said “open this tomorrow morning,” gave me a hug, and left. I had never met her before, and she never told me her name.</p><p>I got up early the next morning, letter in hand, and biked to the furthest spot from the the city along the trash fence in deep playa. It was still cold from the night before. A stillness radiating from everyone moving about, speaking more in quiet whispers than party yells. They scurried about on bikes and on foot, lazily, as if their minds were already back in their beds.</p><p>Wrapped in my fur coat, I laid out a sheet in front of my parked bike on the bare desert floor, it’s alkali dust covering everything in a thin white sheen by this point. I sat down and watched the light change, waiting for the sun to greet the day. As I sat, it peaked out from above the mountains, through the clouds, through the smoke from wildfires still smoldering. The sun tranquilly said hello to a new day.</p><p>After taking everything in, I opened the letter, and read it.</p><p>“Things Happen for a Reason,” the title said to me. As I read, taking in every sentence, every word, a calmness overcame me. I saw my life stretched out; the good, the bad, and the indifferent. I was reminded how every step in my life led me to now.</p><p>“The past is a guidepost, not a hitching post.”</p><p>The sentence stuck in my mind. It resonated, and reminded, telling me what I already knew, and yet still needed to hear.</p><p>My last night on the playa, I attended the temple burn. Thousands sat in silence, watching everyone’s grief burn away. The moon peaked out from the clouds, casting a soft glow on everything, as if trying to remind us to take time and be still with our grief. To remind us that everything is going to be ok, even the good, bad, and indifferent.</p><p>As the fire died down, I offered a eulogy of silent words to my five offerings.</p><p>I told each one that I’m sorry.</p><p>I thanked them for everything they had taught me.</p><p>I bid them all farewell.</p><p>.</p><p>And they bid farewell back.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ddacd8dbf597" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why I’m leaving the Node.js project]]></title>
            <link>https://medium.com/@nebrius/why-im-leaving-the-node-js-project-bff946845a77?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/bff946845a77</guid>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[diversity]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[inclusion]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Tue, 22 Aug 2017 20:14:09 GMT</pubDate>
            <atom:updated>2017-08-22T20:25:16.912Z</atom:updated>
            <content:encoded><![CDATA[<p>As you may have <a href="https://twitter.com/nebrius/status/899726849588068352">seen on Twitter yesterday</a>, I stepped down from the Node.js Foundation Technical Steering Committee (TSC) along with three other members. I am also announcing my intention today to step down as the chairperson of the Node.js Foundation Community Committee, and to leave the Node.js project entirely.</p><p>To understand this action, let me provide some context.</p><p>I got involved with the <a href="http://johnny-five.io/">Johnny-Five</a> project a little over three years ago. It is such a wonderful project with a diverse group of amazing people in it. I really got involved in OSS in general and the broader JS community because of Johnny-Five, the people behind it, and the welcoming and inclusive culture they created.</p><p>About a year later, we formed the Node.js Hardware Working Group (WG) as part of the io.js fork to work with the project on pain points that Johnny-Five users encountered.</p><p>During this time, it became clear to me that there were systemic culture problems in the Node.js project. As a result, a number of us formed the Inclusivity WG to fix these issues around the same time that the Node.js Foundation was formed.</p><p>We faced obstacle after obstacle just in getting established. Most of the existing TSC leadership at the time played a role in this. The bulk of the resistance came from Rod Vagg, but his behavior was in part enabled by the rest of the TSC.</p><p>By the time we were chartered in January of 2016, everyone was exhausted and burned out from the fight, so we limped along after that. I wound up running the WG during the spring and summer of 2016, and I joined the TSC during this time to represent them. I wasn’t able to generate momentum to accomplish much because of the expected resistance based on experience, combined with everyone’s burnout.</p><p>So the Inclusivity WG collapsed for this and other reasons, and almost everyone had quit by the end of August.</p><p>We ended up forming the Community Committee as an attempt to address many of the reasons the Inclusivity WG failed, and to address a number of other initiatives that weren’t really being undertaken by the TSC, such as education and evangelism. CommComm, as we call it for short, has been a lot more successful so far, and I’m excited to see where it goes.</p><p>However.</p><p>During this time, Rod had repeatedly shown a lack of judgement in how he acts within the project and with the broader community. He violated the Code of Conduct multiple times, and undermined efforts to increase inclusivity efforts at every step along the way.</p><p>I do not believe Rod did this intentionally, or that he is a bad actor in the classical definition. Rather, his bad behavior stems from ignorance and an unwillingness to learn. Rod’s intentions don’t really matter though. As they say, the road to hell is paved with good intentions.</p><p>More importantly, Rod’s bad behavior was due in part to the Node.js leadership’s tacit endorsement of his behavior through their unwillingness to take appropriate action. The TSC has tried talking to him on several occasions, but when those inevitably failed the rest of the leadership stopped trying. They were both unwilling and unable to make the hard decisions in this matter, and I was not able to take unilateral action.</p><p>A single person who is causing problems in and of itself isn’t that big of a deal. This happens all the time in non-private social media. What matters is how those overseeing the space handle it. The majority of Node.js TSC members have repeatedly shown that they do not want to handle the situation, with some going so far as to say they do not even think there is a problem.</p><p>And so, here we are.</p><p>I’ve been doing inclusivity work in Node.js for over two years, and I’m finally burned out too. I can no longer keep doing this sort of work in the Node.js project for the sake of my own mental health. I also cannot be involved in a project with major cultural issues without working to make it better. As such, I have no other choice than to leave the project. I will take some time to hold an election for a new chairperson of CommComm and onboard them, at which point I will complete my departure from the project.</p><p>I genuinely hope that the leadership of the project can fix the structural issues in governance that led us to where we are. Indeed, there are already signs that they are taking this more seriously after four of us resigned. I’m also really excited to see where the Community Committee goes. There are some wonderful people on CommComm who I know will do a good job in my stead.</p><p>There are also some really wonderful people working in all areas of the project, and I in no way blame them for any of this. People like Anna, Myles, Rich, Tracy, Jenn, Tierney, Ashley, Rachel, Richard, Matteo, Franziska, Jeremiah, Никита, Josh, William, Gregor, Fedor, Shigeki and so many others that I forgot to list here. I respect and admire all of you, and I wish you all the best.</p><p>As for me, my time in the project has come to an end.</p><p>It’s a sad moment, but I’m also excited for the future. I’m excited to get back to more technical work, excited to devote more time to Johnny-Five again, excited to focus more on my role as a technical evangelist at Microsoft.</p><p>And I’m excited to pass the torch to the next generation of folks who will fight hard for inclusivity.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bff946845a77" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My Identity as a Non-Explanation for Who I Am]]></title>
            <link>https://medium.com/@nebrius/my-identity-as-a-non-explanation-for-who-i-am-ef15b9e843a?source=rss-3bbd87f7acb7------2</link>
            <guid isPermaLink="false">https://medium.com/p/ef15b9e843a</guid>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[life-lessons]]></category>
            <category><![CDATA[labels]]></category>
            <dc:creator><![CDATA[Bryan Hughes]]></dc:creator>
            <pubDate>Fri, 02 Jun 2017 05:37:41 GMT</pubDate>
            <atom:updated>2018-12-06T02:05:08.437Z</atom:updated>
            <content:encoded><![CDATA[<p>I’ve been thinking about identity a lot lately. It’s no secret that I’ve changed a lot of my identities over the years. “Atheist” replaced “Christian,” “bisexual” replaced “straight,” “Californian” replaced “Texan,” and a whole host of others.</p><p>Through most of these changes in identity, I realize that I’ve donned them like a coat at first. I thought “I’m A, which <em>finally</em> explains x, y, and z about me.”</p><p>I’ve only recently realized though that these explanations almost invariably end up being <em>false</em>. My identities don’t explain why I am the way I am, tempting as those explanations are. I all too quickly end up meeting counter examples that disprove the explanation.</p><p>I’m more empathetic than the average guy. (Admittedly a low bar)</p><p>It was easy to say this is because I’ve been involved with both men and women, and it opened my eyes to different points of view. But I’ve met too many bisexual men who are totally lacking in empathy.</p><p>It was also easy to say this was because I lost my religion, and transitioned from being the dominant religion in a place known for religious oppression to a minority (non) religion, and that this shift opened my eyes to seeing both sides. But there are *definitely* too many asshole atheists for this to be true.</p><p>I don’t know why I am the way I am.</p><p>I wish I did, because then I could teach others how to be more like the good parts of me.</p><p>But I don’t.</p><p>I do know that it’s not because of any of my identities though. My queerness doesn’t make me a better person, or a worse one. Nor does my atheism. Nor does my liberalism.</p><p>Now here’s the thing: you may be tempted to think that this is something core to my being, something more fundamental than identity and labels. That I have always had these qualities regardless of how I identified at any given point in time.</p><p>And I’d like that. But that shit ain’t the truth.</p><p>The truth is, I don’t know why I am the way I am…I just am.</p><p>And it’s not because of my labels, important as they are.</p><p>And it’s isolating.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ef15b9e843a" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>