Archive for 2021
Posted by jpluimers on 2021/02/22
Below is a great thread on why and how often you use spaces in your home.
It is time to critically review these, especially as the enduring covid crisis in many countries means you will spend a lot more time together for quite some time to come.
Rooms often hardly used, but usually being over-dimensioned or overly invested in:
- living rooms
- dining rooms
- master bed rooms
Rooms under-estimated:
- kitchens
- bathrooms
- family rooms (which seem to be the real living rooms)
- office / work spaces (too often in small bed rooms)
It helps figuring out the hotspots in your home, and think about why you use them often or seldom, then redo the layout of the house so often used spaces get big enough to efficiently use.
A great video with a study done some 5 years ago is below the fold showing those hotspots for a typical USA home. The same idea applies outside in other countries as well, though they might not have all the rooms a typical USA house has.
Thread: [Archive.is] Kristian Köhntopp on Twitter: “For me, “Working from Home” started at 2020-02-23 due to a fire in the office. A month later, when the building was about to be reopened, Corona struck and forced the entire company into working from home. We will be keeping this up until at least October. This is my desk.… “
–jeroen
Read the rest of this entry »
Posted in LifeHacker, Power User | Leave a Comment »
Posted by jpluimers on 2021/02/22
Videos from the above links below the sig.
–jeroen
Read the rest of this entry »
Posted in Facebook, Power User, SocialMedia | Leave a Comment »
Posted by jpluimers on 2021/02/19
As a follow-up on Still looking for base64url decoding tools, both on-line and for MacOS homebrew: this is in Python, works on MacOS, Linux and Windows, and can be integrated in a web page.
It is based on the ideas in [WayBack] Python-Twitter-Hacks/websiteScreenshot.py at master · edent/Python-Twitter-Hacks · GitHub, which was more like a code snippet with hard coded literals.
It downloads a jpeg web-site screenshot using the Google PageSpeed API V1, which generates the screenshot as a base64url encoded blob inside a JSON structure.
Python does not have native Python base64url support, but the concept of it is fairly straightforward: [WayBack] RFC 4648 – The Base16, Base32, and Base64 Data Encodings: Base 64 Encoding with URL and Filename Safe Alphabet, which allows data to be passed inside URLs without reverting to [WayBack] Percent-encoding – Wikipedia.
My changes work, but are by no means in canonical form or Idiomatic Python. I have a long way to go to reach that level of Python.
So I forked the repository, and fixed the script basing it on Python 3.
I might make it V2 compatible in the future. More information on V2 in [WayBack] Google APIs Explorer: Services > PageSpeed Insights API v2 > pagespeedonline.pagespeedapi.runpagespeed
Content is in the below gist.
–jeroen
Read the rest of this entry »
Posted in base64, base64url, Development, Encoding, Python, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/02/19
[Archive.is] ColumnCopy – Chrome Web Store: Enables copying columns from tables.

