6 months Ago

Architecture is about intent

Published by marco on in Programming

The following video is a talk by Robert Martin “Uncle Bob”, one of the graybeards worth listening to. This video from 2011 is wide-ranging and contains a lot of brilliant advice. It’s stuff that we’ve known for a long time now, but every generation of programmers needs to re-learn these things about every 5-10 years. You usually can’t stop people from just reinventing the wheel because who wants to watch videos of or read blog posts written by old dudes, ammirite?

Ruby Midwest 2011 − Keynote: Architecture the Lost Years by Robert Martin by Robert C. Martin in 2011 (YouTube)

At 10:00, he talks about... [More]

7 months Ago

Links and Notes for October 13th, 2023

Published by marco on in Notes

Below are links to articles, highlighted passages[1], and occasional annotations[2] for the week ending on the date in the title, enriching the raw data from Instapaper Likes and Twitter. They are intentionally succinct, else they’d be articles and probably end up in the gigantic backlog of unpublished drafts. YMMV.

[1] Emphases are added, unless otherwise noted.
[2] Annotations are only lightly edited and are largely contemporaneous.

Table of Contents

Search algorithms are breaking down everywhere

Published by marco on in Design

I’ve noticed the Apple Music search acting quite wonky over the last couple of years. It seems utterly incapable of finding certain songs, even when you enter the exact title and artist.

I’ve had cases where Apple Music has dozens of albums from that artist, so that I’m almost certain that the song is available. It just will not show it to me. In those cases, I’ve instead searched with DuckDuckGo using the same title and artist to find out the name of the album. With the album name in hand, I... [More]

Links and Notes for October 6th, 2023

Published by marco on in Notes

Below are links to articles, highlighted passages[1], and occasional annotations[2] for the week ending on the date in the title, enriching the raw data from Instapaper Likes and Twitter. They are intentionally succinct, else they’d be articles and probably end up in the gigantic backlog of unpublished drafts. YMMV.

[1] Emphases are added, unless otherwise noted.
[2] Annotations are only lightly edited and are largely contemporaneous.

Table of Contents

History doesn’t care about justice

Published by marco on in Quotes

 History has no mercy. There are no laws in it against suffering and cruelty, no internal balance that restores a people much sinned against to their rightful place in the world. Cyclical views of history have always seemed to me flawed for that reason, as if the turning of the screw means that present evil can later be transformed into good. Nonsense. Turning the screw of suffering means more suffering, and not a path to salvation. The most frustrating thing about history, however, is that so... [More]”

Woefully unqualified “programmers”

Published by marco on in Programming

As I was reading the absolute train wreck of a unit test in Testing with a Lisp (Daily WTF), the song “What the fuck is going on?” popped into my head, like it always does when I see that a programmer not only didn’t understand the assignment, not only doesn’t know how to program, but also doesn’t know that they don’t know how to program.

They are living their best life because they don’t think that “knowing how to program” is required in order to be a programmer. Neither does their boss or team, I guess.... [More]

Raiffeisen PhotoTAN Registration

Published by marco on in Design

A major bank in Switzerland has an MFA that uses PhotoTAN. It took me dozens of attempts over three days to finally be able to register the app.

This isn’t the first time that this has happened. I’d reset my phone in July and I’d had to go through this for a couple of days then. When my partner reset their phone in August, it took days to register. In September, I’ve moved into a new phone and had to set up the app again.

  • It often failed to even send an SMS
  • 17 times it managed to send an... [More]

Links and Notes for September 29th, 2023

Published by marco on in Notes

Below are links to articles, highlighted passages[1], and occasional annotations[2] for the week ending on the date in the title, enriching the raw data from Instapaper Likes and Twitter. They are intentionally succinct, else they’d be articles and probably end up in the gigantic backlog of unpublished drafts. YMMV.

[1] Emphases are added, unless otherwise noted.
[2] Annotations are only lightly edited and are largely contemporaneous.

Table of Contents

Technology-independent software-development courses

Published by marco on in Programming

I was recently asked something like the following question, which I am citing with a few minor edits.

We would like to do a course about SW development with Python, preferably an online course, so that we can start at our own pace.

We don’t want a Python course, but would instead like a course more about SW development. It would be great if it were in Python because we are comfortable with it.

The interesting topics would be:

  • object-oriented programming
  • functional programming
  • design... [More]

To crash or not to crash; that is the question

Published by marco on in Programming

Note: I found this old draft containing my response to a colleague.

I 100% agree with you, in general. I absolutely want to know immediately when an assumption I’ve made does not hold.

But…😁

The degree to which I’m willing to crash depends on whose consistency I’m basing my assumptions on. When I call a method in my code from another method in my code, I’m absolutely going to assert that an argument is not null. I can control that. My IDE will tell me when I might be passing null. That... [More]

Encodo White Papers Archive

Published by marco on in Programming

