The Cat Who Reviewed Some Books

As promised, I am still doing sARTSurday posts about arts, including book reviews. In this case it’s not the review of a book but a review of a series. Lilian Jackson Braun’s The Cat Who… series, to be precise. So sit down and relax for a bit of feline whodunit review.

Personal History

This is a very special series for me. I was in primary school when I read a book from the series for the first time — not the first book in the series, though, but rather the 16th book, The Cat Who Came to Breakfast, titled in Italian Il Gatto Che Giocava a Domino (“The Cat Who Played Dominoes”). For a kid that was already into Agatha Christie novels, it felt so nice to read something more modern, and despite this not being something that my parents or my sisters ever cared about, it turns out the series is also fairly age-appropriate, at least most of the time.

I did manage to read four of the books in Italian – plus one of the unrelated short stories by Braun – but anything more was a lost cause. I went into so many different bookstores, even second hand bookstores, and I never found more than those. I even wrote to the publisher (Mondadori) asking them if they published more of the books, and how to find them and order them… this is before Amazon, and before most online bookstores, you need to understand. When I say I wrote to them, I mean that I typed it on an Olivetti typerwriter, and sent it over by snail mail. They did reply, by the way — but they also had no idea how to find any of the other books; I’m fairly sure the impression I got was that they didn’t print any of the other books, but Italian Wikipedia appears to disagree with me. Instead, they sent me over an anthology of short stories about cats and mysteries (or deaths), that included one story by Braun.

As an extra fun aside, some of you out there might remember a toy called 2-XL – not the 8-track version but the compact cassette one – which was available in Italy as well as a number of other countries. I loved that toy as a kid, and I think I might still have it somewhere at my mother’s house. It was pretty much just a tape player with trivia questions. One of the tapes I was given for that toy was about mysteries, and it had a question about this series of books! With hindsight, I guess they just translated the original Tiger Electronics cassette to Italian, because the series clearly had much more success in the USA than in Italy.

Anyway, when I decided I really wanted to be able to read English – after high school, when I didn’t have terrible teachers thinking they were helping while making us hate the language – I turned to these novels again, and bought a few books from one of the first Internet bookshops in Italy that actually sold English editions. Unfortunately even then it was not something I could read start-to-finish, because of the availability of the physical books. So it wasn’t until earlier this year that I decided to read the whole series, in order. It was a quarantine project.

This is one of the reasons why I feel that eBooks are still extremely empowering, despite the whole problems of artificial regions, DRMs, and so on. With very few exceptions, eBooks, like all digital goods, are removing the wall of scarcity that physical books have to live with. For good or bad, there’s no hunting down a second hand copy of the Italian translation in a bin in a small bookshop on the outskirt of Treviso — you go online, and get a copy of the book.

Well, at least most of the time. I know that some authors have explicitly boasted setting up deals selling only a limited amount of eBooks copies, to make an artificial scarcity that reproduces the physical world’s rarity into the digital world. I don’t particularly like this, but it’s their art and it’s their choice — I’ll just avoid playing to those notes myself, and not buy “limited edition” eBooks.

400 Miles North of Everywhere… or Not

So let’s talk setting for a moment, because this is a series that is fairly interesting. First of all, these are mystery novels, and they are generally light mystery novels. With a handful of exceptions, there’s no description of gruesome deaths, and while there’s fairly obvious references to characters sleeping around, they are only obvious to an adult, and I’m sure I had not picked up on any of them when I was younger.

The protagonist is Jim Qwilleran, a journalist from Chicago, and his cat companion Koko, who are later joined by another cat, Yum Yum. These are the only constants throughout the series, because the rest of the characters are not only varied, but they are also fairly disposable: I have not calculated the body count of each books, but there’s a lot of characters that, despite surviving for a number of books, end up dying some times “off stage”, for all different type of reasons: accidents, malfeasance, old age, health issues, …

The location of where the main action takes place is also not constant. When I read the four books as a kid, they all took place in the fictional rural community of “Moose County”, which is described as being 400 miles North of everywhere. But that’s not where the series started.

Indeed, the first few books take place “Down Below” in a city that could very well be Chicago, but is never specified. That’s where we get introduced to recovering alcoholic Qwill, and the posh Siamese cat Koko, and the first characters in the cast, some of which will stay around until the very end of the series. Then after twenty years from the first book, Moose County is introduced, which became the permanent setting for the series — well, with a couple of exceptions.

The different setting doesn’t really change the main feeling of the series, except for the fact that book number four The Cat Who Saw Red, the first book after the 18 year hiatus of the series, and the last one in the big city, that contains the only death that made me sick in my stomach when reading. Otherwise, the main difference between the two settings is that the cast stopped cycling, and started “building up”.

As for the cats… they feature prominently in the stories, not just as human companions but as raison d’être, at times, with most of the “good folks” sharing their life with a cat. The titular character, Koko, is a normal, pampered Siamese cat, that somehow acts just the right way to make Qwill see through misdirection and mysteries, and solve whichever murder just happened around him. While there’s the usual need for a suspension of disbelief of the typical whodunit series – why did people still invite Jessica Fletcher for events, knowing full well that someone will die just before or just after dinner? – Braun made a point that none of Koko’s behaviour was not out of the ordinary for a cat… just a lot of coincidence.

While the cast is far from diverse, and you can probably tell that Braun had not been mingling much with people outside of the USA, except maybe for Scots, it gives a warm feeling of rural closed communities, with a lot of time dedicated to the fictional history of the county, with immigrants from… a bunch of white European places. It’s definitely the product of its time in this regard — the only character that is described as being not white is a woman with not-well-defined “Mediterranean” origin.

A more interesting point is that, unlike a lot of other books I have read when I was a kid, the cast is generally older. Qwill himself is middle-aged to older, having gone through a nasty divorce before the events of the first book, and being a recovering alcoholic, and most of the friends he makes in the whole series are older than him. Any character that is described as being less than thirty is pretty much described as a youngster, if not a delinquent!

Qwill also appear to be – like me, my wife, and Sarah Millican – a “cheery childless”, not having particular fondness for children, avoiding babies, and having a short temper with their “nonsense”, which I totally relate to. While there’s a number of babies being born in Moose County, they usually stay off-screen, until at least they are grown up enough to at least say something.

And being a recovering alcoholic, he’s also the character that always goes for a mocktail — although I wonder if that word was even used at the time. But the Squunk Water with cranberry juice sounds pretty much like it. Once again, relatable.

As I said already, there’s a couple of exceptions about all the action happening in Moose County. Two of the books – The Cat Who Lived High and The Cat Who Moved a Mountain – have a different settings, Down Below and a different rural community, respectively. But at the same time, they are very clearly books that remind the reader why the action will stay in Moose County. So not really “pilots in disguise” for any reboot.

29 25 Delightful Novels.

The Cat Who… series includes 29 novels. Of these, I would recommend stopping after the 25th, The Cat Who Brought Down the House. There are repeated rumors that Braun, who was getting on with age herself, had not been writing the last few books — I have no idea nor proof about the situation with this, but the last four books definitely have lost their shine, and would not recommend reading them. Indeed, as I’m typing this review I’m still not done with The Cat Who Had 60 Whiskers, but I thought it wouldn’t be important to actually finish it, as already the previous book was hard to swallow.

It’s not just the writing going a bit off-style — Braun has definitely played with different writing styles between books – in a way that reminds me a bit of the first few books in Charles Stross’s Laundry Files – but her characters have always behaved… in-character. While many of them have not been particularly well developed, they have at least always acted consistently between books… until those four books.

