2020 articles

Google Cloud Associate Cloud Engineer Exam

While it is still fresh in my mind, I thought I would write my impressions of the Google Cloud Associate Cloud Engineer (ACE) certification exam, which I sat for this morning (Saturday 19th December 2020) online proctored exam. I'm happy I passed though there were moments where I was tempted …

On Productivity

Here is a collection of lessons I have learned and am learning on how to be productive. They are in no order. I’ll refine them over time but here they are in their raw glory to exemplify what I mean. Use realistic deadlines. Deadlines focus the mind. Focus in one …

Intelligence Can...

...only be discerned by intelligence. It is as though it were a handshake of the mind. This means that that which is perceived by intelligent discernment must have been wrought through intelligence and no other means.

One Possible Reason for Incomprehensibility...

...could be that there is nothing to comprehend.

Categories of Study

SpeculativeDescriptiveProductiveAesthetic/CreativeSpeculativePure reason unbound to spatial-temporal world; concerned with ontological analysis i.e. the reasoning on the nature of being for various entities e.g. philosophy is concerned with the substance of reason, natural theology is concerned with the nature of the divine, computing has to do with …

Money and Work

The ideas of money and work are intimately bound, particularly in an economy where the presence, nature and role of money is paramount. Here are some rough thoughts I'm processing about money.What money is very strongly influences the kind of work that gets done. This is because, by its …

TV is...

Tele values - a means by which values can be disseminated to a wide audience for synchronisation. visual conditioning - a means of training your intuition to trust on visual appearance. By its very scarce nature presentation on tv goes through a very strict selection process leading to an extreme …

The Essence of Testing

“Code without tests is broken by design.”Jacob Kaplan-MossI love that quote. It captures it all. Lacking tests is not just bad practice but effectively bad design. Bad design means that something is wrong with the product. A badly designed umbrella is not fit for purpose and could even …

Bad Design...

... is like taking the wrong road. It doesn't matter how fast you travel if you're going the wrong way. It is always cheaper to pause, reorient yourself then proceed than barrel down the wrong path with armfuls of zeal.

Your JD

As a writer of software your primary task is to hide complexity. Think about it: by writing code you employ various abstractions (functions, classes, modules, commands, API etc.) which represent functionality for some user. You would do well if the user never, ever needs to know anything about the …

Multiplicity Admits Combinatorial Complexity

Simplify your counting.There are only three numbers: zero, one and many. You should have no (zero) bugs, one way to do things right and many examples that test for usability. If you have many bugs, multiple ways to do things right and no examples, what …

On Ideas

A good idea at the wrong time is a bad idea.

"Show me your hands!"

This is a great ideal to aim for: that at any time you can be asked to step away from your code and, not only does it continue to function superbly, but those who carry it forward want to reach out and hug you for the fabulous work you've done. …

Hacking Is Like Drafting

All the revision in the world will not save a bad first draft: for the architecture of the thing comes, or fails to come, in the first conception, and revision only affects the detail and ornament, alas!T. E. LawrenceI've previously talked about the three stages of writing software …

From A Physical to Logical Economy

There are two parts to our natural human experience*: the physical and logical. The physical relates to our tangible selves and the logical to our mental selves. Our interactions between these two worlds are so tight that they appear largely seamless, especially given the prevalence of logical tools such as …

Your Secret Weapon Is Your Intuition

Wisdom is the principal thing; therefore get wisdom: and with all thy getting get understanding.Proverbs 4:7 (KJV)One of my teachers fascinated me at his ability to make lightning fast assessments. I was blown away by his snap assessments even without crunching through the details - just a …

Types of Refactor

Name refactor - rename an entity (variable, function/method, class) for clarity in order to reduce logical tensionExtract variable - if a sequence of logic starts repeating itself it's time to create an entity from the snippetExtract method/function Extract class - inheritanceExtract module - when you begin to …

Bugs Make You Strong

Bugs make you strong.Photo by Harish Shivaraman on UnsplashIt sounds counter-intuitive but every bug you find is one step close to making your code base stronger and more reliable. Naturally, we try to avoid any unpredictability in our code almost as if we want to snip all the …

Think Like A Gardener

Great code is grown not built.It is dangerously incorrect to think of code in the same way we think of physical products; that once built they are complete. Software is never complete. The correct metaphor for a programmer is a gardener, who endlessly tends to his garden to bring …

Layers are Good

Photo by Annie Spratt on UnsplashI find that, invariably, code that has been thoroughly pondered over tends to organise itself into layers. For example, for most of the code I write, which runs in the shell, there will be:a presentation layer, which handles commands and options and returning …

Reading: The Part of Writing Great Software

Writing great software is 99% reading documentation.I've previously written about the stages of software development. They are the hack, refactor and integrate stages. The reason the first stack is called 'hack' is because it's usually a representation of a hurriedly put-together product - something you've hacked, …

