My Three Everyday “Must Dos”

If you wrote down everything you did, every day, what do you think it would tell you about your priorities? Would you be happy with how you spent your life?

The daily must-dos become the habits that help us get good at what we’re doing. I have mentioned my mechanism for getting things done in this blog before. Go check it out, if you haven’t read it already!

Here are the top three daily things that always end up in my “Must Do” column.

Check The Budget

Photo by Karolina Grabowska on Pexels.com

I did not grow up with an over-abundance of money. My family did not really talk about money all that much either, viewing it as a constant sort of stress. It has always been a weird point of pride and identity too, where someone “from money” was someone to look down your nose at.

After a life changing event in the mid-2010s, I decided to change that, focusing on taking the mystery away from money. Now, every day I go through my budget and make sure my dollars are going to where I prioritize them to go. I use a tool called You Need A Budget to do so.

There are plenty of YouTube videos are available out there about the YNAB product, but if you watch the ones from Nick True, you’ll get a good idea on how the product works.

Crossfit, or other workout

Photo by Victor Freitas on Pexels.com

Is Crossfit problematic right now? Yeah, very much so. They have some corporate housecleaning to do, because there is no room for racism and sexism in the gym. Taking care of yourself and your body is for everyone.

That said, there has never been anything I’d consider even remotely negative about my local box. When I was 320 pounds, they were kind, supportive, and helpful. They did not try to sell me a bucket of supplements. They challenged me, and made those challenges doable for someone in my shape and size.

They are people that are striving to be active, kind, and full of life. That is precisely the sort of person I want to be.

So despite how much I hate Burpees, I hit up my Crossfit WOD everyday. If you live in the Kenmore area, come visit us at Crossfit Kenmore.

Write for 45 Minutes

Photo by Retha Ferguson on Pexels.com

I graduated with an English degree, so you’d think this would be something I could do easily, but like anything else, it has to be maintained. I use OneNote for my note-taking, falling in love with it when I used my old Windows Phone in 2009. I remembered being able to speak into my phone, even back then, and have it transcribe my language with an accuracy of about 90%.

I was amazed. I was also a nerd, so I started nearly every transcription with “Captains Log, stardate… “

Most recently, I have been taking up the task of blogging for 45 minutes every day. Fleshing out my thoughts onto a screen isn’t exactly the same as paper, but it does let me combine with other creative work. For example, my blog post about learning a new programming language is the basis for a talk I will be doing on soon to a new Python User’s Group.


Consider what these top three things tell you about my priorities. Everyday I prioritize writing, taking care of myself, and the family finances. These are not all of my priorities, of course, but they are the “must dos” every day. When you look at your day, what are your “must dos?”

Coaching Session – Is Everything Broken, or Is It Just Me?

Today’s coaching session revolved around a young developer recently moved into an established team. The developer had experience in Agile teams with specific practices, and this team’s practices were VERY different, and almost non-existent. As opposed to a product team with a defined backlog process, this new team is catch-as-catch can, and largely individualized. This developer was concerned, greatly.

“Where is the product owner? Why isn’t she engaged here? Where are the stories? Where is task breakdown?” And on and on, indicating worries great and small. He was half-convinced the entire structure was broken, and needed to be rebuilt from the ground up.

Man oh man, could I empathize with that.


There were a lot of complexities to unpack in this developers complaint, but I called out his newness to the team. He was joining an extremely stable team, with established norms and structures. It is entirely possible that the Agile mindset and culture of the team needs to change, but for an engineer, the first thing to do is get competent on the platform.

This team is a bunch of individuals working. That is a problem. Fixing the process needs to happen, for sure. That isn’t the purview of a brand-new-to-the-team engineer. Nobody is going to listen to someone who comes into an organization and immediately vents about how everything is broken.

Process absolutely matters, but for this engineer, engineering has to count first. That’s what I coached him to do. I recommended he get good at the tech FIRST, and then talk about process improvements.

After that conversation ended, I setup a meeting with the product owner. I wanted to see what sort of issues she was seeing, and if there was anything this principal software dev could help with.