My honest, personal impression is that Braun might have had a general outline of where she wanted to bring a bunch of stories and threads, and a ghost writer took care of fleshing it out. The reason why I say that, is the number of inconsistencies, the characters that appear to be completely forgotten, other characters that appear and disappear out of nowhere, instead of being at least introduced and discussed.

I’ll give you a few examples with spoilers, so be careful about this section.

In the Moose County books, the unofficial historian throughout is a character named Homer Tibbitt — who became clearly a dear friend of Qwill. Indeed, Braun at times talk about how the latter never met his grandparents, and that’s why he gravitates around older people, such as Homer. As of Turkey, the title of county historian has been passed on to a different character (Thornton Haggis), and there’s no hearing about Homer until Bombshell, in which he dies, off-stage, announced by a phone call — not to Qwill, but to the plumber, never heard of before, and never heard of since, who came visiting the barn just right then. And despite the long-running job that funerals are big deals in Pickax, and that Homer was like a grandfather to Qwill, there’s no discussion of funeral arrangements, no discussion of wills, no call to his widow, … it isn’t until Whiskers (the last book), that Qwill even appears to care about Homer being dead!

This is just one of the reasons why I think Braun might have left notes about her wanting to “kill off” Homer before the 150th anniversary of the city, but it wasn’t her actually writing the whole treatment. And similarly, once people complained about not having heard anything about Homer’s funeral, the following book tried addressing that.

Similarly, at the end of Bombshell, another, much younger, character dies, that has a relationship with a close friend of Qwill — and neither him nor anybody else that talks about how that death will reflect on the friend! Not even a quick call to express regrets, no talk about funeral arrangements… despite, once again, the local tradition of funerary prowess.

And to top it off, the reason why I’m slow at finishing Whiskers is that I’m now reading descriptions of how Qwill, a columnist that prided himself to be able to write a thousand words on the colour green, is having trouble finding new topics, and can’t extract a good column on… viticulture. I mean, sure, he’s not had a drink for half a century by then, but that doesn’t seem to have stopped him before mixing cocktails and talking shop. This is all so out of character that it makes reading the book just painful.

Speaking of out of character… in the last four books, Koko becomes a caricature of himself — while there’s always been the tension and mystery of whether Koko actually had supernatural powers, or just happened to be doing stuff that Qwill would read too much into (which, I found out recently, is called apophenia)… but in the last four books it became much more paradoxical, including suggestions that he would be able to send wrongdoings pretty much unrelated to anyone in the books at all — come on, someone “firebombs” city hall, Koko senses it before it happens, and it’s dismissed with a call of the police chief?

There’s more — the attorney that would rarely be spoken about except when something bad happened suddenly becomes “Uncle George” and appears every third chapter — the multiple young women that appear out of nowhere, drop the answer to the current mystery, and disappear — the young sidekick that joins the newspaper under false name, and then disappears without a trace — Lisa Compton nearly flirting with Qwill, or vice versa, despite them knowing each other for years by then.

I can see why the rumors spread, and I’m willing to believe them. As I said, my impression is that some time during the writing of Turkey (which starts fairly on par with everything else, but then degenerates), Braun started being unwell, and the publisher brought in someone to help. Someone who only gave a superficial reading of the plots of the series, and maybe a character sheet, but couldn’t keep them straight enough to write as well as Braun.

There’s a missing closure for Turkey, there’s missing characters in Bananas, there’s just plain bad writing in Bombshell, and Whiskers feels like a hackjob to the point I ‘m not sure how else to describe it.

Personal Views and Impact

I really enjoyed the “trip down memory lane” with reading The Cat Who… back to back. I wished there was a bit more closure towards the end of the series. I have a feeling that it was planned for it, but it just didn’t manage to materialize.

I can’t say for sure that the books have directly influenced me. But they definitely have left an impression in my memory, with the whole experience of trying to find a copy, writing to the Italian publisher, starting to read English books with it, and so on.

And maybe a bit of a subtle, subconscious influence made me worry less about old age and loneliness — even though I’m very unlikely to inherit billions of dollars like Qwill, particularly after reading the whole series, I can feel that there’s plenty to do in my later years to feel satisfaction, even without kids of our own.

While the journalistic profession is not really something I’m interested in, you can see from this blog that writing is something that I ended up doing quite a bit for. Was I impressed as a kid that from Qwill’s lifestyle? Did I miss the part where he could afford it because he inherited billions and owned the newspaper he wrote on? I don’t think it’s that easy, but I guess it might have been in the back of my mind growing up after all.

And of course, reading this now, that I’m not quite that young, that I can’t be drinking (and don’t care for), and that I share my life with a person I love, with no intention of having kids, I can definitely feel closer to Qwill, although clearly not entirely, and not just for the money.

Generally, if you’d like a reading that “feels” like the early seasons of Murder, She Wrote, then this might be the series for you. For the most part, I’d say it’s also a kid-friendly read, since there’s very little explicit violence – beside the murders, of course – and as I said, not really any explicit sex. Indeed, at most it’s said that Qwilleran and Polly just happen to lose track of time, since at many points Braun wrote they met after dinner for a quick chat, and one or the other left when it was quite dark out there — this was totally lost of ten years old me, since the concept of “after dinner” in Italy would imply darkness anyway. It wasn’t until I lived in Los Angeles, and then Dublin, that I realized how early Anglosaxons eat!

There’s a lot of nice pearls to dig around; Braun seems to have been predicting a lot of the banes of modern life, including smartphones’ autocorrects. And while she sounds a lot like a technophobe, you also need to keep in mind that most of the books predates “modernity” by quite a bit. And is aimed at a generally older audience.

I’m happy I read these books in a binge – and I hope that, if you pick up the series yourself, you’ll enjoy it as well. Given it’s now “winter lockdown” up here, I would suggest reading it while wrapped up in a blanket while drinking a strong, black coffee — just like Qwill would like it!

You can’t program the world to suit you

Last year, I was drafting more notes regarding the Free Software for SMB that I talked about before. While doing so I recognized that one of the biggest takeaway for myself is that successfully making a software project thrive takes a lot more than just good programmers, developers, designers. If you have customers you need people who know how to make a business work, you need people who can market your product, and you need people to remind you what the customers actually want as well as what they need.

It’s not an entirely new lesson — I wrote (in Italian) about helping Free Software without being a programmer fifteen years ago. I also wrote about the importance of teamwork two years ago. And I have spent a good chunk of my opensource and professional careers knee-deep in documentation matters.

I actually want to go back to the tweet that spawned the teamwork post:

Most things don’t work the way I think they work. That’s why I’m a programmer, so I can make them work the way I think they should work.

This is not meant to single out the author of the quoted phrase, but just to take it as an example of a feeling I get from many talks, and discussions, and in general just people out there. The idea that you can tech your way out of a problem. That by being a programmer you can change the way most things work.

And that’s not true, because the world is not running on servers, unless you found the Repository and I don’t know that. Indeed wielding “the power of programming”, thinking of changing the world just with that, sounds to me like a recipe for either failure or disaster.

I heard all kind of possible “solutions” to this — from insisting on teaching ethics in Software Engineering courses (with reasonable doubts about it), to regulating the heck out of any action businesses can take. I think the closest I have seen to something I would like (with all my biases of course) would be to make sure there is a mix of non-programming subjects in every university or high school that teaches programming as well. But even that has its own limitations, and I can totally say that I would probably have been frustrated by that and just ignored everything that’s not programming-related, when I was that age.

