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

Shouldnt this line be null terminated? HostEnt := gethostbyname(MarshaledASt…

Posted by jpluimers on 2018/08/07

[WayBackShouldnt this line be null terminated? HostEnt := gethostbyname(MarshaledAString(TEncoding.UTF8.GetBytes(Name))); – G+ – Allen Drennan

Yes it should, but I’m not sure if the compiler is fully to blame as GetBytes does not return a terminating zero byte.

–jeroen

Posted in Delphi, Development, Encoding, Software Development, UTF-8, UTF8 | Leave a Comment »

One more reason to disable live bindings: it throws exceptions when a project is in a project group having multiple projects upon project group load

Posted by jpluimers on 2018/08/02

This was Delphi Berlin, but Live Bindings is not much better in any other Delphi version when opening a project group having multiple applications none of which use Live Bindings:

This is how you disable them in Delphi 10.1 Berlin from the console; modify your BDS version and BPL version for other Delphi versions:

reg add "HKEY_CURRENT_USER\Software\Embarcadero\BDS\18.0\Disabled Packages" /v "$(BDSBIN)\dclbindcomp240.bpl" /t REG_SZ /d "Embarcadero LiveBindings Components" /f
reg add "HKEY_CURRENT_USER\Software\Embarcadero\BDS\18.0\Disabled Packages" /v "$(BDSBIN)\dclbindcompfmx240.bpl" /t REG_SZ /d "Embarcadero LiveBindings Components FireMonkey" /f
reg add "HKEY_CURRENT_USER\Software\Embarcadero\BDS\18.0\Disabled Packages" /v "$(BDSBIN)\dclbindcompvcl240.bpl" /t REG_SZ /d "Embarcadero LiveBindings Components VCL" /f
reg add "HKEY_CURRENT_USER\Software\Embarcadero\BDS\18.0\Disabled Packages" /v "$(BDSBIN)\dclbindcompdbx240.bpl" /t REG_SZ /d "LiveBindings Expression Components DbExpress" /f
reg add "HKEY_CURRENT_USER\Software\Embarcadero\BDS\18.0\Disabled Packages" /v "$(BDSBIN)\dclbindcompfiredac240.bpl" /t REG_SZ /d "LiveBinding Expression Components FireDac" /f

(Reminder to self: modify bitbucket.org/jeroenp/wiert.me/src/tip/Native/Delphi/Scripts/List-Delphi-Installed-Packages.ps1 so it can generate these)

Edit: I have done just that: it now understands the GenerateDisablePackagesScriptparameter so it generates a small console script to disable various packages.

In QualityCentral: 144003 – Automated Incident Report:

Read the rest of this entry »

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

Just curious whether anyone has had experience with the Uses Cleaner written by Oleg Zhukov…

Posted by jpluimers on 2018/08/02

Reminder to self: see if there was follow-up on [WayBack] Just curious whether anyone has had experience with the Uses Cleaner written by Oleg Zhukov: http://www.olegzhukov.com/UsesCleanupceaf.zip?fileticket=R_… – Bill Meyer – Google+

File: [WayBackhttp://www.olegzhukov.com/UsesCleanupceaf.zip?fileticket=R__cxggc2OA%3d&tabid=73&mid=402

–jeroen

Posted in Delphi, Development | 1 Comment »

Interesting channel with a truckload of Firemonkey FMX demos: Quark Cube – YouTube

Posted by jpluimers on 2018/08/01

[Archive.is] Quark Cube – YouTube:

We create tutorials. And all this without the usual stuff. We want to show how you can work with FireMonkey. Our tutorials are not available as source code. We want to show you a look more, and yes, we do it. Fast, reliable, targeted, unambiguous and ahead of its time. We love Delphi with FireMonkey. #ILoveDelphi

The vides are at [Archive.is] (70) Quark Cube – YouTube

Via Dave Nottage

–jeroen

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

TIME_WAIT and MaxUserPort – what it is, what it does, when it’s important – Blog du Tristank

Posted by jpluimers on 2018/08/01

Despite many posts saying you can use it on other than outbound connections, lets quote that it doesn’t:

MaxUserPort controls “outbound” TCP connections

[WayBackMaxUserPort is used to limit the number of dynamic ports available to TCP/IP applications.

It’s never going to be an issue affecting inbound connections.

MaxUserPort is not the right answer if you think you have an inbound connection problem.

Source: [WayBackMaxUserPort – what it is, what it does, when it’s important – Blog du Tristank

The side of the TCP connection that closes is gets the TIME_WAIT state, which means you should avoid your server to terminate connections because it then will run out of available ports. Clients should disconnect when done (or when done for the foreseeable future) otherwise the server gets the 2MSL TIME_WAIT penalty as for instance explained by [WayBack] TIME_WAIT and its design implications for protocols and scalable client server systems – AsynchronousEvents.

The solution for inbound connections is that your TCP based protocol should enforce either the client to close the connection, or to use some form of client pooling so there is no need for many connection setup/teardowns of short lived connections.

TIME_WAIT can last for about ~10 minutes if you are unlucky.

More recommended reading:

–jeroen

Posted in Communications Development, Development, Internet protocol suite, Software Development, TCP | Leave a Comment »

On my research list: FastMM4 LogAllocatedBlocksToFile to help find pseudo “leaks”: allocations released at application end, but during run-time progressively increase memory usage

Posted by jpluimers on 2018/08/01

From a quick scan for LogAllocatedBlocksToFile, I found these links I need to dig deeper into:

This in oder to spot “leaks” at run-time that are being release at process end, but build up memory usage over time. Some might call them “live leaks”.

Basically this is a technique I used a long time ago when I wrote a memory allocation dumper and parsing tool combination in the Turbo/Borland Pascal era called “Korsakov” (I might even have updated that to Delphi 1 once, but soon in Delphi better tools became available).

Another tool that might help here is [WayBackGitHub – yavfast/dbg-spider: Spider – Delphi profiler with docs at [WayBack] Spider – Delphi profiler:

–jeroen

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

Don’t expect high floating point performance from the Delphi for Linux compiler

Posted by jpluimers on 2018/07/31

Don’t expect high floating point performance of the Delphi for Linux compiler as this thread proves it is not: [WayBack] Based on a recent post here, it looks like the new Linux compiler uses the x87 unit for floating point. Naturally this won’t perform well. If it is true… – David Heffernan – Google+

–jeroen

Posted in Delphi, Delphi 10.2 Tokyo (Godzilla), Development, Software Development | 5 Comments »

windows – How to list all files in directory/subdirectory without path name CMD? – Stack Overflow

Posted by jpluimers on 2018/07/30

I needed all .dproj files in all subdirectories, but only their filenames without any directory names.

With directory names, this is easy:

dir /s /b *.dproj

The answers at [WayBack] windows – How to list all files in directory/subdirectory without path name CMD? – Stack Overflow give the below kind of output.

[WayBack] forfiles embeds all filenames within quotes:

forfiles /m *.dproj /s

"Foo.dproj"
"Bar.dproj"

A more convoluted [WayBack] for loop gives them without quotes where n stands for name and x for extension including .:

for /r %a in (*.dproj) do @echo %~nxa
Foo.dproj
Bar.dproj

–jeroen

Posted in Batch-Files, CommandLine, Development, Power User, Scripting, Software Development, Windows | Leave a Comment »

The Plastic equivalent of .gitignore is ignore.conf

Posted by jpluimers on 2018/07/26

A while ago, I landed a place using Plastic SCM, so I had to adopt some idiom from the git world.

The [WayBack] .gitignore equivalent in Pastic SCM is ignore.conf. Here are some links to documentation on it:

There is another file with a similar, but deceptively different name and behaviour: hidden_changes.conf. There ignore.conf ignores changes, hidden_changes.conf completely hides them. I am still not sure what subtleties are involved in the difference between “ignore” and “hide”, as the documentation is confusing and hidden_changes.conf can also appear in the root of a repository:

hidden_changes.conf Contains the paths of the controlled files to hide from the Pending changes view. The hidden changes are controlled items that can be changed but the user doesn’t want them to appear by default on the Pending changes view.

This config file is located in the plastic4 directory (under $HOME/.plastic4 on Linux/Mac systems or C:\Users\user\AppData\Local\plastic4 on Windows), in the root directory of the workspace, or in the plastic-global-config repository so that all clients have the same settings by default.

Learn about how to configure the hidden changes list.

ignore.conf Contains the paths of the private files to be ignored in the Pending changes view. The ignored files are files that you have no intention of placing under source control.

This config file is placed at the root directory of the workspace, or in the plastic-global-config repository so that all clients have the same settings by default.

Learn about how to configure the ignored list.

These configuration files are supported:

Important: These are the files that can be globally configured:

So I based mine on Tortoise SVN Global Ignore Pattern for Delphi and Visual Studio containing at least these:

*.identcache
*.local
*.dcu
*.rsm
*.bak
*.~*
*.tvsconfig
__history
__recovery
ModelSupport_*

–jeroen

Posted in Development, DVCS - Distributed Version Control, git, PlasticSCM, Software Development, Source Code Management | Leave a Comment »

Quickly generate queries for all non-system tables in your database in Firebird or InterBase

Posted by jpluimers on 2018/07/26

Change at will:

  select 'select * from ' || r.rdb$relation_name as query
    from rdb$relations r
   where 1=1
     and r.rdb$system_flag <> 1 -- no system relations
     and r.rdb$view_source is null -- only tables
order by r.rdb$relation_name

For the EMPLOYEE demo database, this results in:

select * from COUNTRY
select * from CUSTOMER
select * from DEPARTMENT
select * from EMPLOYEE
select * from EMPLOYEE_PROJECT
select * from JOB
select * from PROJECT
select * from PROJ_DEPT_BUDGET
select * from SALARY_HISTORY
select * from SALES 

–jeroen

Posted in Database Development, Development, Firebird, InterBase, Software Development | Leave a Comment »