<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="http://blog.michaelabon.ca/feed.xml" rel="self" type="application/atom+xml" /><link href="http://blog.michaelabon.ca/" rel="alternate" type="text/html" /><updated>2026-04-08T23:21:53-07:00</updated><id>http://blog.michaelabon.ca/feed.xml</id><title type="html">Notes for Michael Abon from Michael Abon</title><subtitle>Largely just notes to future me. If you&apos;re interested in them, that&apos;s great, too. Hit me up on Bluesky or Mastodon if you want to talk about any of these.
</subtitle><author><name>Michael Abon (Mike Kenyon)</name></author><entry><title type="html">Online Board Games I Can Play</title><link href="http://blog.michaelabon.ca/2021/12/31/online-board-games.html" rel="alternate" type="text/html" title="Online Board Games I Can Play" /><published>2021-12-31T17:48:00-08:00</published><updated>2021-12-31T17:48:00-08:00</updated><id>http://blog.michaelabon.ca/2021/12/31/online-board-games</id><content type="html" xml:base="http://blog.michaelabon.ca/2021/12/31/online-board-games.html"><![CDATA[<p>Interested in playing board games with me virtually? Here’s stuff that I have access to.</p>

<p><strong>7 Wonders Duel (2)</strong>
Head to head version of 7 Wonders, where you draft cards to build the best ancient wonder</p>

<p><strong>A Fake Artist Goes to New York (5-8)</strong>
Everybody collectively draws a picture, one line at a time. One person gets a blank instruction card instead, and has to fool everyone else</p>

<p><strong>Azul (2-4)</strong>
Gorgeous tile work. You choose coloured tiles, turn by turn, aiming to complete sets and patterns</p>

<p><strong>Camel Up! (4-8) (personal fav)</strong>
Betting on camels racing, and influencing the race</p>

<p><strong>Carcassone (2-6)</strong>
Shape the medieval landscape of France, claiming cities, monasteries and farms.</p>

<p><strong>Codenames (4-8)</strong>
Word game, try to get your team mates to guess certain words but not others, by giving them one-word clues</p>

<p><strong>Dominion (2-6)</strong>
Drafting, the game. Build the best deck over time.</p>

<p><strong>Ex Libris (2-4)</strong>
You’re all gnomish book collectors, vying to be head librarian by putting together the best library (in alphabetical order!)</p>

<p><strong>King of Tokyo (3-6)</strong>
Yahtzee, but head-to-head. Giant kaiju battle it out to be the last one standing</p>

<p><strong>Manila (3-5)</strong>
Craps, the board game. Bet on whether or not three ships will make it into harbour, and influence the race</p>

<p><strong>Mysterium (3-7)</strong>
Co-op, one person is dead and communicates to the others via gorgeous watercolour cards, recreate the weapon, place, and murderer</p>

<p><strong>Root (3-6)</strong>
Decide the fate of the forest as woodland factions fight for contrasting goals.</p>

<p><strong>Scythe (3-5)</strong>
 Five factions vie for dominance in a war-torn, mech-filled, dieselpunk 1920s Europe.</p>

<p><strong>Spirit Island (1-4)</strong>
 Island Spirits join forces using elemental powers to defend their home from invaders.</p>

<p><strong>Splendor (2-4)</strong>
Renaissance merchants race to grab gems, acquire property, and please nobility.</p>

<p><strong>Suburbia (2-5)</strong>
Expand your meager neighborhood into a sprawling suburb to attract the most citizens</p>

<p><strong>Settlers of Catan (3-6)</strong>
 Collect and trade resources to build up the island of Catan in this modern classic.</p>

<p><strong>Taboo (4-8)</strong>
Get your team to guess the target but you can’t use the most obvious clues.</p>

<p><strong>Tokaido (2-5)</strong>
Travel the famed Tokaido road, visit hot springs, try new food, and paint landscapes</p>

<p><strong>Twilight Imperium IV (this is a joke)</strong>
Build an intergalactic empire through trade, research, conquest and grand politics.</p>

<p><strong>Wingspan</strong>
Attract a beautiful and diverse collection of birds to your wildlife reserve.</p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="board games" /><summary type="html"><![CDATA[Interested in playing board games with me virtually? Here’s stuff that I have access to.]]></summary></entry><entry><title type="html">Taking Care of Yourself While Working From Home</title><link href="http://blog.michaelabon.ca/2020/03/10/working-from-home.html" rel="alternate" type="text/html" title="Taking Care of Yourself While Working From Home" /><published>2020-03-10T14:23:00-07:00</published><updated>2020-03-10T14:23:00-07:00</updated><id>http://blog.michaelabon.ca/2020/03/10/working-from-home</id><content type="html" xml:base="http://blog.michaelabon.ca/2020/03/10/working-from-home.html"><![CDATA[<h2 id="taking-care-of-yourself-while-working-from-home">Taking Care of Yourself While Working From Home</h2>

<p>With the COVID-19 / Coronavirus pandemic, more and more people are working from home, if possible.
There are tons of tweets about ergonomic setups, but, honestly, you can introduce those measures bit by bit.
The pain you’ll feel from 
As someone who has spent about year working remotely, I can tell you that there are more immediate concerns
around mental health and self-care.</p>

<h2 id="go-outside-in-the-morning">Go outside in the morning</h2>

<p>In a normal office day, you start by commuting to work. 
It’s easy to ignore how this wakes your brain and body up.
Regardless of whether you drive to work or you take public transit,
it sets your workday up.
You get your body moving.
You breathe some fresh, outside air.
It demarks the start of your workday.</p>

<p>Keep that important part of your routine.
It’ll lift any morning brain fog,
rather than just rolling out of bed into your morning standup.
Go take a walk around the block.
Go get your morning coffee from a cute, local coffeeshop.
Pick up some bananas for a later snack.
Meet a dog!
Just get out of your pajamas,
get some vitamin D from the sun,
and get your blood moving.</p>

<h2 id="dont-just-work-in-one-spot">Don’t just work in one spot</h2>