To make the example of Italy, that is under political turmoils most of the time, I could see a number of critiques of (in my opinion horrible) politicians based on where they went to school. In particular I saw some left-wing intellectuals criticising ministers (who have enough to be criticised about in deeds) based on the fact that they didn’t study in a lyceum but rather on a technical (or professional) school. Well, turns out I studied at a tech school, and I studied basic economics and (very basic) civic education for two years, and I found out the hard way that I know how VAT works much better than most of my local acquaintances who got an university degree after a lyceum: they never were introduced to the concept of VAT, the difference between types of taxes, and so on.

You could argue that there is no reason to know this particular tidbit, which is where I’m actually going to end up: there is no perfect education, the same way as there is no perfect solution. People need to learn to work with each other and they should know how to play each other’s strengths instead.

What I really would like to see proposed more often is focusing a lot more on teamwork. And not in the sense of “Here’s a topic for research, now work on it with your team”, which I had to do in high school — many of us have had the experience of being the only person working for a group assignment. What I would have loved to have would be cross-school year-long projects. Not competitions, but rather something that requires more than one type of expertise: trying to get three programming students in a room to work together, in my experience, turned to either two of them slacking off, because one of them actually enjoy doing the work, or if you’re lucky having someone with actual leadership skills telling them how to do their job… but still gives the impression that you just need programmers to do something like that.

In hindsight I would have loved instead if I had a project shared with some of my colleagues from electronics, mechanical and business tech-schools. Come up with a solution for a problem, that requires hardware and software, and a product plan that would include optimising the bill of material for small batch production and still make profits.

Sounds complicated? It is. Having had my own company, alone, for four years, made it very clear that there is a lot more than just being a programmer if you want to succeed. If you want to change the world, and in particular if you want to make the world a better place, then it takes even more energy, and a bigger group of people who can work together.

It also takes leadership. And that’s not something that I feel can be taught, and it’s the one that makes the most difference on whether the change is for good or not. I’m not good at leading people. I don’t have the right mindset most likely. I have trouble rallying people towards a common goal. I know that. I just hope that at some point, when I’ll be looking at more meaning in my work, I’ll find the right leader that can take what I can add to a good team, and let me shine through that.

I know it’s going to be repeating myself, but that is also what I mean with “there is no perfect solution”. If we decided that leadership is something that is important to score people, whether it is with school results, or with performance review at work, then we would be pretty much excluding a significant part of the population: not everyone wants to be a leader, are people who don’t want to be a leader worth less to society? Hint: this is not far from the question of how many multiples of a line worker a CEO should be worth.

And if you need a proper example of how “tech will not solve it”, just look at 2020 in general: tech is not really solving the Covid-19 world crisis. It does help, of course: videopresence, social network and chat services (including my employer’s), online “tabletop” games, shared documents infrastructure, online shopping, and so on… they all allowed people, isolating or not, to feel closer together. But it did not solve the problem. Even if we including medical sciences as “tech”, they still have not managed to find a way to deal with the crisis, because the crisis is not just medical.

People don’t ignore the lockdown requirements because they don’t have enough tech: it’s because there are other things in this world! It’s one thing to talk to my mother on the big screen of Portal, and another thing to spend a week at her house — including the fact that I can’t fix her house’s wiring while physically in another country. And then there is the big elephant in the room: the economy — tech can’t solve that problem, people working in industries that had to shut down because of the lockdown can’t just be “teched” into new roles; they can’t magically be vaccinated overnight; they need political leaders to make tough decisions around supporting them.

So no, you can’t program the world to suit your needs. Great for you if you have more tools in your toolbox – and there’s a lot more use for even basic programming literacy that has nothing to do with working as a programmer – but that doesn’t make you super-human, nor it allows you to ignore what’s going on in the world. If “being a programmer” is providing a superiority complex, I feel it’s more related to the fact that we’ve been well paid for a number of years now, and money makes the difference.

But that’s a topic for an entirely new rant, later on.

Why Am I Writing This Blog?

When I decided to take a break from the blog, I decided that the first thing I would be reflecting upon, and posting about, is my reasons to keep this blog running, and to keep writing on it. Because the answer to that should definitely feed into the decision of returning from the break and writing again.

The reasons why I started, continued, and am currently writing are all different. The only constant part is that I always wanted to make something that would be read or used by others. And while I hated writing essays for school, I always liked sitting down and writing on a topic I cared about. I remember before blogs were easy to get a start with, I wrote “articles” in LaTeX and posted it as PDF to the local Linux Users Group mailing list¹.

But the truth is that those “articles” were pretty much the same (low) quality of blog posts — as I already wrote about, blog posts are not very involved. I have written articles for actual publications: NewsForge back when it existed, the Italian Linux Journal (also gone), and LWN.net. The amount of work put on by the editors varied widely, with LWN having taught me lots, and being also the only one who paid for the articles — I feel it’s unfair, they did the most work and they gave money to me rather than the other way around.

Most of the readers of this blog probably know it from my blogging related to Gentoo Linux, but before I held a Planet Gentoo blog, I had a blog in Italian on Blogspot (for which I lost the backups, and only recovered some sparse posts thanks to the Wayback Machine), and in between the two I had a few posts on a KDE-sponsored shared blog (KDevelopers), which I have folded into this site, together with the few guest posts I did for Axant and for David’s Boycott Boycott Novell.

When I started blogging regularly for Gentoo Linux, it was mostly daily updates on the work I had been doing there. Whether it was multimedia packages changes or the Gentoo/FreeBSD progress — and that’s why a lot of the early blog posts look more like Twitter than the current blog, particularly those that predate Twitter. I still use this blog for updating the progress of various projects I’m involved in, but Twitter took over the “daily” updates, and the blog only includes “milestone” updates. Also, I have much fewer public projects compared to what I used to contribute to ten to fifteen years ago, for good or bad.

At some point, in addition to providing a status update, I used the blog also as a “showroom” — as a way to find work. Turns out that when I was a contractor I did indeed find a few gigs thanks to the blog itself — but since I have been working full time for many years now, that’s no longer a reason. Similarly, while before having a stable job, I have experimented with different ways to monetize the blog, from various referral systems to ads — none ever managed to cover the costs of running the blog at all, but in particular they would all now fit into the category of “rounding error”, as a former colleague would call them.

These last two points are important to the motivations discussion — a monetized blog, or a blog of someone who’s struggling to find a job, are very good reason to want more eyeballs on the posts, but both are not reasons I care for, at least not at this point in time. So why am I feeling disappointed that there aren’t more visitors, beside the psychological effects of counters and stats?

I guess the answer is that I have strong opinions, and the main motivation for me to write this blog nowadays is to voice them, and try to sway others — or be proven wrong and be swayed myself to a more positive and optimistic view of the world. Some are more active opinions than other: comments on working from home are very general and with the only action item to please consider the effect of it on others with different experiences and problems, while my repeated rants about licensing have action items that you can all pick up on.

I also still want to write so that other people can find out how to do stuff — because I love finding out how stuff works, and sometimes I even get to make use of that knowledge. I said this some time ago, that there’s significant value to spread the word, and share how things are done with others. Most of the stuff I have produced myself is not an invention of mine — it’s a refinement of someone else’s idea. Yes, even the free ideas that I have thrown out there but never managed to work on myself.

And then, there’s been quite a few personal posts on this blog over time – as I said before when sharing it at work, «there is a whole lot of me in [this] blog» – and those are there for… different reasons. Sometimes it’s personal therapy, sometimes a reminder to myself that I went through stuff, and I don’t need to squander opportunities. In many cases, it’s to share my experiences with others who might go through similar troubles. When I complained the first time about alcohol culture in Free Software, I was a very dissonant voice — nowadays this is a much more common complaint, and a number of conferences replaces beer parties with tea parties, though sometimes more to make fun of the complains… except the joke’s on them.

