Make Us Go

I’m not really an engine, tools, build, automation, localization, or audio engineer.

I’m a Get It Done engineer, which informs the kind of work that I typically do. I like working on projects where I can interact with my customers directly, and I also deeply like projects that help others get their work done.

Three aspects have stood out that I find compelling:

Visibility

I like setting up feedback loops so the knowability of the basic state of the product is readily available. Does it compile? Is content all present and working? Do tests pass? Do the people who have a stake in the state of the product have the means to know what it is? Are the people who have made changes confident that their change works correctly and doesn’t impact others?

Productivity

I am fond of the quote, ‘The most powerful force in the universe is compound interest’ (apocryphally attributed to Einstein). A percentage improvement to the engine, processes, assets, and/or toolchain that results in faster development times is a win, as that percentage difference accumulates for each person daily.

Availability

I want to maximize the reach of whatever I work on. I want what I do to connect with the largest audience possible. This is why I love localization, dialogue, and narrative systems. I want everyone to hear the story, connect, and feel represented.

I do not favour elaborate frameworks or attempting to design everything beforehand. I’ve seen numerous attempts to do so fail because those efforts lose sight of the problem being solved. I prefer organic growth and feedback loops with whoever is using the system being built to progressively refine to actual needs. I think that various coding methodologies are useful in proportion to the churn in the code, facilitating scaling up code to maximize clarity and resilience to change. This is why I like Kanban: it is clear what the most important tasks are and targeting them.

Our Best

Growing up, I believed that people were generally good and were trying to do good. It wasn’t hard to have that belief when the world seemed to be getting progressively better (and generally, it is).

So, when people I thought were good criticized me as I grew up, I concluded that something was wrong with me (see Imposter Syndrome).

One of the consequences of my last significant relationship was dropping the belief that people were good. It simplified expectations for so many others in my life.

During the summer, a friend challenged my belief, as they believe that people are generally good. I wasn’t convinced. It would explain the general improvement in society, but it isn’t the only explanation.

Instead, during a Brene Brown podcast, I heard, ‘People are doing the best they can.’ While I am not into her religious convictions, this was much more interesting (and compelling).

I won’t use the God argument she relies on. I don’t think it is necessary. I’ve broken it down into parts to better understand others and myself.

The idea and impact of people trying their best are well expressed in The Happiness Lab with Dr. Laurie Santos: Simple Ways to Feel Great Every Day – with Dr Rangan Chatterjee.

Continue reading

Imposter Syndrome

I have been struggling with imposter syndrome all my life. I discuss the factors that were the basis of my imposter syndrome in The Common Factor of Failed Relationships, but for a different impact.

As I mentioned in my previous post, the core for me was:

  • One parent left.
  • The other was critical.

I had challenges forming friendships growing up. I was a chubby kid–picked last for teams. I wasn’t cool, fashionable, rich, or eloquent. I learned at a young age that most people were more interested in telling their stories than listening to mine. So I listened.

I also didn’t have someone to talk to about how I was feeling. I was afraid of people. I was feeling so many emotions that I couldn’t hope to untangle and address them, so I suppressed my emotions.

School was my refuge. I received positive feedback for my efforts, and I couldn’t help but think that maybe, just maybe, if I did well enough, I’d get that positive feedback from my parents I so desperately craved.

But I didn’t, so I kept pushing myself. I went down the same path I had resented my parents doing growing up, investing myself in work to get that recognition. I bent over backwards in relationships, conceding to what my partner wanted because I was afraid to lose the relationship until the relationship was intolerable.

My last long-term relationship nearly broke me. My ex was disturbingly effective at pressing these buttons—far better than the parent in question. If it wasn’t for the tools I had picked up, circumstances now would be radically different.

Those tools were (from therapists and podcasts):

  • When experiencing emotions, go slow and be curious. Examine what you are feeling and why.
  • Distance yourself from your emotions. Going from ‘I am lonely’ to ‘I am feeling alone’ is subtle but makes a difference.
  • Feed those learnings from cognitive behaviour therapy to work through them and check whether they are valid.

I had some novel tools at my disposal that I didn’t have as a teenager. It wasn’t uncommon at work to get tossed into a problem I didn’t have a preexisting background in, and I would have to learn about the nature of the problem, go spelunking through code and/or crash dumps, and then fix the issue.

My debugging skills had a secondary application, and I applied them to myself.

In addition, the Internet had many resources I could use to dig further, which wasn’t available to 14-year-old me.

