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,839 other subscribers

Archive for the ‘Software Development’ Category

Babelmark 2 online Markdown checker

Posted by jpluimers on 2018/11/07

Some markdown tools have their own page online allowing you to experiment with their rendering; [WayBack] markdown-it demo is one of them.

I was looking for a page showing the renderings of many engines in order to improve my markdown writing skills.

I found the [WayBackbabelmark2 online markdown checker, which works great.

  • It runs the markdown through various processors showing either the log with HTML produced, or a view of the rendered output.
  • It has one limitation: 1000 characters of markdown text so the markdown rendering servers will not get overloaded.

Documentation is at [WayBack] Babelmark 2 – FAQ.

In addition, this is also very useful: [WayBack] markdownlint demo Demo for [WayBack] GitHub – DavidAnson/markdownlint: A Node.js style checker and lint tool for Markdown/CommonMark files.

Note that the Visual Studio Code markdownlint support, uses the above markdownlint, which is a different one than the Ruby based [WayBack] GitHub – markdownlint/markdownlint: Markdown lint tool.

Both are far easier to use than [WayBack] GitHub – michelf/mdtest: Test suite for Markdown implementations.

Via

–jeroen

Read the rest of this entry »

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

How to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)

Posted by jpluimers on 2018/11/07

I need to script this one day: [WayBackHow to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)

–jeroen

Posted in *nix, Awk, bash, Communications Development, Development, Internet protocol suite, Power User, Scripting, Software Development, SSH, TCP | Leave a Comment »

Delphi: updating a (potentially non-existing) item in a generic TDictionary: use ExtractPair. Except in Delphi 2010/XE.

Posted by jpluimers on 2018/11/06

“Documented” in Delphi 2010, [Archive.is] Generics.Collections.TDictionary.ExtractPair – RAD Studio VCL Reference, and functioning bug-free since Delphi XE2, but still hardly documented, [Archive.is] System.Generics.Collections.TDictionary.ExtractPair – XE2 API Documentation is the easiest way to get a value out of a dictionary and updating it, even if it does not exist.

ExtractPair extracts the TPair<TKey, TValue> if it exists (and removes it from the dictionary) or returns a Default initialised one if not. Though Default is still not documented, you can find an example at [WayBack] How to properly free records that contain various types in Delphi at once? – Stack Overflow.

Example code for ExtractPair:

  FEceptionDictionary := TDictionary<TExceptionKey, Integer>.Create();

...

var
  ExceptionCountPair: TPair<TExceptionKey,Integer>;
begin
  TMonitor.Enter(FEceptionDictionary);
  try
    ExceptionCountPair := FEceptionDictionary.ExtractPair(ExceptObj.ClassType); // extracts and removed from dictionary!
    FEceptionDictionary.Add(ExceptionCountPair.Key, ExceptionCountPair.Value + 1); // use Value as count
  finally
    TMonitor.Exit(FEceptionDictionary);
  end;
end;

In Delphi 2010 and XE it was buggy (see [WayBack] QualityCentral 80947: TDictionary.ExtractPair Fails and creates memory leak via [WayBack] generics – Delphi TPair Exception – Stack Overflow), but since then it works fine, and now is properly documented:

[WayBack] System.Generics.Collections.TDictionary.ExtractPair – RAD Studio API Documentation