Four Best Practices of CI Builds

Continuous integration builds (also called CI builds) are an absolute process game-changer, turning a local ‘works on my box’ coding and deployment strategy into an automatic and reliable process. Once a team gets a taste of an automated and reliable build process, it is easy to fall into a trap of adding all of the things to your CI build. Integration tests, security scans, performance tests, etc, until eventually, the CI build has lost the features that make a CI build implicitly valuable. The best development teams keep continuous integration builds simple.

Best Practice: With no changes to code or steps, the result of CI builds should be the same.

Responsibilities of the CI Build

A CI build’s job is to collect all developer changes, and create a releasable artifact, ensuring changes from all developers on a project are included in the product, and don’t cause conflicts with each other. A CI build must be fast, so that changes that break a build can be immediately corrected; a quick feedback loop is essential to the CI process. A CI build should perform the following steps:

  1. Collect all source code and changes.
  2. Restore dependencies.
  3. Compile / construct the build.
  4. Run unit tests and build verification tests.
  5. Create the artifact.

Assuming the same code input from step one, and no changes to any of the steps, a CI build’s result should be the same, every time.

A new CI build should be executed if the state of any of the five items above are modified. If there’s a code change anywhere, step one has changed. If any dependencies are updated, in the framework or libraries the product uses, step two has changed. If a build setting has changed, like going from 32 bit to 64 bit, or from ‘debug’ mode to ‘release’ mode, that is step three. Unit test changes typically are manifested as code changes, but any test settings changed would be an item for step four. If the artifact construction process changes at all, that’s step five.

Best Practice: Execute a new build on any individual change to those steps.

Tempting Steps You Should Avoid in CI Builds

  • Code Security Checks
  • Integration Tests

Code security checks are tempting items to add to a CI build, but fail the ‘no changes to code or steps’ rule. Most code security checks are rule-based in nature, getting updates when there is a new known vulnerability. The process is similar to a malware database updates. With no code change, and no change to steps, but an invisible-to-the-developer modification to the security changes, builds can succeed or fail seemingly randomly. Also, the scope of secure code changes can be larger than common unit / build verification failures. A security change can be very small, but more commonly is larger and design-related.

Best practice: Include code security checks on a regular schedule, not directly connected to the CI build, and have those check failures create backlog items the developers can research and correct.

Integration tests are tempting to add to a CI build, but fail the rule of failing fast. Any system large enough to have integration tests in the first place will be a fairly complex set of tests to run, which may take quite a while to execute fully. They also tend to rely on a lot of scripting and setup work.

Best practice: Include integration tests as a post-CI step in an automated pipeline separate from the CI build.


To recap: Continuous Integration builds should be quick, automated, and provide a fast feedback loop. They should contain the following steps.

  1. Collect all source code and changes from the repo.
  2. Restore any dependencies.
  3. Compile / construct the build.
  4. Execute Unit Tests and Build Verification tests.
  5. Create the artifact.

Remember the best practices of good CI builds:

  1. With no changes to code or steps, the result of CI builds should be the same.
  2. Execute a new CI Build on any changes to the five steps.
  3. Include code security checks on a regular schedule, not directly connected to the CI build, and have those check failures create backlog items the developers can research and correct.
  4. Include integration tests as a post-CI step in an automated pipeline separate from the CI build.

Happy building!

Six Questions You Need To Answer When Learning a New Programming Language

Are you someone who wants (or maybe is being forced) to learn a programming language? Learning to program isn’t just syntax and structure. Here are six questions you should answer about your programming language before writing your first program.

While learning the syntax, structure and tools, make sure you can answer the these questions.

1. What is latest version of your language?

By keeping yourself with the most up-to-date versions of your language, you minimize the risk associated with using old software with known security flaws. Building software can be risky, if not done carefully, so make sure you are using the most up to date version of your language.

Paying attention to the version information is also a great way to date the information and numerous resources you find out there in the wild. C# is in version 8 now. If you find a book about C# 2, it is NOT new, and can probably be recycled.

2. Who hosts the documentation, and where?