I have made huge strides in remedying this. I can happily acknowledge that I have done some amazing cool stuff with absolutely amazing people!

There are two major steps (that I am aware of) left.

I am working on changing my values, particularly with respect to work. This is exacerbated by having been laid off on March 13th, 2024. Before, I felt compelled to push myself to do everything (I also had difficulty saying no). Now, I want to be more effective at solving the problems that make the biggest difference.

My model of people is wrong. Growing up, my view of everyone was based on not feeling I was good enough. I felt ashamed, judged, and insecure. More importantly, my mind became very good at remembering events that confirmed these beliefs and biases more than those that disagreed. I now see how this is warping my perception of everyone.

Everyone.

Lifting the yoke I’ve worn for so long feels great. I now need to address old habits and build some new skills. However, if there is anything I have learned, it is how much I can grow and change.

Microsoft Family Safety – WTF?

This past week has been frustrating dealing with the update to Microsoft Family Safety.

  1. After the update, the Android app indicates I need to update it, but it doesn’t have an update in the Google Play Store. I have effectively been locked out of the app on my phone.
  2. I used to be able to specify time for Xbox & PC to be shared, I no longer can.
  3. In the past couple of weeks, when granting more time to the kids, I have seen the accounting of time fail, where the kids no longer have a limit.

The latest update then ‘provided’ the option of splitting the time between Xbox and PC or using defaults. So, instead of getting all my settings stomped, I chose split. So now I have to reallocate the time back to PC as the kids rarely play Xbox.

Furthermore, I have to go through and run Windows Update on their machines for the system to recognize all these changes. Normally, this would be fine. Unfortunately, the latest update throws an error that requires me to go and shrink volumes to resize the Windows Recovery partition with an additional 250 MB. Furthermore, on one of the kid’s machines, I had to turn off hibernate, pagefile, and system protection to resize the primary volume, then turn them all back on.

The Windows Update experience was atrocious, inaccessible to many non-technical people, and represented a potentially large security vulnerability for anyone who could not do it themselves or get someone else to help them. Who is liable for that? Microsoft?

I also think this splitting of Windows and Xbox is fundamentally dumb. My ex and I have to manage the Family Safety feature jointly since the kids’ accounts cannot be part of two families, however, we cannot differentiate machines between our two houses with different times and schedules.

Family Safety ought to have a way to categorize devices into tiered groups. My home, my ex’s home, then devices with shared time split amongst them, and devices that track independently. Give me a choice and means of categorizing and splitting time how I need to.

I’m really disappointed there is this big update to a system that increases problems for me instead of giving me better tools to manage time and devices for the kids.

The Common Factor in all Your Failed Relationships is You

An ex said this to me near the end of our relationship:

This sounds pithy, but with some thought, it is disappointing.

Let me illustrate: you are the common factor in your…

  • Successes
  • Meals
  • Travels
  • Relationships (all of them!)

That is what ‘you’ and ‘your’ mean. It’s a tautology.

Using ‘you’ suggests the person is the problem, which isn’t informative or helpful. I think ‘Failure is the common factor in all your failed relationships’ focuses on what to investigate. This distinguishes being from doing, the distinction between ‘I am happy’ and ‘I am feeling happy.’

Continue reading

Housing Crisis

I’m painfully aware of the cost of housing in Canada. I’m currently renting after the divorce, which required selling our house to pay for legal fees and equalization. Furthermore, renting for three teenagers requires more space for all our sanity.

I’ve heard several reasons why the crisis is as it is. Homeowners don’t want more houses built as it will slow the rise in home values, and they represent a substantial voting group. Politicians don’t want to upset them. The second is building affordable housing (30% of pre-tax income is spent on shelter) for those who need it. Housing affordable to less affluent groups isn’t as profitable as for those that are. There are further explanations for Australia that also apply to Canada here.

These aren’t solutions; they are just some ideas that came to mind that might spur actual solutions.

A percentage of housing built be ‘affordable’. I couldn’t find a definitive figure for anything like this, unfortunately.

New housing in an area gathers some of its funding from the community itself, and sales of units provide a return on that investment. This makes new housing an investment opportunity for the entire community.

A rough example could be: 5% of your property taxes go to investing in new housing in the community. The first two sales of each unit built with this investment provide a return to those investing based on the contribution percentage. Two sales as the first is not going to have much margin, but the second is more likely. Furthermore, there is a compelling interest to ensure people stay longer and are happy to prolong when that second sale occurs.

