Five Things

Four hundred and six days have passed since the previous "Five Things" post, though it certainly doesn't feel like so much time has elapsed. Between November 2018 and April 2020 there would often be at least one instalment per month, generally written from an iPad on a Sunday night while I waited for the boy to fall asleep12. While there's no plan to return to a weekly "Five Things" schedule, it's not something I'll rule out at some point in the future. That said, the reason for this stream-of-consciousness post isn't really the meta subject of the post itself, but some of the recent ideas that have been echoing around my head for a little while now.

Old Notes. New Appreciations.

While cleaning the home office the other day, I happened to open one of my old development notebooks. These are B5-sized books containing 250 pages of graph paper, and they're the perfect size for me to carry around, jot notes, sketch interfaces, plan APIs or databases, and record just about anything else I might need in a free-flowing fashion that is unbound by the constraints that limit most note-taking applications on computers. Without the flexibility of pen and paper, I highly doubt I would be able to write as much software … as counter-intuitive as that may sound. Looking inside, I saw some of the concepts that were being sketched out and considered right before I started building out the fifth version of Midori Core, which would eventually go on to power about two dozen different projects. Many of the ideas were rather different from what I had been doing beforehand, and some of them seemed downright impossible to implement at the time due to the way the MySQL database engine works. However, reading through the list, I was surprised to see how many of the ideas were not only part of v5, but had actively contributed to the success of the new version and are now indispensable. Support for SQL Server and PostgreSQL have certainly been game-changers, and the consistent API template makes developing a new set of functionality from scratch an absolute breeze compared to everything that came before. Then there's all the internal consistency checks and system validation ….

However, it's not so much the notes themselves that struck me, but what the notes made clear.

A Lack of Imagination

Over the last six months or so, I seem to have lost the ability to think up new things. Solving problems at the day job with creative solutions is still something that's done quite regularly, but it seems an incredible amount of time has passed since I've had a really interesting idea to think through. A lot of what I am occupied with – based on the contents of the current development notebook – is solving problems that people create for themselves … either wilfully or by sheer misfortune. A decade ago I would have several ideas on the go with regards to new projects that could be considered, slapped together, and tested. Today I have zero … and this really disappoints me. Where has my imagination gone?

Chasing Other People's Goals

Perhaps I've just been engrossed in other people's goals and haven't really sat down to think about what I want to do? Freelance work has started to pick up since the summer and there are now five clients that I am regularly communicating with. For this I am quite grateful. The day job also consumes about 50 hours of my time per week, which isn't bad given that the problems are rarely "urgent" anymore. Being able to take the time to really think a problem through before working on a solution is a luxury that many of us rarely have. Hopefully this relaxed pace keeps up for another couple of months so that the New Year holidays can be enjoyed without stressing over "all the things that remain to be done", as I have done the last three winters.

Still, it would be nice to have a new personal project to work on.

A Collaboration with Dad?

This summer I learned that my father's health is deteriorating quite rapidly. For a brief time, I thought I might have to arrange a flight back to Southern Ontario between the many on-again-off-again lockdowns in Japan and Canada. Fortunately, this has not been necessary, but the fact of the matter is that I have been thinking about the many stories my father has told me from his life as well as the ones we shared together. As the family historian, I would really like to have these written down to be shared across time, just as I did with my grandfather's journals at the very beginning of the 10Centuries project. While my father does like to write, he has never kept a journal. This means that if something happens, his stories can only be recounted by the people who knew him. I've been thinking that maybe this would be an ideal time to sit down with him, either in person or online, and record a series of podcasts. These would be made available to the family at a time when my father is comfortable having them released, and they would remain part of the 10C repository forever. If nothing else, this would be a good way to reconnect and get to know the man a little better, as long-distance communication does have its challenges.

Yet, as I think through how I would like to compile and present my father's life in a digital manner, the challenges I faced with my grandfather's journals echo in my head.

Is 10C the Right Tool?

The first version of the platform was about blogging. The second version was about blogging with immutable records and clearly-defined hierarchies, which made it possible for me to adapt decades of my grandfather's journals to a digital format without the tacky "solution" of uploading a bunch of scanned images. The third version … we don't talk about. The fourth version of 10C focused on ephemeral posts, podcasting, public APIs, and document formatting. The fifth and current version focussed on improving social posts, using "IndieWeb" HTML formatting standards, improving document formatting, improving privacy options, and overall speed. However, is the current version of 10C suited for a biography? My grandfather's archives read like a blog, because that's a format that I understood and could easily adapt the paper documents to. For my father, I'd like to do something a little more elegant. Something that is better in line with a biography that consists of pictures, text, and audio.