<p>Most folks in an office environment don’t just sit at their computer all day.
Do you have a preferred afternoon corner at the office,
where you escape to get some “real work” done?
Is it a small conference room, or a cafeteria, a couch or a bean bag chair?
Create that different environment at home.
Make sure that give yourself that change of surroundings every few hours.
Even in your tiny New York or San Francisco apartment,
you’ll have a second spot to sit (or stand!) to get some work done.</p>

<p>And don’t forget that you <em>can</em> still go outside.
You might find that your coffee shop, pub or library offers you
the recommended 3 feet / 1 metre of isolation.</p>

<h2 id="eat-some-snacks">Eat some snacks</h2>

<p>Keeping your energy levels up is an easy thing to forget
when you don’t have quick access to snacks.
It might not be the same offerings as at work,
but if you’re used to an afternoon pick-me-up,
make sure that you keep that routine.</p>

<p>Go get a box of some treat that you’d enjoy.
If you lack in snack willpower like me,
grab a Sharpie and write the list of dates
on the snack wrappers or box.
You’re not going to be moving as much when you work from home,
so you need to be careful to eat a little less.</p>

<h2 id="socialize-with-people">Socialize with people</h2>

<p>You’re going to go stir crazy with cabin fever
unless you interact with people throughout the day.
When you work from home,
you see and talk to far fewer people than at the office.
Take active steps to change that.</p>

<p>Consider setting up a Discord instance with friends or coworkers,
so that you can drop in-and-out and chat.</p>

<p>Set up a break time where you play <a href="https://jackboxgames.com/games/">Jackbox Party Pack games</a> over Zoom.
Drawful 2 is probably the best single purchase avaiable. 
Just remember to enable the Safe for Work setting 
and introduce something like an <a href="https://docs.google.com/document/d/1SB0jsx34bWHZWbnNIVVuMjhDkrdFGo1_hSC2BWPlI3A/edit#!">X-Card</a></p>

<p>I normally keep a strict <em>no colleagues on personal social media</em> policy,
but, I’ve set up a separate Instagram account for colleagues.
We set an expectation that we all share something once per day,
so that we can still have those water cooler / Slack “get to know you” conversations.</p>

<p>And talking with actual humans at your local shops counts as well.</p>

<h2 id="actually-end-your-day">Actually end your day</h2>

<p>This appears on every single Work From Home list for a reason.
It can be frightenly easy to just… keep working.
Or for you (or your boss) to set up meetings earlier or later in the day because no one is commuting. (Don’t be that person!)
Because it isn’t sustainable.
You <em>know</em> what a good workday looks and feels like.
Hold yourself to that limit and enjoy the rest of your day.</p>

<p>Open your calendar and create two events.
One for lunch and one for “commuting home”
Give yourself this limit. 
Work a good day and then walk away and enjoy a good evening.
And <a href="https://hbr.org/2020/03/stop-feeling-guilty-about-your-to-do-list">stop feeling guilty about your to-do list</a>.</p>

<h2 id="limit-how-much-social-media-you-consume">Limit how much social media you consume</h2>

<p>This is an article about keeping your mental health up.</p>

<p><img src="/assets/img/2020-03-13-working-from-home/picard.jpg" alt="Top caption: How it feels waking up every morning in 2020. Image: Jean-Luc Picard on the bridge of the U.S.S. Enterprise. Bottom caption: &quot;DAMAGE REPORT&quot;" /></p>

<p>There’s so much terrifying news about COVID-19.
Find a way to be able to learn about what’s happening with a time limit.
It’ll be both too easy and too draining for you to 
just spend endless amounts of time on 
Twitter / Reddit / your dopamine provider of choice.</p>

<p>So, give yourself <em>some</em> access. 
Maybe you use the <a href="https://support.apple.com/en-us/HT208982">Screen Time</a> or <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.wellbeing&amp;hl=en_US">Digital Wellbeing</a> feature of your smartphone.
Or, maybe you have your smart speaker respond to “Damage Report” by playing <a href="https://www.amazon.com/CBC-News/dp/B01MZ8128I/">a brief news update</a>.</p>

<h2 id="questions-concerns-other-ideas">Questions? Concerns? Other ideas?</h2>

<p>Hit me up on <a href="https://twitter.com/mrmichaelabon">Twitter</a>. 
I love working remotely (it’s not for everyone) so I want to hear the tips that work for you!</p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="wfh" /><category term="working from home" /><category term="COVID-19" /><category term="coronavirus" /><summary type="html"><![CDATA[Taking Care of Yourself While Working From Home]]></summary></entry><entry><title type="html">Essential Cities: Skylines Mods for 2020</title><link href="http://blog.michaelabon.ca/2019/12/26/essential-cities-skylines-mods.html" rel="alternate" type="text/html" title="Essential Cities: Skylines Mods for 2020" /><published>2019-12-26T00:00:00-08:00</published><updated>2019-12-26T00:00:00-08:00</updated><id>http://blog.michaelabon.ca/2019/12/26/essential-cities-skylines-mods</id><content type="html" xml:base="http://blog.michaelabon.ca/2019/12/26/essential-cities-skylines-mods.html"><![CDATA[<style>
  .post-content h1 {
    font-size: 36px;
  }
  .post-content img {
    display: block;
    margin-left: auto;
    margin-right: auto;
  }
</style>

<h1 id="major-mods">Major mods</h1>

<p>These are game-changing and I can’t live without them.
Read the README, for sure, because they contain a lot.</p>

<h2 id="traffic-manager-president-edition-v11-stable"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=1637663252">Traffic Manager: President Edition (V11 Stable)</a></h2>

<p>This is huge.
C:S was originally a traffic sim.
You can
configure lane changes,
remove traffic lights,
establish priority or speed limits,
or even more manual stuff like timing adjacent lights.
Super useful when trying to solve traffic problems.</p>

