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

Archive for the ‘Software Development’ Category

Unicode spaces (not just en and em, but also em fractions 1/2, 1/3, 1/4, 1/6, 1/5, 4/18 and remarks)

Posted by jpluimers on 2024/10/03

For my link archive (please check the page as by now the table might have changed from what I quote below) [Wayback/Archive] Unicode spaces and the WordPress classic editor might have mangled it.

I like the table as it embeds the spaces between foo and bar so it easy to copy paste them to code or documentation.

Read the rest of this entry »

Posted in Development, Encoding, Software Development, Unicode | Leave a Comment »

The 2019 Ron Jeffries’ Post (Extreme Programming, Agile Manifesto) “Story Points Revisited”

Posted by jpluimers on 2024/10/02

Back when my life was in turmoil, lots of interesting things were posted. In the aftermath, I try to catch up with them at a reasonable pace.

This was one by Ron Jeffries (Extreme Programming, Agile Manifesto) blog post [Wayback/Archive] Story Points Revisited.

It is one of the many posts over the last decade or so that tries to make people aware that being agile, or doing extreme programming is vastly different from holding onto the agile process dogmas introduced over the last 2+ decades.

The thing is: these dogmas are exactly why extreme programming and the agile manifesto came into place: blindly following rules is not going to get you anywhere.

Figuring out how your organisation works, then step by step figuring out which parts of extreme programming or agile manifesto fit best for improving your work, implementing them and looping back while keeping a close eye on which practices still work best is the way to go.

Jeffries appologised for sort of having coined the term “story points” (which come from “ideal days”).

Read the rest of this entry »

Posted in Agile, Development, Extreme Programming (X), Software Development | Leave a Comment »

Ian Brown: “Tired: “code generation” Wired…” – Mastodon

Posted by jpluimers on 2024/10/01

The term “prompt engineer” actually everything about programming that programming is about: it’s just trading a known output language with cleanly defined rules for an unknown country that assembles pieces of text based on statistics.

[Wayback/Archive] Ian Brown ☑️: “Tired: “code generation” Wired…” – Mastodon

Tired: “code generation”
Wired: “software-defined software”

--jeroen

Posted in AI and ML; Artificial Intelligence & Machine Learning, Development, LLM, Software Development | Leave a Comment »

Reminder to self write a JavaScript NoDrives encoder/decoder on a web-page

Posted by jpluimers on 2024/10/01

A long time ago, I wrote about How to hide an entire drive from prying eyes on Windows 10 | Windows Central.