As I've alluded to yesterday and today, I've been thinking a lot about document structures. Since working on a couple of textbook delivery systems and learning management systems, I've developed a better appreciation for how educational materials consisting of varying digital assets need to be presented. I dislike using the term "multi-media", but this is essentially what modern textbooks have become. They're interactive, respond to touch, and a little more approachable.

Blogs show information chronologically, which makes sense given that's how we live. However, when we think about our history, we don't think about things in terms of days, but in groups of time. A holiday in a foreign land. The first week of high school. That summer when everything went "just right". Grouping blog posts can certainly be done, but it's often a clunky ordeal consisting of tenuous meta connections at best. An idea I've been toying with is treating posts as sections of a chapter, which reside in a book consisting of sections or volumes or any other means to represent a collection. A collection could also consist of additional collections, which have their own chapters and sections. This would be an incredibly hierarchical creation that could be as flat as a blog, with one single collection, or structured like some of the most complete biographies and autobiographies we see in libraries.

This is something that could be wedged into 10Cv5, but I wonder if it's the right way to go. The goal of 10Centuries is to act as a permanent digital repository of who we are for at least a thousand years. What I see today, however, is a social network with features like blogging and sharing links to articles from around the web with our remarks attached. While I am very happy to see a community of great people using the social aspects of the site, I do wonder if it would make more sense to split the project so that Nice is its own entity, and 10Centuries becomes focussed on the long-term objective of being a person's historical record. There would be overlap, of course, as well as integrations to facilitate communication between the two tools, but this could allow the two projects to evolve independent of each other, while continuing to fill the needs of the people who use the tools.

All of this is still in the air – and in the current development notebook – as a project like this would take time away from the conversations I would like to have with my father, but it's something I'm thinking about.


  1. Just like many younger children, he did not like going to sleep alone. Heck, he still doesn't. So I generally stay with him until he drifts off to sleep.

  2. Writing several hundred words from an ageing tablet – an iPad Air 2 from 2014 – is no longer my idea of fun, particularly now that the keyboard on iOS has made typos so much easier to create. That said, it has managed to survive three years as a daily machine at a school before it was passed to me, and I've used it for several hours every day since. iOS 15 has made it slow down quite noticeably, though.

Who Defines Morality?

An article in a local NYTimes subsidiary recently published an article on Delphi, a system with the goal of determining the ethics of an action. This is an important area of research as we start to see more machines that operate semi-autonomously and need to determine whether a course of action is correct or not. Obvious examples of where ethical decision-making is necessary would be with self-driving vehicles. If a vehicle carrying two passengers is travelling down the road and an oncoming car swerves into the same lane, the vehicle will need to quickly determine the correct course of action. Does it slam into the oncoming vehicle, potentially killing the passengers in both cars? Does it slam on the brakes, offering the offending vehicle more time and space to correct its lane transgression? Does it rapidly move into another lane or onto a sidewalk? Each one of these decisions requires information that may not be available and each will also carry consequences. So, given the lack of time to collect additional data, the unforgiving laws of physics governing bodies in motion, and the immediate need to take action, which action would be the most correct?

Decisions are considered right or wrong based on the ethics of the observer, and ethics are incredibly subjective. While some may feel that severing the right hand off a man is justifiable because they stole a loaf of bread, others would find it reprehensible. Is a politician right to use their position of authority to the benefit of their friends or family? Is a doctor right to over-prescribe medications to help a terminally-ill patient not feel pain? Is a teacher right to teach their students a government-mandated concept or belief? Is a parent right to teach their children that people from a particular nation or genetic lineage are not worthy of respect? Is an individual right to kill a mosquito that has landed on their skin? Is an individual right to kill a mosquito that is on a table? Is an individual right to kill every mosquito on the planet with a genetically-engineered virus?

Most people will have an immediate answer to each of these questions and not one of them is a clear "Yes" or "No". Our sense of right and wrong has been built – and continues to be built – based on our lived experience, the circumstances we've faced, and the people who surround us.

There have been a lot of articles over this past decade on how various vision-based and decision-based systems are racist, sexist, or otherwise discriminatory. I generally disagree with the authors of these pieces because to be in ~ist, one has to possess prejudice. Software can certainly be written to enforce any biases the developer (or organisation) may have, but machines generally do not care where a person's ancestors may have lived, which sexual organs someone may have, or how they use them. Instead, I see these vision or decision-based systems as being ignorant; they lack a sufficient amount of information to reach a better solution. Generally when this sort of problem arises at the day job, I say "the system (or idea) is incomplete". My concern is that software that tries to determine the moral outcomes of a decision will be just as incomplete.

Who are the people that define right and wrong for Delphi and systems like it? Generally it will be academics, philosophers, and a handful of committee members with strongly-held beliefs. Essentially, very intelligent people with similar ideas who live in a very well-protected bubble outside of the wider society. While they will most certainly do their best to codify modern morality in a manner that a set of dynamic algorithms can understand, there will be a great deal that they cannot prepare simply because they suffer from the same problem that we all have; ignorance. We do not know what we do not know. And, to add a little more complexity into the problem, two people in the same society will have different ideas of right and wrong.

