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

Delphi ^A syntax: Documented, implied, or undocumented? – Stack Overflow

Posted by jpluimers on 2019/12/12

The syntax is documented. In the Turbo Pasal 3 documentation, i.e. the Z80 era.

Source my answer to [WayBackDelphi ^A syntax: Documented, implied, or undocumented? – Stack Overflow (I have added some WayBack Internet Archive links below) as it is from the Turbo Pascal era where the caret was introduced to support control characters:

This is from long ago as an escape character to enable you to have consts for control characters in a more readable way.
const
  CtrlC = ^C;
begin
  Write(Ord(CtrlC));
end.

This defines a Char constant with value #3, then writes 3 in Borland Pascal 7, and I remember seeing it years before that too.

I just checked the Turbo Pascal 5.0 and Borland Pascal 7.0 languages guides, but could not find it, so it seems undocumented.

Edit: I do remember this was a Borland thing, and just [WayBack] checked: it is not part of the ISO Pascal standard (formerly this was ANSI Pascal Standard, thanks Sertac for noticing this).

It [WayBack] is documented in the Free Pascal documentation [WayBack].

SGI uses the backslash as escape character, as per their docs [WayBack].

More Edit: I found it [WayBackdocumented in Delphi in a Nutshell and the [WayBackDelphi Basics site.

Found it: Just found it on page 37 of the Turbo Pascal 3 Reference Manual [WayBack].

(Marco van de Voort found the Free Pascal documentation)

It in fact originates in the 1984 Turbo Pascal 1 edition, as per the [WayBack] Turbo_Pascal_Reference_Manual_Feb84.pdf:

Read the rest of this entry »

Posted in Borland Pascal, Delphi, Development, FreePascal, History, Pascal, Software Development, Turbo Pascal, Z80 | 1 Comment »

Exceptional Safety

Posted by jpluimers on 2019/12/11

I think I tend to forget with [WayBack] Exceptional Safety is this:

object destruction process must not cause or raise any unhandled exceptions or you will have memory leaks beyond your ability to fix them.

Particulary, that means the BeforeDestruction method – and destructors themselves – must never ever allow exceptions to escape them. Any escaping exception there will always cause memory leak. Period.

–jeroen

via [WayBack] Single or nested try…finally blocks? None will prevent the memory leak if your destructors are broken. – Dalija Prasnikar – Google+

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

Node-RED

Posted by jpluimers on 2019/12/11

Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.

Seems one of the ways to automate our home: [WayBack] Node-RED, as it supports many input and output methods with all kinds of nodes between them:

input output
inject debug
catch
status
link link
mqtt mqtt
http http response
websocket websocket
tcp tcp
udp udp
serial serial

It is based on node.js, seems to need PM2 for running as a service, so I need to first figure out how well it runs on OpenSuSE (with more details than this gist).

After that I need to figure out how to version your configurations using git and document as it looks like the configurations sources are stored in JSON format [WayBack].

For resources:

  • StackOverflow node-red tag
  • Github node-red repositories
  • nodered documentation to:
    • get started (including Installation, Running, Adding non-stock Nodes, Upgrading, Creating your first and second flow, running on Docker / Windows)
      • running on a device (Raspberry Pi, BeagleBone Black, Android) which needs extra device specific modules to hardware inputs/outputs
      • communicating with a device (Arduino)
      • running in the cloud (IBM Bluemix, SenseTecnic FRED, Amazon Web Services, Microsoft Azure)
    • user guide (including Configuration, Security, Logging, Command-line Admin, Writing Functions, Embedding into an existing app)
    • cookbook (with many flows covering Basics, HTTP and MQTT)
    • creating nodes (with a wall of information: Creating your first node, JavaScript File, HTML File, Storing Context, Node properties, Node credentials, Node appearance, Node status, Configuration nodes, Help style guide, Packaging, Internationalisation)
    • flows (hundreds of them)

Code is published as JSON, but I wish more examples also showed the visual representation.

Via: [WayBack] Now I can go to bed :-) Added node-red [1] to my setup and thanks to node-red-contrib-ui [2] (replaced by node-red-dashboard [3]) I can now generate ni… – Jan Wildeboer – Google+ who also provided the large screenshot below.

–jeroen

Read the rest of this entry »

Posted in Development, Hardware Development, IoT Internet of Things, Network-and-equipment, Power User, Raspberry Pi | Leave a Comment »

Delphi/GDIPBitmap at master · tothpaul/Delphi · GitHub

Posted by jpluimers on 2019/12/11

Next time I don’t need something like TPngImage any more:

this little unit let you load any GDI+ supported graphic format (BMP, JPG, PNG or TIF) into a Delphi TBitmapit’s a TBitmap helper, so just add the unit to you’re project and call the method GDIPLoadFromStream

Source: Delphi/GDIPBitmap at master · tothpaul/Delphi · GitHub

Found via: [WayBack] Let’s extend TBitmap with a GDIP loader :) TBitmap.GDIPLoadFromStream can load any GDI+ supported format (JPEG, PNG, TIFF) https://github.com/tothpaul… – Paul TOTH – Google+

–jeroen

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

The ARC vs non-ARC situation adds yet another layer of complexity to creating cross platform code…

Posted by jpluimers on 2019/12/10

Interesting rant on the Delphi cross platform situation, for which this is a reminder to see how the current situation is after 2.5 years: [WayBack] The ARC vs non-ARC situation adds yet another layer of complexity to creating cross platform code. The Linux compiler uses ARC – while Windows and OSX don’t… – Lars Fosdal – Google+

–jeroen

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

If you have a gripe with nested if-then-else statements in any language, then usually it’s time to refactor some code…

Posted by jpluimers on 2019/12/10

Every time I run into complex nested if/then/else statement in any language with truckloads of code blocks, it usually means it is time to refactor in two steps:

  1. the code blocks into separate methods
  2. the decisions and methods into a polymorphic structure

Of course this adds some overhead, but usually you end up with code that is easier to unit-test and understand both the overall structure and detailed implementations of.

I’m all for language enhancements that allow deeply nested logic to be more manageable (for instance by enhancing a case construct), but usually refactoring makes that less of a need and more of a nice to have.

Via: [WayBackAnybody else have a gripe with nested if-then-else statements in Pascal? What if we had the following statement/syntax available in Pascal? … – Gerhard Venter – Google+

–jeroen

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

On my watch list: This is how microservices should be designed…

Posted by jpluimers on 2019/12/10

On my watch list: [WayBack] This is how microservices should be designed: – Linas Naginionis – Google+

–jeroen

Read the rest of this entry »

Posted in Development, Software Development | Leave a Comment »

The Secret of Great Gradient – UX Planet

Posted by jpluimers on 2019/12/09

Gradients work best when “Inspired by Nature”, even if you live in the city.

–jeroen

Read the rest of this entry »

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

Playing around with semantic typing in Oxygene: https://github.com/carlokok/…

Posted by jpluimers on 2019/12/05

Interesting: [WayBack] Playing around with semantic typing in Oxygene: https://github.com/carlokok/semantictyping adding operators and methods to type aliases to store distin… – Carlo Kok – Google+

Playing around with semantic typing in Oxygene: https://github.com/carlokok/semantictyping adding operators and methods to type aliases to store distinct types like distance, speed, acceleration while storing them as floats.

Check the repository linked; It essentially has types like Kelvin, Celsius ( https://github.com/carlokok/semantictyping/blob/master/SemanticTyping/Temperature.pas ), and Speed, Velocity, Acceleration ( https://github.com/carlokok/semantictyping/blob/master/SemanticTyping/Physics.pas ) using standard Oxygene features.

–jeroen

Posted in .NET, Development, Oxygene, Pascal, Software Development | Leave a Comment »

RAD Studio Custom Editor Sub-views – Dave’s Development Blog

Posted by jpluimers on 2019/12/05

This is a reminder to myself to checkout [WayBackRAD Studio Custom Editor Sub-views – Dave’s Development Blog and see if his [WayBack] Browse and Doc It plugin now supports the editor sub-views.

He also has a great free tool for Delphi: [WayBack] IDE Explorer – Dave’s Development Blog

–jeroen

Via:

Read the rest of this entry »

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