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

RaiMan’s SikuliX: Automate what you see on a computer monitor

Posted by jpluimers on 2018/09/05

On my research list:

Automate what you see on a computer monitor

Source: [WayBackRaiMan’s SikuliX

Repositories:

It is an evolution of [WayBackSikuli Script – Home that has an other fork that can be automated with PowerPoint slides:

I should play with it: [WayBackSikuliX – QUICKSTART

Via: [WayBack] Any recommendations of automation tools for GUI testing.We tried AutoIT but it had some problems and way too technical… – Tommi Prami – Google+

–jeroen

Read the rest of this entry »

Posted in Agile, Development, OCR, Power User, Software Development, Tesseract, Testing | Leave a Comment »

c# – All possible array initialization syntaxes – Stack Overflow

Posted by jpluimers on 2018/09/04

Since I tend to forget in-line array expression: [Archive.is] c# – All possible array initialization syntaxes – Stack Overflow:

These are the current declaration and initialization methods for a simple array.
string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2
Also note that in the declarations above, the first two could replace the string[] on the left with var (C# 3+), as the information on the right is enough to infer the proper type. The third line must be written as displayed, as array initialization syntax alone is not enough to satisfy the compiler’s demands. The fourth could also use inference. So if you’re into the whole brevity thing, the above could be written as
var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2 

–jeroen

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

What are your favorite extension methods for C#? (codeplex.com/extensionoverflow) – Stack Overflow

Posted by jpluimers on 2018/09/04

From an archive a long time ago: by now this question is probably deleted because well Stack Overflow:

Explanations how they work: [WayBackhttp://stackoverflow.com/questions/4338333/object-how-top-most-base-class-got-method/4338509

The codeplex repository https://extensionoverflow.codeplex.com has been forked at https://github.com/devkhan/ExtensionOverflow

–jeroej

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

How and when are variables referenced in Delphi’s anonymous methods captured? – Stack Overflow

Posted by jpluimers on 2018/09/04

Just found some notes from 2013 for my research list that are still relevant:

Note that if you are using Smart Pointers, use the ones that Spring4D implemented in 2015 named Shared/IShared<T>/TShared<T>, see [WayBack] Spring4D – Pascal Today and [WayBack2] Smart Pointers will be in Spring4D 1.2.

–jeroen

Posted in Delphi, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Development, Software Development | Leave a Comment »

Plastic SCM command-line for merge and diff

Posted by jpluimers on 2018/09/03

Just in case I have Plastic SCM without Beyond Compare:

Merge

"C:\Program Files\PlasticSCM5\client\mergetool" -b="%TEMP%\baseFile-guid.pas" -bn="baseSymbolicName" -bh="baseHash" -s="%TEMP%\sourceFile-guid.pas" -sn="srcSymbolicName" -sh="srcHash" -d="...\destinationPath\destinationFile.pas" -dh="destinationHash" -a -r="%TEMP%\resultFile.pas" -t="text" -i="NotIgnore" -e="NONE" -m="forced" -re="NONE" --progress="progressDescription" --extrainfofile="%TEMP%\extraInfoFile.tmp"

Diff

To be done

aa

Merge help (takes about 10 seconds to start):

"C:\Program Files\PlasticSCM5\client\mergetool.exe" --help

---------------------------
Mergetool usage
---------------------------
Usage: mergetool [ | ]

    diffOptions:  []

    mergeOptions:   [] [[] [] ] [] []

        baseFile:            {-b | --base}= 
        baseSymbolicName:    {-bn | --basesymbolicname}=
        automatic:           -a | --automatic
        silent:              --silent
        resultFile:          {-r | --result}=
        mergeType:           {-m | --mergeresolutiontype}={onlyone | onlysrc | onlydst | try | forced}

    generalFiles:  []  []

        sourceFile:          {-s | --source}=
        srcSymbolicName:     {-sn | --srcsymbolicname}=
        destinationFile:     {-d | --destination}= 
        dstSymbolicName:     {-dn | --dstsymbolicname}=

    generalOptions: [] [] [] []

        defaultEncoding:     {-e | --encoding}={none |ascii | unicode | bigendian | utf7 | utf8}
        comparisonMethod:    {-i | --ignore}={none | eol | whitespaces | eol&whitespaces}
        fileType:            {-t | --filestype}={text/csharp | text/XML | text}
        resultEncoding:      {-re | --resultencoding}={none |ascii | unicode | bigendian | utf7 | utf8}
        progress:            {--progress}=progress string indicating the current progress, for example: Merging file 1/8
        extraInfoFile:       {--extrainfofile}=path to a file that contains extra info about the merge

    Remarks:
          
        -a | --automatic:    Tries to resolve the merge automatically.
                             If the merge can't be resolved automatically (requires user interaction), the merge tool is shown.
        --silent:            This option must be used combined with the --automatic option.
                             When a merge can't be resolved automatically, this option causes the tool to return immediately
                             with a non-zero exit code (no merge tool is shown).
                             If the tool was able to resolve the merge automatically, the program returns exit code 0.

    Examples:

        mergetool
        mergetool -s=file1.txt -d=file2.txt
        mergetool -s=file1.txt -b=file0.txt --destination=file2.txt
        mergetool --base=file0.txt -d=file2.txt --source=file1.txt --automatic --result=result.txt
        mergetool -b=file0.txt -s=file1.txt -d=file2.txt -a -r=result.txt -e=utf7 -i=eol -t=text/csharp -m=onlyone
---------------------------
OK   
---------------------------

The merge extraInfoFile.tmp has a syntax like this:

Source (cs:-#)
    relative-sourceFile from cs:-# created by userName on timeStamp
    Comments: Source changeset description

Base (cs:#)
    relative-baseFile from cs:#@/baseBranch by userName on timeStamp
    Comments: BO's + CRUDS 

Destination (cs:#)
    relative-destinationFile from cs@/destinationBranch created by userName on timeStamp
    Comments: Destination changeset description

Where each cs is a change set number.

–jeroen

Posted in Beyond Compare, Development, Encoding, PlasticSCM, Power User, Software Development, Source Code Management | Leave a Comment »

on the dB scales and audio

Posted by jpluimers on 2018/09/03

  • Double or twice the loudness = factor 2 means about 10 dB more sensed loudness level (psycho acoustic)
  • Double or twice the voltage = factor 2 means 6 dB more measured voltage level (sound pressure level)
  • Double or twice the power = factor 2 means 3 dB more calculated power level (sound intensity level)

Now that we’ve straightened that one out…

–jeroen

Source: [WayBackOutdoor speaker met versterker ontworpen door tweaker haalt doel op Kickstarter – Beeld en geluid – Nieuws – Tweakers

Posted in Algorithms, Development, LifeHacker, Power User, Software Development | Leave a Comment »

The Delphi VCL comes to Oxygene

Posted by jpluimers on 2018/09/03

Interesting approach, which makes one more “cross platform VCL” from outside the Embarcadero pipeline [WayBack] The Delphi VCL comes to Oxygene:

Developers switching from Delphi to Oxygene are loving our “Delphi RTL” compatibility library, as it helps them move their code over to new platforms without having to embrace all the new APIs at once. With the new Elements 10 builds we shipped in the past couple of weeks,

CrossVCL (by KSDev, the former FMX architects) already brings VCL to Linux through the Embarcadero compilers; VCL for Oxygene brings it – through the Oxygene compilers – to WebAssembly first and later to Cocoa and WPF.

I wonder how Windows VCL compatible both approaches are.

Via [WayBackhttps://blogs.remobjects.com/2018/08/30/the-delphi-vcl-comes-to-oxygene/ – Ondrej Kelle – Google+

–jeroen

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

Delphi: delete temporary file after response dispatched – Stack Overflow

Posted by jpluimers on 2018/08/30

A while ago, Marjan Venema was in need for [Archive.isDelphi SOAP: delete temporary file after response dispatched – Stack Overflow.

The solution there is a truly temporary file: a file stream that when the handle closes will have Windows delete the file by setting the correct flags.

The construct is functionally identical to the JclFileUtils.TJclTempFileStream [Archive.is].

It passes these [Archive.isfile attribute constant flags to the [Archive.isCreateFileW Windows API function:

  • FILE_ATTRIBUTE_TEMPORARY
  • FILE_FLAG_DELETE_ON_CLOSE

I was glad she asked, though I wanted a temporary file to last after debugging, so I wrote code like this because internally the same FileGetTempName method is used by the JCL:

var
// ...
  TempPath: string;
  TempStream: TFileStream;
  TempStreamWriter: TStreamWriter;
begin
// ...
  TempPath := FileGetTempName('Prefix');
  TempStream := TFile.Open(TempPath, TFileMode.fmOpenOrCreate, TFileAccess.faReadWrite, TFileShare.fsRead);
  try
    TempStreamWriter := TStreamWriter.Create(TempStream);
    try
      TempStreamWriter.WriteLine('Debug starts:');
      MyStringList.SaveToStream(TempStream);
      TempStreamWriter.WriteLine();
// ...
      TempStreamWriter.WriteLine('Debug finishes.');
    finally
      TempStreamWriter.Free();
    end;
  finally
    TempStream.Free();
  end;

–jeroen

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

TwistedDoodles • The truth about Eureka. (I say bollocks… A lot!)

Posted by jpluimers on 2018/08/30

The truth about Eureka.(I say bollocks… A lot!)

I bumped into this a while ago, but since I’ve been doing quite a bit of research lately, it’s worth repeating.

–jeroen

Source: TwistedDoodles • The truth about Eureka. (I say bollocks… A lot!)

Read the rest of this entry »

Posted in Development, Fun, LifeHacker, Power User, science, Software Development | Leave a Comment »

How to read data from old delphi application Paradox databases without BDE?

Posted by jpluimers on 2018/08/30

Interesting question that raise some good tips: [WayBack] How to read data from old delphi application Paradox databases without BDE? I search for freeware or open source solution. – Jacek Laskowski – Google+

–jeroen

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