The easiest way is still to add/modify a NoDrives value in the Registry, but regrettably [WayBackNT Drive Calculator – The ‘NoDrives’ Registry Key Value Calculator is down (it was a server-side solution, so the WayBack Machine link does display a page, but the calculator does not function).

My use case is that I have an existing NoDrives value that I want to update (as there have been one or more drive letters added/changed).

Read the rest of this entry »

Posted in Development, HTML, HTML5, JavaScript/ECMAScript, Scripting, Software Development, Web Development | Leave a Comment »

What’s inside the QR code menu at this cafe? – by peabee

Posted by jpluimers on 2024/09/27

This is why I do not trust ordering via QR-code: you never know how good (or usually bad, often even non-existent) their security is.

[Wayback/Archive] What’s inside the QR code menu at this cafe? – by peabee is a really bad example about Google backed DotPe: they have zero-auth and by now have rated limited API access by IP address.

I went to a cafe near my home. I sat down and scanned the QR code on the table. It took me to a website displaying the cafe’s menu. It asked me for my name and Whatsapp mobile number. I entered the details and placed the order.

In 5 mins my order arrived at the table. There was no OTP verification, and no one came to confirm the order. Is this what the peak ordering experience looks like?

It was a slow workday, and I thought I might as well open this QR code website on my laptop and have a quick look under the hood. Maybe I should’ve just made my own coffee and stayed home because I didn’t realize I was opening a can of worms.

This kind of zero-auth is not infrequent: the Panels API and CDN were wide-open too: [Wayback/Archive] https://storage.googleapis.com/panels-api/data/20240916/media-1a-i-p~s

Read the rest of this entry »

Posted in Authentication, Development, Infosec (Information Security), LifeHacker, Phishing, Power User, Security, Software Development | Tagged: | Leave a Comment »

Do Not Stare: protip: when referring to your favourite programming language’s features

Posted by jpluimers on 2024/09/26

Cool idea: [Wayback/Archive] Do Not Stare: protip: when referring to your favourite programming language’s features

protip: when referring to your favourite programming language’s features, call them spells instead to sound more mysterious and cool.
👎 “memory safety feature”
👍 “memory safety spell”

--jeroen

Posted in Conference Topics, Conferences, Development, Event, Software Development | Leave a Comment »

When you broke code, finding back where it got broken is easier if you have small change increment (i.e. bisection and binary tree search)

Posted by jpluimers on 2024/09/26

A while ago [Wayback/Archive] b0rk (Julia Evans [Wayback/Archive) wrote an interesting Tweet on finding back where you broke code of which the OCR text reads like this:

strategy: change working code into broken code

If I have a working version of the program, I like to:

  1. go back to the working code
  2. slowly start changing it to be more like my broken code
  3. test if it’s still working after every single tiny change
·      ⬊˙˙⸳              OH THAT’S WHAT BROKE IT!!!

I like this because it puts me back on solid ground: with every change make that DOESN’T cause the bug to come back, I know that wasn’t the problem.

by JULIA EVANS @bork wizardzines.com

This is similar (her arrows were of varying length) to using a binary search algorithm hunting for where the code was broken using bisection: repeatedly halving your search space to quickly zoom into the problem.

Another important aspect is that small commits while fiddling to solve an issue can help you determine what small commit was actually solving the issue.

Read the rest of this entry »

Posted in Algorithms, Conference Topics, Conferences, Development, DVCS - Distributed Version Control, Event, git, Mercurial/Hg, Ruby, Software Development, Source Code Management, Versioning | Leave a Comment »

NTFS Sparse Files For Programmers

Posted by jpluimers on 2024/09/25

Need to check this out some day: cs.exe compiled from [Wayback] sparse.zip which you can download from [Wayback/Archive] NTFS Sparse Files For Programmers

Read the rest of this entry »

Posted in C, C++, Development, NTFS, Power User, RoboCopy, Software Development, Visual Studio C++, Windows, Windows 10, Windows 11 | Leave a Comment »

Ringzer0: “Support your local OSS Devs ” – Infosec Exchange

Posted by jpluimers on 2024/09/24

Important, as it is the only way to keep your development stack functioning well: [Wayback/Archive] Ringzer0: “Support your local OSS Devs ” – Infosec Exchange

Read the rest of this entry »

Posted in Awareness, Conference Topics, Conferences, Development, Event, Open Source, Software Development | Leave a Comment »

string – Check if MyString[1] is an alphabetical character? – Stack Overflow (and how Embarcadero broke one of the product version neutral redirects)

Posted by jpluimers on 2024/09/24

Quite a while ago [Wayback/Archive] string – Check if MyString[1] is an alphabetical character? – Stack Overflow asked by [Wayback/Archive] User Jeff was answered by [Wayback/Archive] Andreas Rejbrand:

The simplest approach is

function GetAlphaSubstr(const Str: string): string;
const
  ALPHA_CHARS = ['a'..'z', 'A'..'Z'];
var
  ActualLength: integer;
  i: Integer;
begin
  SetLength(result, length(Str));
  ActualLength := 0;
  for i := 1 to length(Str) do
    if Str[i] in ALPHA_CHARS then
    begin
      inc(ActualLength);
      result[ActualLength] := Str[i];
    end;
  SetLength(Result, ActualLength);
end;

but this will only consider English letters as “alphabetical characters”. It will not even consider the extremely important Swedish letters Å, Ä, and Ö as “alphabetical characters”!

Slightly more sophisticated is

function GetAlphaSubstr2(const Str: string): string;
var
  ActualLength: integer;
  i: Integer;
begin
  SetLength(result, length(Str));
  ActualLength := 0;
  for i := 1 to length(Str) do
    if Character.IsLetter(Str[i]) then
    begin
      inc(ActualLength);
      result[ActualLength] := Str[i];
    end;
  SetLength(Result, ActualLength);
end;

Back in 2011 I added a comment that for more than a decade would redirect to the most current documentation on the IsLetter method:

+1 for using IsLetter which checks the Unicode definition for being a letter or not [Wayback] docwiki.embarcadero.com/VCL/en/Character.TCharacter.IsLetter

Back then, Delphi X2 was current, so it would redirect

  1. from [Wayback] http://docwiki.embarcadero.com/VCL/en/Character.TCharacter.IsLetter
  2. to [Wayback] http://docwiki.embarcadero.com/VCL/XE2/en/Character.TCharacter.IsLetter
  3. then to [Wayback] http://docwiki.embarcadero.com/VCL/XE2/en/Character.TCharacter.IsLetter
  4. ending at [Wayback] http://docwiki.embarcadero.com/Libraries/XE2/en/System.Character.TCharacter.IsLetter

After a long outage in 2022 (see The Delphi documentation site docwiki.embarcadero.com has been down/up oscillating for 4 days is now down for almost a day.) only the Alexandria help was restored.

This killed the above redirect.

Luckily [Wayback/Archive] George Birbilis noticed that and commented this:

@JeroenWiertPluimers the correct link now is: docwiki.embarcadero.com/Libraries/Alexandria/en/…

In order to refer to the most recent Delphi version, now you have to use [Wayback] http://docwiki.embarcadero.com/Libraries/en/System.Character.TCharacter.IsLetter.

This redirects:

  1. via [Wayback] http://docwiki.embarcadero.com/Libraries/Alexandria/en/System.Character.TCharacter.IsLetter to
  2. to [Wayback] https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.Character.TCharacter.IsLetter

The above breaks the help integration from older Delphi products which is bad. It is also bad because it makes it harder to port legacy Delphi code to more modern Delphi versions.

Hopefully the above gives you a bit insight how the docwiki help system was designed and what is left of that design.

–jeroen

Posted in Communications Development, Conference Topics, Conferences, Delphi, Development, Encryption, Event, HTML, HTTP, https, HTTPS/TLS security, Internet protocol suite, Power User, Security, Software Development, TCP, TLS, Web Development | Leave a Comment »