Programming languages will either have an organization, or a corporation which acts as the owner / maintainer of that language. C# is owned and maintained by Microsoft, and the C# documentation is hosted on their website. Python is hosted by the Python Software Foundation. Java, by Oracle.

Find the documentation website, and favorite it.

3. How do you manage dependencies and libraries?

Nowadays, nobody codes anything entirely by themselves. All languages start with a basic platform library that contains the very basic commands, keywords and structural expectations. C# has the .NET runtime. Java, the JDK. Often times open-source community provides the rest via a packaging system.

Learn your packaging platform, and how it works. Each package will often be just like the programming language itself, with versioning, docs, etc.

4. How do you test your code?

Unit testing has been a best practice for software development since the early 2000s. Unit tests are an extremely useful tool in your belt, enabling you to prove out functionality you are exploring or have written yourself. Every major language will have a library associated with writing unit tests. Using the packaging platform from step three, your next step should be finding out how to test your code. You, and your users, will be grateful that you did.

5. What risks are there? What should you watch out for?

In general, programming is a ‘high access’ activity on your computer, your networked environment, your data, etc. The convenience of doing things quickly or in bulk is precisely what a programming language can enable, so be careful. Make sure your SQL statements have WHERE clauses, and are guarded by a transaction that can be rolled back, if done in error. Make sure your loops have defined end states. Make sure you know precisely what your memory pointer is pointing to. Low-level compiled languages have more potential to damage computers directly by overwriting memory or restricted data. High-level interpreted languages tend to cause file or data related issues.

A computer does EXACTLY what it is told to do, and nothing more. Remember that, and be VERY sure it is doing what you intend.

6. How do you package and deploy the code you write?

Remember that code is just part of the story here, and is largely just a work product to the end result itself. Hosting a JavaScript site on a localhost isn’t enough, nor is a bunch of class files for a JAR file. When you write code, the goal is to ship an artifact of some kind. Don’t just start with Hello World, but start with Hello World deployed somewhere!


There are lots of resources out there for learning programming in a digital age. As you go through your learning, make sure you can answer these six questions while you’re learning the basics of the language. Happy coding!

Long Cellars 3 Year Anniversary Party, Day 2

One of our favorite local wineries had day 2 of their 3 year anniversary party today. Heather and I were lucky enough to get tickets to both days!

A photo of a woman with wine glasses in front of her.
Heather starting with the Vin Rouge Rose.

If you haven’t heard of Long Cellars, check out our Day 1 party post for a quick intro and write up. He is an amazing winemaker, and should get rich making wine.

So let’s break out the wine for the day!

The menu from Long Cellars on Day 2 of the party.
The day 2 menu was Malbec, Petit Verdot, and his classic blends.

Malbec

Day 2 started with my wife’s favorite varietal Malbec. Again, we were sampling wines with tiny amounts available, so a chance to hit these early vintages was amazing.

We started with a 2014 from Glacier vineyard. Light, blue and dry, with a single bottle available for ~20 folks who made it to the party. 2015 had two samples available, a vintage from Scooteney Flats that had a savory nose, with a red fruit finish (twelve bottles), and a Boushey vineyard that was truly outstanding, with out of this world blue fruit (none left, just a sample available.) Classic Washington Malbec. The 2016 (seven bottles available) had the complexity I had come to expect from the year, and the 2017 (another seven bottles) was dark, and full, and super fruity. The Scooteney Flats was uniquely savory, I wondered if it had a touch of syrah in it.