This article is a copy of the white papers and process description that I wrote for Encodo Systems while I still worked there. I’ve preserved a copy of it here and in the linked articles.

Through our many years of experience building software, we’ve accumulated methodologies and principles that lead to quality software.

  • The experience and know-how we bring to our consulting services also make us excellent partners in development-process consulting.
  • We have experience in reviewing existing... [More]

Encodo White Papers: DI, IOC and Containers (2019)

Published by marco on in Programming

Encodo keeps the SOLID principles in mind when designing software.

DI & IOC

We implement the Inversion of Control [I] pattern with the dependency-injection pattern (D) to allow for a large amount of flexibility in how an application is composed. We’ve applied this principle throughout the Quino framework and use it in our products as well.

What does this mean? It means that the product or framework doesn’t make any decisions about which exact components to use. Instead, it indicates the API... [More]

Encodo White Papers: Clean and Safe Code (2019)

Published by marco on in Programming

These are the two core principles that guide how we write code:

  • KISS: Keep It Simple, Stupid
  • YAGNI: You Ain’t Gonna Need It

KISS

This first principle is a constant reminder to ourselves to avoid the seductive call of cleverness. Most code does not need to be clever. Very occasionally, it is necessary to implement something with real flair, that requires explanation.

The best code, though, requires no explanation. The best code gets its job done in a very boring way, using the same... [More]

Encodo White Papers: Testing as first-class citizen (2019)

Published by marco on in Programming

Tests are code. Writing tests is not a “step”—it is part of writing the code itself. The component is nothing without its tests.

It should be easy to verify any requirement with a test. The tests should tell the story of the requirements.

A developer can test any component in isolation (unit testing) or can test the component in the constellation in which it normally exists (integration testing).

Tests are code

Just so we’ve said it: tests are not a place to use a different coding style... [More]

Encodo White Papers: Document Everything (2017)

Published by marco on in Programming

Good documentation is part of every piece of quality software. What do we mean by “good”, though? Or “documentation”, for that matter? Quality software should be self-explanatory, but don’t be fooled into thinking that you don’t need to write documentation.

Actors & Use Cases

Documentation has an audience. Before writing anything, consider who you’re writing it for. What are the possible audiences?

Evaluators

Evaluators are interested in what your software does, how it interacts with other... [More]

Encodo White Papers: Continuous Integration and Delivery (2017)

Published by marco on in Programming

An important part of the software process is the final step: delivery.

If you can’t get your software into your customer’s hands, then what’s the point of writing it at all?

Goals

There are several at-times cross-cutting goals. In descending order of importance, they are:

  • Improve reliability and quality of releases
  • Improve efficiency of the release process
  • Improve testing feedback loop
  • Improve efficiency of the development process

Definition

There are several aspects to continuous... [More]

Encodo White Papers: Design by Contract (2006)

Published by marco on in Programming

Design by Contract is a software engineering practice in which software requirements and promises − the “Contract” − are explicitly written into the code. The code is, at the same time, better documented, more reliable and easier to test against. Encodo uses this technique to ensure software quality.

A brief overview of contracts

A software contract is composed of several components: preconditions, postconditions and invariants. Preconditions are what a component requires of a client, whereas... [More]

Encodo White Papers: Code Reviews (2017)

Published by marco on in Programming

A healthy and active review culture is essential for any team interested in building quality software. At Encodo, we’ve been doing reviews for a long time. They’ve become an essential part of everything we do:

  • Analysis
  • Estimates
  • Design
  • Architecture
  • Coding
    • Style
    • Performance
    • Coverage
    • Security
  • Deployment
  • And more…

Definition

What we mean by review is not a formal process at all. It is simply that you prepare work you’ve done for an informal presentation to a team member. Explaining what... [More]

Encodo White Papers: Component-based Design (2006)

Published by marco on in Programming

This article is part of an archive of Encodo White Papers.

What is the best approach when designing a new application, be it a small tool or an end-user application?

Build a Prototype?

Many developers jump straight into a prototype, in order to get a feel for how the application will work. While prototypes are good for demonstrations, they are dangerous: in projects with tight time or budget constraints, the temptation to simply “build out” the prototype becomes irresistible. This leads to... [More]

Encodo White Papers: Test-driven Development (2006)

Published by marco on in Programming

Most people in the software industry have heard of test-driven development — it has become a buzzword with several possible meanings.

The Problem with Unit Testing

One of the more negative associations is the notion of unit testing. Unit testing traditionally involves writing a test for each and every routine in a unit or class, to ensure that it does what it claims. This practice has, of late, declined in popularity — mostly because of the sheer mindlessness of maintaining complete... [More]

Links and Notes for September 22nd, 2023

Published by marco on in Notes

Below are links to articles, highlighted passages[1], and occasional annotations[2] for the week ending on the date in the title, enriching the raw data from Instapaper Likes and Twitter. They are intentionally succinct, else they’d be articles and probably end up in the gigantic backlog of unpublished drafts. YMMV.