So what does all of this come down to, when it comes to the blog? Well, not really much to be honest. It means that there will still be project reports, opinions (and rants), explanations, and some personal point of view posts. I’ll also probably keep posting sARTSurday – even if not as regular as I tried at the beginning of the lockdown – including personal reviews of books and videogames, because I did write those before, and I see no reason not to keep doing that.

What it does say to me, is that my focus on the tight two-posts-per-week schedule is misplaced. While it did work great to keep my mind off the pandemic, particularly during the two months sabbatical between jobs, it’s proving more of a chore than a relief now that I’m back working full time and (mostly) ramped up in my new position. The tight schedule would have made sense if I tried to keep as many eyeballs on the blog as possible – which again is not really an useful goal to have for my motivations – but it also can reduce the quality of posts if I’m posting something early just so that I have a paced release of it.

So from now on, the schedule of blog posts will be once per week, on Tuesday, for regular post. sARTSurday posts will not be regular, but will appear when I find something particularly interesting to share with all. I’ll stop chasing timing and opportunities, and will instead post just what is ready to be posted, with no particular regard to scheduling the posts.

While thinking the blog’s motivation over, I also started wondering on whether I should spend more time on doing something… different. You might remember I have now a few times streamed on Twitch (and once on Facebook Live) — that started mostly as me trying to figure out how to convey information over the Internet that I would usually convey on a whiteboard. I still haven’t found a good answer to that, so I might end up doing more of that as time goes by, to experiment and find something that will work as well for work meetings. But it’s not going to be the kind of thing I expect people to care about or follow — after all, I have tried this before, over 11 years ago, and it wasn’t my cup of tea to continue.

What I might want to try is to prepare a “talk” out of some of the knowledge I have. Somewhere between a blog post and a conference talk, with a few of the things that I learnt over time and that might be worth sharing… but the motivation for that is less to become a famous streamer, and more that I might need to do that at work, and it’s worth trying to learn to make content in a way that can be used for training the newbies arriving. But don’t hold your breath on that, and don’t expect it to be any high quality to begin with.

Rather, if you find anything here, new or old that it might be, that is worth discussing further, feel free to bring it up — I might do a whiteboarding session about it, or I might take it for a jumpstart topic for a talk. Or at the very least I might write a refresher blog post to correct mistakes or update information of how things evolved in the meantime. And feel free to share it on aggregation sites like Reddit and Lobsters, just don’t expect me to be proactively there to answer questions — ask them here!

¹ Those articles are still to be found in this blog! I used to keep them on a page of my site, but have eventually folded them into blog posts. Which is how the archives go back to 2004!

It’s Time For A Break

Since before the beginning of the lockdown, I’ve been striving to keep a two-posts-per-week schedule to the blog, talking about my work philosophy, my electronics projects, and even trying a third post a week for a while with sARTSurday. Keeping the schedule was not easy, but I tried and only messed it twice: once when I mis-scheduled a post, and once when Microsoft “stole” my thunder.

About six months later, I’m running out of steam to keep the schedule. It might be because I spent the last few weeks worrying about whether we would have a flat to stay in as a new lockdown started. Or it might be that I’m now engaging gears with my new dayjob and it’s using all of my mental capacity.

I even tried whiteboarding — both with a physical whiteboard and on Twitch with Microsoft Whiteboard. Part of the reason why I did that is that with the lack of an office, I was looking for better venue to engage with my colleagues to discuss ideas and come up with plans. I can’t say it worked.

I have been mulling about options. I even briefly considered figuring out how much it would cost me to hire an editor to make the blog post more… polished. But the truth is that it wouldn’t make much sense — while I have been known for the blog in the past, blogs are the past. I never became a speaker when conferences were at their highest point, and I’ll never be a streamer now that they have been replaced by virtual events. I described myself recently as a C-list blogger – and I meant that. It seems nowadays to be B-list you need to have statically generated blog with no comments, and to be A-list you need to have not your own blog but just a Medium account. I don’t fit, nor I care to fit, into that world.

I guess I’m like a sportsman who’s too old to keep playing, but not well known enough to become a coach or a celebrity. And you know what? That’s okay. I’ll keep focusing on my dayjob as a “software mechanic” for as long as I can at least keep up to date to the new bubble’s stack. And maybe I can still get an idea or two out in the future, even when I won’t be able to do anything good with it myself.

This is not a goodbye, it’s just a “see you later” — I’ve been blogging for over 15 years and I’m not going to fully stopping now. If you have any questions or comments or suggestions on any of my old blog posts, feel free to leave a comment there, as I will be monitoring those, although possibly not as closely as before.

Update 2020-09-25: A couple of weeks into the break, I feel I’m finding myself more relaxed, and trying to get myself into a better position to get back to blogging later. Also in the meantime we finally finalized the paperwork for moving to a new apartment (that will also be a tale for later on in the blog), which means that we have a timeline for when we’ll have even less time.

So the current plan is that I’ll be taking time off posting until November 2020. After which I’ll come back on a one post per week schedule, until further notice. With the post going out likely on Tuesday or Wednesday, not sure yet. The reason for reducing frequency is to give myself some more time to work on content without rushing through incomplete posts.

“Working From Home”

Despite having commented on my continuing lockdown, I have tried extremely hard not to comment too much on the whole WFH debate, at least on the blog. You might have seen me ranting about it a few times over on Twitter though.

First of all, I have to admit I was lucky — when the whole lockdown started, I didn’t have to scramble to find the space to work from home: I already set up a home office, I had a standing desk already, multiple monitors, proper home connection without relying on WiFi, and all the kind of ergonomic setup that many of my teammates had to scramble hard for. I had set this up when I got to London, because I remember how bad it was for me to have a work/life balance separation in Dublin, when I had a desk just sitting next to the sofa, and I would end up working till late instead of just sitting on the sofa to watch TV or play games.

And of course, I’m also counting myself lucky that neither me nor my wife fell ill, form Covid-19 or anything else, that our families – while struggling a bit – had been safe throughout this whole event. And also, since we’re not interested in having kids, that significantly reduced the amount of worry, and of work, needed to switch to the lockdown scenario. I can only imagine how much harder for families it still is and don’t envy them.

But at the same time, I do miss the office, and am hoping not to stay working from home forever. I spent many years working from home, alone and isolated, while I had my own company, back in Italy. And while I can do a significant amount of work individually, I do believe that teamwork brings better results. Thankfully, “telepresence” options such as Portal, Zoom, and Google Meet help significantly to coordinate the work, but they are not quite the same thing. I feel more relaxed working sitting at a desk next to my colleagues than I feel working at my desk with a camera pointed at me while I’m working — it makes me feel self-conscious.

I’m also painfully aware that even with the luck of being able to keep working from home, there’s a lot of things that are left to be desired. For instance, while lots of people are bringing up the fact that you don’t have to pay for commute anymore as a great positive, few go back to point out that you end up paying more for utilities such as electricity, water, and heating. We could see a good 20% increase in electricity usage since I started working from home, and while we’re (again) lucky that this is not a significant difference, I can see how the heating in the winter, for people leaving in cottages, would wipe out any commuting savings for the year.

And while I can definitely find an easier way to get my focus time from home, even taking turns preparing meals with my wife, the amount of time we spend for fixing up two extra meals a day (breakfast and lunch) is noticeable. The whole “free food” perk is not just about not paying for food: it’s about the time it takes to make the food, and the time it takes away from your workday.