A photo of a flight of 4 tastings.
Malbecs from left to right, the 2014, 2015 Scooteney Flats, 2015 Boushey (Barrel #3) and 2016 Boushey.

Petit Verdot

Petit Verdot is a unique grape. When you read about it, it is normally just a blending grape. Something to make a blend fuller, and finish strongly. When Heather and I started tasting in Washington, you would find Petit Verdot in tiny percentages at the end of blends. 4% here, 2% there. Very light additions. Then in 2016, we started seeing producers push it our as a single varietal.

Jason had three versions of the Petit Verdot for us to try. A 2015 from Scooteney Flats, light and delicate, with 6 bottles left. A wonderful 2016 from Boushey that was brutal and fleshy; almost, for the life of me, toothsome. The 2017 was a bright powerfully ruby everyday drinkable fruit-bomb that finished with a screaming bit of pepper. There were 3 cases left of the ’17.

A flight of 3 wines ready for tasting.
Heather sipping the 2017 Malbec. The Petit Verdots on the left (from left-to-right, the 2017, 2016 and 2015.) Jason in the back.

The Friendship Blends

A unique thing that Jason does every year is to create a blend with friends of his. They get together, test out various blends (he tells a grander story), and create a wine together. Each gets named in a unique way, usually with a letter of their first names or last names.

Jason Long should be famous for his blends. The single varietals are fabulous by themselves, but his ability to create a truly balanced Bordeaux is his strongest trait. The 2014/2015 FAIKEN, with 8 bottles left was our target for the evening. Heather and I first fell for FAIKEN in 2018 when we first found Long Cellars, and we fell hard. The FAIKEN is a Cabernet, Merlot, Malbec and Petit Verdot blend of grabby tannins, dark red fruit, perfect acid, and a delightful boozy burn. The 2016 NEKEL, a bawdy and pungent Cabernet-dominant blend was second up and with 4 bottles available for purchase, and I recall buying at least half-a-case of it when it was made first available. Finally, we had the 2017 PAJJAM. The PAJJAM is a winner, but was released about 6 months ago, and was the only wine I wasn’t worried about getting a hold of. We still have one bottle, and with 18 cases available, it was just a pleasant thing to enjoy. I do love Merlot, and a Merlot dominant blend makes for a wonderful finisher on the afternoon.

A flight of 3 wines ready for tasting.
The three friendship blends, from left-to-right, 2017 PAJJAM, 2016 NEKEL, and 2014/2015 FAIKEN.

The End of the Party

Once again, to conclude the party Jason offered everyone the chance to purchase two bottles if they wanted to (via a raffle, to keep it fair). If anyone wanted more than two bottles then after all the other attendees else had a chance, they could do so.

Two bottles of the 2014/15 FAIKEN

We were able to grab two bottles of our favorite blend, the FAIKEN, and once everyone had their chance, I grabbed one more bottle of the 2016 Petit Verdot.

Wrapping Up

Two days with six wonderful hours of tasting, stories, food and conversation. I am so happy we were able to take six rare bottles home, and a celebrate a local winery. It was a great time and a great Father’s Day weekend.

Long Cellars 3 Year Anniversary Party, Day 1

One of our favorite local wineries had day 1 of their 3 year anniversary party today. Heather and I were lucky enough to get tickets to both days!

A photo of a woman enjoying a glass of wine, in front of several wine barrels.
Heather starting with a Rose.

If you haven’t heard of Long Cellars, you are in good company. Jason Long is a very small producer. He is local to the Woodinville area, makes small batches, and has an experimental streak in him. His parties are legendary affairs, where you are likely to get an extra pour of Merlot while a burlesque dancer shakes her (or his) tassels at you. Long Cellars classics are his $25-bottle everyday drinkers. The Cab Frank, a Cabernet Franc dominant blend with a Frankenstein label, and the Screaming Baby, a delicious Merlot-fronting Bordeaux that most years has near everything but the kitchen sink thrown into it.

Jason Long has been making wine for upwards of 13 years, but has only had his own winery and label for 3 years now. The party had food, stories about the winery and the wines he had made, and of course, samples from vintages we have not seen in quite a while, or at all.

As a local wine snob, the party was an intriguing chance to sample the Long Cellars wine after it had some time to age. Being a smaller producer, it is significantly more costly to keep wine held back from his customers. Right now, Jason is releasing his 2018s (the 2018 Reserve Red Mountain Malbec is wonderful), so the opportunity to sample wine his early vintages was a unique treat.

A photo of a table with wine bottles on it, all of the wines we'd be sampling that day.
Our view of the spoils from Day 1!

To start out a wonderful party, and to show precisely the sort of host and winemaker he is, Jason started us with a Dry Riesling and a mineral-y yet sweet rosé made from Pinot Gris. Bone-dry and a tart finish, it had the full body of a Chardonnay. I thought it would make a wonderful desert, paired with a salted caramel. The rosé was sweet, lightly floral, but had a decided mineral finish that would not quit. I asked about them, noting he did not commonly release a Riesling.

“Yeah, I don’t have any really. It’s just something I’m playing with. I only have about a case. Did you like it?”

Worth the price of admission right there.

Merlot

Day 1 started with a flight of 3 Merlots, from 2015, 2016, and 2017. These were so exclusive, Jason had sent us an inventory of ‘bottles available for purchase.’ Not cases. Bottles.

The 2015, bold and fruity, with a hint of acid. One bottle available for purchase. The 2016 was complex and full. Eighteen bottles. The 2017, fruit-forward and potent. Thirty-six bottles.

A photo of 4 wine glasses, filled with a tasting-sized portion of wine in each.
In the front, from left to right, the 2015, 2016 and 2017 Merlots. In the rear right, the 2013 Cabernet Sauvignon.

Merlot happens to be my favorite grape, mostly because it is delicious, but also due to that movie that every Merlot winemaker complains about.

An animation of the "fucking merlot" scene from Sideways.
Paul Giamatti in Sideways, 2004.

Bottles of merlot ends up selling about 25% cheaper than they should be, mostly because stupid folks that do not like delicious things copy that movie. Tell ya what world, the smart money is on Merlot!

Cabernet Sauvignon

Jason had five cabs for us to try. A 2013 that was just for sampling, with literally no bottles left for sale. A 2014 from Fidelitas he had seven bottles of, and three different vintages from the Quintessence Vineyard (2014, three bottles, 2016, five bottles, and 2017 about ten cases.)

The 2013 was delicate and delicious. The 14s were a lovely contrast of the two vineyards, with a note of savory and jasmine on the Fidelitas, and a sweet and floral nose on the Quintessence. The dark 2016 was delicious, but the showstopper was the 2017. It was delicious, fruity, and delicate (and with ten cases, easier to get a hold of.)

Cabernet Sauvignon all around. In the front, the 2017 (left), and 2016 (right). In the back, the 2014s, surrounding a plate of food to pair with.

Cabernet Franc

The Cabernet Franc flight was next on the list. This was a unique flight, all from Boushey Vineyards, and one from each year from 2013 to 2017. The fascinating element here was the completely different wine you got from every year.

The 2013 was light and dry, and only available to taste. The 2014 (six available), full, friendly, but with a strong green pepper note. The 2015 (five left), almost pine-y with green pepper, and paired AMAZINGLY well with olive oil drizzled on a crusty piece of bread. The 2016 (six left) was broody, dark and complex. The 2017 (fifteen bottles), bold, fruit-forward with a hint of tannin.

A photograph of a woman smelling a glass of wine, with a flight of glasses in front of her.
Heather sampling the 2016 Cabernet Franc, in a line up from 2014 – 2017 (right to left.)

To round out the tasting was a final bottle, the inaugural Sleeping Baby from 2014, which finished up the evening wonderfully. Again, it was the last of the vintage. Better keep an extra bottle of what you get.

The End of the Party

To conclude the party, Jason offered everyone the chance to purchase two bottles, if they wanted to (via a raffle, to keep it fair). If anyone wanted more than two bottles then after all the other attendees else had a chance, they could do so. Naturally, I was picked last in the raffle (grumbles). Fortunately, we got our prizes.

A woman with a happy grin holding 2 bottles of wine.
A great haul.

Heather picked out the last available bottle of the 2014 Cabernet Sauvignon from Fidelitas vineyard, and I went ahead and grabbed a bottle of the 2016 Cabernet Franc. After others had a chance, I snagged an extra bottle of my longtime favorite, the 2016 Merlot.

Day two notes tomorrow!

Coaching Session – Panic at the Deadline

I had a conversation with a new dev lead today. This lead was recently installed into a project with an upcoming deadline that he was genuinely worried about. As we started the conversation, the worry sort of came out of him in piles. When he was finally able to take a breath, I collected from him that 1) he believes that the code-base is largely un-salvageable (he only recently joined the team) and 2) the deadline is completely rushing at him (about a week and a half before the first delivery.) I had spent a few minutes looking through his project and coached him toward doing the following.