Your Team: Which Image Best Describes It?

The team of wild horses on the left are not without strength. They are obviously heading in the same direction, which is a good thing. The problem is that they have not been harnessed effectively so that, while they might be producing individually they are not really working as a …

Emergent Design in Software

It is easy to just get going in writing software which is designed for a narrow feature scope. Usually, we can even get away without employing any pen and paper. However, as the feature scope expands it gets harder and harder. Under the waterfall approach the solution was to rigorously …

So, what is computer programming?

A great understanding is transformational. With it your vision is clear and the vista plain. Understanding what computer programming is will amplify your effectiveness at it. In this brief post I will outline the essence of computer programming.A Computer Is A MachineComputers are machines. In the early days …

The Dark Side of Object Orientation

Object oriented software design is praised for the fact that it provides an easy mental handle by which a developer may reason about a software entity. However, the bit that is often ignored is the fact that the easy mental handle requires work in order to be teased out. I …

Entropy in Software

The simplest way to describe entropy is a measure of disorder in a system. A system with a high level of disorder is said to have high entropy. A more software-relevant way to describe entropy is the additional information required to describe a software system. The task of writing software …

Stages in Software Development

When producing any software you will ordinarily go through three stages in order to deliver excellent value. These are hack, refactor and integrate. The quality of output will depend whether and how well you perform each of these steps. Poor quality software is marked by most if not …

Successful Software

Software is successful is useful software. Software is primarily successful if it meets the users' needs. Period. Anything else is bonus material. If a software tool has everything else but lack usefulness then it has failed.There are two type of users: consumption users and production users. Consumption UsersConsumption …

On Roman Numerals

OK. Quick note. I've just come across a Python package for converting Arabic to Roman numerals. Great! But I think it can be improved in several ways.Add documentation even if just in the README file to show how to use it.Add an entry point for users to run …

Keep It Up!

The Google Way to Site Reliability Engineering - https://landing.google.com/sre/

The Value is in the UI

I've just been watching an interesting YouTube video in which a guy solves a sudoku puzzles starting off with very little. It's quite an interesting watch because you're given a front-row seat into observing someone making a discovery of something quite magical. I've always been fascinated with sudoku not least …

Diminishing Returns

Decrease the size of your web images for all browsers using Google's WebP image format that is supported on all major browsers. They report that you can gain savings of roughly a quarter of a PNG file. PNG files are typically tiny therefore to save even more is very attractive. …

The Business of Science: Model Building

I think it is safe to state without any contradiction that science is in the business of validated discovery of new knowledge. This enterprise primarily consists of appending to the volume of what is known (generally referred to as publishing) through a process that is objective for the …

Searchable list of keyboard shortcuts for Mac OS X 10.5+ (IntelliJ IDEA)

Rider's top keyboard shortcutsOpen Solution or Project   Ctrl+Shift+OShow Action List   Alt+EnterSearch Everywhere   Double-ShiftNavigate To…   Ctrl+Shift+NFind Usages   Alt+F7Select In...   Alt+F1Settings...   Cmd+,Find Action...   Cmd+Shift+AGenerate...   Cmd+N Ctrl+EnterBuild Solution   Cmd+F9Debug...   Ctrl+Alt+DView Breakpoints...   Cmd+Shift+F8Attach to Process...   Alt+Shift+F5VCS Operations Popup...   Ctrl+VRefactor This...   Ctrl+TInspect This...   Cmd+Alt+Shift+AFinding everythingSearch Everywhere   Double-ShiftFind...   Cmd+FFind Next / Move to Next …

Automatic Segmentation of Audio by Speaker

ProblemI recently attended a meeting in which I had to write notes from the discussions. I was feeling lazy so I decided that I would record the audio on my phone then make notes from that. That part worked really well until I sat down to make the notes. …

Class attributes

Here's an exploration of some weird Python functionality: how do we intercept class attribute access?The following won't work.class A: x = 1 def __getattribute__(self, name): print('{}.__getattribute__({})'.format(self, name)) return super().__getattribute__(name) print('A.x =', A.x) # A.x = 1 What about setting __getattribute__ to be a classmethod?class A: x …

Using metaclasses to use domain-specific protocols

In Python (3+) it is impossible to create a class which is not a subclass of object. This means that the protocols associated with the class and instances of the class are tightly bound to object. Metaclasses provide a way to extend this so as to have additional …

Interesting and useful links

Emoji Cheat Sheet (view in private tab - might plant tracking cookies) https://www.webfx.com/tools/emoji-cheat-sheet/ Git Documentation https://git-scm.com/

Last will and testament...

Here is an example code snippet that executes 'last rites'. My current use-case is to handle final tasks on a cluster job management system when the script violates some execution criterion e.g. exceeding memory quota. It's helpful if the job could perform some task(s) that indicate that it had to …