For the moment the researchers who are investing so much effort into Delphi and systems like it are keeping their goals simple, understanding the complexities of the project. However, as we see more of our actions monitored by corporations and governments around the world, I worry that "ethical systems" like this will be used to seek out those who deviate from a prescribed moral code. China already does something similar to this with their various surveillance programs. The speed at which dissenters can be found and silenced is nothing short of remarkable terrifying and given the recent societal directions of some Western nations, it would not be surprising at all to learn in the near future that some countries are preparing to do the same.

A Siberian Winter Approaches

The final week of November is traditionally when the autumn temperatures give way to winter's chill, and this year is no different than any other. However, one happy difference is that this year is expected to be much colder than we've experienced since 2015, when overnight temperatures dropped to -10˚C and we experienced almost a full week of snow on the ground … albeit split between a handful of days in January and March. With any luck, this coming winter will be just as chilly with even more snowy days for people to enjoy.

As COVID-19 has mostly disappeared from the country, people all over the nation have been going out to catch up on two years of fun. Theme parks are packed. Malls are over-crowded. Highways are full of out-of-prefecture license plates. It's nice to see and, as it seems a lot of the more expensive places are still hotspots for people to congregate, I've been looking for some quieter, winter-friendly places where the family and I might go.

The obvious one for people in this part of the country is 白川郷1, a remote village about three hours north of my home that showcases a traditional building style known as gasshō-zukuri.

Shirakawagō in Winter

This is a place that I've wanted to see in the wintertime for a while now, as the pictures have always looked so inviting. If I could give up some of the modern conveniences like fast Internet speeds and reasonably-priced specialty breads, then a move to Shirakawagō would be incredibly tempting. Perhaps this is something I can consider in another quarter century when I retire.

Another place that I'd like to bring the family – if they would be willing – is the Number 1 Tadami River Bridge in 三島2. This is an incredibly scenic part of the country and I've only recently learned about it.

Tadami River Bridge

What might give people pause is the fact that it's located in Fukushima prefecture, though quite a distance from the infamous nuclear reactors that suffered a partial meltdown and spewed radioactive dust across much of the northern part of the country. Most mapping systems say the trip can be made in about six and a half hours, which means spending the night and perhaps enjoying a number of other scenic locations. If the family does not want to go, maybe Nozomi would be willing to enjoy a little road trip north, as she was born at a place just a few hours east of the scenic bridge.

Distant photo spots aside, with a colder-than-recent winter on the way and greater freedom to move between places in the country, I'm hoping that a lot of people can get outside and release some of the tension that has built up since the tail end of 2019. We say this every winter, but here's hoping that next year is better than this one.


  1. Shirakawagō

  2. Mishima

Good luck, Gary

A little over two years ago, I wrote a blog post about Gary; a friend of mine. In it I lament the fact that he has coasted through 35 years of living and does not understand the responsibilities that come with being an adult in a committed relationship. The bulk of my concerns were laid out right in the middle of the piece:

While I like the man a lot, he's not exactly a go-getter. He likes to take things easy and allow events to unfold rather than forge his own future. He's worked part time at the day job since the very beginning, and would often rely on his parents to cover various bills. Despite being in a committed relationship with a woman who is very serious about having children, he's unwilling to take on the requisite responsibilities that come with "being a man". He could switch over to a full-time contract at the day job and have a steady income with a five minute conversation, but doesn't want to. He says that the workload would be too exhausting. He's not particularly keen on using any additional skills or knowledge to earn money, as it would take time away from whatever it is he does when not at work. He's not even particularly interested in seeking out a better-paying job — of which there are many — as that would eliminate any seniority he might currently enjoy … which means almost squat at the day job unless you're a full-time or unionised employee. How in the world is he going to afford to support a family? […]

The fact that Gary has never had a full-time job worries me. Can he keep up with a child? Will he hand the young person off to his wife and abstain from his responsibilities? How will he afford the never-ending list of things to buy? Diapers, wet sheets, clothing, toys, books, community activities, school …. The list is almost endless and there is no avoiding them. Heck, what kind of example will he set for his child if he doesn't accept a heavier burden of responsibility? […]

The man is 35 years old. He's not a child, yet continues to shirk responsibility as though he's still in high school. I care about his future just as much as I care about his present, but any conversation where it's suggested he work harder is shut down much faster than it starts. There's no denying that life is undoubtedly more enjoyable when moving at a relaxed pace and the most pressing responsibility is paying this month's cell phone bills, but this is no environment to start a family. I want him, his wife, and any future children to succeed in life. How can I communicate this to him in a way that he'll accept?