1. Get a CI / CD Pipeline Setup

The first thing to do here is to get a Continuous Integration and Delivery pipeline setup, so you can quickly and reliably deploy in an automated fashion. The fact is, no software comes out as a 100% bug-free product the first time and this software will be no exception. By building up the CI pipeline you’ll be able to fix things quickly and consistently. Every commit should create an artifact, and assuming success that artifact is something can release. If the software isn’t good right now, the product can get good over time.

This was the bulk of the conversation, as it felt like to him that I was recommending that he throw sh*t at a wall and hope that it sticks. The big value comes from the ability to iterate.

2. Code Doesn’t Have to be Perfect.

The fact is, when you have a deadline you have already agreed to, you have to get over the fact that the code is crap, and likely will need a rewrite. Code is a tool used to create a product, nothing more, so worrying that it’s “not good enough” is contra-indicated.

The dirty truth about software is that no code is good enough. Ever. There is always something to do better and cleaner. That is not to disparage the craftsmen out there, but a craftsman does not back out of a commitment. When you make a commitment, you keep it.

3. Keep Your Campground Clean

This one was fairly specific to the project, but in development projects un-merged branches and directories all over the place that are largely empty do not help anyone, and make the project look bigger than it is. If you have a REST API and a daemon, you don’t need a ‘Tests\Python’ folder that has nothing in it. Things that look small, will feel small.