<p><img src="/assets/img/2019-12-26-cities-skylines/tmpe.png" alt="Screenshot of &quot;Traffic Manager: President Edition&quot;,
showing options to
toggle traffic lights,
set manual traffic lights,
choose lane arrows,
set lane connectors,
toggle spawning and de-spawning of cars,
clear traffic entirely,
set priority signs at intersections,
set up timed traffic lights,
choose junction settings,
set speed limits,
set vehicle restrictions,
and restrict parking.
" /></p>

<h2 id="fine-road-anarchy-2"><a href="https://steamcommunity.com/workshop/filedetails/?id=1844440354">Fine Road Anarchy 2</a></h2>

<p>When building roads,
toggle off limitations like slope, height, collisions.
Prevent a segment from bending.
Get closer to other roads without snapping,
turn off any collisions.</p>

<p><img src="/assets/img/2019-12-26-cities-skylines/fine-road-anarchy-2.jpg" alt="Screenshot of the &quot;Fine Road Anarchy 2&quot; mod,
where an exit lane is being built remarkably close to the highway
" /></p>

<p>Works well with…</p>

<h2 id="fine-road-tool-2"><a href="https://steamcommunity.com/workshop/filedetails/?id=1844442251">Fine Road Tool 2</a></h2>

<p>When building roads,
have much more granular elevation steps,
build sunken roads and terraformed ramps,
force an elevated road instead of a bridge,
build curved bridges,
build above ground tunnels,
and more.</p>

<p>The two Fine Road tools will integrate together.</p>

<p><img src="/assets/img/2019-12-26-cities-skylines/fine-road-tool-2.png" alt="Screenshot of the &quot;Fine Road Tool 2&quot; mod,
where an elevated road is being built with fine control
" /></p>

<h2 id="ploppable-rico"><a href="https://steamcommunity.com/workshop/filedetails/?id=586012417">Ploppable RICO</a></h2>

<p>Sometimes you want a specific building in a specific spot.
This gives you the power to not just paint with zones,
but also to plop any specific residential, industrial, commercial, or office building.</p>

<p><img src="/assets/img/2019-12-26-cities-skylines/rico.jpg" alt="
Screenshot of &quot;Cities: Skylines&quot; with a dense and tall downtown with the caption,
&quot;Plop dense business districts and large scale housing developments.
" /></p>

<p>Works really well with custom assets!</p>

<h1 id="assets">Assets</h1>

<p>I won’t offer many of these,
because 1) there are SO MANY available,
and 2) you should find what fits in your city’s look and feel.</p>

<h2 id="ultimate-skyscraper-collection"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=409510305">Ultimate Skyscraper Collection</a></h2>

<p>Cities look better with big big buildings.
This links to a Mod Collection that contains 40 other real-life and fictional skyscrapers.</p>

<h1 id="minor-mods">Minor Mods</h1>

<p>These have lower learning curves.
They don’t need a big README.</p>

<h2 id="roundabout-builder"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=1625704117">Roundabout Builder</a></h2>

<p>Convert any intersection into a roundabout.
Not the most robust of mods, but still handy.</p>

<p><img src="/assets/img/2019-12-26-cities-skylines/roundabout-builder.png" alt="
Screenshot of the &quot;Roundabout Builder&quot; mod
that shows a circular roundabout with two-lane highways being easily designed
" /></p>

<h2 id="network-extensions-2"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=812125426">Network Extensions 2</a></h2>

<p>Adds more road types: roads with turning lanes, bus lanes, asymmetrical (like 2+1 lanes).</p>

<h2 id="move-it"><a href="https://steamcommunity.com/workshop/filedetails/?id=1619685021">Move-it</a></h2>

<p>Just move anything.
Buildings, trees, roads, pesky support pillars for overpasses.
Get them where you want them rather than them snapping to a grid.</p>

<h2 id="automatic-bulldoze"><a href="https://steamcommunity.com/workshop/filedetails/?id=1507233911">Automatic Bulldoze</a></h2>

<p>Whenever you have an abandoned building,
it drags down the property value of the surrounding buildings,
which makes them more likely to become abandoned too.
You <em>can</em> go through and manually bulldoze an abandoned building
when you notice them,
but this extension just automatically bulldozes them for you.</p>

<h2 id="extra-landscaping-tools"><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=502750307">Extra Landscaping Tools</a></h2>

<p>Tired of placing trees one at a time?
This gives you a tree paintbrush so you can easily in-fill your freeway overpasses,
as well as an improved terraforming and water tool.
hen you notice them, but this extension just automatically bulldozes them for you.</p>

<p><img src="/assets/img/2019-12-26-cities-skylines/tree-brush.png" alt="
Screenshot of the &quot;Extra Landscaping Tools&quot; mod
with a paintbrush icon covering a hundred trees on the ground
" /></p>

<h1 id="edits">Edits</h1>

<ul>
  <li>2020-04-01: Swapping out the old TM:PE for TM:PE v11. Make sure you follow the uninstallation instructions before upgrading.</li>
</ul>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="cities: skylines" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Changing my Name: Mike Kenyon to Michael Abon</title><link href="http://blog.michaelabon.ca/2019/09/18/changing-my-name.html" rel="alternate" type="text/html" title="Changing my Name: Mike Kenyon to Michael Abon" /><published>2019-09-18T00:00:00-07:00</published><updated>2019-09-18T00:00:00-07:00</updated><id>http://blog.michaelabon.ca/2019/09/18/changing-my-name</id><content type="html" xml:base="http://blog.michaelabon.ca/2019/09/18/changing-my-name.html"><![CDATA[<p>Some people have asked me to write a little bit 
about changing my name from Mike Kenyon to Michael Abon.</p>

<p>As part of our wedding three weeks ago, 
my wife and I decided to create a new family name out of each of our previous names.
Abellard + Kenyon = Abon. 
We opted to keep her alphabetical superiority.</p>

<p>There’s a lot in a name and also, very little. 
It’s who you are and your reputation. 
And at the same time, 
everyone has read a fantasy book involving name magic,
where no one reveals their <em>true name</em>.</p>

