First time programming using the Crystal language

An article, posted about 20 hour ago filed in programming, ruby, scripting, typing, compilation, speed & performance.

Recently I posted 'Doing less'. Tl;dr: I wondered why we (as tech-society) seem to be thrilled about making inefficient round trips using AI for development, or chase each other to use typed languages, while we could be using more expressive programming languages instead. Instead of guessing human input, we could write untyped short scripts that detail every edge case carefully, but without extreme uncertainty of human language input nor the extreme preciseness of typed languages. Scripting, however, is scoffed at by Real Programmers, but then why oh why do we AI?

Someone suggested I should try a different programming language (knowing that I'm a rubyist). Try Crystal, a language that shares performance characteristics of other compiled languages like C and Rust (not always in the top regions, but close). And although I heard of it a long time ago, I kinda forgot about it, shi…

Continue reading...

Deploying and managing web applications

Traditional software is downloaded, installed, then run. With web applications it is different. These are built, then pushed to a remote server and then the interface of that application is presented to the screen of the users via web-technologies like HTML, CSS & JavaScript, in the past sometimes assisted by Flash, these days using WASM. Besides that web applications need databases, storage, cache-systems, maybe a search solution, and sometimes more dedicated tools. From the end-user's perspective, it became a lot easier (although more restrictive) to access these tools, but getting it up and running got harder.

In the old days web software was deployed by uploading software via FTP, in a folder that was then read by a web server, and then presented to the user of the web-application. I've also deployed compiled .war files manually via a tomcat web-interface. Databases, storage, these were all pretty much managed by hand, sometimes even requiring physically adding a new drive or…

Continue reading...

Possible strategies in creating a web based editor

An article, posted 8 days ago filed in textarea, web, editor, wysiwyg, trix, online, contenteditable & canvas.

This may not be the complete list of possible strategies, but this is my own documentation of a short exploration.

textarea

One of the simplest form of "editors" is the plain textarea. Sometimes enriched by Javascript, adding snippets of text to assist more complicated markup styles (e.g. select text, and make it bold by surrounding it with a double asterisk (in case of markdown)).

Advantages:

  • robust
  • simple

Disadvantages:

  • No advanced markup (and/or relies on e.g. markdown, which is nice, but not for everyone)

By offering a preview of the markup, the disadvantage can be mitigated to some extend.

More information: MDN on ``

It is possible to position autocomplete helpers when the entry font is of a fixed type; as you can find the position of the caret within the text (using [selectionStart (on MDN)](https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement/…

Continue reading...

Doing less

An article, posted about 2 months ago filed in ruby, programming, efficiency, go, ai, compilation & rust.

A lot of automation is about doing less manual labour. People who automate enjoy doing less. This desire lead to new programming languages, advanced IDE-tooling, but recently we've gotten a new type of assistance: AI. Microsoft using Github Copilot, Amazon with CodeWhisperer, and more will follow offering yet another Code predictor using 'open source' models.

But is it the right approach?

Solving problems that I don't have

I mainly write in a language that was developed for developer happiness: ruby. It wasn't designed for optimal performance, but allows code to be readable and easy to write (when you have a certain proficiency in Ruby that is). After having turned CodePilot on and off for a year, I'm really not impressed. It has saved me typing strings that I might have otherwise copied from an earlier test, but with the disadvantage that the resulting text…

Continue reading...

Re: Naar Groenland voor een marathon is zo gek niet meer

An article, posted about 2 months ago filed in nrc, Marathon, hardlopen & klimaat.

Ingezonden (maar niet geplaatst bericht) aan NRC in een reactie op een artikel genaamd "Naar Groenland voor een marathon is zo gek niet meer":

Gisteren luisterde ik nog een staartje van de NRC podcast “Zo simpel is het niet” over Altruïsme. Daarin werd duidelijk gemaakt dat mensen gestimuleerd kunnen worden om het juiste te doen door goede voorbeelden te geven, zodat mensen leren dat er meer mensen zijn die ‘het juiste doen’. Naar Groenland of New York gaan om een stukje te rennen, of naar Londen voor een optreden, en dan weer retour te vliegen hoort daar echt niet bij. We moeten, om het klimaat te redden, ondermeer minder ver gaan reizen. Aanleiding voor het artikel lijkt een onderzoekje van een exploitant van luchthavenlounges en is verder nog verrijkt met quotes van een touroperator. De psychologie die …

Continue reading...

Homebrew and `puma-dev` and microservices

An article, posted about 2 months ago filed in homebrew, how i do it, local, localhost, Microservices, openssl, programming, puma-dev, ruby, server, ssl, tls, mac & macos.

When you're writing server to server communication locally, and these servers are running behind some proxy like puma-dev that enables SSL connections, you may face issues with OpenSSL (or variant) not trusting the connections. That is good, you want OpenSSL not to trust just any random certificate. But how to make it pass?

Your web browser probably allows you to visit a page on a server and even approve the certificate. You should then export the chain as .pem (Firefox makes this pretty easy: click on the lock, view security, view certificate, go to the "CA"-tab for that certificate and export the chain.

This PEM chain is just a plain text file, containing the public certificates of your local 'CA' (created by Puma-Dev)

Copy the text using an editor of choice.

And now open up: /opt/homebrew/etc/ca-certificates/cert.pem and add it.

Also make sure that everything uses this cert.pem by symlinking it to this file, so for example with ruby run

 $ ruby -ropenssl -...

Continue reading...

I'm nitpicking a bit on code naming...

An article, posted 5 months ago filed in ruby, development, software, naming & Martin Fowler.

In a code review that I did today, I left a final note to the author of some new piece of code:

Sorry for nitpicking on code naming. The approaches you take are good, but naming is hard (but important!):

> There are only two hard things in Computer Science: cache invalidation and naming things.

(see here a list of variations on these two hard problem 'jokes' in Computer Science)

I enjoy the ruby programming language because you can get a long way by just assuming things. A collection implements each, every object has nil?, in rails, I can get the relationship of a record and use scopes to filter the relationships as defined in the class of that related record. If it ands with a questionmark, it returns a boolean(y). Anyway.

So while they might say: "never assume things", and sure, a lot of things are chaos, but ideally not our code base :) I prefer to work from assuming t…

Continue reading...

Entitlements, Roles and Groups in Identity Access Management

An article, posted 5 months ago filed in roles, groups, technology & it.

Sometimes I get confused by terminology. And many of the marketing pages that reply to such queries don't really help. So I here is my simple breakdown of these terms in relation to each other.

Entitlements

Entitlements are Granular Permissions. Entitlements represent specific rights or privileges and are the building blocks of roles and can be assigned individually or as part of a role.

Example: An entitlement might be "Access to Premium Reports". This entitlement can be part of multiple roles, such as "Admin" or "Premium User".

Note that not always entitlements are explicitly exposed, and are roles used in downstream applications to determine the exact entitlements associated with a role. Enterprise applications do attempt to separate these, but there is a lot of additional administration associated with this, especially when applications are extended rapidly.

Roles

Can be considered a collection of entitlements, a higher-level abstraction that groups m…

Continue reading...

(Database) Transactions should be used modestly

An article, posted 7 months ago filed in database, sql, programming, ruby, performance & simplicity.

It is good practice to leave your database in a consistent state. There are different ways to do this. Foreign key constraints, indexes, typing of columns, are all strategies to keep your database in a consistent state. Transactions are another way providing you a tool to keep the database consistent: if one of the inserts or updates fail, your database will rollback to the state before the first in the series of inserts and updates within that transaction.

Some languages make it really simple to create a transaction. In Ruby on Rails it is simply opening a block:

User.transaction do
  ## ... all db operations are now in a transaction
end

But be cautious; transactions don't come for free: they lock the table or row, which is bad for performance. It can, by design, stop other processes from updating the same rows. And all this gets worse when transactions take longer, when for example they contain request to remote resources.

Hence, my approach to transact…

Continue reading...

Generating and parsing data URI's in Ruby

An article, posted 7 months ago filed in uri, data, url, data-url, ruby, link, browser, html, json & api.

I'm fond of data-URI's (MDN Link). 12 years ago I reappropriated a tool that stored a webpage with its related resources in a Microsoft specific format and rewrote it into something that would store it in normal HTML where the related resources were encoded in data URI's. Recently the topic came up again at a project I was working in, where microservices are still a thing. And while discussing it with colleagues it seemed as if knowledge about this quite useful URI-scheme wasn't on top of everyone else's mind. Instead, the original idea was, we could upload the resource to S3, pass the link, download the resource from S3 at the receiving end, and then have some policy that takes care of deleting it… nah…

data-URI: The basics

This is the most simple data-URI:

data:,Hello%2C%20World%21

You [can open it in your browser](dat…

Continue reading...

Pretty Persistent IDentifiers (PPID)

An article, posted 8 months ago filed in pid, links, isbn, science, archive, url, uri, web & semantic.

If you're into archival stuf, you've probably come across the concept of PIDs. PIDs help organisations attribute data to consistently identified objects. There are different PID-schemes. Books can be persistently be identified by their ISBN. In science, DOIs are popular to identify scientific articles. And there are plenty of other persistent identifiers.

What most of them share is the following: they need registration. And while that could be a good thing, I've seen well meant attempts at creating a PID where the central entity went rogue, links are dependent on some centralised resolver and it all falls apart.

The requirements

When I was tasked to create a long lasting QR label the requirements were clear:

  • The basis had to be a URL (QR Codes can contain anything, but URLs deliver the best UX)
  • It should have a fallback: the url should not be a meaningless string; it should at least contain an identifier i…

Continue reading...

When to use decorators

An article, posted 9 months ago filed in ruby, rails, ruby on rails, service, architecture, when to use & models.

Are you sure?

Decorators decorate your class with new set of functionality.

What are your decorators doing? Adding a few rendering specific methods to a class to help with rendering? Perhaps you should consider Presenters. But better: how will it scale, can it be grouped, will it really add the simplification. Be wary of too quick branching off functionality to decorators. Most cases I've seen them were overly architectured, and they didn't bring much value.

One might consider using Concerns or mixins as an alternative. The disadvantage here is that your main object gets more public methods, but I consider it as a feature after having experienced too much potentially reusable functionality grouped arbitrarily away in other presenter / decorator classes.

Continue reading...

I love you ruby, `unless`...

An article, posted 9 months ago filed in sorting, ruby & programming.

I'm quite familiar with writing ruby code. I've even expressed my love for the language long time ago. But some constructs still bug me. One of them is unless…

I've seen variants of this code:

temperature = 36.7
unless temperature > 37.2 || temperature  35.5 && temperature < 37.2
  puts "Healthy temperature. Temperature is within the normal range."
end

or perhaps even nicer:

if (35.5...37.2).include?
  puts "Healthy temperature. Temperature is within the normal range."
end

Continue reading...

Data recovery adventures

An article, posted 9 months ago filed in harddrive, recovery, hdd, files, data & backup.

I'm not a data recovery specialist, but I tend to help people out every now and then with computer problems, and sometimes you have to deal with a disk that doesn't seem to work anymore. This is a collection of notes I made after I got a new challenge. I had to resort to using testdisk and ddrescue. I've been testing a few tools, and read about more, but these were the tools I landed on.

IMPORTANT: I'm not an expert on this topic. Every additional moving of the needle can cause a harddrive to fail even harder. If your data is absolutely critical, use a certified data recovery service.

1. Is it replaceable hardware?

When I get a harddrive in a laptop or external enclosure, my first attempt is to see if there is something between computer and the disk. I try to remove the disk from the computer or enclosure and connect it to a USB3 to 4-types of P/SATA adapter I have bought years ago and has saved me multiple times. If it mounts, copy everything to another drive, to b…

Continue reading...

Terugblik op PublicSpaces Conferentie 2024

An article, posted 10 months ago filed in microsoft, google, kimvsparrentak, europa, public, cloud, azure, AWS, amazon, eu & ibm.

Veel inspirerende en mooie woorden dit jaar op PublicSpaces Conferentie 2024, maar vrij van zorgen was ik erna niet. Op de tweede dag sprak Bert Hubert uit in een jolig pessimistisch verhaal dat hij er vanuit gaat dat over enkele jaren 98% van de e-mails verzonden wordt vanuit dan wel servers van Microsoft dan wel Google. Ik hoopte na de PublicSpaces conferentie terug te gaan met nieuwe moed en handgrepen een kleine bijdrage te kunnen leveren om deze beweging te kenteren, maar desillusie is het gevoel dat me beklijft. Misschien moeten we hoop hebben dat de uit de DMA act volgende aanscherping van de aanbestedingsregels helpt om te voorkomen dat de grote partijen niet alles op kunnen slikken, zoals Kim van Sparrentak (MEP voor GroenLinks, voor wie ik eerder een positief stemadvies gaf) aangaf. Maar terwijl [Amsterdam trots aankondigt bezit te zijn met een "autonome strategie"](https://a…

Continue reading...

murb blog