The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • 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 ‘Development’ Category

Convert Indesign Sketch to code: Petra Sketch Plugin | Melbourne | Applying Code

Posted by jpluimers on 2019/01/22

Interesting code generator from 3D models into Xamarin, Delphi or Oxygene code:

[WayBack] Petra Sketch Plugin | Melbourne | Applying Code

Convert Sketch drawings to iOS, macOS, Android a​nd​ Windows native drawing code.

[WayBack] Documentation of Petra Sketch Plugin | Melbourne | Applying Code

Via:

–jeroen

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

Dilbert Comic Strip on 1995-11-09 | Dilbert by Scott Adams

Posted by jpluimers on 2019/01/22

  • The caption says, “Saint Dogbert enters the Land of Cubicles searching for the demons of stupidity.” Dogbert walks down the hall wearing a bishop’s miter and holding a scepter.
  • The caption says, “Suddenly he finds an over-promoted computer guru spouting useless database concepts.” A man sits at a conference table with two glassy-eyed co-workers. The man says, “You’d be fools to ignore the boolean anti-binary least-square approach.”
  • The caption says, “The monster is dispatched to the dark world by the sight of its most feared object.” Dogbert stands on the conference table holding a document in front of the man. Dogbert says, “Look! Actual code!” The man’s head melts into his shirt and a co-worker says, “Cool!”