<p>So, let me preface by saying that 
your name is your own, 
your decision about your name is your own, 
and I’m not judging you for any of that.</p>

<p>For us, we both wanted to have the same last name as our children. 
Any birth children that we have will be biracial. 
Who knows for any adoptive children?
Either way, having a shared last name might give them some more social structure, 
especially given that we’re far away from any family. 
And, sadly, people’s biases being what they are, 
it’ll almost certainly make border crossings and school pickups easier.</p>

<p>So, why create a new last name? 
Taking the other person’s last name or hyphenating exist as options. 
Those options weren’t right for us. 
But I’ve been shaped by two generations of women in my family. 
My grandmother was known as my grandfather’s wife. 
Literally, when Phyllis Stott married Les Allison, 
they became Mr. and Mrs. Les Allison. 
And she was written about in the small town newspaper as <em>Mrs. Les Allison</em>.<sup><a href="#fn1" id="ref1">1</a></sup> 
She ceased to be her own person in what’s now called civil erasure. 
And my mother was the first person that she knew who kept her own name 
and who went by Ms. instead of Mrs. as was the tradition in rural Manitoba. 
Those notions shaped my thoughts even as a small child. 
<a href="https://twitter.com/bobbyscar/status/720109670669676545">When I saw a friend, years ago, create a new family name with his wife</a>,
I was very much taken with the idea. 
This marriage is the two of us creating a new life together. 
Let’s demonstrate that to its fullest.</p>

<p>How do you actually choose the name itself? 
First, figure out what elements you want. 
Are you incorporating your mothers’ names? 
Are you using the letters and creating an anagram? 
Are you portmanteauing? 
Solicit your friends who are good at puns and wordplay. 
Keep a list of all the ideas that you vaguely like. 
Then, if you’ve named a company, the rest are familiar. 
How is it pronounced? 
What about your initials? 
Are there companies with your new name? 
<a href="https://www.carthrottle.com/post/49rx9gg/">Profanity in other languages?</a>
Can you get the .com? 
Will your kids get teased at school?</p>