There’s a lot more of course, on both side of the equation — and there’s the whole point that we’re in the middle of a pandemic that is literally reshaping the way we live. I’m just looking forward to go back to an office, and to have a commute — not because I want to spend an hour on a crowded Tube train, but because I want a little bit of time to mark the end of a workday, stop worrying about the issues of the day, and turn off my work phone, so I can join my wife at the end of the day in full without splitting my mind with work.

It’s tiring, and it’s getting to me, and I’m sure it’s getting to many. Be looking out to your friends and your colleagues. Cut them a break if they are snappier than usual, particularly if they have complicated home situations – kids, babies, sick family (even extended), risks, moving houses, … – as it’s likely they are not trying to tick you off, and it’s more than likely that you’ll need the same before this is all over.

Ode to the five litres tank

You may remember that last year I wrote about a “plastics free” store, selling spices, oil, and even laundry detergent. I have no idea how they are faring with the current pandemic, but let’s just say that unless they turned into a conventional store, there’s no way that I would be interested in going and buy spices, nuts and pasta from huge containers that are handled by dozens of customers per day — and particularly by kids sticking their grubby fingers into the nuts’ boxes to steal a macadamia.

Even if the concept would have been workable before, I doubt that after this whole experience it’s going to thrive — while I care about the planet, I care about not dying more, and I assume the same is going to be true for the vast majority of the public (but not everyone, I’m sure). So what are the alternative options to buying without plastic containers? I can only think of the idea of buying in bulk.

Back at the start of the lockdown, one of the things that was getting harder to find in the local supermarkets was soap — and if you have read the blog post linked above, you know that I’ve been using refills. In particular at home we have a very nice glass, 1L liquid soap dispenser bottle that came with some decent lavender liquid soap we bought in TkMaxx over a year ago, and we’ve been filling it with different brands’ soap, that are usually available around the £4/L mark. We had a couple of litres stashed away, but eventually they started running low.

So looking around we found a 5L tank of hand wash, targeted as commercial users, but easy to get a hold of in the pandemic. It’s a bit more expensive than what we found before, but we liked it better, particularly given the fact that it has not ruined my hands, despite us washing our hands a lot more than before. And that had me thinking that most most likely the 5L tank can be reused, rather than recycled, much more easily. For instance, you can use it to collect waste oil when deep frying, and then bring it to the correct recycling point for that. Or in any case you can throw it with the recycling.

But it’s not just the plastic involved that makes a difference. Just think of how often you would need to get these delivered in half a litre increment. The 5L tank is due to last us just about five months, so you get around two deliveries a year, instead of about two a months (or once a month if you can just order the refills in pairs). And because we liked the quality of the soap, we ended up ordering the shampoo from the same brand, and fill a plastic bottle instead; at least for my hair it works well, and I’m picky — and it costs nearly half per liter than my usual ones.

There’s more than shampoo and soap that can be bought in 5L tanks. Body wash, fabric softener, vegetable oil, … and liter-for-liter they clearly need less plastics, if that’s the main measure we use for pollution, and they require fewer trips to shops and fewer deliveries. They are a bit awkward to use sometimes (thus why we have a 1L bottle we pour the vegetable we use for cooking), but the main disadvantage is that they take space, and while we’re lucky to have enough space for them in our flat, I don’t think I’d have been able to make the space for them in Dublin (didn’t help that the closet had a ton of stuff left over from the landlord and the previous tenants, including umbrellas, 5cm square framed mirrors, and stuff like that).

And I’m taking the 5L tanks as an example, but they are a metonymy for a number of other bought-in-bulk items, many of which are hard to find here in London. Even toilet paper, another staple of lockdown hoarding: Dublin and London got me used to order it in 16- or 9-roll bags, while in Italy I was used to buying 48/64 rolls at a time. It’s non-perishable, and if you do have the space to just get it and stuff it somewhere until you need it, why increasing the number of times you need to order it?

Funny story here: when I moved to London, and found out that my local Sainsbury’s didn’t have anything over 4 rolls bags, I decided that it would be easier to order 60 rolls from Amazon and have it delivered. The cost was meaningfully lower, and at the time I was not setting up for groceries’ delivery, and rather going to the stores myself to pick up just the stuff I needed for the days — bringing toilet paper on the bus is bulky and uncomfortable. Unfortunately i forgot to check where I asked Amazon to deliver it, and I ended up receiving nearly a cubic meter of toilet paper to my office, and had to find a way to bring it home, considering it took me an hour to go from King’s Cross to home, between Piccadilly and bus. Thankfully, two trips with my Filson duffle bag at a late hour were enough to bring it home. I love that duffle bag.

What I’m suggesting is that city living needs to start adapting to the idea that people need storage space. When looking at apartments, you can’t but wonder what’s the chicken and what’s the egg, between the lack of cupboard storage and the just-in-time supply used by most grocery stores in the big cities. Maybe in five years we will all live in apartments that have enough cupboard storage that you only need to buy non-perishables once a month, and the local stores will be providing fresh food and only urgent needs.

There’s also another clear problem with getting people to use bulk-volume non-perishables: beside Amazon, very few sellers carry those as options, at least in the UK. Yes, there’s Costco here just like in the USA, but that’s not common, and you do need to make sure you account for the £15/yr options. In Italy if you have a VAT ID you often end up shopping at Metro, because that’s an option that opens up to you…

Again, this is the type of thing that needs to be adapted for, after this whole pandemic happened. Reducing the frequency of deliveries by buying in bulk should be favourable for both grocery stores and consumers, given how the panic buying broke most delivery systems. So maybe next year Morrisons will have more 5L tanks of stuff available for delivery, not just the vegetable oil.

The Rolodex Paradigm

Silhouette of a rolodex.

Created by Marie-Pierre Bauduin from Noun Project.

In my previous bubble, I used to use as my “official” avatar a clipart picture of a Rolodex. Which confused a lot of people, because cultures differ and most importantly generation differ, and turned out that a lot of my colleagues and teammates never had seen or heard of a Rolodex. To quote one of the managers of my peer team when my avatar was gigantic on the conference room’s monitor «You cannot say that you don’t know what a Rolodex is, anymore!»

So, what is a Rolodex? Fundamentally, it’s a fancy address book. Think of it as a physical HyperCard. As Wikipedia points out, though, the name is sometimes used «as a metonym for the sum total of an individual’s accumulated business contacts», which is how I’m usually using it — the avatar is intentionally tongue-in-cheek. Do note that this is most definitely not the same as a Pokédex.

And what I call the Rolodex Paradigm is mainly the idea that the best way to write software is not to know everything about everything, but to know who knows something about what you need. This is easier said than done of course, but let me try to illustrate why I mean all of this.

One of the things I always known about myself is that I’m mainly a generalist. I like knowing a little bit about a lot of things, rather than a lot about a few things. Which is why on this blog you’ll find superficial posts about fintech, electronics, the environment, and cloud computing. You’ll rarely find in-depth articles about anything more recently because to get into that level of details I would need to get myself “in the zone” and that is hardly achievable while maintaining work and family life.

So what do I do when I need information I don’t have? I ask. And to do that, I try to keep in mind who knows something about the stuff that interest me. It’s the main reason why I used to use IRC heavily (I’m still around but not active at all), the main reason why I got to identi.ca, the main reason why I follow blogs and write this very blog, and the main reason why I’m on social networks including Twitter and Facebook – although I’ve switched from using my personal profile to maintaining a blog’s page – and have been fairly open with providing my email address to people, because to be able to ask, you need to make yourself available to answer.

