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

Hi! how to hide a property in object inspector? i have my custom components …

Posted by jpluimers on 2017/11/16

For my link archive:

Some quotes

–jeroen

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

Happy 60th birthday, Fortran

Posted by jpluimers on 2017/11/15

I remember a FORTRAN IV (or was it 66?) course during my chemistry studies at the end of the 1980s. Luckily, the VAX/VMS version (not sure which one, it ran on a VAX 11/750) where we had to program on came with an extended FORTRAN 77 compiler even supporting 132 columns and other nice features.

My favourite program was about an algorithm to assemble 3 tables (one relating atom numbers and their valencies, a second with atom-atom distances, a third with 3-D atom positions) into a chemical compound indicating any rings. I implemented my own recursion with stacks citing a Dire Straits song with “and when you finally reappear, at the place where you came in…”.

Later I ported this to a PC reviewing the Microsoft FORTRAN 5.1 compiler for the Dutch PCM (Personal Computer Magazine). Recently I learned Lahey had a big role in the Fortran.NET compiler.

This year FORTRAN turned 60 years old and it is still in used, though not as heavily as a few decades ago.

The Fortran compiler, introduced in April 1957, was the first optimizing compiler, and it paved the way for many technical computing applications over the years. What Cobol did for business computing, Fortran did for scientific computing. Fortran may be approaching retirement age, but that doesn’t mean it’s about to stop working. This year marks the 60th anniversary of the first Fortran (then styled “FORTRAN,” for “FORmula TRANslation”) release.

Source: [WayBack] Happy 60th birthday, Fortran.

Via [Archive.is] Happy 60th birthday, Fortran – ThisIsWhyICode – Google+

Historic references:

–jeroen

Read the rest of this entry »

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

FastMM4 + Delphi – Recompiling application with 10.2.1 causes memory leaks?

Posted by jpluimers on 2017/11/15

This is why you should always test your Delphi apps with FastMM4 and FullDebugMode enabled: [WayBack] Delphi – Recompiling application with 10.2.1 causes memory leaks?

A workaround is to add the below code in either of these places:

  • end of your .dpr file right before the end.
  • in the finalization section of a new unit

CheckSynchronize();

