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

CDATA inside JavaScript or style section of HTML? They are for backward compatibility. Sometimes compatibility with ancient browsers.

Posted by jpluimers on 2019/01/23

As a back-end person, sometimes I wondered about CDATA in front-end HTML code was for, especially in JavaScript and CSS style elements.

[WayBackHTML vs. XHTML – WHATWG Wiki explains how to be compatible with XHTML, HTML, XML based tools and older browsers:

The following code with escaping can ensure script and style elements will work in both XHTML and HTML, including older browsers.

In both cases, XML ignores the first comment and then uses the CDATA section to avoid the need for escaping special characters < and & within the rest of the contents (with subsequent JavaScript comments added within to ensure the HTML-oriented code is ignored by JavaScript).

In HTML, older browsers might display the content without the content being within a comment, so comments are used to hide this from them (while modern HTML browsers will run code inside the comments). The subsequent JavaScript comment is added to negate the text added for the sake of XHTML.

The <style> requires the /**/ comments since CSS does not support the single line ones.

   <!---->
       ...
   //-->
   <style type="text/css"><!--/*--><![CDATA[/*><!--*/
       ...
   /*]]>*/--></style>

If not concerned about much older browsers (from which one is hiding the HTML) one can use the simpler:

   //
   <style>/*<![CDATA[*/
   
   /*]]>*/</style>

Also note that the sequence “]]>” is not allowed within a CDATA section, so it cannot be used in true XHTML-embedded JavaScript without escaping.

–jeroen

via:

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

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 »

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 »

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 »

some links that helped me fiddle with iframe elements

Posted by jpluimers on 2019/01/16

I need to document this properly later, but here are some links I used when fiddling with iframe elements:

A few things I learned:

  • You can either put the iframe elements in different divs then arrange the divs, or put a different ID on each iframe and arrange the iframe. In either case you will need a float: left; in your style and a width: 100vw in the div around all your frames.
  • Be aware that 100% isn’t 100% out of the box: default browser styles have a margin around your page and a border around an iframe.
    So you will need to fiddle with margin and border-width inside your styles for body and iframe. Easiest is to set them to none or 0.
  • Viewport width/height works easier for me than raw %.
  • For one-off situations, I like the good old meta refresh over fiddling with JavaScript.

–jeroen

Posted in CSS, Development, HTML, Web Development | Leave a Comment »

Top 25 Most Dangerous Programming Mistakes

Posted by jpluimers on 2019/01/15

10 years after the publication of the [WayBack] Top 25 Most Dangerous Programming Mistakes, the list for me is still the same.

You can see this from the CWE/SANS revisions: 1.0 in 2009 until 1.0.3 in 2011: not much changed.

Via: [WayBack] Top 25 Most Dangerous Programming Mistakes (2009) – Lars Fosdal – Google+

–jeroen

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

oath-toolkit / oath-toolkit · GitLab

Posted by jpluimers on 2019/01/15

Interesting library with ditto command-line tools: [Wayback/Archive] oath-toolkit / oath-toolkit · GitLab.

It allows you to perform all sorts of OAUTH operations from your code or terminal window including generation and verification of OAUTH tokens through [WayBackOATHTOOL.

Which allows you to do TOTP “zero fucktor” authentication. [WayBack/Archive] Zero Fucktor Authentication – Kristian Köhntopp – Google+: [WayBackZero Factor Authentication – The Isoblog.

The project has it’s home at [WayBackOATH Toolkit, but the repository has done some traveling and for now ended up at GitLab: [Wayback/Archiveoath-toolkit / oath-toolkit together with the web-site source [Wayback/Archive] oath-toolkit / website.

Edit 20230917

Read the rest of this entry »

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