Have you ever taken a career break? Have you ever been fortunate enough to be able to do that, or needed to and been fortunate enough to have the means to do so?
How long did you take, and what was it like getting back into the world of work after?
For people in the world of technology, especially software, things move quickly. There's the combined danger of becoming rusty and not keeping up with industry change.
Have you ever completely changed career? How did that work out?
It must be flying saucers from outer space. Obviously, what else could it be? I read it on the Intertubes.
It's the usual story: the US Department of Defense and all it's hangers-on have got fragments and intact vehicles "of exotic origin (non-human intelligence, whether extraterrestrial or unknown origin) based on the vehicle morphologies and material science testing and the possession of unique atomic arrangements and radiological signatures."
Well, I don't know about you, but that's me convinced.
“The non-human intelligence phenomenon is real. We are not alone,” Grey said. “Retrievals of this kind are not limited to the United States. This is a global phenomenon, and yet a global solution continues to elude us.”
See?
Subtitle: Angry Old Man Shakes Fist and Shouts at the Sky/Get off my Lawn
Alas I am not young enough to know everything. Fortunately I am surrounded at work by people who are so I am not completely lost.
We had a very confident young hotshot who left some time ago for a very well-paid job "doing AI." He knew much. He knew that Bitbucket was the way to go. And we adopted bitbucket and we pay a subscription.
Bitbucket is pretty cool. It's very similar to GitLab. In a previous life I set up and ran my own GitLab server and had my own continuous integration pipeline. I really liked using it.
Now to the present. I have been doing PHB duties, then I was given emergency bug fixes to do on Critical Projects(TM) and all sorts of stuff and because reasons I am writing code again for Critical Projects(TM) with tight deadlines meanwhile trying to do all sorts of other stuff including teaching the young ones things about C (everything's Python nowadays).
We had a crazy head of projects who was from the headless chicken school of management and some months ago I was given a fortnight to write a suite of command line utilities to process some data in a pipeline from the latest Critical Project(TM). Specifications? Requirements? A rough idea of what might be in the system? Ha! Fortunately crazy head of projects got a new job and left.
I wrote this code, in C, from scratch, on my own, and in four days flat I had three working command line utilities which I had written using test driven development (TDD) and will an additional layer of automated tests run by shell scripts all at the beck and call of make. I cheated and wrote some scripts to help me write the code.
As you can imagine, these utilities are pretty small. We gave them to the new guy to finish off. Six weeks and lots of hand-holding later, I took them back to fix.
However, we have this "continuous integration" setup based on bitbucket. It's awfully like GitLab, which I used some years ago, so there are no great surprises.
Now we come to the super fun part. We build locally, not on Bitbucket's cloud, which is good. The strange thing is that since I got old, Docker has come along.
The young hotshot who knew everything decided that we needed to do all our builds in these Docker containers. Why?
A Docker container is just one of these LXC container things which is a form of paravirtualisation, somewhere between chroot jails and a proper VM, where the kernel presents an interface that looks like a whole system on its own (see Solaris 10 Containers). That means that you can run "arbitrary" Linux instances (with their own hostnames and IP addresses) on top of a single kernel. Or can you? Doesn't it have to be compatible with (integrated with) the kernel version and build that the host is running?
This is a cool feature. You can have many lightweight pretend virtual hosts on a single machine without having a hypervisor. You can also use it to have a user-land environment with a specific configuration nailed down (set of tools, applications, libraries, user accounts). It might be a great way to set up a controlled build environment for software.
For the last hundred years or so anyone who knows anything about making stuff (engineering) understands that you need to eliminate as much variation in your process as possible for quality, reliability and predictability.
So here's the thing - do you think our young hotshot and his successors have this sorted out? Think again!
I needed to set up some build pipelines and I was shocked. Apparently we are using a plethora of diverse Docker containers from the public Internet for building various software. But that's OK, they're cached locally...
Never mind that this stuff has to work properly.
Everyone in the team is developing their code on a different configuration. We have people using WSL (seriously) and others running various versions of Ubuntu in VMs. So we have these build pipelines running things like Alpine (because the image is small) which may or may not be anywhere near WSL or Ubuntu versions X to Y.
It gets better. Everything we do, every piece of software we build has its own Docker container. And then it goes onto a VM which gets "spun up" in the Microsoft(R) Azure(TM) cloud.
My little command line utilities, a few hundred k each compiled, get compiled in their own Docker container. That's hundreds and hundreds and hundreds of megabytes of random junk to compile a few thousand lines of C. When I type make on my command line (in my Ubuntu VM) each one takes under a second to build against the unit tests and rebuild again and run the automated regression tests.
The final thing that takes the cake is that I have to release these tools to another department (which they'll then put in a "pipeline" on "the cloud") and after about a year of having this amazing set-up for continuous integration, the young folk can't tell me (and they haven't figured it out yet) how to get the built binaries out of the build system.
Because the builds are done in Docker containers, the build artifacts are in the containers and the container images are deleted at the end of the build. So tell it not to delete the image? Put a step in the build script to copy the artifacts out onto a real disk volume?
"We don't know how."
There's a reason human beings haven't set foot on the Moon in over 50 years, and the way things are going our own stupidity will be the end of us. Mark my words.
Cache or cores? Biscuit or cake?
It's about three years since I built my Ryzen system. It's a Ryzen 5 3600 (Zen 2, Socket AM4) with 32GB RAM.
Since dual core became a thing I have been meaning to take over the world with cunning multi-threaded code but about as far as I've got is some shell scripts that do things in parallel.
I figured I should upgrade the machine while AM4 CPUs are still available. I noted that AMD had some CPUs out with this newfangled 3D cache, and that they were pretty fast on certain workloads.
So my decision was biscuit or cake? Cache or cores?
It's taken me a few weeks, and much deliberation but today I decided to go for the cake. I think it will be more fun to have more cores to play with. I have ordered a Ryzen 9 5900X (12 core/24 thread Zen 3) and a cooler with two great big fans and fancy quiet bearings to go with it.
I'll need to revisit my old tests from three years ago and see what sort of a difference all those extra cores make. Obviously, there will be more contention for memory bandwidth. If I get around to it, I might post the results together with the results for the old CPU.
Meantime, I have been writing a little bit of C, finally getting around to something I've been meaning to do for 15 years. One day I'll write something about procrastination. I have an anecdote.
The National Conservatives had a rally in London this week. I wanted to write something, but the Guardian summary will suffice.
It's barely disguised now.
From the fine article:
Perhaps the speech most reported on was by the Tory backbencher Miriam Cates, who part-channelled Viktor Orbán and Giorgia Meloni in describing low birthrates as an existential crisis for the west. The populist leaders of Hungary and Italy are explicit in wanting more domestic-born children as against immigrants, a point Cates did not make, although it was arguably implicit. More striking still was her argument that the lack of babies was down to “cultural Marxism that is systematically destroying our children’s souls”.
This was also the conference where Jacob Rees-Mogg (a member of the current UK government) spoke and admitted that recent changes to electoral law in England and Wales were an attempt at gerrymandering, to disenfranchise people who might vote for parties other than his, but that it had backfired. The Conservatives appear to have disenfranchised many of their own voters.
It's in plain sight now. These are National Conservatives, the NatCs.
There is not much more to be said.
Update: Judging by the discourse below, there certainly is more to be said. Once again I will not say it myself. Instead I'll post a link to SNP MP Mhairi Black's f-word speech given to Parliament last year.
Pro-republic demonstrators were arrested in London on Saturday ahead of King Charles III's coronation ceremony, despite having planned their protest in cooperation with the Metropolitan Police several months in advance.
Asked if he thought his arrest before the event was premeditated, Smith said: “Absolutely. I have no doubt about that at all, simply because there was nothing that we did do that could possibly justify even being detained and arrested and held.”
Other arrests were made.
The Met said it arrested 64 people on Saturday, including members of Westminster city council’s women’s safety campaign Night Stars, who hand out rape alarms and other items. Police claimed intelligence had indicated people were planning to use rape alarms to disrupt the coronation procession.
We have a constitutional Monarch who is effectively powerless. We need a proper democratically-elected head of state. This medieval pantomime has no place in the 21st Century.
New anti-protest laws were very recently brought in further curtailing our rights and freedoms.
The UK is becoming very authoritarian and the police are being given more and more powers. Human rights organisation Liberty has a good article on the recent changes to the law.
Prince Charles became King Charles III on 8th September 2022 upon the death of his mother, Queen Elizabeth II, that day. However, despite this, there will be a coronation ceremony next Saturday 6th May which is estimated to cost £100M and will be paid for out of public money, i.e. our taxes. This is against a backdrop of 10% inflation, fuel, food and housing poverty, and public services such as education and the National Health Service on their knees.
We, the people of the UK, his subjects, are being invited to swear an oath of allegiance to our king as follows:
“I swear that I will pay true allegiance to Your Majesty, and to your heirs and successors according to law. So help me God.”
There are a number of problems with this as you can see. I will not be swearing such an oath. As an atheist, I do not believe that there is a God to help me. I do not believe that the King derives any sort of power from this God, I do not believe in blind obedience, and I do not believe in an unelected hereditary head of state. It is fundamentally incompatible with a modern democracy.
The UK constitution, such as it is, a hotch-potch collection of customs and documents handed down through history, hasn't really changed much since the Norman Conquest of 1066.
We have the Houses of Parliament, the House of Commons (the nominally democratic bit), and the House of Lords (the appointed/hereditary second chamber).
We elect our Members of Parliament every five years using a First Past the Post system. Effectively this limits our governments to the two main political parties, Conservative (the "establishment party") and Labour (formerly the radical left but now watered-down conservatives). Very occasionally one party does not get an outright majority, and has to form a coalition with the third largest party (the Liberal Democrats), which the Conservatives did in 2010. At that time, the Liberal Democrats were economically on the right and supported many right-wing economic policies that disadvantaged ordinary people, such as regarding university tuition fees. Their reputation has never recovered and they were nearly wiped out in subsequent elections.
Nominally the Monarch is Head of State. All laws passed by Parliament have to be scruitinised by the Lords and then sent to the Monarch to be given Royal Assent. At this point, there may be secret changes to the laws often to benefit Royalty and this has been well documented in the press in recent years.
What happens if a government misbehaves or breaks the law? The British system has relied on government ministers and MPs being decent chaps, who would always do the right thing, and resign if they made a serious mistake. However there is nothing written down in our constitution, no laws. MPs can be banned from Parliament, and they can be deselected forcing a byelection if banned for long enough, but who decides when to ban them and for how long?
The unlawful prorogation of Parliament in 2019, in a proper democracy, might have resulted in a change of government via a general election. It did not.
Under the UK constitution, such as it is, the Monarch has the power to dismiss the government. The last time a Monarch (Charles I) did this in the 17th Century (for autocratic reasons), there was a revolution, led by Oliver Cromwell. The King was put on trial, found guilty and beheaded. Britain became a republic under Puritan rule via Parliament for several years. Eventually, the people tired of the Puritans and restored the monarchy.
As a result, the Monarch is banned from entering Parliament, and there are archaic protocols and traditions to prevent the Monarch or the Lords interfering in Parliament (see Black Rod).
There is also an important legal precedent. When the Monarchy was restored, it was on the condition that it would not interfere with democracy. The short story is that the Monarch still retains the power to dismiss Parliament and therefore call a general election, however, to do so would result in the end of the Monarchy. Obviously it would not result in an execution, which would be abhorrent, but politically it would be suicide.
We find ourselves in a situation where our democracy has a major flaw in its "checks and balances." The code of decent chaps has been broken in these times of Faragism and National Conservatism and there is nothing to stop it.
Freedom of speech is not officially codified in our written laws but it is a custom which is generally defended and upheld. What if you want to abolish the Monarchy and live in a republic with a democratically-elected head of state (president) who has a maximum time in office and can be replaced regularly and frequently via free and fair elections?
There is an organisation called Republic which is organising a peaceful protest in London on the day of the Coronation.
Coincidentally, some new anti-protest laws will come into force just in time for it and intimidatory letters have been sent to the protestors.
Graham Smith, the campaign group’s chief executive, described the letter as “very odd” and said the group was seeking assurances from the police that nothing had changed in relation to its plans to protest on coronation day.
Shami Chakrabarti, the former shadow attorney general, said: “During the passage of this illiberal and headline-grabbing legislation, ministers admitted that the new offence of ‘locking on’ is so broad as to catch peaceful protesters who link arms in public.
Perhaps I should start using a VPN, eh?
Update: Anti-monarchy campaigners have been arrested in London preparing to protest peacefully.
Graham Smith, the chief executive of Republic, had been collecting drinks and placards for demonstrators at the main site of the protest on Trafalgar Square when he was stopped with five others by police on St Martin’s Lane in central London.
And:
Harry Stratton, a director at Republic, who arrived as Smith and the others were detained, said: “They were collecting the placards and bringing them over when the police stopped them. The guys asked why and they were told: ‘We will tell you that once we have searched the vehicle.’ That’s when they arrested the six organisers.
It seems that the new anti-protest laws are being applied, particulary regarding "lock-on devices."
Stratton said the organisers of the protest had not possessed lock-on devices. “What would we lock on to? We are just protesting.” He added that one protestor at Trafalgar square had been taken away by police as he had string on him. “It’s string that was part of his placard, he said. “What was he going to do with that?”
Is this our new National Conservatism in action?
I was looking at CPUs the other day and I noticed that there is an AMD Ryzen 7 5800X and a Ryzen 7 5800X3D. The 3D version has three times (96MB) the level three cache as the non-3D version, but runs several hundred megahertz slower. cpubenchmark.net has almost identical CPU Mark scores for the two but some articles I've seen say that the 3D version has far better performance for gaming workloads.
Are there any other workloads the 3D version is better at? Does this tell us anything about the way our software is written in particular, or does it just tell us that games are not particularly good at exploiting more cores?
There must come a point of diminishing returns where adding more cache makes little difference, however three times the cache making a significant difference is interesting.
Why haven't I been abducted by aliens?
I'd really appreciate a flight to Sirius, Alpha Centauri, Betegeuse or Vega. I'd settle for the Moon or Mars, actually. Saturn's moons would be fun. I'd like to examine their antigravity/warp drives and ask them all sorts of questions about the Maths and Physics they needed to discover to make it all work, plus how they create the convex curvature of spacetime.
It would be the trip of a lifetime. It always happens to someone else, though.
It's not fair!
Update: I still haven't been abducted by aliens.
Have you ever written an interpreter or compiler for your own toy programming language?
I was bored one afternoon a long time ago and wrote a little C program to emulate an imaginary RISC CPU and invented an instruction set for it. I never got around to writing an assembler, but the disassembler was trivial.
Some years later I wrote a completely crazy stack-based language where the only data type was a string and used it for drawing pictures with a home-made graphics library.
I also wrote an incredibly simple, but entirely serious, scripting interpreter to write regression test scripts for an API for a device driver I had written.
One of these days I will get around to doing another one, for my own amusement.
What crazy ideas have you had? What have you tried? What would your ideal or ideal absurd language be like, and could you implement it?