There would be challenging details to work out, such as insurance of the investments, transferring when a contributing homeowner moves (which could be reflected in the sale price), etc.

This could also give communities more leverage to drive further improvements, such as parks, schools, and other services.

Identity and Orientation

I want to describe how I think of sexual identity and orientation. My thinking is simple and concisely expressed with a thought experiment.

The Nature article No ‘gay gene’: Massive study homes in on genetic basis of human sexuality describes the results of nearly half a million genomes revealed five DNA markers, none of which contributes more than 1% of predictability to orientation. Orientation is multifaceted and complex and very likely for identity, too. The multigene characteristic informs the thought experiment.

Continue reading

Thoughts on Knowledge

I’ve been thinking a lot about knowledge as justified true belief, the Gettier problems, and the various proposals to resolve them.

I have some dissonance with all of ‘justified,’ ‘true,’ and ‘belief.’

Justified

There are two parts to my struggle with this as a component of knowledge:

  • The first is that someone may believe something true with invalid justification; they may be able to exercise that truth in a manner that establishes justification.
  • The second is perhaps a little more peculiar, and I’m unsure of its validity. As I understand Gödel’s Incompleteness Theorem, you can have true statements you cannot arrive at (axiomatically) or justify.

Belief

‘Belief’ seems to imply a thinking agent. This excludes inanimate sources as containing knowledge, which seems a peculiar constraint.

True

In abstract or constructed circumstances, like mathematics, you can talk about a statement being true. However, outside of that, the truth is almost never known with certainty; this is Descartes’s evil demon argument.

My Conception of Knowledge

When thinking about knowledge, I lean more toward Isaac Asimov’s Relativity of Wrong. Here is how I conceive knowledge:

  1. How demonstrably close is the claim to the truth to be effective?
  2. What are the error bars on your claim?

While this leans utilitarian, that is what gives knowledge its value.

This information (claim and corresponding supporting information) can be stored in static resources and is independent of belief.

The degree of knowledge can be described in terms of these parameters, these epsilons of accuracy and precision.

In short, you can measure knowledge by its truth-ε-ness.

Has TekSavvy Lost Their Way?

I have been using TekSavvy since February 2013, almost 10 years. Generally, I have been delighted by the service until the past month.

In the past month, I’ve been having trouble getting to websites and repeating the attempt multiple times. Success can take minutes. Just downloading from Epic Games to update a game is taking forever. This is nowhere near 300Mbps or even a decent fraction. The attempt reports regular messages of having issues connecting. Steam similarly has regular failures but is more robust at retrying.

Here is what is interesting: with my laptop connected directly to the modem (configured as pass-thru, so it only does PPPoE as I have a Cisco Meraki router behind it), speedtest.net reports my cable connection has the expected speeds of almost 300 Mbps down and almost 30 Mbps up. The ping is 10-15ms. But the latency ends up going up into the 500s. If I run the speed test and attempt to ping in the background, pings take upward of a second.

I have been working with TekSavvy to fix this, but it has turned into a conflict between Rogers and TekSavvy. Rogers has come twice and confirmed the signal strength is good but added a filter anyway. I have replaced the modem at just shy of $200—still no difference.

Here is a collection of tests run, all directly from a laptop connected to the modem, with no other hardware in the way.

Ping

Here is my ping result connecting to google.ca. I started the ping and then ran the speed test in the background:

ping -4 -n 50 google.ca