It can read anything on any web page, and it uses modifier keys, so I usually have it disabled until I need it.
You can disable/enable it on this page:
chrome://extensions/?id=lapbbfoohlcmlbdaakldmmallcbcbpjb
Via [WayBack] Select column from a table with Google Chrome – Super User
Sorry to dig up an old thread, but this might help someone in the future. I wrote a Chrome extension called ColumnCopy which accomplishes this task.
–jeroen
Posted in Chrome, LifeHacker, Power User, Web Browsers | Leave a Comment »
Posted by jpluimers on 2021/02/19
(Dutch as that’s where I found the information)
NB: Prijzen waren van begin 2019
- PDF: Installatiehandleiding COMBI+
- PDF: Vervanging HiTAC®-waterfilter bij COMBI(+) (E)
- PDF: Installatiehandleiding CUBE
- PDF: Afmetingen Flex kraan
- [Archive.is] Installateurs
Klik op het plaatje voor een grotere versie.
- [WayBack] PDF: Afmetingen reservoirs
LET OP! Houd rekening met 3 cm extra ruimte in uw keukenkastje boven de COMBI(+) en 8 cm extra boven de COMBI(+) E i.v.m. de slang
- [Archive.is] Wat zijn de afmetingen van de Quooker-reservoirs? Installatie
PRO3-reservoir (3L kokendwaterreservoir):
Reservoir hoogte: 40 cm
Reservoir diameter: 15 cm
COMBI(+)-reservoir (7L kokendwaterreservoir):
Reservoir hoogte: 47 cm
Reservoir diameter: 20 cm
CUBE (gekoeld waterreservoir):
Reservoir hoogte: 43 cm incl. CO2 cilinder
Reservoir breedte: 30 cm incl. CO2 cilinder
Reservoir diepte: 44 cm
Een overzicht van alle specificaties van onze kokendwaterreservoirs vind je hier. Een overzicht van alle specificaties van de Quooker CUBE vind je hier.
Benieuwd naar de afmetingen van de kranen? Deze vind je op de pagina van de kraan naar jouw keuze.
- [Archive.is] Onze collectie reservoirs
-
Kokendwaterreservoir COMBI+
-
Samenvatting
| Inhoud |
7 liter |
| Afmetingen (hoogte x breedte x diepte) |
47 x 20 x 20 cm |
| Hoeveelheid 40° – 60° |
Onbeperkte |
-
Algemeen
| Reservoir Hoogte |
47 cm |
| Reservoir Diameter |
20 cm |
| Opwarmtijd |
20 minuten |
| Benodigde Werkhoogte |
50 cm |
-
Vermogen
| Vermogen |
2200 W |
| Spanning |
230 V |
| Stand-By Verbruik * |
10 W |
| Jaarlijks Elektriciteitsverbruik |
511 kWh/A |
-
Waterdruk
| Minimale Waterleidingdruk |
200 kPa (2 bar) |
| Maximale Waterleidingdruk |
600 kPa (6 bar) |
| Max. Werkdruk |
800 kPa (8 bar) |
-
Beveiliging
| Overdrukventiel 800 KPa (8 Bar) |
| Maximaal Temperatuur |
-
Specificaties
| Hoeveelheid 40°C |
Onbeperkt |
| Hoeveelheid 60°C |
Onbeperkt |
| Temperatuurregeling |
Thermostatisch |
| Filter |
High Temperature Activated Carbon |
-
Energielabel
| Opgegeven Capaciteitsprofiel |
XXS |
| Energie-Effieciëntieklasse Voor Waterverwarming |
A |
| Energie-Effieciëntie Voor Waterverwarming |
36% |
| Warmwatertemperatuurinstelling Van Waterverwarmingstoestel |
40°C – 60°C |
| Geluidsniveau |
– dB |
-
Gekoeldwaterreservoir CUBE
-
Specificaties
| Spanning |
230 V |
| Vermogen |
100 W |
| Stand-By Verbruik |
12 W |
| Reservoir Hoogte |
43 cm |
| Reservoir Breedte |
30 cm |
| Reservoir Diepte |
44 cm |
| Minimale Waterleidingdruk |
200 kPa (2 bar) |
| Maximale Waterleidingdruk |
400 kPa (4 bar) |
| Type Waterfilter |
Hollow Fiber filter |
- [Archive.is] Koel bruisend en gefilterd water met de CUBE [Archive.is image]

