Jump to content

A.M. Hoornweg

Members
  • Content Count

    446
  • Joined

  • Last visited

  • Days Won

    8

Posts posted by A.M. Hoornweg


  1. On 6/8/2023 at 12:46 PM, David Heffernan said:

    Imagine not being able to make a 64 bit IDE

    A 64-bit process can only load 64-bit designtime packages, so it would be a huge breaking change.  Having said that, the very fact that designtime packages are loaded into the IDE process itself is also its Achilles heel. Errors in a package can bring down the IDE. It would be nice if that were no longer the case.


  2. On 4/27/2023 at 2:36 PM, SwiftExpat said:

    In Delphi 11.3 I am curious if anyone else has seen this behavior. I can not reproduce this yet, but it has happened several times and I am curious if anyone else has seen this.

     

    I will likely rebuild this project group to see if it resolves.

     

    Symptoms / Cause of error

    • I have open a project group with ~20 projects in the list.
    • I am debugging projectA
    • I am looking at the source and the IDE prompts for recompile
    • recompile happens but random projectB executes ( I had not debugged or compiled this program in days )
    • no projects are active in the project group

     

    Activate projectA and everything works fine again.

     

     

    Is there a "build event" set in any of these projects?  That would execute a background program upon a full build.

     

     

     

     

     

    • Thanks 1

  3. On 4/8/2023 at 9:34 AM, David Heffernan said:

    This entire thread blows my mind. The number of people who think it's normal to read UTF8 as though it were ANSI. 

    Is this a one-time problem for OP, and is this the only encoding he will encounter? 

     

     


  4. Just open the extracted *.txt files in Notepad++ and try out the different encoding options that this program offers until the files display correctly. 

     

    Then save them as "unicode with bom".   tStringlist.loadfromfile will load the files correctly even if they countain foreign characters.

     

     

    • Like 1

  5. 12 hours ago, Remy Lebeau said:

    Agreed.  I HATE that they did that.  I used to refer to the old docs pretty often, and now its all gone.  I have the source code for D5-XE3 and 10.3, but not for XE4-10.2 or 11.x.

    I have an idea that might work.  There's a service called "the internet archive" where people can archive snapshots of internet sites to prevent them from disappearing . 

     

    I see that somebody has archived the Delphi 10 Seattle docwiki in 2018:

     

    https://web.archive.org/web/20180825012640/https://docwiki.embarcadero.com/RADStudio/Seattle/en/Main_Page


    In the left side-bar of that page, you'll see links to older Delphi versions going back to version 2010.   These links will initially trigger a http error 301, then after a few seconds they redirect to an archived version which is functional!

     

    By following these older links, I can reach the following pages:

     

    Delphi 2010:

    https://web.archive.org/web/20190507085636/http://docwiki.embarcadero.com/RADStudio/2010/en/Main_Page

     

    XE:

    https://web.archive.org/web/20210513170545/http://docwiki.embarcadero.com/RADStudio/XE/en/Main_Page

     

    XE2:

    https://web.archive.org/web/20190709193313/http://docwiki.embarcadero.com/RADStudio/XE2/en/Main_Page

     

    XE5:

    https://web.archive.org/web/20180920190325/http://docwiki.embarcadero.com/RADStudio/XE5/en/Main_Page

     

    XE6:

    https://web.archive.org/web/20190709093357/http://docwiki.embarcadero.com/RADStudio/XE6/en/Main_Page

     

    XE6:

    https://web.archive.org/web/20190709093357/http://docwiki.embarcadero.com/RADStudio/XE6/en/Main_Page

     

    XE7:

    https://web.archive.org/web/20190508184802/http://docwiki.embarcadero.com/RADStudio/XE7/en/Main_Page

     

     


  6. There are some serious issues on that page. Especially with the "wiki" links. 

     

    If I click on any "what's new" link of an old Delphi version because I want to find out which features were introduced in that version, it always leads me to the Alexandria wiki pages.   Very disappointing. Has Embarcadero suffered a data loss of old wiki versions ?


  7. Hello all,

     

    I'm having the worst of times trying to get remote debugging to work between a VMWare virtual machine (running Delphi 11.3, Windows 11 prof) and the host machine itself (Also Windows 11). I have disabled the firewalls on both the host machine and the VM so these won't interfere.

     

    I've installed PAServer of Delphi 11.3 on the host machine,  then started PAServer, not specifying a password.

     

    In the VM I start Delphi, select Run -> Attach to process -> then select "Embarcadero Windows 32-bit debugger"  -> Remote machine.

    I create a new profile that connects to the host machine using the correct IP address, press "test connection" and it says "connection succeeded".  So far, so good.

     

    But when I press "Finish", Delphi freezes for a while, then says "unable to connect to remote host". 

    I've also tried starting both PAServer and Delphi as administrator. It makes no difference.  The remote debugging functionality seems totally broken. 

     

    And by the way - how does one *delete* PAserver profiles? The drop-down list is getting full and I want to get rid of them.

     

     

     


  8. 1 hour ago, Fr0sT.Brutal said:

    No it wasn't. I consider WinAPI UI pretty thread-safe.

    No it isn't. Because it isn't stateless.  For example, if you draw a shape by a sequence of lines:

    MoveToEx (hdc,100,100,NIL);
    
    LineTo (Hdc, 200,200);
    
    LineTo(Hdc, 10,100);

     

    the commands draw contiguous line segments because each segment starts at the position where the previous command ended.  If multiple threads draw in parallel on the same Hdc, that is not the case anymore.

     

     

     


  9. 2 minutes ago, David Heffernan said:

    Binary compatibility for packages isn't something that bothers me. I mean, you get a major new upgrade and that happens anyway. But better code gen wouldn't mean changes to binary compatibility for packages. Also is 11.3 even binary compatible with 11.2 packages?

     

    Why do I want a single pass compiler? I'm not the end user. I want to deliver a program that runs quickly. Am I going to tell my customers, I don't want to deliver a program that runs twice as fast because then I wouldn't have a single pass compiler. Why do my customers care about single pass compilers? Is that something that your users talk to you about?

     

    I did not need to recompile my third-party 11.2 packages (TMS Components, LMD Components, Intraweb), so I guess 11.3 is binary compatible to 11.2.

     

     

    I certainly wouldn't mind having a thorough 2-pass compiler producing fast and tight executables for release mode.   But during development and debugging I prefer F9 to be fast.

     

     

    • Like 2

  10. 2 hours ago, David Heffernan said:

    Frustration at my dev tool lagging behind. The editor is the least of my worries. It's the poor and never changing performance of the code emitted by the compiler that frustrates me the most. 

    I suppose that would make 11.3 binary incompatible to existing packages.  

     

    Can serious optimization be done by a single pass compiler anyway?


    1. Run a "command prompt" as administrator (=elevated).
    2. Enter the command Net Stop SPOOLER and confirm with the Enter key.
    3. Enter the command Del c:\windows\system32\spool\printers\*.*   and confirm.
      This will delete old print jobs. 
    4. Enter the command Net Start SPOOLER and confirm.
    5. Close the command prompt window.

     

     

    You can easily put this code into a batch file (*.cmd), but remember that it must be run in elevated mode.


    You can also write a Delphi program that performs the same steps, but its "bitness" should match that of your Windows version and the manifest must specify the execution level "require administrator".

     


  11. Hello World,

     

    I notice that tList<T> has a terrible growth strategy, it basically does "TListHelper.InternalGrow(count + 1)" whenever an item is appended, there is no granularity and in very large collections the overhead can become undesirable. 

     

    It is not possible to use the OnNotify event to check and increase the capacity before the insert, because TListHelper "forgets" to send the the notification cnAdding before it inserts. That value exists but is never used.

    Instead, it sends cnAdded after the fact.  Sure it's still possible to check and increase the capacity at that point, but it's not optimal. In my opinion, it would be better if tListHelper would simply send a cnAdding notification before inserting.

     

    I can still inherit from tList<T> and override/reintroduce the Add method by a new one that takes granularity into account, but in my opinion it's kinda un-elegant because the base class already has a notification feature that could be used to achieve the same thing.

     

    I'd love to hear the opinion of the Delphi community on this!

     


  12. 19 hours ago, Uwe Raabe said:

    As far as I understand, the dongle is for the system that does the signing, not the one checking the signed exe.

     

    The problem I see is that this completely counterfeits the idea of virtualization when the dongle (or HSM) is hardware bound. I can move around my build server and agents, which are all realized as VM. If my build machine breaks, I can easily set up a new one and continue. In case of a dongle I may be able to move it too, as long as it did survive the fire, flood, earth  quake or bomb attack that destroyed the old machine. It creates a new hardware dependency and a single point of failure.

    In the case of VMWare, the "hardware identity" of the machine is determined by some entries in the *.VMX file which can be manually edited as long as the VM is unencrypted. 
    These entries are "uuid.bios" and "uuid.location".  The VM's MAC addresses are also derived from these ID's. 

     

    It is vital to set uuid.action="keep" if you want to force VMWare to maintain the hardware identity of a VM if it is moved to a different host machine.


  13. Hello all,

     

    On 23 june 2023, new security requirements for storing code signing certificates will come into force.  I quote the most relevant change:

     

    "Effective 1 June 2023, the code signing certificate key pair must be generated and stored in a hardware crypto module that meets or exceeds the requirements of FIPS 140-2 level 2 or Common Criteria EAL 4+. This means the key pair will be generated in a device, where the private key cannot be exported. This will help to minimize the private key compromise."

     

    https://securityboulevard.com/2022/05/ca-browser-forum-updates-requirements-for-code-signing-certificate-private-keys/

     

     

     

    As far as I can judge, this is highly disruptive. Our company has multiple developers that work remotely much of the time and we need to be able to rollout software updates in a timely fashion. It would very much interfere with our deployment processes if we are no longer allowed to store the keys on our development machines. 

     

    Your opinions on this?

     

     

     

     

     


  14. 15 hours ago, David Heffernan said:

    Very rare to find a scenario where this works well.  The serialised state can be huge.  And the asker here has a database to work with. You are going to serialise that in its entirety?

    Certainly not! But if the Delphi object represents a document or record in a database, backing up old versions on disk is often possible.  A colleague of mine has written a reporting tool that does precisely this.


  15. 7 hours ago, skyzoframe[hun] said:

    Hello, I need advice from all of you. I know I am not the only one who has got these problems. Maybe someone has already solved it.

    1.-How to handle undo and redo in code?

    2.-What are the best strategies for handling it in the relational databases (InterBase and Firebird)?

    best wishes, k.z.

     

    A classical way to achieve undo/redo is if your object can serialize itself, for example using XML or Json.   That way you can keep the last xxx modified versions of the object in a temporary folder on disk.

×