Pinging google.ca [142.251.41.35] with 32 bytes of data:
Reply from 142.251.41.35: bytes=32 time=14ms TTL=117
Reply from 142.251.41.35: bytes=32 time=18ms TTL=117
Reply from 142.251.41.35: bytes=32 time=17ms TTL=117
Reply from 142.251.41.35: bytes=32 time=12ms TTL=117
Reply from 142.251.41.35: bytes=32 time=12ms TTL=117
Reply from 142.251.41.35: bytes=32 time=21ms TTL=117
Reply from 142.251.41.35: bytes=32 time=11ms TTL=117
Reply from 142.251.41.35: bytes=32 time=89ms TTL=117
Reply from 142.251.41.35: bytes=32 time=346ms TTL=117
Reply from 142.251.41.35: bytes=32 time=564ms TTL=117
Reply from 142.251.41.35: bytes=32 time=622ms TTL=117
Reply from 142.251.41.35: bytes=32 time=600ms TTL=117
Reply from 142.251.41.35: bytes=32 time=585ms TTL=117
Reply from 142.251.41.35: bytes=32 time=613ms TTL=117
Reply from 142.251.41.35: bytes=32 time=635ms TTL=117
Reply from 142.251.41.35: bytes=32 time=611ms TTL=117
Reply from 142.251.41.35: bytes=32 time=724ms TTL=117
Reply from 142.251.41.35: bytes=32 time=772ms TTL=117
Reply from 142.251.41.35: bytes=32 time=547ms TTL=117
Reply from 142.251.41.35: bytes=32 time=894ms TTL=117
Reply from 142.251.41.35: bytes=32 time=960ms TTL=117
Reply from 142.251.41.35: bytes=32 time=959ms TTL=117
Reply from 142.251.41.35: bytes=32 time=13ms TTL=117
Reply from 142.251.41.35: bytes=32 time=28ms TTL=117
Reply from 142.251.41.35: bytes=32 time=46ms TTL=117
Reply from 142.251.41.35: bytes=32 time=20ms TTL=117
Reply from 142.251.41.35: bytes=32 time=20ms TTL=117
Reply from 142.251.41.35: bytes=32 time=15ms TTL=117
...

Trace Route without Saturation

This test has no speed test running in the background.

tracert -4 google.ca

Tracing route to google.ca [142.251.41.35]
over a maximum of 30 hops:

  1    12 ms    12 ms    11 ms  135-23-134-225.cpe.pppoe.ca [135.23.134.225]
  2    12 ms    13 ms    11 ms  newkirk.rcable-tsi.tor.teksavvy.com [104.195.128.90]
  3    17 ms    13 ms    13 ms  newkirk.tsi-rcable.tor.teksavvy.com [104.195.128.89]
  4    15 ms    13 ms    25 ms  ae4-0-bdr01-tor.teksavvy.com [206.248.155.94]
  5    17 ms    11 ms    18 ms  ae8-0-bdr01-tor2.teksavvy.com [206.248.155.9]
  6    15 ms    14 ms    14 ms  142.250.166.168
  7    15 ms    14 ms    14 ms  74.125.244.145
  8    15 ms    16 ms    13 ms  216.239.49.189
  9    13 ms    13 ms    11 ms  yyz12s08-in-f3.1e100.net [142.251.41.35]

Trace Route with Saturation

This test does have the speed test running in the background, but the speed test completed before the traceroute did.

tracert -4 google.ca

Tracing route to google.ca [142.251.41.35]
over a maximum of 30 hops:

  1   309 ms   451 ms   531 ms  135-23-134-225.cpe.pppoe.ca [135.23.134.225]
  2     *        *      736 ms  newkirk.rcable-tsi.tor.teksavvy.com [104.195.128.90]
  3   915 ms   866 ms   872 ms  newkirk.tsi-rcable.tor.teksavvy.com [104.195.128.89]
  4   951 ms    21 ms    17 ms  ae4-0-bdr01-tor.teksavvy.com [206.248.155.94]
  5   148 ms    70 ms    99 ms  ae8-0-bdr01-tor2.teksavvy.com [206.248.155.9]
  6    29 ms    32 ms    31 ms  142.250.166.168
  7    16 ms    20 ms    21 ms  74.125.244.145
  8    34 ms    31 ms    35 ms  216.239.49.189
  9    22 ms    14 ms    14 ms  yyz12s08-in-f3.1e100.net [142.251.41.35]

Next Steps

I have replaced the modem, and Rogers has been here twice to investigate. So it is either Rogers or TekSavvy. To make that determination, I am now switching my internet provider. If it fixes the problem, the problem is at TekSavvy. If it doesn’t, it is Rogers.

Follow Up

I posted this to Twitter, and TekSavvy is being more responsive but still heavily deflecting from the possibility of being a possible cause.

They pointed me to lg.teksavvy.com where I got the following results for hitting google.ca using Tor1 and Tor2:

BGP Results
Trace Route Results

Since ping and tracert seem fine without traffic but they fails when there is network traffic. This does not indicate there isn’t a problem in TekSavvy data center.

CI/CD Scaling for Multiple Projects

While building the Jenkinsfile.groovy for a single project is straightforward, we want to share the logic across multiple C# projects.

I won’t go into the details as I did with my other posts about the process I went through. I moved the logic for Jenkinsfile.groovy into a Jenkins shared library, which is publicly available at Jenkins Library Sample.

Continue reading