The Wiert Corner – irregular stream of stuff

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

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • 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 2020

how to count the length of an array defined in bash? – Unix & Linux Stack Exchange

Posted by jpluimers on 2020/06/16

I needed to enumerate all the parameters to a function and access many of them by index in the same function, so thanks to both these:

I got at this:

  declare -a arguments=("$@")
  for index in ${!arguments[@]}; do
    echo $index/${#arguments[@]}:${arguments[$index]}
  done

These are all forms of Array handling or Shell Parameter Expansion with special cases for array variables:

  • ! does indirection, in this case from the array to the index of the array
  • # gets the lengt of the parameter (for arrays: the number of elements)
  • [] acccesse an array variable using an index

Via:

–jeroen

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

Victron Energy Quattro 24V 8000VA 200A information

Posted by jpluimers on 2020/06/15

Some links relevant for my Victron Energy Quattro 24V 8000VA 200A setup:

–jeroen

Posted in LifeHacker, Power User, Solar Power | Leave a Comment »

Susan David: The gift and power of emotional courage; | TED Talk

Posted by jpluimers on 2020/06/15

Worth viewing every time: Susan David: The gift and power of emotional courage | TED Talk.

Via:

–jeroen

Posted in LifeHacker, Power User | Leave a Comment »

Raspberry Pi, Tumbleweed, btrfs

Posted by jpluimers on 2020/06/15

I want to use btrfs as filesystem on a Raspberry Pi with opensuse Tumbleweed.

It is hard to find out how, so here are a few links that should help me from “opensuse” “tumbleweed” “btrfs” “raspberry” pi:

–jeroen


Posted in *nix, *nix-tools, Development, Hardware Development, Linux, openSuSE, Power User, Raspberry Pi, SuSE Linux, Tumbleweed | Leave a Comment »

“windows 10” cannot manually set time – Google Search

Posted by jpluimers on 2020/06/12

On my research list: a Windows 10 machine with automatic time settings being 2 hours off.

I tried setting time and time zone, but the new Windows 10 UI did not let me.

List to start

–jeroen

Posted in Power User, Windows, Windows 10 | Leave a Comment »

Create table without header in markdown/reStructuredText?

Posted by jpluimers on 2020/06/12

It looks like few of the markdown parsers can generate a table without a header: [WayBack] Create table without header in markdown – Stack Overflow.

This comes close in some generators as they generate a half-height empty header for it:

| | | |
|-|-|-|
| Normal Key| Value1 |
|__BoldKey__| Value2 |

But [WayBack] reStructuredText Markup Specification: Grid Tables do support it even if a pipe cell delimiter is inside a cell content:

+--------------+----------+-----------+-----------+
| row 1, col 1 | column 2 | column 3  | column 4  |
+--------------+----------+-----------+-----------+
| row 2        | Use the command ``ls | more``.   |
|              |                                  |
+--------------+----------+-----------+-----------+
| row 3        |          |           |           |
+--------------+----------+-----------+-----------+

–jeroen

 

Posted in Development, Lightweight markup language, MarkDown, reStructuredText, Software Development | Leave a Comment »

ssh_config section order is important: the first setting obtained from a Host/Match section applies

Posted by jpluimers on 2020/06/12

Often, configuration files work like this:

  • global settings are at the top
  • detailed settings are further on, overwriting global settings

Not for ssh_config though, so I was right writing I should read more on it in Good read for starting to intermediate ssh users is “SSH Essentials: Working with SSH Servers, Clients, and Keys | DigitalOcean” and pointers to more advanced reading material.

So here is how ssh_config does it as per man page at [WayBack] ssh_config(5) – OpenBSD manual pages and [WayBack] ssh_config — OpenSSH SSH client configuration files at Linux.org:

     For each parameter, the first obtained value will be used.  The configuration files contain sections separated
     by “Host” specifications, and that section is only applied for hosts that match one of the patterns given in the
     specification.  The matched host name is the one given on the command line.

     Since the first obtained value for each parameter is used, more host-specific declarations should be given near
     the beginning of the file, and general defaults at the end.

This means a section Host * needs to come at the end.

I got that wrong and it took me the better half of a morning to figure out the cause of a connection problem ending in this:

debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred publickey
debug3: authmethod_lookup publickey
debug3: remaining preferred:
debug1: No more authentication methods to try.

Somehow, the identity file was never used to try public key authentication at all because of the ssh_config order in ~/.ssh/config.

I’m not the only one confused, as during the search for the cause with “remaining preferred” “No more authentication methods to try.”:

Maybe now I should step up from manually editing the ssh_config file and use [WayBack] GitHub – moul/advanced-ssh-config: make your ssh client smarter to generate it for me.

–jeroen

Posted in *nix, *nix-tools, Communications Development, Development, Internet protocol suite, Power User, SSH, ssh/sshd, TCP | Leave a Comment »

Delphi AMQP links

Posted by jpluimers on 2020/06/11

Some links I found about Delphi and AMQP.

AMQP

Delphi and AMQP

Threads:

Tests

Other environments

–jeroen

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

LD_PRELOAD: preload a Linux library, for instance to obtain more information on a segmentation fault

Posted by jpluimers on 2020/06/11

Not being a proficient Linux programmer, I wondered what other means than learning gdb intrinsics I had to get more information about a segmentation fault.

A while back, pip list 2> /dev/null would cause a segmentation fault on my system (see [WayBack] Bug 1084812 – [aarch64] IPv4 DNS leading to segfaults).

It turns out that LD_PRELOAD was my friend (like TERM=xterm was a friend before):

LD_PRELOAD=libSegFault.so pip list 2> /dev/null

It indicated that the problem was in libc, which on opensuse is implemented by glibc.

This meant that the originally diagnosed problem was already accurately describing the symptoms.

Searching for glibc libSegFault.so didn’t reveal many useful links, so I’ve included the one making most sense to me here:

The cool thing: most of the links above come from [WayBack] segmentation fault – Can you get any program in Linux to print a stack trace if it segfaults? – Server Fault which I found when searching for linux find segmentation fault stack trace

That link explains both the LD_PRELOAD steps and gdb steps (:

An alternative is to use gdb directly: [WayBack] command line arguments – How do I run a program with commandline args using gdb within a bash script? – Stack Overflow:

gdb -ex=run --args pip list

--jeroen

Posted in *nix, C, Development, gcc, Linux, Power User, Software Development | Leave a Comment »

Don’t mix objects and interfaces

Posted by jpluimers on 2020/06/11

Worth repeating Dalija Prasnikar, because I bumped into sources of people not getting this concept: [WayBack]: Don’t mix objects and interfaces.

You should not, but sometimes it is hard not to.

The rules in his article are very important as they indicate what’s safe and what’s not:

  1. object references are weak, interface references are strong
  2. reference counted object instances need at least one strong reference to keep them alive therefore you can’t use object reference as primary owning reference
  3. reference counted object instances can be safely accessed through temporary, short-lived (weak) object references, as long as there are strong reference(s) keeping the object alive

So basically:

  • ensure a reference counted instance has at least one strong reference to manage the lifetime
  • temporary (short-lived) weak references are OK as long as you are sure the strong reference lives longer

Note that unsafe will make interfaces references weak instead of strong; the same holds for pointer lists [WayBack] Using the [unsafe] attribute, it is possible to store the interface without reference counting. Is there any way for this behavior to be “transferred” … – Jacek Laskowski – Google+

–jeroen

via: [WayBack] Dalija Prasnikar – Google+

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