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 Make File Explorer Open This PC By Default In Windows 10

Posted by jpluimers on 2020/07/27

When I first bumped into this around 2017, I found via [WayBack] How to Make File Explorer Open This PC By Default In Windows 10 that it was just a new “Folder Options” choice that by default pointed to “Quick Access” (Dutch “Snelle Toegang”) instead of prior Windows versions opening at “This PC” (Dutch “Deze PC”).

Only recently, I found out that Scott Hanselman already tweeted about this in August 2015:

[WayBack] Scott Hanselman on Twitter: “Windows 10 Tip: You can control where Windows Explorer opens (This PC vs Quick Access). Click View | Options http://t.co/mNi6K6tVIP”

–jeroen

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

Life is a state of mind.

Posted by jpluimers on 2020/07/26

https://twitter.com/_je_suis_John/status/1287261372959596544

Remembering Peter Sellers who passed away 40 years ago today ~ Being There (1979)

Posted in Uncategorized | Leave a Comment »

Verifying large sets of file hashes with md5sum

Posted by jpluimers on 2020/07/24

A few tips:

  1. Recursively getting all md5 sums from a source directory:

    cd /sourceDirectory
    find -type f \( -not -name "md5sum.txt" \) -exec md5sum '{}' \; > md5sum.txt

    .

  2. Checking the sums against a target directory

    cd /targetDirectory
    md5sum -c /sourceDirectory/md5sum.txt

    .

On some systems (this was an ESXi system which can’t run stuff from the console in parallel), you could optimise this using xargs for the generation and GNU parallel for the generation and checking. Both should be very similar:

GNU parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel.

Via:

–jeroen

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

Science Fiction Writer Robert J. Sawyer: WordStar: A Writer’s Word Processor

Posted by jpluimers on 2020/07/24

20+ years old and still relevant: [WayBack] Science Fiction Writer Robert J. Sawyer: WordStar: A Writer’s Word Processor.

Besides doing a very quick and thorough introduction in the what and how of the WordStar keyboard shortcuts, he also explains a lot about the why.

Recommended reading, especially because of a user-experience perspective.

Markdown, Atom and Visual Studio code are not that different from WordStar.

Via:

–jeroen

Read the rest of this entry »

Posted in Development, History, Power User, Software Development | 2 Comments »

SharpLab

Posted by jpluimers on 2020/07/24

This is amazing stuff: it runs your C# code through a specific version (git branch) of the C# compiler!

C#/VB/F# compiler playground. Not a Shark lab.

Source: SharpLab

Example: https://sharplab.io/#v2:EYLgtghgzgLgpgJwD4AEAMACFBGA3AWACh0tsA6AGQEsA7ARzIFEAPABwTiiioHsaoCxAMxYATBgDCAHgAqAZR4BXBAGM4AGgwyAIpxgA+DAHcAFojhbdsDCAw04RgBQBKDAG8iGL1hEt2nbj4pFABWWQVlNU0dPX1DADEeHhdPbzSAXkMwHgATOAAbDEy7B0s9F0E0lF82Di5eGmCw+SVVDTLYOIwAIQgEFMI0jKzcgqLDeyMOmHcAX0FZoA===

Via:

–jeroen

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

Syncing GExperts svn to git

Posted by jpluimers on 2020/07/23

A while ago, I made a synced git repository and put it on [WayBack] GitHub – jpluimers/GExperts: Synced every now and then from git svn clone https://svn.code.sf.net/p/gexperts/code/trunk GExperts.

I forgot to save my initial notes, but they were based on what I did before with [WayBack] jeroenp / fastmm — Bitbucket**, so I resurrected my notes, after a chat with Graeme Geldenhuys on how he did a similar thing for Indy at

[WayBack] GitHub – graemeg/indy: Indy (Internet Direct) framework. This is an unofficial mirror repository which gets synced every 15 minutes. It contains the full history from the official Indy 10 SVN repository.

So here are my notes, as on GitHub they look odd:

[WayBack] GitHub – jpluimers/GExperts

Synced every now and then from git svn clone https://svn.code.sf.net/p/gexperts/code/trunk;

Syncing steps:

first time

git svn clone https://svn.code.sf.net/p/gexperts/code/trunk GExperts.git-svn
git remote add origin https://github.com/jpluimers/GExperts.git
git push origin master

each additional time from inside the GExperts.git-svn directory:

git svn fetch
git svn rebase
git push origin

It is very similar to what Graeme does for Indy in a cron job for each subsequent sync from https://svn.atozed.com:444/!/#Indy10/view/head/trunk/Lib to https://github.com/graemeg/indy:

#!/bin/sh
# Fetches latest revisions for Indy SubVersion repository
# and then pushes changes to GitHub.
# Created by Graeme Geldenhuys 

GIT="/usr/bin/git"

cd /data/git/indy.git/
$GIT checkout master
$GIT svn rebase
$GIT gc --auto
$GIT push github

And to my FastMM notes:

Getting the latest SVN changes:

git svn rebase

Initial repository creation and add to bitbucket (or github)

git svn clone http://svn.code.sf.net/p/fastmm/code/ FastMM.git