Posted in DIY, LifeHacker, Power User | Leave a Comment »
Posted by jpluimers on 2021/02/18
Recently, I bumped into [WayBack] Write-Output confusion for the upteenth time.
Luckily I had the below links archived, basically invalidating the use of Write-Output, and invalidating the answer at [WayBack] powershell – What’s the difference between “Write-Host”, “Write-Output”, or “[console]::WriteLine”? – Stack Overflow.
Read the rest of this entry »
Posted in CommandLine, Development, PowerShell, PowerShell, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/02/18
[WayBack] showthedocs
is a documentation browser that finds the relevant docs for your code. It works by parsing the code and connecting parts of it to their explanation in the docs
, and supports these languages:
You can enter any language text, then click the language, followed by clicking the “SHOW ME THE DOCS!” button, for which an example is further below.
The site has an open architecture, allowing to plug in more languages and documentation:
gitconfig example
So for instance the below ./git/config file leads to this result [WayBack] where you can click on all the coloured areas for easy navigation through the documentation:
Read the rest of this entry »
Posted in *nix, *nix-tools, Database Development, Development, DVCS - Distributed Version Control, git, MySQL, nginx, PostgreSQL, Power User, Software Development | Leave a Comment »
Posted by jpluimers on 2021/02/18
Lots of Delphi programmers made, or are making the move, of classic Delphi based containers like TObjectList into generic containers like TList<T>.
A while ago, I got into a project that needed to extend lifetime of some objects. Virtually all of them were interface based, and most of the code was from the non-Unicode era, and most of the developers there had a strong background in that era, so they started fiddling with TList, found it hard, then thought “maybe TList<IInterface>” where will help.
The problem however, is that Delphi has no IList<T>. For that, you have to go to the Spring4D library.
Then I sat down with them, and proposed to use an instance good old TInterfacedList of which the context was maintained in an IInterfacedList field.
Back in the days where Delphi did not support non-generic types, TInterfacedList was the only built-in way to store interface references, and the Collection Classes framework by Ray Lischner were the only ways to do that in a more structured way (as they were based on interfaces, an idiom that Embarcadero should have used for their generic collections as well; Spring4D did, so use those collection classes and interfaces whenever possible as they are way more versatile than the Delphi built-in ones)
- Classic
IInterfacedList example:
- Collection Classes articles:
Back to using TInferfacedList, as it can still be useful today in:
unit InterfacesHolderUnit;
interface
uses
DebuggableInterfacedObjectUnit, System.Classes;
type
IInterfacesHolder = interface
procedure Add(const aReference: IInterface);
end;
TInterfacesHolder = class(TInterfacedObject, IInterfacesHolder)
strict private
FInterfaces: IInterfaceList;
public
constructor Create();
procedure Add(const aReference: IInterface);
end;
implementation
{ TInterfacesHolder }
procedure TInterfacesHolder.Add(const aReference: IInterface);
begin
FInterfaces.Add(aReference);
end;
constructor TInterfacesHolder.Create();
begin
inherited Create();
FInterfaces := TInterfaceList.Create();
end;
end.
and some tests:
Read the rest of this entry »
Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | 1 Comment »
Posted by jpluimers on 2021/02/17
If your company manages your own infrastructure, be sure you have monitoring on all levels.
It saves you from customers discovering issues like this: [WayBack] Thread by @jpluimers: “The @EmbarcaderoTech docwiki is down due to an error in duobook2.[…]”:
The @EmbarcaderoTech docwiki is down due to an error in duobook2. URLs pointing to wiki content fail, no matter the product. Examples for Rio and XE2 grabbed from docwiki.embarcadero.com/Libraries/Rio/… and docwiki.embarcadero.com/Libraries/XE2/…