What I wrote two years ago about Gary's attitude towards life is just as true today as it was then. However, in the 26 months that have passed Gary has gotten married, seen his hours at the day job dwindle due to COVID, moved in with his wife's parents in an effort to save money and, as of yesterday, become a father to a child that was born far too early.

Looking at the short list of facts, my friend is a 37 year old man who works less than 10 hours a week, has a wife and child who both need a great deal of medical attention1, two cell phones, a car, and a remarkable lack of ambition. I've tried to help him find more steady work, but everything is knocked away.

A Conversation With Gary

Gary has lived in Japan for 12 years and still cannot speak the local language worth a darn. Sure, he can do simple things, like buy groceries or get a cell phone, but he won't make the effort to learn enough of the language to work at a school, which is a job he once wanted more than anything else. Being an ALT – an Assistant Language Teacher – at a public school is no walk in the park. People expect you to be present and contribute to the classes. They expect you to lead all listening and speaking activities. They expect you to jump from class to class and never complain about not having time for lunch. However, it's a solid job with a solid contract that pays a guaranteed amount every month … and schools all across the prefecture are practically begging people to come work with them. The barrier to entry is very low.

Continuing the Conversation

A work-life balance of 60/40? Let's take the "generous" number there of 60% work and figure out how many hours that is per week:

  • 168 hours in a week
  • 56 hours sleeping, assuming it's 8 hours in a day

That leaves 112 hours each week that Gary is awake. 60% of that would be 67.2 hours of work and 44.8 hours of family time. In an average week I do about 60 hours for the day job and 20 hours of freelance work Monday to Friday. I don't work on weekends. Gary hasn't worked 67.2 hours in a month for as long as I've known him.

He wants to be "50% in for child raising", which is a laudable goal. However, he forgets that if he's 50% in for child raising, that means his wife will need to be 50% in for paying the bills. Given the current situation, that's not only unrealistic, it's cruel.

The man has nothing in the bank. The money he earns every month is less than half of what I pay in taxes. He lives with his in-laws because the cheap apartment he had in town previously is too expensive. He needs to buy clothing, diapers, food, a car seat, furniture, linens, and a thousand other things that people try to prepare before a child comes into the world. His older car is expensive to keep on the road. His cell phones, while older models, are not cheap.

While just the other week …

A New PC? GTFO!

You know … I'll take that back. I can't call Gary a man. Because he isn't. He's still just a boy playing "house" and not understanding just what it is that he is responsible for. A husband and father are responsible for the financial well-being of the family unit in addition to being a proper spouse and role model for children. This doesn't mean that women cannot go out and earn, or that men should earn more but, when a woman gives birth, the last thing someone should ask them is when they'll get back into the workforce because diapers and formula are running out. It's great that Gary wants to be there to raise his child. It's great that he's thinking about a work-life balance to make sure he doesn't miss out on the opportunity to see the world through a new set of eyes as though it's the first time. However, a person who is damn near unemployed does not have the luxury to dictate terms like this. He should be out working multiple jobs to put food on the table and diapers on bums. Yeah, it'll be rough. Yeah, he's 37 and employers are going to have a hard time justifying hiring someone with a resume that has just two jobs in the work history section, both of which state "Part Time". And yeah, he's going to miss some of the moments as his son learns to control his body and interact with the world. Gary's wife will be angry that so much of the child-rearing is being left to her while he's at work, and that's a completely justifiable complaint given that her husband has been employed – part time – for 22 years and doesn't have anything to show for it.

Gary and I have known each other for over two decades. We've talked about a million different things, including the importance of taking on responsibility and putting the needs of family ahead of self. Yet it seems the weightier discussions have gone in one ear and out the other, just as it did when Gary's father tried to instil in him a proper work ethic.

Despite the disappointment and frustration I feel towards the guy, I want him to succeed. I want him to be able to provide his family with more than just the basics of survival. I'd like to see him life in an apartment or house without the need for generous support – and patience – from the in-laws. Heck, I'd like to see him stand up to the challenge of learning Japanese and actually using it.

Won't Even Choose Kanji

My Japanese skills are not great, and every day I find a larger gap between what I think I know and what I actually know. My son will be five years old in a couple of months and he comes home with new vocabulary that I need to look up and learn every single day. If I don't do this, it'll be just a couple of years before we can't even communicate with each other. Will Gary do the same for his child? Or will he expect everyone to speak English at home?

So much of this has been laid out to Gary over the last couple of years and particularly now that he's responsible for a vulnerable little human. Unfortunately, any time our conversations turn serious, he gets quiet and puts the phone down. This is true whether we're using text or having a call.

I want him to succeed. I want his family to know they can rely on Gary to do the hard work when times are tough. I want him to learn that it's not okay to be a self-centred, lazy piece of crap when people need him to make sacrifices for the betterment of the family unit.

