The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,854 other subscribers

Archive for the ‘Development’ Category

Bash Notes for Professionals book

Posted by jpluimers on 2020/05/12

For my reading list: Bash Notes for Professionals book

Download: [WayBack]  BashNotesForProfessionals.pdf

Via: [WayBack] Bash Notes for Professionals – a book compiled from Stack Overflow Documentation released under Creative Commons BY-SA  – ThisIsWhyICode – Google+

–jeroen

Posted in *nix, *nix-tools, bash, bash, Development, Power User, Scripting, Software Development | Leave a Comment »

Web accessibility is hard, so please let your sites not become worse over time

Posted by jpluimers on 2020/05/11

Despite clear guidelines (European level since 2016, W3C level since 2018), web accessibility is still hard, both for web site developers and their users.

Two years ago, bumped into a Dutch government web site that had become worse over time: they disabled keyboard paste for numeric fields, only would paste 1 digit at a time, and managed to have the delete button delete the current digit (like what the backspace does and should do) instead of the next.

Please do not do that!

Here are the guidelines: [WayBack] Web Content Accessibility Guidelines (WCAG) 2.1

This is the (Dutch) story:

 [WayBack] Thread by @jpluimers: “Beste @Waternet, waarom kan ik niet meer het hele opnamenummer in 1 keer plakken? Cijfertje voor cijfertje uit de gescippen plakken is nogal veel werk. Vroeger ging dit wel goed. plakken werkt niet met het toetsenbord: alleen m […]”

[WayBack] Jeroen Pluimers on Twitter: “Beste @Waternet, waarom kan ik niet meer het hele opnamenummer in 1 keer plakken? Cijfertje voor cijfertje uit de gescande brief knippen plakken is nogal veel werk. Vroeger ging dit wel goed.… “

[WayBack] Jeroen Pluimers on Twitter: “plakken werkt niet met het toetsenbord: alleen maar met de muis, dus onhandig voor mensen met een beperking. Als je in het veld staat werken alleen de numerieke toetsen en pijltjes van je toetsenbord, en de delete knop haalt het verkeerde karakter weg. Wie verzint die ongein?”

[WayBack] Jeroen Pluimers Twitterissä: “Bij postcode werkt plakken weer wel (en de rest van het toetsenbord ook helemaal), maar bij meterstand weer niet. Hoe maak je je site onhandig voor mensen met een beperking les 1: het is helemaal gelukt. Jammer! Lees eens … en … “