I will check in with him again after a few days to see what progress he has made on those items. If he can get the CI/CD pipeline down, and know HOW to get the code into production boxes quickly, we can move into things like refactoring into patterns that might smooth some sailing here.

Powering Through

I hurt myself the day before yesterday. After a weightlifting practice, there was a higher intensity portion of the workout that involved a similar movement. I didn’t think to remove weight from the bar, and after 12 minutes of a 15 minute AMRAP, I felt a stabbing twinge between my shoulder blades. After a few hours, it was uncomfortable enough to take some Tylenol and complain a lot. Most of the evening I spent lying directly on my back, or on my chest, spreading my upper back out as much as possible to alleviate the pressure. I took a few more Tylenol and went to bed, and largely slept in the same position.

Yesterday my back still felt tight. Better, but still tight and twinge-y when I twisted quickly. I took a few more Tylenol in the morning. I decided to let my workout slide and take a rest day.

This morning the tightness remains, but little pain. I notice it from time to time, as I wiggle my shoulders, exaggerating them into circles under the guise of a stretch. When I push my chest out wide, I can feel a small indent, as if someone is digging their thumb into the flesh directly under the tip my right scapula. I plan on taking another rest day, and am considering another tomorrow.

I try not to power through stuff much. Powering through pain is the right way to seriously hurt yourself.


When I was 34, I was 320 pounds(ish), loud, big, terribly funny, and devilishly handsome. Every once in a while, I went into the doctor’s office, and heard the spiel about my blood pressure, and how I should lose weight. In my life, I have almost always been big. When I was a kid, my dad called me the ‘little one’, because I was 1) his youngest, and 2) at 13 years old, 3 inches taller and 15 pounds heavier then he.

Dad was both stocky and wiry; he seemed electric. Quick and powerful. He was also not terribly funny. He always laughed at his own jokes. He still does. I was big and strong and always had been. When we moved out of the bar in Elk River, I held up one end of the hide-a-bed, he and my older brother, the other.


In November of 2013, I noticed a cough that was sticking around longer than I expected. I still came into the office. I could power through. On Friday, seven or eight of us developers from {redacted} went to a downtown bar, that had a large restaurant seating area. Most of us drank a beer, had a burger, and then made the trek back to the office, mostly laughing about Star Wars, meat, or whatever libertarian idea some of the more political friends had proposed.