This translates similarly in the workplace: when working at bigger companies that come with their own bubble, it’s very hard to know everything of everything, so by comparison it can be easier to build up a network of contacts who work on different areas within the company, and in particular, not just in engineering. And in a big company it even has a different set of problems to overcome, compared to the outside, open source world.

When asking for help to someone in the open source world, you need to remember that nobody is working for you (unless you’re explicitly paying them, in which case it’s less about asking for help and more about hiring help), and that while it’s possible that you’re charismatic enough (or well known enough) to pull off convincing someone to dedicate significant amount of time to solve your problems, people are busy and they might have other priorities.

In a company setting, there’s still a bit of friction of asking someone to dedicate a significant amount of time to solve your problem rather than theirs. But, if the problem is still a problem for the company, it’s much more likely that you can find someone to at least consider putting your problem in their prioritised list, as long as they can show something for the work done. The recognition is important not just as a way to justify the time (which itself is enough of a reason), but also because in most big companies, your promotion depends on demonstrating impact in one way or another.

Even were more formal approaches to recognitions (such as Google’s Peer Bonus system) are not present, consider sending a message to the manager of whoever helped you. Highlight how they helped not just you personally, but the company — for instance, they may have dedicated one day to implement a feature in their system that saved you a week or two of work, either by implementing the same feature (without the expertise in the system) or working around it; or they might have agreed to get to join a sketched one hour meeting to provide insights into the historical business needs for a service, that will stop you from making a bad decision in a project. It will go a long way.

Of course another problem is to find the people who know about the stuff you need — particularly if they are outside of your organization, and outside of your role. I’m afraid to say that it got a lot harder nowadays, given that we’re now all working remote from different houses and with very little to no social overlapping. So this really relies significantly on two points: company culture, and manager support.

From the company point of view, letting employees built up their network is convenient. Which is why so many big companies provide spaces for, and foster, interaction between employees that have nothing to do with work itself. While game rooms and social interactions are often sold as “perks” to sell roles, they are pretty much relaxed “water cooler” moments, that build those all-too-precious networks that don’t fit into an org structure. And that’s why inclusive social events are important.

So yeah, striking conversations with virtual stranger employees, talking about common interests (photography? Lego? arts?) can lead into knowing what they are working on, and once they are no longer strangers, you would feel more inclined to ask for help later. The same goes for meeting colleagues at courses — I remember going to a negotiation training based around Stuart Diamond’s Getting More, and meeting one of the office’s administrative business partners, who’s also Italian and liking chocolate. When a few months later I was helping to organize VDD ’14, I asked her help to navigate the amount of paperwork required to get outsiders into the office over a weekend.

Meeting people is clearly not enough, though. Keeping in touch is also important, particularly in companies where teams and role are fairly flexible, and people may be working on very different projects after months or year. What I used to do for this was making sure to spend time with colleagues I knew from something other than my main project when traveling. I used to travel from Dublin to London a few times a year for events — and I ended up sitting close to teams I didn’t work with directly, which lead me to meeting a number of colleagues I wouldn’t have otherwise interacted with at all. And later on, when I moved to London, I actually worked with some of them in my same team!

And that’s where the manager support is critical. You won’t be very successful at growing a network if your manager, for example, does not let you clear your calendar of routine meetings for the one week you’re spending in a different office. And similarly, without a manager that supports you dedicating some more time for non-business-critical training (such as the negotiation training I’ve mentioned), you’ll end up with fewer opportunities to meet random colleagues.

I think this was probably the starkest difference between my previous employer’s offices in Dublin and London: my feeling was that the latter had far fewer opportunities to meet people outside of your primary role and cultivate those connections. But it might also be caused by the fact that many more people live far enough from the office that commuting takes longer.

How is this all going to be working in a future where so many of us are remote? I don’t honestly know. For me, the lack of time sitting at the coffee area talking about things with colleagues that I didn’t share a team with, is one of the main reason why I hope that one day, lockdown will be over. And for the rest, I’m trying to get used to talk over the Internet more.

Amazon, AliExpress, Can You Even Tell The Difference?

You may think that the title is intentionally inflammatory, but I think it’s getting to be a valid question, at least in the UK, and I’ll try to explain it with a bit of humour.

AliExpress is a Chinese-operated online marketplace, which basically acts as a giant online mall with… hundreds, I’d say… of “small stores”, factory outlets, and so on. To me, it reminds me going to Xingguang Photographic Equipment City in Shanghai — which is a number of connected buildings crammed full of small-and-medium shops that sell… well about everything you can think of that has to do with photography and a whole lot that has nothing to do with it. The stuff you can find varied so widely, but in between “gray market” lenses and likely fake equipment, you can find very good deals on Chinese equipment — and I don’t mean just stuff that is “made in China”, but designed and fully manufactured by Chinese companies. I bought a carbon fiber tripod for my camera there, and it’s probably one of my favourite pieces of equipment… and I paid half of its listed price in Europe, since I didn’t go through customs and distributors to get it.

For those who have not been to Shanghai, AliExpress might be known better for Foone’s threads (warning: parts not safe for work and not recommended to minors). Or the random YouTuber reference to them. They are not particularly well looked at, particularly in the United States, because the shipping between China and the US seem to consistently take months. In the UK, this is significantly different: while there’s been stuff that has not arrived within the expected 60 days, even during the huge Covid-19 lockdown, most of the orders I placed arrived within a month. I know that Ireland approximates closer to the US than to the UK, and in general I have been not-quite-relying on AliExpress as a way to get stuff on the cheap if I have no urgency for it to show up. This had been much easier when I didn’t start planning for not living in the same apartment within a few months.

There’s also another important thing to note when talking about AliExpress: unlike most of the store brands we’re used to in Europe and in the United States, they act more like a “stores-only” eBay, in that they don’t actually involve themselves in the quality of the products they sell. This makes the “buyers beware” saying being even more important than usual to keep in mind. On the other hand, if you know what you’re buying and the limitations of possibly non-existent quality assurance, it’s a nice way to gather a bunch of, say, electronics components, acrylic lamps, and it seems for some, even glucometers.

Now, I remember Amazon when it was known for being a place to find the good stuff — recommendations based on what you bought (or evaluated) before, a good review system you could count on, and inventory limited to the stuff that is actually useful. But that doesn’t appear to be the case anymore. The quality of products you get from Amazon varies widely, particularly because they are making it increasingly difficult to opt-out of Marketplace, which is pretty much the same concept as AliExpress, except for the fact that Amazon usually takes over the logistics again. And I’ll get to the reviews in a moment.

  • A screenshot for Amazon UK searching for "hot air solder station"

You can see above a partial results for me searching “hot air solder station” on Amazon. This is not a random search per se, but rather tha main trigger for me being ready to complain about Amazon (most other searches follow the same pattern, by the way). A few months ago I decided to order a hot air solder station for home, to make it easy to solder some of the boards I have been working on. I ended up getting a Yihua-branded station for £90, which sounded like it had decent reviews from YouTube electronics folks… except that when I tried using it to desolder the DisplayPort connector I damaged from my old U2711, the plastic around the hot gun melted, releasing toxic fumes in my office… which made me discover the Dyson fan has a purple level of air quality, which approximates to “run away”.

I sent the station back to Amazon pointing out how the CE mark on the box looked very suspicious in light of what happened, and they did refund me no-questions-asked, but… I couldn’t leave a review about it. Despite me sending it back after two weeks, the item I bought was already removed from the store by that point. I didn’t get any notification about it being removed for safety concerns, so I assume that it was the seller deciding to run with the money instead. I replaced the station with a £25 one from AliExpress, which… turned out to perform significantly better, given that it did not burn down after nearly a month using it.