<p>And you prioritize which of those is important. 
For us, the French present in <em>Abon</em> speaks to both of our families. 
Alibaba owns Abon.com but I have michaelabon.com. 
Children will (likely) sit in the front of the class. 
But the pronunciation isn’t fully intuitive 
(hint: our best wedding hashtag options were <code class="language-plaintext highlighter-rouge">#LetsMakeItAbon</code> and <code class="language-plaintext highlighter-rouge">#AbonABlast</code>)</p>

<p>Once you’ve chosen your name, you have paperwork to do. 
British Columbia only recognizes <a href="https://www2.gov.bc.ca/gov/content/life-events/legal-changes-of-name/legal-change-of-name-application#after_marriage">a few versions of name transfer</a>. 
Portmanteau? 
Not one of them. 
We’re required to do a full, legal name change. 
As we had already booked our honeymoon travel, 
we got married under our birth names, 
leaving us to legally change them afterward. 
Since Daneeka is an American, in Canada as a permanent resident, 
we reckon it’s easiest for us to use the patriarchal system. 
I’m going to legally change my name to Michael Abon, 
then Daneeka is going to use that paperwork with both Canadian and American governments 
to say “I want to go by my husband’s name.” 
Pragmatic, if disheartening. 
My name on my birth certificate and our marriage certificate will change. 
I will get to apply for a brand new passport, 
using my new birth certificate. 
And I get to take my name change certificate to all of my financial institutions. 
On the Internet, I get to transfer over usernames, everywhere. 
Serves me right for using my real name on the internet. 
The domain name and email address will be hardest, I think. 
I would appreciate help there, if you’ve done it before.</p>

<p>I need to recognize how trans and women folx have made it easier for me to change my name. 
Any good people system has a Preferred Name section, 
that splits out your legal name from what you “do business as”. 
It’s how BambooHR can let me request to be known as Michael Abon 
before I’ve got my paperwork changed. 
Some systems refer to it as my “maiden name”, 
which makes me giggle, 
as I haven’t ever thought of myself as a maiden. 
Even your autocorrect will be upset at the more correct masculine né, 
preferring the feminine née. 
Those might catch up, 
eventually, 
once more and more developers read patio11’s <a href="https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/">Misconceptions Programmers Have About Names</a>. 
But, there have been a lot of people who have fought very hard for me to be able to do this, 
and I appreciate it.</p>

<p>I might take some time for you 
to remember to call me Michael<sup><a href="#fn2" id="ref2">2</a></sup> Abon 
and that’s okay. 
I’ll gently mention it and we can move on.</p>

<p>I hope that you found the history, 
the thought process, 
or the mechanics interesting. 
I’m happy to talk more about it, of course. 
I’m also happy to demonstrate publicly that 
there’s (yet) another way for two people 
to combine their lives and be new people together.</p>

<p>–</p>

<p><sup id="fn1" class="footnote">1.
My grandfather tried to slight me once by addressing a letter to <em>Mr. and Mrs. &lt;My girlfriend’s name&gt;</em>
<a href="#ref1">↩</a>
</sup></p>

<p><sup id="fn2" class="footnote">2.
I’m also taking this opportunity to revert back to Michael and undo that lost rock-paper-scissors game from Grade 7.
<a href="#ref2">↩</a>
</sup></p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><summary type="html"><![CDATA[Some people have asked me to write a little bit about changing my name from Mike Kenyon to Michael Abon.]]></summary></entry><entry><title type="html">Deploy Your Branches to Production</title><link href="http://blog.michaelabon.ca/2018/02/01/deploy-your-branches-to-production.html" rel="alternate" type="text/html" title="Deploy Your Branches to Production" /><published>2018-02-01T00:00:00-08:00</published><updated>2018-02-01T00:00:00-08:00</updated><id>http://blog.michaelabon.ca/2018/02/01/deploy-your-branches-to-production</id><content type="html" xml:base="http://blog.michaelabon.ca/2018/02/01/deploy-your-branches-to-production.html"><![CDATA[<style>
  .post-content a:link {
    text-decoration: underline;
  }
  .post-content a:visited {
    text-decoration: underline;
  }
  .post-content a:hover {
    text-decoration: none;
  }
  .post-content a:active {
    text-decoration: none;
  }
</style>

<p>Most projects I’ve been on at Pivotal Labs have similar branching
and production deploy strategies.
But I miss the one that we used on
the <em>Words with Friends</em> server team.
Your relationship between production and your master branch
is probably backwards.</p>

<p>Teams here at Pivotal Labs NY will commonly use <a href="http://nvie.com/posts/a-successful-git-branching-model/">git flow</a> or similar,
where you have one branch for continued feature development
and a lagging branch for that which has been deployed to production.
Hot-fixes go into production
and then get merged into feature development. It’s regimented and well-understood.
Lots of existing writing makes it easy to introduce to new team members.
But it can be a pain to manage all off these branches.
Teams usually add in <a href="https://github.com/nvie/gitflow">git-flow aliases</a> to help them.
And there’s a lot of ceremony around deploying something to production,
something I want each <a href="https://builttoadapt.io/a-recipe-for-successful-pair-programming-b5eec6611e7">developer pair</a> to do (roughly) daily.</p>

<p>Or, dispensing with that ceremony,
teams will just say,
“the master branch should be theoretically deployable at any time.”
This works well on lower-risk products.
<a href="http://engineering.pivotal.io/categories/tdd/">We already TDD everything</a>.
Product is reviewing and accepting each of our <a href="https://www.pivotaltracker.com/blog/choosing-best-slice-for-your-story/">thinly-sliced user stories</a>.
Just work on a feature branch,
merge it into master,
and if CI is happy and the user story is accepted,
add a marking tag onto that master branch and deploy it.
This is easy and low-weight.
If something goes wrong during the deploy,
find the previous tag and deploy that instead.</p>

<p>On the <em>Words with Friends</em> server team,
we inverted the relationship between production and the master branch.
The master branch was always what <em>had</em> been deployed.
We would deploy a feature branch and then merge it into the master branch.
When you had code ready to go out,
you would rebase it on top of master,
on top of exactly what was already in production.
Your test suite would run,
the branch would be reviewed,
then you would roll it out to the servers
and merge it in to master.</p>

<p>This had several benefits.
It helped us keep pull requests small.
That helped us deploy several times per day.
You renamed variables?
Into production you go!
That meant that we never built up a large difference between production
and what we were basing our work off of.
We couldn’t accidentally go for weeks without deploying,
à la my current project.
It also meant that we could easily rollback a deploy.
No searching for the previously deployed tag.
If your error logs spiked,
just deploy master.
It also encouraged us to make our deploy process seamless.
By merging and deploying often,
we had to tune our deploy process.
We also had to build in support for feature flags and experiments
so that we could break up otherwise long-running branches.</p>

<p>There are some downsides.
Deploying that often means
that someone has to keep an eye on that process
and on the metrics and instrumentation.
You also run the risk of someone inadvertently pushing to master,
forcing a quick revert.
It also meant that you are coupling your pull request review queue
and your deploy queue.
But, as a lead engineer,
you should already be providing feedback
to more junior engineers early and often.
That’s the <em>lead</em> part of your title!</p>

<p>I don’t mean to claim that I invented this system.
It was largely in place
by the time I joined
as a wide-eyed young dev who needed to learn things quickly.
But it’s a system that’s worked better than anything else I’ve worked with.
I’d like to bring it to my future teams.</p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="git" /><category term="branch" /><category term="deploy" /><category term="git-flow" /><category term="production" /><category term="software development" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">LASEK Update: 20/20, Lots of Tears</title><link href="http://blog.michaelabon.ca/2017/09/27/lasek-update.html" rel="alternate" type="text/html" title="LASEK Update: 20/20, Lots of Tears" /><published>2017-09-27T00:00:00-07:00</published><updated>2017-09-27T00:00:00-07:00</updated><id>http://blog.michaelabon.ca/2017/09/27/lasek-update</id><content type="html" xml:base="http://blog.michaelabon.ca/2017/09/27/lasek-update.html"><![CDATA[<style>
  .post-content a:link {
    text-decoration: underline;
  }
  .post-content a:visited {
    text-decoration: underline;
  }
  .post-content a:hover {
    text-decoration: none;
  }
  .post-content a:active {
    text-decoration: none;
  }
</style>

<p>Good news: My vision continues to improve. Each eye reads at 20/25. With both eyes, I have 20/20 vision. Since my last check-up one month ago, I feel like my astigmatism has markedly improved. Let’s say by 40% or so. So what changed? One month ago, the LASEK surgeon decided that I should double down on increasing tear production.</p>

<p>Your eyes’ tears have two layers. An aqueous layer and an oily layer designed to prevent the aqueous layer from evaporating too quickly. They work together to lubricate your eyes. Sometimes the aqueous layer drains out your tear ducts too fast, leaving you with dry eyes. But in my case, the oily layer is too solid, causing the tear film to become all gummed up and the tears to evaporate too quickly.</p>

<p>So, I’m using a hot compress to massage my closed eye lids. This helps melt the oily layer that is clogging up my tear glands. I’m also using baby shampoo to help keep them clear.</p>

<p>I’ve also been prescribed an antibiotic commonly used to treat acne, but I’m using it purely for the side effect of loosening the oily tear glands. It also has other side effects of increasing my likelihood to burn in the sun and increasing my already-heightened light sensitivity.</p>

<p>I’m still putting in moisturizing drops every few hours, even though my eyes do not feel dry. I am also still putting in the weird rods before going to bed.</p>

<p>Throughout all this, I’m really enjoying being free of glasses. I can go for a run in the morning without having to put in contacts or have my glasses bounce around on my face. I can go swimming and not be completely lost when I’m getting out. For years I have preferred how I look without glasses and now I always look that way. It’s just really nice. It’s what my life should have been like if my eyes had been healthy. I still can’t believe it.</p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="lasek" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">PropTypes, Refactoring, and the Open-Closed Principle</title><link href="http://blog.michaelabon.ca/2017/08/20/proptypes-refactoring.html" rel="alternate" type="text/html" title="PropTypes, Refactoring, and the Open-Closed Principle" /><published>2017-08-20T00:00:00-07:00</published><updated>2017-08-20T00:00:00-07:00</updated><id>http://blog.michaelabon.ca/2017/08/20/proptypes-refactoring</id><content type="html" xml:base="http://blog.michaelabon.ca/2017/08/20/proptypes-refactoring.html"><![CDATA[<style>
  .post-content a:link {
    text-decoration: underline;
  }
  .post-content a:visited {
    text-decoration: underline;
  }
  .post-content a:hover {
    text-decoration: none;
  }
  .post-content a:active {
    text-decoration: none;
  }
</style>

<p>I discovered recently that
the manner in which I have used React’s PropTypes
has made it harder to refactor our model objects.</p>

<p>I had been using <code class="language-plaintext highlighter-rouge">PropTypes.instanceOf(ModelObject)</code>
throughout the React application.
My goal was to not need to edit every single React component
when I added a field to the model.
However, for all of the same reasons that we should be building towards interfaces rather than concrete objects,
I’ve been moving to <code class="language-plaintext highlighter-rouge">PropTypes.shape({relevantKey1, relevantKey2})</code> and extracting the shape object into an interface.</p>

<p>In our app,
we have 4 different kinds of Points of Interest (POI)
that we want to put onto an embedded Google Map
and display more info about each of them.
Each POI has 30 shared fields that live in a superclass.
They have ~20 independent fields each.
We fetch each kind of POI with its own AJAX request
and pass each of them into a React component that owns
the Google Map and its related bits.</p>

<div class="language-jsx highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">&lt;</span><span class="nc">MapCreator</span>
  <span class="na">parks</span><span class="p">=</span><span class="si">{</span><span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">parks</span><span class="si">}</span>
  <span class="na">raceTracks</span><span class="p">=</span><span class="si">{</span><span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">raceTracks</span><span class="si">}</span>
  <span class="na">busStops</span><span class="p">=</span><span class="si">{</span><span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">busStops</span><span class="si">}</span>
  <span class="na">offices</span><span class="p">=</span><span class="si">{</span><span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">offices</span><span class="si">}</span>
<span class="p">/&gt;</span>
</code></pre></div></div>

<p>The <code class="language-plaintext highlighter-rouge">MapCreator</code> component then converts each POI into a Google Map pin</p>

<div class="language-jsx highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">class</span> <span class="nx">MapCreator</span> <span class="kd">extends</span> <span class="nx">React</span><span class="p">.</span><span class="nx">PureComonent</span> <span class="p">{</span>
  <span class="nx">render</span><span class="p">()</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="nx">parkPins</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">parks</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span>
      <span class="nx">park</span> <span class="o">=&gt;</span> <span class="p">&lt;</span><span class="nc">ParkPin</span> <span class="na">park</span><span class="p">=</span><span class="si">{</span><span class="nx">park</span><span class="si">}</span> <span class="p">/&gt;</span>
    <span class="p">)</span>
    <span class="kd">const</span> <span class="nx">raceTrackPins</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">raceTracks</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span>
      <span class="nx">raceTrack</span> <span class="o">=&gt;</span> <span class="p">&lt;</span><span class="nc">RaceTrackPin</span> <span class="na">raceTrack</span><span class="p">=</span><span class="si">{</span><span class="nx">raceTrack</span><span class="si">}</span> <span class="p">/&gt;</span>
    <span class="p">)</span>
    <span class="kd">const</span> <span class="nx">busStopPins</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">busStops</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span>
      <span class="nx">busStop</span> <span class="o">=&gt;</span> <span class="p">&lt;</span><span class="nc">BusStopPin</span> <span class="na">busStop</span><span class="p">=</span><span class="si">{</span><span class="nx">busStop</span><span class="si">}</span> <span class="p">/&gt;</span>
    <span class="p">)</span>
    <span class="kd">const</span> <span class="nx">officePins</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">offices</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span>
      <span class="nx">office</span> <span class="o">=&gt;</span> <span class="p">&lt;</span><span class="nc">OfficePin</span> <span class="na">office</span><span class="p">=</span><span class="si">{</span><span class="nx">office</span><span class="si">}</span> <span class="p">/&gt;</span>
    <span class="p">)</span>

    <span class="k">return</span> <span class="p">(</span>
      <span class="p">&lt;</span><span class="nc">GoogleMap</span>
        <span class="na">pins</span><span class="p">=</span><span class="si">{</span><span class="p">[].</span><span class="nx">concat</span><span class="p">(</span>
          <span class="nx">parkPins</span><span class="p">,</span>
          <span class="nx">raceTrackPins</span><span class="p">,</span>
          <span class="nx">busStopPins</span><span class="p">,</span>
          <span class="nx">officePins</span><span class="p">,</span>
        <span class="p">)</span><span class="si">}</span>
      <span class="p">/&gt;</span>
    <span class="p">)</span>
  <span class="p">}</span>
<span class="p">}</span>