Unfortunately, I don't think this is something I can help him with anymore.

Good luck, Gary. You're going to need it.


  1. Japan has an excellent medical system with a good portion of doctor visits and examination costs covered by the government, but it's most certainly not free. I generally pay about $25 every time I see a doctor at a clinic and it's about $20 for the kid. If we have to go to a big hospital, we're looking at spending at least $50. My most recent visit had me go through an MRI and do some blood tests, which came out to $175. Not at all a ridiculous amount, but it can add up quickly.

Being Quiet

Almost six months have passed since I transferred divisions at the day job, leaving behind a better-paying position with loads of opportunity for one that is far less visible, far less challenging, and far less important. The change was made for a long list of reasons and I'm satisfied with the effects of the transfer. Not only do I feel a lot less anxiety every time I sit down in front of the keyboard, but I am able to approach problems without feeling unnecessary pressure as seconds turn to minutes and minutes turn to hours. So great was the burden half a year ago that I stopped wearing a watch and hid anything that reported the current time in my office.

This new role sees me doing similar things as before, as people report problems and I work with them to find solutions. However, these problems are often self-inflicted wounds created by people who wanted to find a simple solution to a complex issue, only to create a black hole of "legacy" that everybody is now afraid to touch or modify. Fortunately, it's these messy situations that often have the greatest rewards. A person can sit down to understand the original and current problems, talk to the various people that interact or are impacted by the problem, and find a solution that works for everybody. If a person does this correctly, they'll be rewarded with a daily stream of questions from colleagues who now trust them to offer answers that are realistic and actionable.

A few weeks ago a long-standing problem at the day job was eliminated with a few thousand lines of code that required two complete rewrites to get correct. Generally a rewrite points to a failure to understand requirements while two rewrites might point to incompetence or worse. For me, it was a number of factors that collided to create a situation where a solution needed to be built to replicate existing functionality of a system that had no documentation, no upgrade path to work on modern servers, and nobody at the company who new the ins and outs of the project. It was a pet endeavour for a manager who has left the company.

However, just because something is hard to understand does not mean it's impossible to overcome. Andy Weir said it quite well in his famous book, The Martian:

“At some point, everything’s gonna go south and you’re going to say, this is it. This is how I end. Now, you can either accept that, or you can get to work. That’s all it is. You just begin. You do the math. You solve one problem and you solve the next one and then the next. And if you solve enough problems, you get to come home.”

Mark Watney

This is how I tend to approach every problem at the day job. Projects that are expected to be easy may turn out to be multi-year undertakings that can change the direction of entire organisations. Objectives that have a long list of expectations can sometimes be solved with a well-designed Excel sheet that sits on an executive's notebook computer. Or, as is the case with this most recent effort, it can be an opportunity to solve hundreds of little problems, one after the other, until a complete solution is in place and a team of people you'd never worked with before sees the value you bring to the table.

Working in the global division at the day job certainly offered a lot of opportunity. A person with the right ambitions and office-political skills could easily work themselves into a C-level role within a decade, setting goals while coordinating resources and ostentatiously proclaiming success. That's not what I look for from a career, though. I like solving problems. Real problems. And experience has shown that the better problems to solve are the ones that a handful of people care about.

Thinking About v6

On May 8th, 2019 the foundation of what became the fifth version of the Midori Core PHP framework that I've built so many projects on top of was committed to GitHub. Midori Core 5.0 — generally referred to as v5 for some of the public-facing sites — was designed around the idea that the database should not only contain the bulk of the data validation rules for a system, but the queries as well. Prior to this major release, every query that was sent to the database came from a flat file that was populated with properly-escaped values. With v5 I wanted to try doing something that I had only ever done with .Net-based enterprise projects that relied on the might and versatility of SQL Server: put the bulk of all read and write operations into stored procedures.

This worked rather well for a while … and then MySQL, the database engine used by Midori Core for its entire history, developed a critical bug in version 8.0.221 that has yet to be fixed. This bug is encountered when a stored procedure is writing data to a table that has triggers in place that validate or transform data before it's written to disk. What this means is that just posting something to a 10C-powered site could crash the database, forcing it to restart; a process that takes about 10 seconds. During the restart, every site and service on 10C that requires reading non-cached data is non-operational. As one would expect, this situation is completely unacceptable. Bugs were filed. Data was shared. Teeth were gnashed. Unfortunately, a fix has not yet been issued and it doesn't look like anyone is going to get to it anytime soon. As a result, every system that uses Midori Core v5.x is forced to use no version of MySQL newer than 8.0.21.

However, v5 does have done thing going for it that none of the other versions of Midori Core could do: it can work with SQL Server and PostgreSQL.