Returns the TPair<TKey,TValue> pair with the specified Key and [WayBackremoves the returned pair from a dictionary.

If the dictionary does not contain the specified Key, the returned pair contains a default TValue.

–jeroen

Posted in Delphi, Development, Software Development | 5 Comments »

Validating a nested XML element with an empty namespace using XSD – Stack Overflow

Posted by jpluimers on 2018/11/06

In a quest for making Delphi Group Project XML files (with extension .groupproj) validate with XSD, I had to find out about [WayBackValidating a nested XML element with an empty namespace using XSD – Stack Overflow.

I needed the XSD so I could import it in Delphi in order to write a good .groupproj file generator.

They are here:

And some more background posts are here:

–jeren

Posted in Delphi, Development, Software Development, XML, XML/XSD, XSD | 1 Comment »

Some Computerphile videos starring Professor Brian Kernighan

Posted by jpluimers on 2018/11/06

Most you probably know [WayBackProfessor Brian Kernighan or the YouTube channel Computerphile (sister channel of Numberphile).

He stars in about half a dozen of their videos giving a nice insight in his contributions to the field and how well he can explain things.

Full videos are below; these are the titles:

BTW: If you like those youtube channels, check out [WayBackBrady Haran – Video Journalist who produces similar channels as well.

–jeroen

Read the rest of this entry »

Posted in *nix, Awk, C, Development, Power User, Scripting, Software Development | Leave a Comment »

Creating a full off-line installation directory for Visual Studio 2017 Community

Posted by jpluimers on 2018/11/01

Steps:

  1. mkdir C:\Installs\VS2017Community\VS2017CommunityLayout
  2. pushd C:\Installs\VS2017Community
  3. bitsadmin.exe /transfer "VS2017CommunityBootstrap" https://aka.ms/vs/15/release/vs_community.exe C:\Installs\VS2017Community\vs_community.exe
  4. vs_community.exe --lang en-US --layout C:\Installs\VS2017Community\VS2017CommunityLayout
  5. VS2017CommunityLayout\vs_community.exe

Step 3 needs a full path to the destination file.

Step 4 can take a relative path.

Step 4 takes considerable time (for 15.2 about 90 minutes on a 100 Mibit/s fiber connection with an ~8 millisecond ping time to download.visualstudio.microsoft.com; for 15.8 with 80 Mibit/s and a ~4 millisecond ping about 120 minutes) resulting in ~40 gigabyte download.

After download, run the vs_setup.exe in theVS2017CommunityLayout directory.

Note that upgrading to a newer version of Visual Studio 2017 will require downloads! See [WayBack] Offline Install Modify always goes to the WEB – Developer Community.

Note that after installation, Visual Studio 2017 needs considerable disk space as found via visual studio 2017 disk size – Google Search:

[WayBack] Visual Studio 2017 System Requirements | Microsoft Docs:

Find the minimum system requirements, supported hardware, and languages for the Visual Studio 2017 product family.

Hardware
  • 1.8 GHz or faster processor. Dual-core or better recommended
  • 2 GB of RAM; 4 GB of RAM recommended (2.5 GB minimum if running on a virtual machine)
  • Hard disk space: up to 130 GB of available space, depending on features installed; typical installations require 20-50 GB of free space.
  • Hard disk speed: to improve performance, install Windows and Visual Studio on a solid state drive (SSD).
  • Video card that supports a minimum display resolution of 720p (1280 by 720); Visual Studio will work best at a resolution of WXGA (1366 by 768) or higher.

For instance, the choices below require about 22 gigabyte of space, while adding mobile .NET development adds another 13 gigabyte.

Via:

–jeroen

Posted in .NET, Development, Software Development, Visual Studio 2017, Visual Studio and tools | Leave a Comment »

PlasticSCM Workaround for “Can’t perform a checkout in an edited xlink.”

Posted by jpluimers on 2018/11/01

Error message during a commit (checkin) or shelve of some changes:

---------------------------
Error
---------------------------
Can't perform a checkout in an edited xlink.
---------------------------
OK
---------------------------

In this case it is during a shelve:

---------------------------
Wait a moment, please...
---------------------------
In progress...
Shelving pending changes
---------------------------
OK
---------------------------

I cannot show all changes, but the third one is an xlink:

The error did not return any meaningful results when I searched for it, but the developers on the team indicated “Errors like these happen every now and then; there is no information in Google. Sit down, cry a little, then restart with a fresh repository”.

Workaround

The workaround for this undocumented behaviour is tedious, but works:

Read the rest of this entry »

Posted in Development, PlasticSCM, Software Development, Source Code Management | Leave a Comment »

PSBL: Passive Spam Block List powered by Spamikaze

Posted by jpluimers on 2018/11/01

On my research list: [WayBackPassive Spam Block List:

PSBL is an easy-on, easy-off blacklist that does not rely on testing and should reduce false positives because any user can remove their ISP’s mail server from the list.

The idea is that 99% of the hosts that send me spam never send me legitimate email, but that people whose mail server was used by spammers should still be able to send me email.

This results in a simple listing policy: an IP address gets added to the PSBL when it sends email to a spamtrap, that email is not identified as non-spam and the IP address is not a known mail server.

Via: Hans Wolters commenting at [WayBack] For my research list: Source: Bruteforce login prevention… – Jeroen Wiert Pluimers – Google+

References:

–jeroen

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

A command-line REPL for RESTful HTTP Services – Scott Hanselman

Posted by jpluimers on 2018/10/31

Somewhere in Q4 2018 (actual year, not fiscal year) when .NET Core 2.2 gets released, but you can tinker with it right now: [WayBack] A command-line REPL for RESTful HTTP Services – Scott Hanselman.

Release estimates at [WayBack] core/roadmap.md at master · dotnet/core · GitHub.

–jeroen

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

Down on the Upside – Kevlin Henney – Medium

Posted by jpluimers on 2018/10/31

Interesting read: [WayBack] Down on the Upside – Kevlin Henney – Medium

Abstraction is a question of less over more. But is it also a question of high over low?

What developers call abstraction, is not the abstraction end-users mean. Being aware of that makes software development life a whole lot easier.

Via: [WayBack] Kevlin Henney – Google+

–jeroen

Posted in Design Patterns, Development, Software Development | Leave a Comment »