This is the #1 reason for allowing archival of all your product documentation web-content in the @internetarchive, even for non-current products, as now only parts that have been allowed to save in the past are available.
Apart from nobody noticing the outage yet, which is bad in it’s own way, I hope the cause is not somebody fiddling with duobook (3 year old and unmaintained) without testing the consequences. As that would make the cause of the outage embarrassing.
[WayBack] https://github.com/ElectricVersion/DuoBook
Finally it is rather odd to get a HTTP 200 SUCCESS code on a failure. A HTTP 500 or 503 would be far more appropriate.
I wonder if that is a @mediawiki thing; maybe they could shed some light on that.
References en.wikipedia.org/wiki/List_of_H… and en.wikipedia.org/wiki/List_of_H….
The cool thing is that the stack traces teach you a lot about how a framework is structured.
Related:
- [Archive.is/WayBack] RAD Studio API Documentation: Rio
Exception encountered, of type "ArgumentCountError"
[6a5b64d3a502a9acff148fe1] /Libraries/Rio/en/Main_Page ArgumentCountError from line 420 of /var/www/html/shared/BaseWiki27/skins/DuoBook2/DuoBook2.php: Too few arguments to function DuoBook2Template::displayPrefs(), 0 passed in /var/www/html/shared/BaseWiki27/skins/DuoBook2/DuoBook2.php on line 99 and exactly 1 expected
Backtrace:
#0 /var/www/html/shared/BaseWiki27/skins/DuoBook2/DuoBook2.php(99): DuoBook2Template->displayPrefs()
#1 /var/www/html/shared/BaseWiki27/includes/skins/SkinTemplate.php(248): DuoBook2Template->execute()
#2 /var/www/html/shared/BaseWiki27/includes/OutputPage.php(2335): SkinTemplate->outputPage()
#3 /var/www/html/shared/BaseWiki27/includes/MediaWiki.php(743): OutputPage->output()
#4 /var/www/html/shared/BaseWiki27/includes/MediaWiki.php(509): MediaWiki->main()
#5 /var/www/html/shared/BaseWiki27/index.php(43): MediaWiki->run()
#6 {main}
- [Archive.is/WayBack] XE2 API Documentation
Exception encountered, of type "ArgumentCountError"
[d3d353581c3915881b976ab6] /Libraries/XE2/en/Main_Page ArgumentCountError from line 420 of /var/www/html/shared/BaseWiki27/skins/DuoBook2/DuoBook2.php: Too few arguments to function DuoBook2Template::displayPrefs(), 0 passed in /var/www/html/shared/BaseWiki27/skins/DuoBook2/DuoBook2.php on line 99 and exactly 1 expected
Backtrace:
#0 /var/www/html/shared/BaseWiki27/skins/DuoBook2/DuoBook2.php(99): DuoBook2Template->displayPrefs()
#1 /var/www/html/shared/BaseWiki27/includes/skins/SkinTemplate.php(248): DuoBook2Template->execute()
#2 /var/www/html/shared/BaseWiki27/includes/OutputPage.php(2335): SkinTemplate->outputPage()
#3 /var/www/html/shared/BaseWiki27/includes/MediaWiki.php(743): OutputPage->output()
#4 /var/www/html/shared/BaseWiki27/includes/MediaWiki.php(509): MediaWiki->main()
#5 /var/www/html/shared/BaseWiki27/index.php(43): MediaWiki->run()
#6 {main}
–jeroen
Read the rest of this entry »
Posted in Development, DevOps, Infrastructure, Power User, Software Development, Web Development | Leave a Comment »
Posted by jpluimers on 2021/02/17
I bumped into the tremendously site [WayBack] explainshell.com – match command-line arguments to their help text only after documenting the relevant cURL options of yesterdays post on checking your CertBot domain expiration dates.
The site allows put in a shell command-line to see the help text that, including matches for each argument.
It works so well because it parses both the shell command-line and the man pages, then constructs a web-page linking the relevant man page content to the shell command-line in the correct shell command-line order.
The explainshell has a counterpart showthedocs (both are open source) for explaining other languages (on the one hand more extended as it goes much deeper into parsing for instance SQL, on the other hand more limited as it only supports a few languages). More on showthedocs later.
The links
The parsing results
The first bit below is just the text output, and the second bit the screenshot, of a relatively simple command like [WayBack] explainshell.com – curl -fsSL example.org:
transfer a URL
|
-f, --fail
(HTTP) Fail silently (no output at all) on server errors. This is mostly done to better enable
scripts etc to better deal with failed attempts. In normal cases when a HTTP server fails to
deliver a document, it returns an HTML document stating so (which often also describes why and
more). This flag will prevent curl from outputting that and return error 22.
This method is not fail-safe and there are occasions where non-successful response codes will slip
through, especially when authentication is involved (response codes 401 and 407).
|
-s, --silent
Silent or quiet mode. Don't show progress meter or error messages. Makes Curl mute.
|
-S, --show-error
When used with -s it makes curl show an error message if it fails.
|
-L, --location
(HTTP/HTTPS) If the server reports that the requested page has moved to a different location
(indicated with a Location: header and a 3XX response code), this option will make curl redo the
request on the new place. If used together with -i, --include or -I, --head, headers from all
requested pages will be shown. When authentication is used, curl only sends its credentials to the
initial host. If a redirect takes curl to a different host, it won't be able to intercept the
user+password. See also --location-trusted on how to change this. You can limit the amount of
redirects to follow by using the --max-redirs option.
When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will
do the following request with a GET if the HTTP response was 301, 302, or 303. If the response
code was any other 3xx code, curl will re-send the following request using the same unmodified
method.
|
The screenshot is even more impressive:
Read the rest of this entry »
Posted in *nix, *nix-tools, bash, bash, Development, Power User, Scripting, Software Development | Leave a Comment »