Soon after MySQL started crashing every time a butterfly flapped its wings, I started thinking about making the back-end of the system work with other database engines. Microsoft's SQL Server was the first option, as it's the database I've worked with the longest and it does have a Linux version that can run quite well on any modern version of Ubuntu. PostgreSQL is a system I've avoided for a long time but have recently come to understand better as a result of a large project at work. Both of these options work quite well with stored procedures and triggers, making them viable alternatives to MySQL, and both have a large community of developers and administrators who genuinely seem to enjoy helping people when there are problems to overcome. Which one would be better for something like 10Centuries, though?

As with anything involving technology, the answer is "it depends".

I do have one system built on Midori Core that operates with a SQL Server back end. It's been running for well over a year and hasn't encountered a single database-related problem. The site isn't heavily trafficked, receiving perhaps 50-thousand requests per week, and runs on a t3.small EC2 instance on Amazon's Web Services. Average response time for most operations is under 90ms, which is acceptable.

Then there's the new system that I've been working on for the last few weeks which is using the same Midori Core v5 foundation as the other system, but with PostgreSQL handling the data. Many of the core tables are designed the same between the two databases. The functions that request data from these core tables are essentially the same, aside from some syntactic differences. Average response time for most operations is under 70ms, which is also acceptable.

Of course, the dozen or so systems that I've built with MySQL ask the back end also have relatively quick response times, but none quite as consistent as the projects running SQL Server or PostgreSQL. The key difference between the systems running MySQL and those that are not is the type of queries that are sent to the database. Since the MySQL bug has caused so much trouble with one of the underlying goals of the v5 project — namely, keeping all of the validation and interaction rules in the database itself — I've had to drastically simplify how systems running that database engine work with the data. This means more rules and validation happening in the middle-layer — the API — rather than the database. While this is fine for smaller projects involving a single developer, it can create "gaps" when multiple people work on the same project. Gaps are not good, as they lead to inconsistent results.

So with v5 now being compatible with three different relational databases — without the use of an ORM2 — why would I think about the next major release of the core framework?

For something completely different: modularity.

The majority of the projects that I've built on the Midori Core have the same foundational files containing the same foundational functions that I have used for years. The patterns are consistent and the methodology is reliable. That said, when a bug — or security problem — is found in the core files, it's a pain to go through a dozen or more projects, find the offending code, patch it, then deploy releases across a myriad of servers. What I would really like to do is structure the projects in such a way that Midori Core has its own source code repository — which it does — and other projects are forks of the Core — which is not how things are structured right now. Then, when the Core receives updates, that can be rolled out to the other projects via pull requests that kick off some unit testing to ensure that there won't be serious problems when deploying the updated code in a number of different projects. By having the Core able to work with multiple database engines, I'm one step closer to having a better update process in place. The projects become more modular.

There are other items that I would want to tackle with a fresh version number, such as better caching mechanisms, a more consistent use of "history tables" in the database, more consistent use of CSS3 across sites to take advantage of visitor colour theming preferences, and more. All of this could be built into the v5 platform, perhaps as part of the upcoming 5.4 release of Midori Core, but I am very tempted to use this recent functional improvement as the impetus for a better-structured system that I can continue to build on for several years before thinking about the next problem to solve.

Does this mean that 10C will be upgrading to v6 in the near future? Not likely. Heck, 10C was using the v4 platform for a full 8 months after v5 was in a stable-enough place to handle the work. That said, I would be very curious to know whether a PostgreSQL-based 10Centuries would be noticeably faster than the current MySQL-powered one.


  1. MySQL 8.0.22 was released on October 19, 2020. More than a year later, the bug that prevents me from upgrading the database continues to exist.

  2. An Object Relation Model … basically a piece of software that makes my job 50x harder when something doesn't work as expected. I do not use ORMs in my projects, preferring the "old school" approach of writing the queries myself. This allows for some better tweaking and more nuanced questions.

185 Months in a List

Every so often I stumble across a blog that has a design reminiscent of the early layouts that were common on b2, WordPress, and Tumblr in the mid-2000's. The layout generally has a title bar across the top, posts underneath and to the left, then a narrow section on the right for lists of recent posts, categories, common tags, and monthly archives. When I visit a site with one of these layouts I'm reminded of those early days of blogging when people would use StumbleUpon, Technorati, or link-exchanges1 to find new sites to read and the optimism that came with the medium. Anyone could be a blogger and, for a while, it seemed that many people were2. As the activity matured, themes changed to accommodate the different purposes people might have when publishing their words online. Landing on a site that uses an original layout — with a centre-aligned, 800-pixel, fixed width box, and simple colour scheme — tends to signal that the site has been abandoned by its author. Imagine my surprise when I landed on a blog with one of these classic designs to find that not only was the site active, but it's been active for 185 consecutive months!