Now, let’s look at the picture I added above. The first four results are “Sponsored” — that means they are ads. Yes, you do get ads on Amazon when you search for something. Of the eight results, no two are reporting the same brand… but if you know what to look for you can see the Yihua logo on two of the sponsored entries and one of the “organic” ones, although none of them are reported as Yihua (except for the one that says MMOBIEL). How does this even fly? Well, it seems like the “brand” you see is the one that is putting together the “kit” of the soldering station with a bunch of vaguely related accessories.

But can we find more Yihua from these eight? Of course we can!

Preciva being a “white label” brand, akin to Silverline, is literally photoshopping away the Yihua brand in their main listing image, but keeps it in the “what’s in the kit” image later on, including for the “Brand carton” (whatever that is).

The end result is that sifting through Amazon listing is getting tedious — if you’re lucky, you get a British-based white label company sourcing their stuff somewhere in China and selling it back to you. If you’re not lucky, you get someone who has bought a pallet of AliExpress-level goods, possibly changed the box (in many cases not even that), and then sold it back to you at a mark-up. The “baseline luck” is finding someone who’s not even trying to hide that they are selling already-imported AliExpress goods, which makes Amazon pretty much just a rapid-delivery option of AliExpress-quality items.

And even for stuff that you may think you’re better off getting at Amazon, there’s some risk. Last year I bought a new camera (a Sony A7 first generation), and I ordered an USB-based charger with two batteries branded RAVpower — it’s a brand that is at least known for their mobile powerbanks, so I thought I would be safe. A couple of months later I definitely noted that one of the two batteries didn’t hold anywhere near the charge it should have, despite the charger saying it charged it in full. A couple of months ago I ordered two Palo-branded chargers for both my cameras, the A7 and the Canon 80D, because they had a decent price and supported both microUSB and USB-C — turns out that these will show you the actual charge detected on the battery, and indeed showed one of the two RAVpower-branded batteries as only holding 50% capacity constantly, which suggests one of the two cells inside is dead.

So what about the reviews? Well, there’s more than a few problems with reviews. As I noted earlier, the hot solder station SKU I ordered before was already removed from Amazon by the time I figured out how terrible it was, so I had no option to leave a review. And even if you were to leave a review, the appeal-based moderation will unlikely let negative, realistic review live. April King reported an example recently, and I had a similar experience with a review for a phone battery being removed because I said they faked the capacity. So unless you want to play the game finding the right set of banned words, you’re pretty much stuck — to continue with the Chinese connection, trying to leave a negative review on Amazon starts feeling like being part of Ma Boyong’s The City of Silence.

So can you just find the right stuff by looking solely at the positive reviews? Absolutely not!

It’s not just my opinion, by the way. The UK consumer association Which? reported this, FT Alphaville (free after registration) reported on it, and the FT proper (paywalled) reported on it last week as well! It’s not a secret that effectively every other marketplace order you place end up with you receiving a message from the seller asking you to contact them instead of leaving bad reviews, or suggesting you leave a good review for activating a 1-year warranty (which in EU and UK you have by law), or suggesting you can get a voucher if you leave a good review. Some are more blatant than others — another common “trick” I’ve seen them use is to send you an “invoice” (which contains none of the legally required information for being an invoice at all, nevermind the fact that you haven’t paid them, but paid Amazon).

But there is another issue. A few months after starting to order stuff from AliExpress we started receiving packages from Amazon that we didn’t order. At first it was a pair of “gaming headphones”, then it was some clothes hangers (that were dirty in their box so went straight into trash) and a flashlight, and this keeps happening to this date. It’s called brushing.

I have contacted Amazon, twice, about these packages, and provided them with the order number. But instead of speaking reasoning, the poor folks at the Amazon customer care find themselves acting as mechanical turks themselves, and said they’ll contact the person who ordered them, since they can’t discuss it with me. Despite the fact that they seem to have my PII and GDPR should require them to delete my information off their system.

The worst part is that sometimes the packages come together with the stuff I actually ordered, possibly because they don’t order it with Prime delivery, so Amazon bundles them to the next delivery in the area. I can tell which one is my actual order versus the one that is coming in from a scammer: the format on the address is different and it matches the one that I provided AliExpress.

Again, let me repeat that nobody at Amazon cares, despite this brushing scam being well documented for over a year at least. Even the delivery person who I showed the different addresses to told me «Well, I can bring it back, but just so you know, someone will just take it anyway, as they don’t want it back.» Which basically means Amazon doesn’t care about the fake reviews left by these scammy sellers.

So why am I even using Amazon at all? Well, it’s not an obvious answer. Sometimes it’s a matter of price: when Argos sells the same brand-name goods for a good 10% on top, plus shipping, it’s hard to justify avoiding Amazon for that. And with most supermarkets still not having recovered from the limitations of lockdown, a number of household products are also easier to order from Amazon than, say, Boots. And Amazon has usually better customer focus despite all of this — if somehow they send you only two items of a bundle of three, they don’t take two weeks to admit that they are out of stock, and you don’t have to suggest them to give you a partial refund at that point, which is what happened to me with Ryman.

Of course that is not fair — Amazon can afford the no-question-asked returns because they are a pile of cash, and they don’t need to be afraid of scammy customers. They can afford the low margins, because Marketplace appears to be making up for it by not making it their problem. Any newcomer to the scene will have issues fighting such a behemot, which is what makes it unfair. But I already complained about Europe as a market, and why I don’t expect an European alternative with fairer practices to ever become interesting.

Newcomers, Teachers, and Professionals

You may remember I had already a go at tutorials, after listening in on one that my wife had been going through. Well, she’s now learning about C after hearing me moan about higher and lower level languages, and she did that by starting with Harvard’s CS50 class, which is free to “attend” on edX. I am famously not a big fan of academia, but I didn’t think it would make my blood boil as much as it did.

I know that it’s easy to rant and moan about something that I’m not doing myself. After all you could say “Well, they are teaching at Harvard, you are just ranting on a c-list blog that is followed by less than a hundred people!” and you would be right. But at the same time, I have over a decade of experience in the industry, and my rants are explicitly contrasting what they say in the course to what “we” do, whether it is in opensource projects, or a bubble.

I think the first time I found myself boiling and went onto my soapbox was when the teacher said that the right “design” (they keep calling it design, although I would argue it’s style) for a single-source file program is to have includes, followed by the declaration of all the functions, followed by main(), followed by the definition of all the functions. Which is not something I’ve ever seen happening in my experience — because it doesn’t really make much sense: duplicating declarations/definitions in C is an unfortunate chore due to headers, but why forcing even more of that in the same source file?

Indeed, one of my “pre-canned comments” in reviews at my previous employer was a long-form of “Define your convenience functions before calling them. I don’t want to have to jump around to see what your doodle_do() function does.” Now it is true that in 2020 we have the technology (VSCode’s “show definition” curtain is one of the most magical tools I can think of), but if you’re anyone like me, you may even sometimes print out the source code to read it, and having it flow in natural order helps.

But that was just the beginning. Some time later as I dropped by to see how things were going I saw a strange string type throughout the code — turns out that they have a special header that they (later) define as “training wheels” that includes typedef char *string; — possibly understandable given that it takes some time to get to arrays, pointers, and from there to character arrays, but… could it have been called something else than string, given the all-too-similarly named std::string of C++?