[WayBackJeroen Pluimers Twitterissä: “Bij email adres werkt plakken weer wel (gelukkig, het zijn maar 40 karakters), maar er mist een cruciale stap: meternummer. Die controle is voor adressen met meerdere meters ontzettend belangrijk. Vroeger werd dat wel gecontroleerd. Het invoerproces is dus een achteruitgang.”

[WayBackJeroen Pluimers on Twitter: “Laatste probleem is een waarschuwing *achteraf* dat jullie geen email bevestiging kunnen sturen. Super onhandig, omdat je op dat moment de stand ook niet meer kunt afdrukken. Er is veel werk voor jullie aan de winkel. Hou me gaarne op de hoogte van de vorderingen. CC @matijn”

[WayBackJeroen Pluimers on Twitter: “Bij dit soort problemen denk ik altijd aan @matijn en anderen waar toegankelijkheid van onschatbaar belang is. Zo zonde dat organisaties het voor elkaar krijgen om dit te verslechteren in plaats van de verbeteren, ondanks de Europese richtlijnen uit 2016 “

–jeroen

Read the rest of this entry »

Posted in Development, Internet, Software Development, Usability, User Experience (ux), Web Development | Leave a Comment »

OpenSuSE: keeping an ssh connection alive (convenient for keeping port forwardings up)

Posted by jpluimers on 2020/05/11

Below the steps for ensuring port forwardings are up from an OpenSuSE system to an ssh server using autossh on the client system.

Autossh

Many have written about the benefits of autossh, so I can’t do better than that. A good abbreviated quote is from [WayBack] Autossh for persistent database connectivity – Compose Articles:

Autossh wraps SSH in an application which was designed to monitor the state of the connection. It will also restart SSH if it exits. The idea of the monitoring is that If it sees the packets aren’t going through, it would also restart SSH. …

the developers of OpenSSH added some options – ServerAliveInterval and ServerAliveCountMax – which activate built in connection checking in OpenSSH. Together the options set checking at a set interval and exiting SSH if the count maximum is exceeded. And when SSH exits, autossh will restart it so it serves as much improved replacement as there’s no extra ports needed.

Summary

The scenario is that a client user named autoSshClientUser automatically logs on to a server as user autosshServerUser using autossh from the client system.

The sequence is to first test this manually from the client system using a regular ssh command, then manually with the autossh command from the client system, then automate the starting (and keep alive) of the autossh instance from the client system.

Start configuring the server side first:

  1. Create a user specific for logon (below it is autosshServerUser).
  2. Limit the user to only allow only port forwarding: [WayBacksecurity – How to create a restricted SSH user for port forwarding? – Ask Ubuntu

Then finish confiruging the client side:

  1. Install autossh: zypper install autossh
  2. Ensure autoSshClientUser has an ssh key that does not require a password
  3. Transfer the public key to autosshServerUser on the remote system
  4. Test with an autossh command that suits your situation best
  5. Ensure autoSshClientUser runs a job at or shortly after system boot (after the network is up) that will start autossh with the correct parameters

If the autoSshClientUser is root, then you could use a service to start autossh, but be sure that service depends on a functioning network connection.

If the autoSshClientUser is not root, then usually a user based cron job works best.

Naming idea:

  • Assume the client system is Train and the server is Station
  • The server user could be autosshTrainAtStation
  • The client user could be autosshTrainToStation

Server side

  1. [Archive.is] Installing on other OSes (Debian / Ubuntu;  Debian / Ubuntu; CentOS / Fedora / RHEL; ArchLinux; FreeBSD; OSX)
  2. As root, add he user using [Archive.is]useradd:

    # useradd --create-home --shell /bin/false autosshServerUser

  3. As root use su to become autosshServerUser, then create an ssh key without a password (you need to specify the logon shell) using [WayBackssh-keygen.
    This generates bot a secure rsa and

    # su --shell /bin/bash autosshServerUser
    > cd ~
    > whoami
    autosshServerUser
    > rm -f ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
    > ssh-keygen -t rsa -b 4096 -o -a 100 -f ~/.ssh/id_rsa -N ''
    Generating public/private rsa key pair.
    Your identification has been saved in /home/autosshServerUser/.ssh/id_rsa.
    Your public key has been saved in /home/autosshServerUser/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:... autossh24@linux
    The key's randomart image is:
    +---[RSA 2048]----+
    ...
    +----[SHA256]-----+
    > rm -f ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
    > ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/id_ed25519 -N ''
    Generating public/private ed25519 key pair.
    Your identification has been saved in /home/autossh24/.ssh/id_ed25519.
    Your public key has been saved in /home/autossh24/.ssh/id_ed25519.pub.
    The key fingerprint is:
    SHA256:... autossh24@linux
    The key's randomart image is:
    +--[ED25519 256]--+
    ...
    +----[SHA256]-----+
    

Client side

I need to check the below links on killing autossh (including the underlying ssh based connection), as you need to use the kill or pkill parameters signals -3 (SIGQUIT), not -9 (SIGKILL) as explained in [WayBack] ssh – How to stop/kill an autossh tunnel? – Super User (thanks mariusmatutiae and dviljoen).

Monitoring the state of the ssh connection needs some parameters (like ClientAliveInterval and ClientAliveCountMax). A good start on that is [WayBack] networking – autossh does not kill ssh when link down – Server Fault.

Setting up a service so root automatically logs on a remote system:

With non-root, it might actually be possible to do this  as a service too given there is a user= parameter in service files:

Though as non-root, most people seem to use cron [WayBack] ssh – Problems with Autossh: running from cron vs terminal – Super User

Please do not use /etc/init.d/after.local as mentioned often (for instance in [WayBack] TUMBLEWEED run a script a boot): this mechanism has been deprecated and won’t work on more recent systems (like 2012 and younger: [WayBack] openSUSE Forums – systemd and using the after.local script in openSUSE 12.1). The same holds for /etc/init.d/boot.local: don’t use, even though many people indicate it works, for instance [WayBack] Run a command at boot.

An interesting approach is at [WayBack] Autossh Startup Script for Multiple Tunnels | Surnia Ulula, though I will stick with what’s below.

Read:

Downloads:

References

Most of the above comes from these links:

–jeroen

Continuation of:

Read the rest of this entry »

Posted in *nix, Communications Development, Development, Internet protocol suite, Linux, Power User, SSH, TCP | Leave a Comment »

MultiBootUSB

Posted by jpluimers on 2020/05/07

Cool tool:

MultiBootUSB is a cross platform software written in python which allows you to install multiple live linux on a USB disk non destructively and option to uninstall distros. Try out the world’s first true cross platform multi boot live usb creator for free. Download Now!

Information and downloads on [WayBackMultiBootUSB.

There are actually a few repositories within [WayBack] mbusb (multibootusb) · GitHub of which one has a ruby implementation as well.

A more elaborate article is on [WayBack] How to Install Multiple Linux Distributions on One USB, but the site should get you going just fine.

Via: [WayBack] Multiple Linux distributions on one UBS stick. I just tried it with: * CloneZilla * Lubuntu * LiteLinux The tool they describe – MultiBootUSB – comes w… – Thomas Mueller (dummzeuch) – Google+

–jeroen

Posted in *nix, *nix-tools, Development, Hardware, Linux, Power User, Python, Software Development, USB | Leave a Comment »

The Science Of Target Setting (And How Most Companies Get It Wrong) | Corporate Rebels

Posted by jpluimers on 2020/05/07

Food for a lot of thought in most companies: [WayBackThe Science Of Target Setting (And How Most Companies Get It Wrong) | Corporate Rebels

My thoughts so far:

  1. Targets only work if the people having to work with their targets are fully involved. This holds for performance measuring as well.
  2. A target is very different from a strategic direction. Direction needs to get translated into targets by the people directly involved with the targets.
  3. Usually managers do not understand what is going on at the front-line. The front-line usually is very much aware of how management thinks and operates.

All of this basically comes down to:

  • If you want your company to become agile, any one-way (top-down or bottom-up) path fails.
  • When people in your organisation cannot cope with networked or multi-way paths, you have the wrong people.

–jeroen

via: [WayBack] “Senior managers are often not aware of what’s actually important in the work on the front line.” “People take more ownership when they make a commitme… – Marjan Venema – Google+

Posted in Agile, Development, Software Development | Leave a Comment »

CI/CD with .NET Core 2.0, VS Code, GitHub, Azure, and Docker: Intro

Posted by jpluimers on 2020/05/06

For my link archive because it shows so well how to use the dotnet command:

  1. [WayBack] CI/CD with .NET Core 2.0, VS Code, GitHub, Azure, and Docker: Intro
  2. [WayBack] CI/CD with .NET Core 2.0: Visual Studio Team Services
  3. [WayBack] CI/CD with .NET Core 2.0: Docker – Coding is Life
  4. [WayBack] CI/CD with .NET Core 2.0: Deploying to Azure – Coding is Life

Repository: [WayBack] GitHub – cmwilliams/numbertrivia: Tutorial Code

–jeroen

Posted in .NET, Development, Software Development | Leave a Comment »

“cushion treemap” delphi – Google Search

Posted by jpluimers on 2020/05/06

For my link archive below a few links from “cushion treemap” delphi – Google Search.

The reason: I like Sequoiaview a lot, but it has a few issues (of which I wrote in SequoiaView Homepage) and lacks a few things too.

WinDirStat is nice, but could be a lot cleaner. Both lack one feature I’d love to have: light-weight automatic updating on NTFS volumes.

Everything does the latter, but does not do graphical output as it is focused on being a blindingly fast indexing and searching tool (I like it a lot so there is even a category on my blog for it: Everything by VoidTools).

It would be cool if both could be hooked together, which would require a cushion treemap in Delphi and an API to access the Everything database.

So here are links that might help with the first:

–jeroen

 

 

Posted in Delphi, Development, Everything by VoidTools, Power User, Software Development, Windows | Leave a Comment »

Cool hacking stuff…

Posted by jpluimers on 2020/05/06

Boy, it is indeed a game of walls and ladders:

–jeroen

Posted in CommandLine, Development, Power User, PowerShell, PowerShell, Scripting, Software Development, Windows | Leave a Comment »

Rewritten version (free for non-commercial; small price for commercial use) GitHub – pleriche/FastMM5: FastMM is a fast replacement memory manager for Embarcadero Delphi applications that scales well across multiple threads and CPU cores, is not prone to memory fragmentation, and supports shared memory without the use of external .DLL files.

Posted by jpluimers on 2020/05/05

It has been mentioned a few times already, but for my link archive: [WayBack] GitHub – pleriche/FastMM5: FastMM is a fast replacement memory manager for Embarcadero Delphi applications that scales well across multiple threads and CPU cores, is not prone to memory fragmentation, and supports shared memory without the use of external .DLL files.

From the [WayBack] README.md:

Version 5 is a complete rewrite of FastMM. It is designed from the ground up to simultaneously keep the strengths and address the shortcomings of version 4.992:

  • Multithreaded scaling across multiple CPU cores is massively improved, without memory usage blowout. It can be configured to scale close to linearly for any number of CPU cores.
  • In the Fastcode memory manager benchmark tool FastMM 5 scores 15% higher than FastMM 4.992 on the single threaded benchmarks, and 30% higher on the multithreaded benchmarks. (I7-8700K CPU, EnableMMX and AssumeMultithreaded options enabled.)
  • It is fully configurable runtime. There is no need to change conditional defines and recompile to change options. (It is however backward compatible with many of the version 4 conditional defines.)
  • Debug mode uses the same debug support library as version 4 (FastMM_FullDebugMode.dll) by default, but custom stack trace routines are also supported. Call FastMM_EnterDebugMode to switch to debug mode (“FullDebugMode”) and call FastMM_ExitDebugMode to return to performance mode. Calls may be nested, in which case debug mode will be exited after the last FastMM_ExitDebugMode call.
  • Supports 8, 16, 32 or 64 byte alignment of all blocks. Call FastMM_EnterMinimumAddressAlignment to request a minimum block alignment, and FastMM_ExitMinimumAddressAlignment to rescind a prior request. Calls may be nested, in which case the coarsest alignment request will be in effect.
  • All event notifications (errors, memory leak messages, etc.) may be routed to the debugger (via OutputDebugString), a log file, the screen or any combination of the three. Messages are built using templates containing mail-merge tokens. Templates may be changed runtime to facilitate different layouts and/or translation into any language. Templates fully support Unicode, and the log file may be configured to be written in UTF-8 or UTF-16 format, with or without a BOM.
  • It may be configured runtime to favour speed, memory usage efficiency or a blend of the two via the FastMM_SetOptimizationStrategy call.

Read the rest of this entry »

Posted in Delphi, Development, FastMM, Software Development | 6 Comments »

Vue.js and TypeScript links

Posted by jpluimers on 2020/05/05

Since I one day need to do some Vue.js with TypeScript:

–jeroen

Posted in Development, JavaScript/ECMAScript, Scripting, Software Development, TypeScript, Vue.js | Leave a Comment »