I could not keep up with my friends up the stairs. Each step, I fell behind. I could not catch my breath fast enough. When I did finally make it up those steps, the group was happily laughing a hundred feet ahead of me. I had seen enough episodes of House to know that this was some kind of walking pneumonia. I just needed to get to a doctor to get some antibiotics.

I would have to go all the way to a doctor to get a prescription. What a damned waste of time.

Walking back to the office, slowly, slightly downhill, I began to feel better. I caught up with my co-workers, they asked about where I went, and I made a joke about noticing an attractive woman and losing my interest in them. It was time to power through the rest of the day.

That night I could not fall asleep. As soon as I would lay on my back, I would start coughing. Whatever was in my lungs just would not go away.

I went in to the doctor in the morning. My normal doctor was not there, but the on-call guy would be just as good. It does not take a lot of experience to prescribe antibiotics.

I went back into the office with a ‘I do not have time for any BS, let’s get this done’ nurse. I liked her; she was quick to laugh. She asked what I was there for, and I told her with a joke. She laughed easily, quickly wrote things on my chart while she went through the basics of a checkup. I was two steps away from a consult with a doctor, then a trip to the pharmacy.

She wanted to get my blood pressure. It had not been taken for a while. Her mouth set hard and her eyes opened very wide as she looked at the gauge on the blood pressure machine. I remember telling her that I knew it was high. She opened her eyes wider, stood up, and headed out of the room while the cuff remained on my arm. The doctor came in. Reran the test. Then asked if he could look into my eyes. “Sure doc. Just don’t fall in love or anything…”

I remember two other points on that day, but the rest is gone.

The X-Ray tech asking me what happened, why he was X-raying my chest, if I got into a fight or something. Getting a few bottles from the pharmacy, and the pretty pharmacist looking up at me, “Are you OK?”

“I’ll power through.”


To be continued…

A Wine Gem : Warr-Kings 2017 Descendant

Last night a storm in the area brought an intense amount of rain drumming down around our home, making for a perfect evening to enjoy one of my favorite red blends, The Descendant, from Warr-King wines. It is a complex blend, with a floral and spicy nose, that leads into deep red fruit and full tannins. The wine is mainly cabernet franc, but the magic is the in the blend. A tiny hint of merlot gives it that floral nose and the full mid-palette. I would not call it a ‘Big and Bold’ Washington Blend, so much as a ‘introspective’ blend. A great wine to read a classic novel with.

I live in a house with 3 teenagers. So beyond the yelling, (why there is always goddamn yelling with teenagers?), about “where such-and-such is in the kitchen”, and yelling at a Zoom call, and yelling about some video game being epic but also totally unfair and hacked, I could only attempt a moment’s peace with a magazine and a glass. The pictures were nice, and I opened the window so I could point my ears at the sound of driving and pounding rain and avoid the sound of ‘stupid unfair hackers’ and ‘where’s the coconut oil.’

Heather and I have been happy members of the Warr-King wine club since mid-2019, and we got this particular bottle at a club pickup in November of 2019.

A Note About Wine Clubs

Heather and I are members at eight local wineries. All of them have their individual charms, but as a club member, you can usually expect a few perks. Wines are released to you first, and usually at a discount to their retail prices. Release parties at the wineries are common, and are sometimes even offered with food. Visits and tastings at the winery are usually offered gratis (including tastings with guests) for a fun afternoon where you usually end up buying a bottle of something wonderful, and again, usually discounted. Often, there are different commitment levels to boot.

Wine club details from Long Cellars, in Woodinville Washington
Woodinville Wine Clubs are Awesome

Frankly, wine club membership is a heck of a deal. You make a relatively small commitment to purchase wine from an artisan crafts-person whose wine already you know you enjoy. The winery enjoys less risk in production, and you get the wine you will enjoy at a lower price.

The Story of The Descendant

If you ask Lisa up at Warr-King, she probably has a wholly different story, but for me, the story of The Descendant started at a local restaurant in downtown Bothell, Revolve Food and Wine. The restaurant offered local wine, and an entirely gluten-free menu. My wife is gluten-free, so having a whole menu my wife could pick from made for a happy evening.