Eighteen months ago I stopped blogging here daily primarily because everything seemed to be a rant. I was upset with the world, upset with the day job, and upset with some personal things. Given all that was going on at the time — and still are in some instances — I gave up the daily publishing of rage, opting instead to keep the missives locked away and off the server. Since making that decision, a number of things have changed.

1 — I don't write daily anymore

I like writing, but so much of it has become repetitive. Why would anybody read this? I wonder. Why would I read this? usually follows. Instead, writing has become more of an intellectual exercise than a journal or stream of consciousness. The note will start with a question or idea, followed by an examination. It's a way to rationalise an argument or opinion to see if it holds water, as writing forces a person to slow down and think things through. One of the many aspects of writing that I find useful is the ability to have an obvious list of references and citations. Running an idea through the mind is fine for initial examination, but having it down as structured text really forces an idea to prove itself.

2 — I quit my job

Well … this is one way to describe it. However, I was incredibly angry and frustrated with things at the day job for just over two years, and this was bleeding into my personal life. Stress levels were through the roof constantly, and nothing good — aside from the bigger pay cheque — was coming from the endeavour. So, in an attempt to regain some sanity and not be a complete jerk to the family every moment of the day, I stepped down from my role and requested a transfer to a different division in the organisation. After a small transition period, people started to notice that I wasn't angry all the time anymore and would often laugh and joke around during meetings. The wife and kid even enjoy spending time with me again, which is certainly a bonus.

The one thing I do miss about the old job, though, is the ability to lead when solving problems. While I can still do this to a degree with the current role, there are a whole lot of people who are in a position to veto my efforts and suggestions "just because", which can result in problems existing for much longer than they really should.

3 — I'm becoming a landscaper

Another slight exaggeration, perhaps, but I've really started to enjoy taking care of the yard. Earlier this year we replaced the dull soil surrounding the house with some proper grass, trees, and other plants. Since then, I've been outside daily — often several times a day — to get my hands dirty by tending to the greenery. The trees and leafy plants are regularly watered. Weeds are pulled. Grass is trimmed. Stones are redistributed. Seeds are planted and nurtured. While I won't win any awards for the effort, the hour or two that I spend outside in the yard every day is something I look forward to every day of the week.

In Search of Calm

The last few years have been incredibly challenging. However, after giving up on some of my career goals3, life has become a heck of a lot more manageable. There's time to walk every evening. There's time to play with the kid. There's time to walk and play with Nozomi. New routines are being developed and patterns enjoyed. This is something I probably should have done a lot sooner.

At this point, I don't know if there will be a return to a regular posting schedule, but I would really like to start publishing longer-form writing again. There are also a couple of things I'd like to add to the 10C platform to make it a little more unique when it comes to playing audio, displaying RSS feeds, and ensuring ownership of posts.

Time will tell, of course.


  1. GeoCities style! Link-exchanges were my first real application of JavaScript way back in the day.

  2. One could argue that many people are still blogging. One would be right, too.

  3. There were three specific projects that I wanted to bring to life. I was working on one, the other was taken and given to a different team, and the third is something senior management still doesn't want to think about.

Mental Block

Sometimes I wonder if historians will refer to this part of the 21st century as the Cabin Fever years. For the better part of 18 months I've been mostly confined to just the neighbourhood surrounding my home, interacting with almost nobody who isn't family or a next-door neighbour. This has resulted in a noticeable decline in linguistic ability and also a sort of restlessness that can keep a person awake at night. Like a lot of people around the world, I am very much looking forward to having the freedom to visit distant places again. Not only because this would allow me the opportunity to interact with new people again1, but because I'm hoping that being able to see unfamiliar things will rekindle the creativity that I've relied on for so much of my life.


  1. As it stands, my dentist and her staff are the first "new" people I've spoken to in a year and a half.

Abstinence

For so much of our life, we're encouraged by people around us to abstain from one thing or another. This makes sense, of course, as a functioning society cannot have 100% of the population doing whatever they please when they please. From chaos emerges new things, but too much will destroy everything that came before it. So we restrain ourselves and others from various activities for the long-term viability of a family, community, or society. With order comes predictability and stability … though too much of it can be oppressive. Balance is key.

Today marks my 9th consecutive day without any alcohol. This isn't something that I'm particularly proud of or wish to show off. It's simply a fact. Ten days ago was the last time I went out for a walk around the neighbourhood after 10 o'clock at night, bought two of my favourite Kirin 5% beverages, and sat in the park to consume them while watching Star Wars on the tablet. After a long day, this is really one of my favourite ways to unwind and relax because everything is "done". The boy is in bed. Nozomi has been taken care of. Work is finished for the day. The house is reasonably clean for the next morning. Everything is as it should be. So why not enjoy the last 90 minutes of the evening outdoors with some fresh air, absolute privacy, and two cans of 酎ハイ1?

