Jump to content

Steve Maughan

Members
  • Content Count

    142
  • Joined

  • Last visited

Everything posted by Steve Maughan

  1. The new TParallelArray<T> seems like a drop-in replacement for TArray<T>. I tested the performance of the parallel sort algorithm on my Intel i9-12900HK laptop. This has 6 performance cores (with hyperthreading) and 8 efficient cores. Here are the results: One Billion Double Values: TArray<>: 183.8 seconds TParallelArray<>: 34.8 seconds Speed-up: x5.3 Five Million Double Values: TArray<>: 692 ms TParallelArray<>: 122 ms Speed-up: x5.7 500k Double Values: TArray<>: 65 ms TParallelArray<>: 18 ms Speed-up: x3.6 This speed up seems quite good to me. — Steve
  2. Steve Maughan

    TParallelArray Sort Performance...

    I've just repeated the 500k test and there is indeed quite a bit of variation across the parallel times. They range from 10 ms to 25 ms. The single core times are quite consistent at 63 ms to 65 ms. — Steve
  3. Steve Maughan

    TParallelArray Documentation?

    Does anyone know how to access the new TParallelArray capabilities? I can't find any documentation on the website. — Steve
  4. Steve Maughan

    App Builder & Blazor

    Blazor is an interesting technology: web development using C#, compiling to WebAssembly. There’s also App Builder that can do create Blazor GUIs in a RAD style environment. Does anyone know of any plans to do something similar with Delphi? It seems this would be in the original spirit of Delphi i.e. RAD development compiling to native executable. I know there are things like TMS WebCore, but they compile to JavaScript, whereas WASM would (I assume) be significantly faster. Thoughts? — Steve
  5. Steve Maughan

    App Builder & Blazor

    That gives me hope
  6. Steve Maughan

    App Builder & Blazor

    Hi Lars, You may be right but I find parallel with the current situation with Blazor and 1994 with VB 3. When Delphi was launched VB had first-mover advantage in the RAD development market. There were lots of ActiveX components. Then Delphi came along and provided a cleaner way to develop and the executables were lightning fast. Now we have Blazor and all of the .net luggage that needs to be installed. To me Blazor seems cluncky in the same way VB was clunky back in 1994. I see a sizable gap in the market for Blazor challenger. The key components would be a page-builder (like the ones for WordPress), the ability to drop controls on GUI and change properties, and then create events and code in Delphi / Visual Pascal. If the whole app was then compiled to WASM and run on any browser that would be wonderful. But you might be right, it might be too much for Embarcadero to pull off. Steve
  7. Steve Maughan

    App Builder & Blazor

    Hi Lars — I don’t have specific project need. This post was more of a desire for Embarcadero to move in this direction.
  8. I recently updated to D11.3 for AlignMix, our mapping solution. We were previously using D11.1. We have old code that reads a DBF file. This is used to read the DBF files associated with ESRI Shapefiles that contain geographic data. The code had worked for eight years without a problem. It still works in 32 bit mode but now doesn't work in 64 bit mode and gives an error. The DBF reading routine contains code that casts blocks of memory as strings etc — this is probably the root of the problem. If anyone is interested, I've attached a sample project that reads a DBF file using the code. In the sample project I only get two warnings: [dcc32 Warning] uDBF.pas(155): W1000 Symbol 'StrPas' is deprecated: 'Moved to the AnsiStrings unit' [dcc32 Warning] uDBF.pas(216): W1057 Implicit string cast from 'AnsiString' to 'string' Are these relevant? Question: what changed between D11.1 and D11.3 that could cause this type of problem? Was there any change involving casting of strings in 64 bit mode? All help appreciated! Steve DBF-64-Bit-Bug.zip
  9. Steve Maughan

    D11.3 Surfaces a Bug in 8-Year-Old Code that reads DBF file...

    Thanks @Remy Lebeau — I'll take a look.
  10. Steve Maughan

    D11.3 Surfaces a Bug in 8-Year-Old Code that reads DBF file...

    @Cristian Peța this version works perfectly. Many thanks — I owe you one!! @Brian Evans Thanks — that makes sense. @Attila Kovacs thanks for the input! — Steve
  11. Steve Maughan

    D11.3 Surfaces a Bug in 8-Year-Old Code that reads DBF file...

    Hi Cristian — many thanks but the file you uploaded is identical to the original. Is there a patched version? I owe you bigtime! — Steve
  12. Steve Maughan

    D11.3 Surfaces a Bug in 8-Year-Old Code that reads DBF file...

    @Cristian Peța you found it!! When I disable the ASLR in Delphi 11.3 it also runs fine in 64 bit mode. That makes sense. MANY THANKS! Now the question is, how do I make it work with ASLR enabled. — Steve
  13. Steve Maughan

    D11.3 Surfaces a Bug in 8-Year-Old Code that reads DBF file...

    Thanks Attila, but I didn't think "Data" needed to be initialized. The GetMem function is asking the OS to allocate some memory of length "iRecord", and sets "Data" to point to the start of the allocated memory. Is this not correct? — Steve
  14. Steve Maughan

    EXE Speeds: Delphi vs. FPC?

    I've used Delphi since it was launched in 1995 and never explored the FPC. Now I'm tinkering on developing a chess engine. For this I'd like the EXE to be as fast as possible. I assume Delphi produces faster EXEs than FPC. Is this correct? I Googled around and the only posts were 10+ years old. They implied Delphi was faster — sometimes by quite a bit. Has anything changed? — Steve
  15. Steve Maughan

    EXE Speeds: Delphi vs. FPC?

    I can't tell if you're joking or not. There are not many tasks more computationally intensive than chess. Of course I'll benchmark but just wanted to know if anyone had any broad-brush insights that could save me some time. Thanks, Steve
  16. Steve Maughan

    Writing & Reading as a Console App?

    @Fr0sT.Brutal This looks ideal. I'll delve in a try to implement this approach @FPiette thanks also, this looks good too! — Steve
  17. I'm converting my chess engine to Delphi. It's a console application that uses the UCI protocol. I'm use "writeln" to send text to the console and have a thread that simply uses "readln" to capture the input from the user. Everything works fine when it's run as a terminal application and I type in the commands. However, when I try to run it using a Chess GUI the communication doesn't happen. I've written a short app using DOScommand and it seems the communication isn't happening between the two applications. What am I missing? How do I capture the standard input sent from the other application? How do I write back my commands to the standard output so it can be processed by the other application (i.e., the chess GUI)? Thanks, Steve
  18. Steve Maughan

    Writing & Reading as a Console App?

    I've added the "flush(Output)" command after the "WriteLn" statements and it seems to be working. Any advice on getting the ensuring the fastest possible communication via StdIn and StdOut would be appreciated! — Steve
  19. Steve Maughan

    Writing & Reading as a Console App?

    @FPiette Yes, that's why I was planning to have a separate thread constantly reading the StdIn. @KodeZwerg Yes, I was planning to create a separate TUCI class to handle the communication
  20. Steve Maughan

    Any Known Issues with ZCompressStream?

    My application saves data as a compressed JSON file. I use the standard System.ZLib routines ZCompressStream and ZDecompressStream to handle the compression. I thought these were just a wrapper around standard ZLib routines. Earlier today someone sent me an application file that couldn't be opened. It turns out it couldn't be decompressed. It could have been corrupted after being saved. The decompression routine went into some sort of endless loop when it attempts to open the file. My question is: does anyone know of any problems compressing data using ZCompressStream? I'm using Delphi DX 10.4.1. Are there any other third party ZLib compatible compression and decompression routines? Steve
  21. Steve Maughan

    IfThen Oddity...

    The following code causes an AV: type TFoo = class private fName: string; public property Name: string read fName write fName; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses StrUtils; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var Foo: TFoo; begin Foo := nil; Form1.Caption := IfThen(assigned(Foo), Foo.Name, ''); end; The line that cause the AV is the one with the "IfThen" statement. I would have thought this would set the Caption to '' if Foo was not assigned but instead I get an AV. This implies both the True and False expressions are evaluated but I can't see why. Am I missing something obvious? The project is attached. Delphi 11.1 Any insights appreciated. Steve IfThenAV.zip
  22. Steve Maughan

    IfThen Oddity...

    That makes sense. I learn something new every day! Thanks, Steve
  23. Steve Maughan

    TChromeTabs for Delphi 11?

    Has anyone been able to install TChromeTabs for Delphi 11.1? It's missing a *.groupproj file for Delphi 11. Any steps would be appreciated. It was in GetIt but isn't anymore. Thanks, Steve
  24. Steve Maughan

    TChromeTabs for Delphi 11?

    @corneliusdavid many thanks! I didn't know that only the 32 bit runtime was needed. Everything seems to work perfectly!
  25. Steve Maughan

    TChromeTabs for Delphi 11?

    Strangely, on my old computer running Delphi 10.4 I only had a win32 version of DesignIDE.dcp yet TChromeTabs installed fine on win64 via GetIt
×