While there I had sampled a few local wines but my favorite on the evening happened to be from a local winery I had not heard much about. The wine was deeply ruby, rich and fruity and a little spicy. Tannin was present, but only just. One of the points I enjoyed the most was the balance. Many Washington wines are so fruit-forward, that they tend to have higher alcohol content. They burn and feel ‘boozy’. This one didn’t at all. It was just wonderfully complex and delicious.

The wine list at Revolve, highlighting the price of the Warr-King Descendant.
It was also selling for $75 a bottle.

A $75 restaurant bottle of wine is a little out of my ‘everyday drinker’ category, so I promised myself I would do a little more research on this as we went home.

Around about that time, I had started following a Washington Wine Podcast called Decanted. The fates conspired, and I happened to be on the way to work, when I clicked into 5th episode, highlighting Lisa and Warr-King. An hour later, I had put ‘go to Warr-King’ on our calendar.

A Happy Fate

It did not take long. Several visits over several months passed. Heather and I had the Passport to Woodinville Wineries, so visited first from there, then we came in again, to sample a Syrah, and again when the Malbec came out. We were hooked.

I had almost forgotten about the Descendant, until the release party in late 2019, when it was happily secured in our club allocation.

An empty bottle of the 2017 Descendant, which thankfully cost me nowhere near $75.

The 2017 is fuller this year, and just as lovely as it was when I first got it. It was rich and dark ruby again. I got hints of tart red fruit and Bing cherries and a floral nose. It is a wonderful blend you should try today. Or, join her wine club, and get a 15% discount!

How-To: Rename the Master Branch

It is well past time for your project to get rid of noninclusive terminology in your git branches! Code is for EVERYONE, so in the interest of making our language serve everyone equally, here is instructions for how to do it.

Starting A New Repo

The process is as follows:

  1. Create to your starting directory.
  2. Initialize the repository.
  3. Create a new “main” branch. I prefer main, trunk or root.
  4. Create a new file in the repo. Start with the .gitignore file.
  5. Add that file.
  6. Commit that change.
$ mkdir demo.branchinit
$ cd demo.branchinit
$ git init
Initialized empty Git repository in {Your Directory}

$ git checkout -b "main"
Switched to a new branch 'main'

$ touch .gitignore
$ git add .

$ git commit -am "First commit."
[main (root-commit) {hash}] First commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode {something} .gitignore

$ git branch
* main

Voila! The repo is now rooted off of your main branch, and the word master has nothing to do with it.

Changing an Existing Repo

An existing repo also easy to change, even if you have a remote source setup.

The process follows:

  1. Go to your existing master branch.
  2. Create a new ‘main’ branch, from that master branch.
  3. Drop the master branch.
  4. Push your new main branch to your remote.
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'

$ git checkout -b "main"
Switched to a new branch 'main'

$ git branch -d master
Deleted branch master (was {a hash})

$ git push origin main
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'main' on GitHub by visiting:
remote:      https://github.com/myorg/myProject/pull/new/main
remote:
To https://github.com/myorg/myProject
 * [new branch]      main -> main

Now you just need to reset the default branch in your remote.

  1. Navigate to your remote git source. I use my web browser for this.
  2. Update the default branch to your new ‘main’ branch.
    • In GitHub,
      1. Go to your repo, click Settings
      2. Then Branches on the left.
      3. Select main in the Default Branch box, and click Update.
      4. Then click through the confirmation.
    • In Azure DevOps Services
      1. Go to your repo, then Braches.
      2. Locate the main branch, and then click the 3 dots at the end of the row.
      3. Click ‘Set as default.’

Finally, clean up your local repo’s remote branches.

  1. While still in your main branch, reset the head on your remote.
  2. Delete the master branch!
$ git remote set-head origin -a
origin/HEAD set to main

$ git branch -d master
Deleted branch master (was {a hash})

Alright, you still have some work to do, but your local repo is nice and clean. You’ll still have to clean up your remote, but you can do so just like you would with any other branch delete.

Thanks for doing your part to make everything more inclusive! #blacklivesmatter