<span class="nx">MapCreator</span><span class="p">.</span><span class="nx">propTypes</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">parks</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">instanceOf</span><span class="p">(</span><span class="nx">Park</span><span class="p">)),</span>
  <span class="na">raceTracks</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">instanceOf</span><span class="p">(</span><span class="nx">RaceTrack</span><span class="p">)),</span>
  <span class="na">busStops</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">instanceOf</span><span class="p">(</span><span class="nx">BusStop</span><span class="p">)),</span>
  <span class="na">offices</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">instanceOf</span><span class="p">(</span><span class="nx">Office</span><span class="p">)),</span>
<span class="p">}</span>
</code></pre></div></div>

<p>This caused a problem whenever we had to add in additional types of POIs.
By violating the Open/Closed principle, it took so much time to
modify so many of our files to add in the additional functionality.</p>

<p>What if MapCreator did not need to know about the different kinds of POIs?
What if it only needed to know how to display Pins?
For one, I really wanted to keep all Google Map specific code
in and under the <code class="language-plaintext highlighter-rouge">MapCreator</code>.
I don’t need it polluting the rest of my business logic,
so that I retain the ability to swap out that library for another.</p>

<p>We can change the propTypes to focus less on the specific class names
and more on what is required.</p>

<div class="language-jsx highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">MapCreator</span><span class="p">.</span><span class="nx">propTypes</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">parks</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">shape</span><span class="p">({</span>
    <span class="na">latitiude</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">number</span><span class="p">.</span><span class="nx">isRequired</span><span class="p">,</span>
    <span class="na">longitude</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">number</span><span class="p">.</span><span class="nx">isRequired</span><span class="p">,</span>
    <span class="na">icon</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">string</span><span class="p">.</span><span class="nx">isRequired</span><span class="p">,</span>
  <span class="p">})),</span>
  <span class="na">raceTracks</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">instanceOf</span><span class="p">(</span><span class="nx">RaceTrack</span><span class="p">)),</span>
  <span class="na">busStops</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">instanceOf</span><span class="p">(</span><span class="nx">BusStop</span><span class="p">)),</span>
  <span class="na">offices</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">instanceOf</span><span class="p">(</span><span class="nx">Office</span><span class="p">)),</span>