It calls the [WayBackSystem.Classes.CheckSynchronize method to ensure the background thread performs the needed cleanup.

Thanks Stefan Glienke for solving this.

–jeroen

Read the rest of this entry »

Posted in Delphi, Delphi 10.2 Tokyo (Godzilla), Development, Software Development | Leave a Comment »

immediate “Too many authentication failures” – check your authentication methods

Posted by jpluimers on 2017/11/15

If you ever ssh into something and immediately get the immediate Too many authentication failures message, then you’ve probably mixed your authentication methods.

Follow the steps in [WayBackssh – Too many authentication failures for username – Super User (thanks [WayBackJohn T and [WayBackBen West).

First check out whats wrong by slowly increasing the number of -v parameters to make output more verbose:

ssh -v
ssh -v -v
ssh -v -v -v

Then try to find out which authentication method fails: usually it’s a private key that’s wrong.

I’ve had success in various cases where I screwed up with these ssh parameters:

-o PubkeyAuthentication=no
-i some_id_rsa -o IdentitiesOnly=yes

–jeroen

 

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

Delphi: ^TNodeData incompatible with PNodeData – {$T+} versus {$T-}

Posted by jpluimers on 2017/11/14

In my Turbo Pascal days, I was fan of the {$T+} directive (now a.k.a TypedAddress on) as it would make the @ operator return typed pointers and the compiler would be more strict in forcing checks on pointer types to be compatible.

Not so much in Delphi any more, see the below comment on in a G+ thread on Delphi pointer type compatibility [WayBack] by David Millington from Embarcadero.

Basically we’re stuck with {$T-} which is a double edged sword:

  • on the one hand it forces you to ensure your typed pointers are always the same actual type (so you need to define a type like PNodeData once and use it everywhere)
  • on the other hand it still allows the generic Pointer type to be compatible with typed pointers which means people use that and will not have the benefit of typed pointer checking

David Millington:

So the question is why is PNodeData different to ^TNodeData? These two pages have the answer:

  • “Two distinct types are compatible if they satisfy at least one of the following conditions:
    … (snip)
  • One type is Pointer (an untyped pointer) and the other is any pointer type.
  • Both types are (typed) pointers to the same type and the {$T+} compiler directive is in effect.”

[WayBackhttp://docwiki.embarcadero.com/RADStudio/Berlin/en/Type_Compatibility_and_Identity_(Delphi)#Type_Compatibility

That line about $T+ is key; it’s the “Typed @ operator” compiler option which is off by default. “In the {$T-} state, distinct pointer types other than Pointer are incompatible (even if they are pointers to the same type)”. So with that off, PNodeData and ^TNodeData are different.

[WayBackhttp://docwiki.embarcadero.com/RADStudio/en/Type-checked_pointers_(Delphi)

The best solution is to define PNodeData, as you’ve done, and use it everywhere.

What David fails to mention there, and I added as a commen later is this:

The problem $T is that it’s a two-edged sword as it makes code that looks valid fail to compile because the compiler in the $T+ state (a.k.a. $TypedAddress on state) never got updated to:

  • handle @ to an array creates a pointer to the element of that array
  • handle @ to resourcestrings to become PResStringRec (and likely more examples)

Which means the below programs fail to compile.

The alternative (adding way more {$T+} compatible overloads to the RTL/VCL/FMX) was never done either, so now we’re stuck with {$T-}

Array of char example:

program TypedAddressDirectiveWithCharArrays;

{$APPTYPE CONSOLE}

{$TypedAddress on}

uses
  Winapi.Windows;

var
  TimeZone: string;
  TZ: TTimeZoneInformation;

begin
  TimeZone := 'Coordinated Universal Time';
  StringToWideChar(TimeZone, @(TZ.StandardName), SizeOf(TZ.StandardName) div SizeOf(WideChar));
end.

(*

[dcc32 Error] TypedAddressDirectiveWithCharArrays.dpr(16): E2010 Incompatible types: 'PWideChar' and 'Pointer'

In the System unit:

implicit types:

  PWideChar = WideChar;
  PChar = PWideChar

explicit:

function StringToWideChar(const Source: UnicodeString; Dest: PWideChar; DestSize: Integer): PWideChar;



In the Winapi.Windows unit:

type
  WCHAR = WideChar;

  PTimeZoneInformation = ^TTimeZoneInformation;
  _TIME_ZONE_INFORMATION = record
    Bias: Longint;
    StandardName: array[0..31] of WCHAR;
    StandardDate: TSystemTime;
    StandardBias: Longint;
    DaylightName: array[0..31] of WCHAR;
    DaylightDate: TSystemTime;
    DaylightBias: Longint;
  end;
  TTimeZoneInformation = _TIME_ZONE_INFORMATION;
  TIME_ZONE_INFORMATION = _TIME_ZONE_INFORMATION;

*)

ResourceString example:

program TypedAddressDirectiveWithResourceStrings;

{$APPTYPE CONSOLE}

{$TypedAddress on}

uses
  System.SysConst,
  System.SysUtils;

procedure RangeError;
begin
  raise ERangeError.CreateRes(@SRangeError);
end;

begin
end.

(*
[dcc32 Error] TypedAddressDirectiveWithResourceStrings.dpr(13): E2250 There is no overloaded version of 'CreateRes' that can be called with these arguments


System unit:

type
  PResStringRec = ^TResStringRec;
  {$IF defined(EXTERNALLINKER)}
  TResStringRec = record
    Key: MarshaledAString;
  end;
  {$ELSE}
  TResStringRec = packed record
    // 32bit = 8 bytes
    // 64bit = 16 bytes
    Module: ^HMODULE;
    Identifier: NativeUint;
  end;
  {$ENDIF}


System.SysConst unit:

resourcestring
  SRangeError = 'Range check error';


SysUtils unit:

constructor Exception.CreateRes(ResStringRec: PResStringRec);
begin
  FMessage := LoadResString(ResStringRec);
end;


*)

Source: [WayBackOn Friday I had a brain fade moment (which I don’t seems to have recovered…

–jeroen

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

A 4-bit Calculator made in cardboard and marble

Posted by jpluimers on 2017/11/14

Cool device: [WayBackA 4-bit Calculator made in cardboard and marble

I really love this. Not just that it exists, but how it was made and how it’s explained.

Definitely worth reading.

via: [WayBack] Funny modern abacus https://lapinozz.github.io/learning/2016/11/19/calculator-with-caordboard-and-marbles.html – David Berneda – Google+

–jeroen

Posted in Algorithms, Development, Hardware Development, Software Development | Leave a Comment »

Some links on isolating parts of networks with Mikrotik

Posted by jpluimers on 2017/11/10

On my research list so I can do proper LoT.

–jeroen

Read the rest of this entry »

Posted in Development, Internet, MikroTik, Power User, RouterOS, routers, Scripting, Software Development | Leave a Comment »

InnoSetup where the *AppData constants point to

Posted by jpluimers on 2017/11/08

The paths are on a standard Windows 7 x64 machine installed on the C: drive. More recent versions of Windows should use the same place.

I’ve not been able to verify this in a domain situation with roaming profiles and redirected folder paths. If anyone has info on that, please let me know.

Anyway, I’ve made some the constants into a table:

Inno Setup constant
[WayBack]
Windows 7 directory KNOWNFOLDERID
[Archive.is]
CSIDL (<= Vista)
[WayBack] ([WayBack])
Environment variable
[WayBack]
System.Environment.SpecialFolder
[WayBack]
commonappdata C:\ProgramData FOLDERID_ProgramData CSIDL_COMMON_APPDATA ALLUSERSPROFILE System.Environment.SpecialFolder.CommonApplicationData
localappdata C:\Users\<UserName>\AppData\Local FOLDERID_LocalAppData CSIDL_LOCAL_APPDATA LOCALAPPDATA System.Environment.SpecialFolder.LocalApplicationData
userappdata C:\Users\<UserName>\AppData\Roaming FOLDERID_RoamingAppData CSIDL_APPDATA APPDATA System.Environment.SpecialFolder.ApplicationData

One day I might find time to make this table more complete.

Until then, the code is somewhere around theses pieces of code:

Read the rest of this entry »

Posted in Development, Inno Setup ISS, Installer-Development, Software Development | Leave a Comment »

Issues are disabled at tohosokawa/rst-preview-pandoc: reStructuredText preview in Atom using Pandoc

Posted by jpluimers on 2017/11/08

No more issue reporting: tohosokawa/rst-preview-pandoc: reStructuredText preview in Atom using Pandoc

This is a very useful Atom.io package, but it has one big issue: when you close a preview window then re-opening it, the settings are restored to the default -frst -thtml --webtex ones.

As I’m an Atom.io n00b, I need to dig into this another time.

Notes:

I want the defaults to include --standalone --toc --toc-depth=5 or at least --standalone --toc.

For now I’ve hardcoded them.

–jeroen

Posted in atom editor, CoffeeScript, Development, JavaScript/ECMAScript, Power User, Scripting, Software Development, Text Editors | Leave a Comment »

bash: `printf` supports `\e` just like `echo -e` does

Posted by jpluimers on 2017/11/07

Learned a few things when modifying https://github.com/gkotian/gautam_linux/blob/master/scripts/colours.sh

Note: `printf` supports emitting `ESC` (ASCII character `\033` aka `27` aka `0x1B`)as `\e` the same way that `echo` does

https://linux.die.net/man/1/printf
https://linux.die.net/man/1/echo

Format strings are at https://linux.die.net/man/3/printf
%-10s means left adjusted (aligned) string of length 10

–jeroen

via:

I was investigating how the colour definitions on my OpenSuSE system actually work internally so I added some extra output: ${TYPE} and ${COLOUR}.

Source: Show type and colour definition in addition to the rendered colour. by jpluimers · Pull Request #5 · gkotian/gautam_linux

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