Notes (see [WayBack] Effectively Using Git With Subversion | Viget and [WayBack] Practical tips for using Git with large Subversion repositories for explanation):

  1. Do not include the -s option after git svn clone, as this SVN repository does not have the default trunk/branches/tags structure.
  2. There are no [WayBackSVN ignore entries in this repository, so this is not needed for git svn show-ignore > .gitignore

Add the repository to Bitbucket or GitHub:

Add either of these URLs to  [WayBack] Feedly for monitoring:

Some additional tidbits:

–jeroen

Posted in Development, DVCS - Distributed Version Control, git, Software Development, Source Code Management, Subversion/SVN | Leave a Comment »

Squirrel · GitHub: Server-driven updates for native apps

Posted by jpluimers on 2020/07/23

Reminder to self as I might need it one day:

Server-driven updates for native apps (Windows/Mac/iOS)

[WayBack]Squirrel · GitHub

Via: [WayBackHow do you deploy and update desktop applications? Carl and Richard talk to Paul Betts about the open source project called Squirrel – https://github.c… – .NET Rocks! – Google+

–jeroen

Posted in Deployment, Development, DevOps, Software Development | Leave a Comment »

Yes Delphi does some type inference on generic method calls

Posted by jpluimers on 2020/07/23

Delphi does indeed so some type inference as Primoz found out below. It has been doing this for a long time, improved over time, but has a long road ahead.

One odd thing is that generics (and the majority of inference support) were introduced in Delphi 2009 ([WayBack] Generics with Delphi 2009 Win32), but the inference was already documented in Delphi 2007: [WayBack] Delphi 2007 – Declaring Generics: Parameterized Types

This is a reminder to myself to write some more example code on what kinds of inference work and which do not, especially because of the comments from David Heffernan, Marco Cantu and Stefan Glienke, especially since the improvement over time has been small. I am curious to see how the promised “working on it” by now lives up to reality.

David Heffernan
This is a rare piece of code where type inference actually works. Mostly it does not which is very frustrating.

It’s a little ironic that you ask why you don’t need to include <T>. Normally people ask about the much more frequent instances where you do need to include <T> because the compiler’s type inference is so weak.

David Heffernan
+Marco Cantù Much more commonly there are times when you want the compiler to infer the type, but it won’t. It would really make a difference to us if the compiler was better at this.

Marco Cantù
+David Heffernan I tend to agree the compiler should be much better at type inference. Working on it!

Stefan Glienke
Infering the generic argument from a constructed generic type would be great.

GuessTheType<T>(const x: TArray<T>);

var
  a: TArray<Integer>;
begin
  GuessTheType(a);

does not work although the compiler could infer the parameter for GuessTheType from its x parameter but currently it does not know that a originally was a TArray<T> (yes, I know array of T as signature works but that is a different thing).

P.S. +Marco Cantù btw how hard can it be to finally implement generic standalone routines without that ugly static type? Probably one of the highest voted feature requests: https://quality.embarcadero.com/browse/RSP-13724)

Source: [WayBack] Anybody here knows since when we don’t have to write when calling generic ProcSomething(param: T)? It was brought to my attention today that the… – Primož Gabrijelčič – Google+

–jeroen

A quick look into the generated assembler code proves that the type is indeed resolved correctly:

Project17.dpr.26: TGeneric.GuessTheType<Exception>(x);
0041C530 8B151C484200     mov edx,[$0042481c]
0041C536 A1F4974100       mov eax,[$004197f4]
0041C53B E84CD3FFFF       call TGeneric.GuessTheType<System.SysUtils.Exception>
Project17.dpr.27: TGeneric.GuessTheType(x);
0041C540 8B151C484200     mov edx,[$0042481c]
0041C546 A1F4974100       mov eax,[$004197f4]
0041C54B E83CD3FFFF       call TGeneric.GuessTheType<System.SysUtils.Exception>
Project17.dpr.28: TGeneric.GuessTheType(s);
0041C550 8B1520484200     mov edx,[$00424820]
0041C556 A1F4974100       mov eax,[$004197f4]
0041C55B E83CD3FFFF       call TGeneric.GuessTheType<System.SysUtils.TSimpleRWSync>

Source: https://plus.google.com/+Primo%C5%BEGabrijel%C4%8Di%C4%8D/posts/edE3YWtwY3B

view raw

readme.md

hosted with ❤ by GitHub


program Project17;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
TGeneric = class
class procedure GuessTheType<T>(const value: T);
end;
var
x: Exception;
s: TSimpleRWSync;
{ TGeneric<T> }
class procedure TGeneric.GuessTheType<T>(const value: T);
begin
end;
begin
TGeneric.GuessTheType<Exception>(x);
TGeneric.GuessTheType(x);
TGeneric.GuessTheType(s);
end.

view raw

project17.dpr

hosted with ❤ by GitHub

Posted in Delphi, Development, Software Development | 1 Comment »

The most useful git commands | orga.cat

Posted by jpluimers on 2020/07/22

The most advanced commands are towards the tail of [WayBack] The most useful git commands | orga.cat

Here there are some examples of git commands that I use often.

They include:

Get the git root directory

git rev-parse --show-toplevel

Source: http://stackoverflow.com/q/957928/1391963

See closest tags

git describe --tags `git rev-list --tags --max-count=1`

Source: http://stackoverflow.com/q/1404796/1391963. See also git-describe.

See recently used branches (i.e. branches ordered by most recent commit)

git for-each-ref --sort=-committerdate refs/heads/ | head

Source: http://stackoverflow.com/q/5188320/1391963

Which means I need to look into at least these:

–jeroen

 

Posted in Development, DVCS - Distributed Version Control, git, Software Development, Source Code Management | Leave a Comment »

Geek And Poke: NoSQL

Posted by jpluimers on 2020/07/22

Old, but still too funny not to share:[WayBackGeek And Poke: NoSQL.

Via: [WayBack] Adrian Marius Popa – Google+

Larger pictures are in the top link.

 

–jeroen

Read the rest of this entry »

Posted in Database Development, Development, Fun, NoSQL, Software Development | Leave a Comment »