As this is something that I clearly enjoy, I do not see a problem with the habit at all. In moderation, this sort of thing can be seen as a personal reward for getting through a difficult week or completing a stressful project on time. But what if this is something that a person does almost every night for years? Is it a "problem" or just a harmless pastime that someone enjoys?

When Nozomi and I go for our evening walks, I find my thoughts drifting towards the personal walk that will take place later in the evening. I pay attention to the wind, the clouds, and anything else that can offer a clue as to how nice the weather might be to see if I will brave the elements to enjoy the treat outdoors. I don't bring alcohol home, so it must be finished before returning. That means on particularly wet or cold days, I opt to stay home and stick with water or coffee. However, since 2018, I have followed this pattern for an average of 280 nights a year. Is this a "problem"? Some people around me would classify this behaviour as reckless, selfish, and ultimately harmful to health. While doctors have pointed at charts to suggest I take better care of myself, I genuinely feel healthier today than at any point in the last 20 years. The frequent trips out for some Kirin in the park do not show any obvious signs of being an issue.

Instead, what has me (over)-thinking this habit is what happens when I go out for a long walk without any alcohol, or when I do not go out for more than a few days. I start thinking about drinking more often. A lot more often. Earlier this week I found myself thinking about gin for the first time in almost 20 years. The last time I touched the drink was the early summer of 2002, and I remember the following morning very clearly2. In addition to gin, I have visions of sitting in the park, tablet in one hand, chūhai in the other. I remember the rare occasions when I would head to a bar with friends or colleagues and shoot the breeze. It is almost as if the subconscious is trying to entice me to head out and consume something.

There is no denying that I genuinely enjoy these quiet moments in the park, but the way the mind fills itself with thoughts of drinking during brief periods of sobriety have me wonder if perhaps I need to give up the habit for good. While I would not classify myself an alcoholic, there is a history of it in the family. Between the summer of 2002 and 2015 I rarely ever came into contact with alcohol. An occasional beer would be had, but never more than one or two cans per year. It was in mid-2015 when I started having one or two cans of beer every week. Then one or two a day. Then I switched from beer to chūhai with the occasional sampling of something else. Are the mental images signs of addiction? Or are these simply the markers of habit? Could I be just as satisfied sitting in the park with a soda every night? I'm almost nervous to do any sort of test analysis but, if there are signs of a dependency forming, then it might be best for me to abstain completely as I had for 13 years after leaving Ontario.


  1. Chūhai, which is an abbreviation of "shōchū highball" (焼酎ハイボール). I tend to grab two 500mL cans of Kirin's 5% blends: one grapefruit, and one seasonal. If there is no special seasonal flavour, I go with the classic lemon.

  2. I drank it straight the last time I had it, which would have made its alcohol content just a little too high for my stomach and liver. The next morning I felt quite ill.

The Sixth Day

When a phone rings before 9 o'clock in the morning, the person on the other end is rarely delivering good news. Today was different, though. At 8:52am Nozomi's vet called to say that she was feeling energetic and had healed enough to return home. We could pick her up after 4 o'clock in the afternoon. Good news is always welcome, particularly when it involves a member of the family.

Since leaving Nozomi with the vet on Monday it's been difficult to concentrate for any length of time. On Tuesday I was permitted a 15-minute visit to see how she was doing, then a daily phone call for updates. Never before has Nozomi been away from family for so long, and I was worried that the absence would slow her recovery. Fortunately, my fears were unfounded. Nozomi's recovery time was about normal for a dog of her age and, despite the boredom of being stuck in an air-conditioned glass cage with an IV connected to her leg for almost a full week, she seemed no worse for wear when we were once again reunited.

The vet who performed Nozomi's surgery showed us some photos from the procedure, from the first incision to the examination of the uterus to the confirmation of pyometra and subsequent removal of the organ. Given the amount of swelling, it's no wonder Nozomi was acting strange this past weekend and, based on what the vet had said, if we had waited until Tuesday to bring Nozomi in, she would not have survived to see Wednesday. The swelling was that bad.

After thanking the vet profusely and paying the bill1, we made our way home where Nozomi quickly took stock of the giant hole in the yard2, jumped into her bed, and took a nap. She's feeling better, but still not at 100%. Hopefully she will regain her regular exuberance over the coming days.

For the moment, she and I will have to hold off on taking any walks. Her wounds need a bit more time to recover and nobody is particularly keen on risking an infection. Nozomi's legs can only keep her body 5 ~ 8 centimeters off the ground, which means that grass will rub against her underside, which can carry things that irritate her weakened immune system. With any luck, she'll receive the green light from the vet to once again frolic in the park before June.

With Nozomi home safe and sleeping in her bed under my work desk, I hope we can all relax a little bit this weekend.


  1. We were told to expect a total cost of around $3,000 USD. The final bill was a little under half.

  2. The landscapers are extending the driveway, putting in trees, and laying grass.