[1] Emphases are added, unless otherwise noted.
[2] Annotations are only lightly edited and are largely contemporaneous.

Table of Contents

Links and Notes for September 15th, 2023

Published by marco on in Notes

Below are links to articles, highlighted passages[1], and occasional annotations[2] for the week ending on the date in the title, enriching the raw data from Instapaper Likes and Twitter. They are intentionally succinct, else they’d be articles and probably end up in the gigantic backlog of unpublished drafts. YMMV.

[1] Emphases are added, unless otherwise noted.
[2] Annotations are only lightly edited and are largely contemporaneous.

Table of Contents

Links and Notes for September 8th, 2023

Published by marco on in Notes

Below are links to articles, highlighted passages[1], and occasional annotations[2] for the week ending on the date in the title, enriching the raw data from Instapaper Likes and Twitter. They are intentionally succinct, else they’d be articles and probably end up in the gigantic backlog of unpublished drafts. YMMV.

[1] Emphases are added, unless otherwise noted.
[2] Annotations are only lightly edited and are largely contemporaneous.

Table of Contents

8 months Ago

We’ve been here before

Published by marco on in Miscellaneous

The interview The Great Reorganization of Sexuality and Gender by Hugh Ryan (This is Hell!) is quite an interesting discussion, which ranged over some absolutely terrible characterizations of what the concerns of so-called right-wingers are, as well as seemingly obstinately refusing to acknowledge the modern-day use of the word snowflake, instead clinging to a 19th-century definition, as well as completely misdefining the Dunning-Kruger Effect, and misusing “strawman argument” for good measure. Then he uses the phrase... [More]

Capsule Movie Reviews Vol.2023.07

Published by marco on in Movies

These are my notes to remember what I watched and kinda what I thought about it. I’ve recently transferred my reviews to IMDb and made the list of around 1600 ratings publicly available. I’ve included the individual ratings with my notes for each movie. These ratings are not absolutely comparable to each other—I rate the film on how well it suited me for the genre and my mood and. let’s be honest, level of intoxication. YMMV. Also, I make no attempt to avoid spoilers.

Star Trek III: The... [More]

Killing with medical neglect

Published by marco on in Public Policy & Politics

 The article Drug makers have tripled the prices of top Medicare drugs by Beth Mole (Ars Technica) writes,

“Overall, the average lifetime price increase for the top 25 drugs was 226 percent. The highest increases were seen in drugs that have been on the market the longest. For example, drugs that were on the market for under 12 years had an average lifetime price increase of 58 percent, while those on the market for 20 or more years had an average lifetime increase of 592 percent.

These are medications to help people.... [More]

Art is not Content

Published by marco on in Philosophy

 The always-entertaining Patrick [H] Willem made two excellent videos about the state of filmmaking and art, in general. The first one discusses what people are calling AI films, focusing on the recent spate of so-called Wes Anderson AI remakes.

There’s not a lot of my own, original writing in this article. Instead, I’ve done the service of transcribing what I found to be the pithiest, hardest-hitting parts of Willem’s two rather long videos, which total more than 90 minutes.

A.I. Filmmaking Is Not The Future. It's a Grift. by Patrick (H) Willems (YouTube)

At 27:00,... [More]

Links and Notes for September 1st, 2023

Published by marco on in Notes

Below are links to articles, highlighted passages[1], and occasional annotations[2] for the week ending on the date in the title, enriching the raw data from Instapaper Likes and Twitter. They are intentionally succinct, else they’d be articles and probably end up in the gigantic backlog of unpublished drafts. YMMV.

[1] Emphases are added, unless otherwise noted.
[2] Annotations are only lightly edited and are largely contemporaneous.

Table of Contents

The UI is an afterthought, a detail

Published by marco on in Programming

Complexity: Divide and Conquer! by Michel Weststrate on May 7, 2017 (YouTube)

“Can we make our UI dumb enough to make our app usable without it?”

The video demonstrates navigating through a simple e-commerce site. Then, he shows how the app can be driven from the console by calling the APIs directly—upon which the URL and UI all update automatically. That is, the logic is not in the UI.

He then demonstrates that he can drive the web site without a UI by deleting the rendering to React DOM entirely. He can still manipulate the console API to perform the same... [More]

Elite Universities are Hedge Funds

Published by marco on in Public Policy & Politics

The article US Colleges and Universities Are Becoming Giant Exploitation Machines by Daniel Denvir & Dennis M. Hogan (Jacobin) writes,

“[…] there are schools like Yale or Princeton, frankly, that have the latitude such that they could pretty much send people to school for free. But in spite of that, they continue to overwhelmingly enroll wealthy students.

And it’s not merit-based; they’re laundering privilege into credentials. That’s their business.

“They’re going to end up graduating students with more debt who also have... [More]