Source: [WayBackDilbert Comic Strip on 1995-11-09 | Dilbert by Scott Adams

–jeroen

via: [WayBackarchitecture – Why does the .NET framework have no concept of classes as first-class types? – Software Engineering Stack Exchange

Posted in Development, Software Development | Leave a Comment »

Passwordless SSH

Posted by jpluimers on 2019/01/22

Note: if the system you SSH from is ever compromised, then assume the passwordless targets are also compromised!

–jeroen

Posted in *nix, *nix-tools, Communications Development, Development, Internet protocol suite, Linux, openSuSE, Power User, SSH, SuSE Linux, TCP, Tumbleweed | Leave a Comment »

Why don’t I get the warning W1036 Variable “‘MyStrings’ might not have been initialized”…

Posted by jpluimers on 2019/01/21

Historically, [WayBack] W1036: Variable '%s' might not have been initialized (Delphi) has had a lot of gotchas.

The most important still is that it never show for managed types (strings, interfaces, etc).

Usually W1036 shows for non-managed types, but Dan Hacker has found a new case where it does not in [WayBack] Why don’t I get the warning W1036 Variable “‘MyStrings’ might not have been initialized’ if the StringsToDo parameter in DoSomething is defined as a var… – Dan Hacker – Google+

He noticed it in Delphi XE and 10.2 Tokyo.

I tested it with the Win32 compiler in XE8.

This warns:

program W1036;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,
  System.Classes;

procedure DoSomething(var StringsToDo: TStringList); // <-------- this line makes the difference
begin
  //do nothing
end;

procedure Test;
var
  MyStrings : TStringList;
begin
  MyStrings.Free;   {W1036 warning if StringsToDo param is NOT var}
  DoSomething(MyStrings);
end;

begin
end.

This does not warn:

program W1036;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,
  System.Classes;

procedure DoSomething(StringsToDo: TStringList); // <-------- this line makes the difference
begin
  //do nothing
end;

procedure Test;
var
  MyStrings : TStringList;
begin
  MyStrings.Free;   {W1036 warning if StringsToDo param is NOT var}
  DoSomething(MyStrings);
end;

begin
end.

initially, I misread his report and reacted wrongly on the cause (but rightly on the suggested use case of var and of TStringList):

Because a var parameter means that the caller should pass in an initialised parameter. Otherwise it should be an out parameter, not a var parameter.

var parameter for reference types like TStrings (only pass as TStringList if it deliberately is not compatible with TStrings) is a risky thing anyway, because the called method can overwrite it and then the caller has to notice the change, then decide what to do with the previous value (likely free it).

I later correct myself:

Looking better, I think it is a compiler issue.

The only difference between nothing and var is the loading of the parameter as a pointer:

with var

//W1036.dpr.16: MyStrings.Free; {W1036 warning if StringsToDo param is NOT var}
//004CD924 8B45FC mov eax,[ebp-$04]
//004CD927 E8B8A6F3FF call TObject.Free
//Project1.dpr.17: DoSomething(MyStrings);
//004CD92C 8D45FC lea eax,[ebp-$04]
//004CD92F E8E0FFFFFF call DoSomething
without var
//W1036.dpr.16: MyStrings.Free; {W1036 warning if StringsToDo param is NOT var}
//004CD924 8B45FC mov eax,[ebp-$04]
//004CD927 E8B8A6F3FF call TObject.Free
//Project1.dpr.17: DoSomething(MyStrings);
//004CD92C 8B45FC mov eax,[ebp-$04]
//004CD92F E8E0FFFFFF call DoSomething

So:

  • with a var, a pointer to the instance of MyStrings (obtained by a lea instruction) gets pushed on the stack
  • without a var, the instance of MyStrings (obtained by a mov instruction) gets pushed on the stack.

For the difference metween mov and lea, and the use of [] brackets, see:

–jeroen

Source: Why don’t I get the warning W1036 Variable “‘MyStrings’ might not have been i…

Read the rest of this entry »

Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | 3 Comments »

GitHub – pyscripter/python4delphi: Free components that wrap up Python into Delphi and Lazarus (FPC)

Posted by jpluimers on 2019/01/17

Interesting: [WayBack] GitHub – pyscripter/python4delphi: Free components that wrap up Python into Delphi and Lazarus (FPC)

Via [WayBack] 【Develope a rabbitmq application with python4delphi】 You can download the vcl from https://github.com/pyscripter/python4delphi The VCL can support pyth… – dorje sona – Google+

–jeroen

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

Some interesting bits on interface delegation including a class helper trick – via Stefan Glienke – Google+

Posted by jpluimers on 2019/01/17

Every time he finds a new compiler use, I’m all like “wow!”. This time [WayBackStefan Glienke – Google+: One of these rare moments when the compiler positively impresses me found a new way to make single responsibility principle easier to attain by using a class helper to resolve interface delegation.

In the comments are a few nice tidbits on what the compiler emits in order to implement interface delegation and reference counting.

–jeroen

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

Raspberry Pi cannot be woken up by WOL, but it can send, and there is Whack-on-LAN

Posted by jpluimers on 2019/01/17

Cool stuff if you want to make your own WOL devices out of spare parts.

From old to new:

They can be woken up by anything sending magic WOL packets, including Raspberry Pi (which cannot be woken up by them, though you could use a Whack-on-LAN for that).

Basically the Raspberry Pi cannot be woken up with WOL because of a few reasons:

  1. The ethernet chip is connected over USB so it cannot pass the WOL result further on.
  2. If it could, there still is no BIOS to process the WOL result.
  3. When it is halted but has power, the CPU isn’t active. The GPU is, but cannot process the WOL.

It can be a WOL server though: [WayBackRaspberry Pi As Wake on LAN Server: 5 Steps (with Pictures)

–jeroen

Posted in Development, Ethernet, Hardware Development, Network-and-equipment, Power User, Raspberry Pi, Wake-on-LAN (WoL) | Leave a Comment »

IDE Fix pack for Rio development snapshot – via Delphi-PRAXiS [en]

Posted by jpluimers on 2019/01/17

If you dare using Delphi 10.3 Rio instead of waiting for Update 1 to stabalise (and hopefully speed up things), you might want to try the development snapshot of [WayBackIDE Fix pack for Rio – Page 2 – Delphi Third-Party – Delphi-PRAXiS [en] that got released last week (thanks Andy!):

A new development snapshot of IDE Fix Pack for 10.3 Rio is available.

The Win64 (DCC64) and Android (DCCAARM) compiler patches should now work as excepted.

Changes:

  • Added: Support for Delphi 10.3 Rio
  • Added: Fix for TStringList.IndexOfName bug (RSP-21633)
  • Added: Fix for access violoation in the Welcomepage JScript9.dll binding
  • Added: TCustomListBox.ResetContent is skipped if the handle isn’t created yet
  • Added: DFM Streaming optimizations
  • Added: FillChar uses Enhanced REP MOVSB/STOSB cpu feature if available for large sizes.
  • Added: Enabled CPU LOCK string assignment optimization for local variables
  • Added: -Oe (experimental optimizations) and -x-cgo compiler option extension (Remove of some unneccessary push/pop operations)
  • Added: Expression Evaluator allows array access to pointers even if the type wasn’t declared with {$POINTERMATH ON}
  • Added: New compiler option extensions: -x–compileonly, -x–reslist, -x–depfile, -x–unitstats
  • Added: More performance optimization for the DCC64 compiler
  • Added: TStringBuilder.SetLength optimization [RSP-19178]
  • Added: TStrings.GetDelimitedText optimization
  • Fixed: Packages with duplicate units may not have caused a fatal compiler error.

IDEFixPackD103Reg64.7z

fastdccD103vDev.7z

Related:

–jeroen

Posted in Delphi, Delphi 10.3 Rio (Carnival), Development, Software Development | 4 Comments »

Generating a million sequential numbers on the fly in a SQL Server query

Posted by jpluimers on 2019/01/16

A while back I wrote on Generating a million sequential numbers on the fly in a Firebird query – some solutions and speed measurements.

SQL Server has different features and performance characteristics so here are some links on doing similar things in SQL Server:

As always: if performance is important, measure before starting to optimise!

Via: [WayBack] sql – All hour of day – Stack Overflow

–jeroen

Posted in Database Development, Development, Firebird, SQL, SQL Server | Leave a Comment »

Tools for TCP tunnels over HTTP/HTTPS

Posted by jpluimers on 2019/01/16

With the advent of WebSockets, it looks like TCP tunnels over HTTP/HTTPS are gaining more ground and I need to put some research time in them.

Some old to new links:

CONNECT requests are not supported by many HTTP proxies, especially in larger organisations, so chisel and crowbar have a much bigger chance there.

And of course there is SoftEtherVPN/SoftEtherVPN: A Free Cross-platform Multi-protocol VPN Software. * For support, troubleshooting and feature requests we have http://www.vpnusers.com/. For critical vulnerability please email us. (mail address is on the header.).

However, that is a VPN solution which is much broader than just a single TCP tunnel. You can so similar things with OpenVPN, but over HTTP/HTTPS, also requires CONNECT:

SoftEtherVPN seems to be more versatile though. I blogged about that before, but back then didn’t have needs for it yet. VPN over HTTPS: Ultimate Powerful VPN Connectivity – SoftEther VPN Project.

–jeroen

via: [WayBackVPN through only http – Server Fault answer by [WayBack] neutrinus

Posted in Communications Development, Development, HTTP, https, Internet protocol suite, Network-and-equipment, OpenVPN, Power User, TCP, VPN, WebSockets, Windows-Http-Proxy | Leave a Comment »