Then I made the mistake of listening in on more of that lesson, and that just had me blow a fuse. The lesson takes a detour to try to explain ASCII — the fact that characters are just numbers that are looked up in a table, and that the table is typically 8-bit, with no mention of Unicode. Yes I understand Unicode is complicated and UTF-8 and other variable-length encodings will definitely give a headache to a newcomer who has not seen programming languages before. But it’s also 2020 and it might be a good idea to at least put out the idea that there’s such a thing as variable-length encoded text and that no, 8-bit characters are not enough to represent people’s names! The fact that my own name has a special character might have something to do with this, of course.

It went worse. The teacher decided to show some upper-case/lower-case trickery on strings to show how that works, and explained how you add or subtract 32 to go from one case to the other. Which is limited not only by character set, but most importantly by locale — oops, I guess the teacher never heard of the Turkish Four Is, or maybe there’s some lack of cultural diversity in the writing room for these courses. I went on a rant on Twitter over this, but let me reiterate this here as it’s important: there’s no reason why a newcomer to any programming language should know about adding/subtracting 32 to 7-bit ASCII characters to change their case, because it is not something you want to do outside of very tiny corner cases. It’s not safe in some languages. It’s not safe with characters outside the 7-bit safe Latin alphabet. It is rarely the correct thing to do. The standard library of any programming language has locale-aware functions to uppercase or lowercase a string, and that’s what you need to know!

Today (at the time of writing) she got to allocations, and I literally heard the teacher going for malloc(sizeof(int)*10). Even to start with a bad example and improve from that — why on Earth do they even bother teaching malloc() first, instead of calloc() is beyond my understanding. But what do I know, it’s not like I spent a whole lot of time fixing these mistakes in real software twelve years ago. I will avoid complaining too much about the teacher suggesting that the behaviour of malloc() was decided by the clang authors.

Since there might be newcomers reading this and being a bit lost of why I’m complaining about this — calloc() is a (mostly) safer alternative to allocate an array of elements, as it takes two parameters: the size of a single element and the number of elements that you want to allocate. Using this interface means it’s no longer possible to have an integer overflow when calculating the size, which reduces security risks. In addition, it zeroes out the memory, rather than leaving it uninitialized. While this means there is a performance cost, if you’re a newcomer to the language and just about learning it, you should err on the side of caution and use calloc() rather than malloc().

Next up there’s my facepalm on the explanation of memory layout — be prepared, because this is the same teacher who in a previous lesson said that the integer variable’s address might vary but for his explanation can be asserted to be 0x123, completely ignoring the whole concept of alignment. To explain “by value” function calls, they decide to digress again, this time explaining heap and stack, and they describe a linear memory layout, where the code of the program is followed by the globals and then the heap, with the stack at the bottom growing up. Which might have been true in the ’80s, but hasn’t been true in a long while.

Memory layout is not simple. If you want to explain a realistic memory layout you would have to cover the differences between physical and virtual memory, memory pages and pages tables, hugepages, page permissions, W^X, Copy-on-Write, ASLR, … So I get it that the teacher might want to simplify and skip over a number of these details and give a simplified view of how to understand the memory layout. But as a professional in the industry for so long I would appreciate if they’d be upfront with the “By the way, this is an oversimplification, reality is very different.” Oh, and by the way, stack grows down on x86/x86-64.

This brings me to another interesting… mess in my opinion. The course comes with some very solid tools: a sandbox environment already primed for the course, an instance of AWS Cloud9 IDE with the libraries already installed, a fairly recent version of clang… but then decides to stick to this dubious old style of C, with strcpy() and strcmp() and no reference to more modern, safer options — nevermind that glibc still refuses to implement C11 Annex K safe string functions.

But then they decide to not only briefly show the newcomers how to use Valgrind, of all things. They even show them how to use a custom post-processor for Valgrind’s report output, because it’s otherwise hard to read. For a course using clang, that can rely on tools such as ASAN and MSAN to report the same information in more concise way.

I find this contrast particularly gruesome — the teacher appears to think that memory leaks are an important defect to avoid in software, so much so that they decide to give a power tool such as Valgrind to a class of newcomers… but they don’t find Unicode and correctness in names representation (because of course they talk about names) to be as important. I find these priorities totally inappropriate in 2020.

Don’t get me wrong: I understand that writing a good programming course is hard, and that professors and teachers have a hard job in front of them when it comes to explain complex concepts to a number of people that are more eager to “make” something than to learn how it works. But I do wonder if sitting a dozen professionals through these lessons wouldn’t make for a better course overall.

«He who can, does; he who cannot teaches» is a phrase attributed to George Bernand Shaw — I don’t really agree with it as it is, because I met awesome professors and teachers. I already mentioned my Systems’ teacher, who I’m told retired just a couple of months ago. But in this case I can tell you that I wouldn’t want to have to review the code (or documentation) written by that particular teacher, as I’d have a hard time keeping to constructive comments after so many facepalms.

It’s a disservice to newcomers that this is what they are taught. And it’s the professionals like me that are causing this by (clearly) not pushing back enough on Academia to be more practical, or building better courseware for teachers to rely on. But again, I rant on a C-list blog, not teach at Harvard.

Digital Artist Spotlight: Seerlight

Given lockdown continues, we’re effectively not expecting to join other fans for conventions for quite a while longer. This also means not finding new artists in person, for a while, and instead relying on more… modern options. Indeed the artist that I’m going to write about today is one that I found on Facebook, thanks to a share from an acquaintance who shared the post of a page that (for once!) credited the original author.

Seerlight is a digital artist that draws extremely detailed scenes. Many are inspired by popular anime, including Studio Ghibli or (as shown to the right) 90s anime like Sailor Moon and Card Capturor Sakura, but also games such as Final Fantasy and Zelda. A number of others are original, and are just as cute and interesting.

One of the main thing that piqued my curiosity with Seerlight is that is the first artist that I have found that provides a lot of their focus on animated wallpapers for phones and (it seems more recently) desktops. And indeed, the animated wallpapers are what you get access to by subscribing to their Patreon (and since it’s an up front charged Patreon, now is a great time to subscribe, if you’d like them.)

As an aside, it seems like animated live wallpapers on Android are… very manufacturer specific. On my Huawei P30 Pro, I ended up getting this app, which has in-app upgrade to ad-free, and didn’t request any risky permission beside file access to load the video. I can’t guarantee it’s perfect, but it seems to do the job.

Another thing that I found very interesting as an option (and one that I have not ordered yet, but I’m sure thinking of ordering soon), is that they sell credit card covers — not travel passes, which we’re totally used to in London (and possibly UK), but stickers to put on the actual credit (or debit) cards. This is something that I had seen in Japan before, particularly for IC cards, but I have not seen as being popular in Europe, which is not totally unexpected, as credit cards have typically had the owner’s name and 16-digits PAN, and covering those up would be… strange.

To be fair, the store (Cucu Covers) does sell half-height covers that are not meant to cover the information area, which depending on the colours on your credit card might make it still feasible. But more interesting, a lot of credit cards nowadays have stopped providing embossed names and numbers, and quite a few of them decided it’s cheaper and easier to print everything on one side of the card.

Revolut for instance now only put the cardholder name on the front, and the rest is all logos. Curve does something similar, although if I remember this correctly, they don’t even put the cardholder on the front. Admittedly, both me and my wife have gotten used to just relying on Google Pay at least here in the UK, and have not bothered taking the card out of the wallet for, well, a really long time now.

But if you have something that you need to keep with you and use daily, for instance a travel pass, or a building access pass (well, after the lockdown is over at least), and you want to give it a bit of a spirit, you may want to take a look at these covers, I find them absolutely gorgeous.

So, if that’s your cup of tea, consider subscribing to their Patreon, or at least follow them on Instragram or Facebook to see when they’ll release a live wallpaper you’ll be ready to pay for!