<span class="p">}</span>
</code></pre></div></div>

<p>And then we can extract that shape object to eliminate the duplication.</p>

<div class="language-jsx highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">AppPropTypes</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">Pinnable</span><span class="p">:</span> <span class="p">{</span>
    <span class="na">latitiude</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">number</span><span class="p">.</span><span class="nx">isRequired</span><span class="p">,</span>
    <span class="na">longitude</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">number</span><span class="p">.</span><span class="nx">isRequired</span><span class="p">,</span>
    <span class="na">icon</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">string</span><span class="p">.</span><span class="nx">isRequired</span><span class="p">,</span>
  <span class="p">}</span>
<span class="p">}</span>

<span class="nx">MapCreator</span><span class="p">.</span><span class="nx">propTypes</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">parks</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">shape</span><span class="p">(</span><span class="nx">AppPropTypes</span><span class="p">.</span><span class="nx">Pinnable</span><span class="p">))),</span>
  <span class="na">raceTracks</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">shape</span><span class="p">(</span><span class="nx">AppPropTypes</span><span class="p">.</span><span class="nx">Pinnable</span><span class="p">)),</span>
  <span class="na">busStops</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">shape</span><span class="p">(</span><span class="nx">AppPropTypes</span><span class="p">.</span><span class="nx">Pinnable</span><span class="p">)),</span>
  <span class="na">offices</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">shape</span><span class="p">(</span><span class="nx">AppPropTypes</span><span class="p">.</span><span class="nx">Pinnable</span><span class="p">)),</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Then we don’t need to distinguish between the different kinds of POIs
in the code base, either.</p>

<div class="language-jsx highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nx">AppPropTypes</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./appPropTypes.js</span><span class="dl">'</span>

<span class="kd">class</span> <span class="nx">MapCreator</span> <span class="kd">extends</span> <span class="nx">React</span><span class="p">.</span><span class="nx">PureComonent</span> <span class="p">{</span>
  <span class="nx">render</span><span class="p">()</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="nx">pins</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">pins</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span>
      <span class="nx">pin</span> <span class="o">=&gt;</span> <span class="p">&lt;</span><span class="nc">Pin</span> <span class="na">pin</span><span class="p">=</span><span class="si">{</span><span class="nx">pin</span><span class="si">}</span> <span class="p">/&gt;</span>
    <span class="p">);</span>

    <span class="p">&lt;</span><span class="nc">GoogleMap</span> <span class="na">pins</span><span class="p">=</span><span class="si">{</span><span class="nx">pins</span><span class="si">}</span> <span class="p">/&gt;</span>
  <span class="p">}</span>
<span class="p">}</span>

<span class="nx">MapCreator</span><span class="p">.</span><span class="nx">propTypes</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">pins</span><span class="p">:</span> <span class="nx">PropTypes</span><span class="p">.</span><span class="nx">arrayOf</span><span class="p">(</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">shape</span><span class="p">(</span><span class="nx">AppPropTypes</span><span class="p">.</span><span class="nx">Pinnable</span><span class="p">))),</span>
<span class="p">}</span>
</code></pre></div></div>

<p>By focusing on how my pins are going to be used,
rather than on their class names,
I’ve made <code class="language-plaintext highlighter-rouge">MapCreator</code> more resilient to change.</p>

<p>I’ve programmed towards interface when writing server-side code,
but I keep relearning lessons about my craft when writing in JavaScript.</p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="react" /><category term="js" /><category term="jsx" /><category term="es6" /><category term="proptypes" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">LASEK: 7 Weeks Later</title><link href="http://blog.michaelabon.ca/2017/08/01/lasek-7-weeks.html" rel="alternate" type="text/html" title="LASEK: 7 Weeks Later" /><published>2017-08-01T00:00:00-07:00</published><updated>2017-08-01T00:00:00-07:00</updated><id>http://blog.michaelabon.ca/2017/08/01/lasek-7-weeks</id><content type="html" xml:base="http://blog.michaelabon.ca/2017/08/01/lasek-7-weeks.html"><![CDATA[<style>
  .post-content a:link {
    text-decoration: underline;
  }
  .post-content a:visited {
    text-decoration: underline;
  }
  .post-content a:hover {
    text-decoration: none;
  }
  .post-content a:active {
    text-decoration: none;
  }
</style>

<p>Hoo boy. Today, I met with the surgeon rather than one of the fellows training under him.
The surgeon made it clear that the fellow’s records of my chief complaints have been wrong,
hence the fellow’s diagnosis has also been horribly wrong.</p>

<p>As some of you have mentioned,
my symptoms sound a lot like astigmatism.
The surgeon concurs.
The astigmatism is either in my epithelial layer (good!) or in my corneal layer (boo!).</p>

<figure>
  <img src="/assets/img/2017-08-01-astigmatic.jpg" alt="" />
  <figcaption>
    If my epithelial layer is astigmatic, it'll heal itself.
    Otherwise, it's another surgery.
  </figcaption>
</figure>

<h1 id="epithelial-astigmatism">Epithelial Astigmatism</h1>

<p>Part of the LASEK procedure involved
delaminating the epithelial layer of my eyes
using an alcohol-based solution.
As in, dissolving the top layer of my eyeball.
The bandage contact lens that I wore offered some protection,
much like a bandage does when your actual skin is opened up.</p>

<p>I’ve been keeping my eyes well-hydrated
because epithelial cells grow from the outsides of your eyes
and migrate towards the centre.
They’ll effectively fill in the astigmatic pits
and everything will be fine.
However, that’s only if they’re given sufficient fluid to move through.</p>

<p>I’m not entirely sure what the fellow was thinking<sup><a href="#fn1" id="ref1">1</a></sup>
in my 4-week and 5-week follow-ups.
Regardless, she had been decreasing the frequency of the lubricating drops and lubricating ointment,
making it impossible for my eyes to heal.</p>

<p>So, not only am I doubling up on my lubricating drops and lubricating ointment,
I get to put a lubricating rod in my eyes every morning, too.</p>

<figure>
  <p>
    <img src="/assets/img/lacrisert-04.jpg" alt="" />
    <img src="/assets/img/lacrisert-05.jpg" alt="" />
    <img src="/assets/img/lacrisert-06.jpg" alt="" />
  </p>
</figure>

<p>I’m definitely not terrified by this prospect at all.
I hope there are instructional videos on YouTube.</p>

<h1 id="corneal-astigmatism">Corneal Astigmatism</h1>

<p>If it’s my cornea that is misshapen, then an “enhancement” surgery would be required.
As I’ve mentioend before, for someone with a –6.25 in both eyes,
the surgeon said there would be a 6 to 8 percent chance of an enhancement surgery being required.</p>

<p>I will know more when I see the surgeon again (not the fellow) in a month’s time.
If another surgery would be required, my eyes would have to stablize before we began.
That would put it three to four months out. Wish me luck.</p>

<p>–</p>

<p><sup id="fn1" class="footnote">1.
There were other mistakes made by the fellow,
but I’ll leave those for another time.
I’m totally okay with people making mistakes.
I’m bothered by the kind of mistakes
and the fact that the fellow had difficulty learning
when the surgeon brought her in.
<a href="#ref1">↩</a>
</sup></p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="lasek" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">LASEK: 4 Weeks Later</title><link href="http://blog.michaelabon.ca/2017/07/13/lasek-4-weeks.html" rel="alternate" type="text/html" title="LASEK: 4 Weeks Later" /><published>2017-07-13T00:00:00-07:00</published><updated>2017-07-13T00:00:00-07:00</updated><id>http://blog.michaelabon.ca/2017/07/13/lasek-4-weeks</id><content type="html" xml:base="http://blog.michaelabon.ca/2017/07/13/lasek-4-weeks.html"><![CDATA[<style>
  .post-content a:link {
    text-decoration: underline;
  }
  .post-content a:visited {
    text-decoration: underline;
  }
  .post-content a:hover {
    text-decoration: none;
  }
  .post-content a:active {
    text-decoration: none;
  }
</style>

<p>I had my one month LASEK followup today.
I still have some combination of triple vision and frosted glass
when I’m looking at computer monitor distance. I dont see crisp edges.
But It’s 20/40 vision, compared to my original 20/500.</p>

<p><img src="/assets/img/2017-07-13-blurriness.jpg" alt="My drawing of the blurriness / double-vision in each eye" /></p>

<p>So, the fellow wants me to come in again—next week—when the surgeon is back from vacation.
I think they want to talk about a correction surgery.
Which is normal.
Like, ~10% of people who started out with my vision have to be corrected.
And my –6.25 in both eyes had put me on the edge of what’s possible.</p>

<p>But I’m really scared that I’ve permanently ruined my eyes.</p>

<p>I can totally function without any external correction.
I can navigate my way around the city.
I can work.
It’s great.</p>

<p>I went to a soccer match at Yankee stadium,
enjoyed it fully,
but couldn’t see which player was which.
Neither their jerseys nor their faces were distinguishable.</p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="lasek" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">LASEK Day + 8</title><link href="http://blog.michaelabon.ca/2017/06/22/lasek-day-plus-8.html" rel="alternate" type="text/html" title="LASEK Day + 8" /><published>2017-06-22T00:00:00-07:00</published><updated>2017-06-22T00:00:00-07:00</updated><id>http://blog.michaelabon.ca/2017/06/22/lasek-day-plus-8</id><content type="html" xml:base="http://blog.michaelabon.ca/2017/06/22/lasek-day-plus-8.html"><![CDATA[<style>
  .post-content a:link {
    text-decoration: underline;
  }
  .post-content a:visited {
    text-decoration: underline;
  }
  .post-content a:hover {
    text-decoration: none;
  }
  .post-content a:active {
    text-decoration: none;
  }
</style>

<p>I’m no longer wearing the bandage contact lenses.
I’m officially at 20/50 vision.
Next week will be 20/40.
Eyes are looking healthy</p>

<p>The BCL had meant that
my brain has been “tricked” this past week into thinking
that my vision was being corrected artificially.
Today was the first day
where I dealt with the cognitive load
that these are just my eyeballs. Nothing else.
It was a weird, pleasant sensation.</p>]]></content><author><name>Michael Abon (Mike Kenyon)</name></author><category term="lasek" /><summary type="html"><![CDATA[]]></summary></entry></feed>