

Rollo62
Members-
Content Count
1945 -
Joined
-
Last visited
-
Days Won
24
Everything posted by Rollo62
-
Python seems most natual to me, since all 3 libraries may support it or have wrapper for that. Moreover is Python maybe also a natural way to use these kind of libraries ( but I'm not a Chemist ), so to put a Delphi UI on top would have a lot of benefits IMHO, while still keeping the full force of Python to C++ underneath. The additional burden to install and requiring Python-Libs for such project seems minor to me. Esspeciall when you think of combining Chemistry with AI features, I think you are already right in the Python world.
-
[Fmx, Macos64] [dccosx64 Error] E2597 ld: warning: directory not found
Rollo62 posted a topic in Cross-platform
I'm still testing porting from 10.3.1 to 10.3.2 In one FMX project for Macos, when just opening and compiling the working project, I've got some messages when compiling under Macos64 (Of coarse it works well under all other platforms). 1.) This message is strange, because the Imports folder is not there at all, not even the 20.0\ folder, because I installed the IDE under d:\Prj\... Under d:\Prj\Embarcadero\Studio\20.0\Imports I have that folder (which is almost empty, just a subfolder with one VCL related file "\Idl\StdVCL.idl". 2.) Its strange because of the reference to kernel32.-dll I have searched my settings, compiler, linker, deployment, registry, but I'm not lucky and couldn't find where these locations are maybe set. My BDSCOMMONDIR environment variable points to a folder close: C:\Users\reg_w\OneDrive\Dokumente\Embarcadero\Studio\20.0, but thats working at all other platforms. Then I decided to completely migrate via an new, empty project, like I described here: Create new FMX app, removed orignal unit1 and added my units from the old project. So now I got a more informative message, but still similar: compiling OK, linking failed The empty project runs, but when I add my units, something went wrong. I'm not recalling to have anything affecting linking in my code, but I haven't checked that yet. Which screw could I turn to remove this linker error, I hope somebody has a clue ? Edit: As usual, just when I prepare and sended a thread, it hits me in the face what this could be. The folder seems to be related to Spring4D .. To get Spring4D compiled, I used the following addition to switch to PUREPASCAL, which seemed to compile fine. I'M using the development branch, from not too long ago (2 weeks), haven't checked for changes. {$I Spring.inc} {$IFDEF MACOS64} // <--Addition {$DEFINE PUREPASCAL} {$ELSE} {.$DEFINE PUREPASCAL} {$ENDIF MACOS64} unit Spring.Events; So probably I have to c heck what happens with Spring4D in my Macos64 tests ... How can I switch S4D to Macos64 in the right way ?- 10 replies
-
- firemonkey
- fmx
-
(and 1 more)
Tagged with:
-
[Fmx, Macos64] [dccosx64 Error] E2597 ld: warning: directory not found
Rollo62 replied to Rollo62's topic in Cross-platform
This topic has nothing to do with Macos, FMX, Spring4D, Kastri or whatsever. This error was caused by a region, which was a leftover from Copy-Paste code from Windows, which I shouldn't do in the first place. The Region {$REGION 'Windows helper functions'} function SetThreadExecutionState(esFlags: EXECUTION_STATE): EXECUTION_STATE; stdcall; external 'kernel32.dll'; was hiding this Windows-Kernel related kernel reference, which was never used anywhere, but this one line never showed up as an error at this point. This tells me, that using regions to hide code, may also hide code to spot obvious failures sometimes.- 10 replies
-
- firemonkey
- fmx
-
(and 1 more)
Tagged with:
-
Programming with AI Assistance: A personal reflection.
Rollo62 replied to Juan C.Cilleruelo's topic in Tips / Blogs / Tutorials / Videos
Yes, but not because its irrelevant. But that's because even the last snoozer has realised that by now. -
@Kas Ob. Yes, I have read about CloudFlare a lot of positive things, but I'm not yet an active user. Your proposal will add additional cost, I think minimum 5$ per month, right? My question would be, how far do I get with their free tier service? As far as I understand, this will be an unlimited, somehwhat protected DNS server, perhaps thats already solving such issues. Is the free tier usable for a commercial server, with not too wild traffic?
-
Hard to say. One effective approach could be behavior-based rate limiting rather than relying solely on IP tracking. Since these hackers are making two requests at a time from each IP and cycling through thousands of addresses, you could analyze request patterns to flag suspicious behavior. For example: - Track request timing and frequency per IP: Legitimate users rarely hit your site with precise, repetitive timing (e.g., two requests exactly every 24 hours). You could set a threshold where IPs making requests in a tight, unnatural cadence (say, under a second apart) get temporarily soft-blocked (e.g., delayed responses or a 429 Too Many Requests status) without affecting users with more organic patterns. - Fingerprinting beyond IP: Use a lightweight client-side fingerprinting technique (e.g., based on HTTP headers like User-Agent, Accept-Language, or even subtle timing differences in TCP handshakes). If the same fingerprint appears across multiple IPs in a short window, it’s a strong signal of VPN rotation from a single source. You could then throttle or block those requests without needing a CAPTCHA. - Perhaps you need only a few countries, so you could block most of all other country requests - or something like Fail2Ban https://github.com/fail2ban/fail2ban
-
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
@Anders Melander I found an older case of yours, here at DevExpress. https://supportcenter.devexpress.com/ticket/details/t812550/an-av-occurs-if-the-spell-checker-whose-usethreadedload-property-is-set-to-true-reloads Which speaks against FreeAndNil too. -
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
Thanks, that sounds like I would never consider this in the first place. This is why I am asking for a simple, generic example to better understand why this would probably make sense. Do you know a specific place in the VCL/FMX code, where it is used like that? -
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
Ok, you both are right, but I still wonder why its used in so many places, if its that unnecessary. The "reduce" was intended as fast fix, if you have no other choice to complete rework or repair anything in time, but you have to ship an update fast, used more or less like as a debugging tool. There must be at least one real use-case, where FAN makes perfectly sense. Yes, I already mentioned this use-case, so is this the only one? Why are there so many places using FAN during Create/Destroy, without any lazy injection? I only can think of critical timing or race-condition protection somehow. -
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
Thanks, its clear then, how the capture of anonymous methods work. We came from the question how FreeAndNil might be helpful here, in this kind of situations, right? Aren't there any situations where FAN can be useful, perhaps with an Assigned( FVar ) guard, were everybody can agree on? I can see much use of FAN in Delphi RTL, Spring4D and all many places all around, but at the same time everybody disagrees on its usefulness & better to avoid it, thats strange ... Where and why is it useful then, if not in situations where I want to check and mark the validity of a lazy Field or the like, for example by Assigned()? I cannot think of much use-cases, where I would ever need this. - If I use it in the case where I inject an object to a class, not by DI, but by method or property, then this would make sense to protect a Field by FAN, IMHO. - In a use case where I purely manage a Field myself by Create/Destroy, it doesn't make much sense if there is no possibility of delayed access to it. So maybe somebody has a clean example, to show where it makes sense? -
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
Sorry, if this was misunderstanding as an advice. It was searching for use cases of FreeAndNil, to help debugging such issues. And sometimes I have to solve problems which comes unexpected, by external influences, where I have little information and influence about. Ok, maybe there are ways to identify and encapsule these issues better, but most of the time they came a little out of the blue. -
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
I just find some time to present an alternative solution, without FreeAndNil, as example with an cancellation token, it could probably look like this, which is more work to do. But the basic problem stays the same, that the cause of the blocking cannot be cancelled. It cannot be allowed to wait forever, after free, so the destroy must compromise somehow. I am not sure, if touching the cancellation token variable on a freed object causes the same issues, I would guess. Perhaps the interfaced token variable preserves the handle accessible, so that it will be safe to touch it within the freed class, but I won't bet on this. So in which places a FreeAndNil should be used then, only in global variables ( don't shoot the messenger ) 🙂 There must be good use cases for FreeAndNil anywhere. type ICancellationToken = interface ['{8C3A7E13-7C12-4F4F-92F5-DA1111111111}'] function GetCancelled: Boolean; procedure Cancel; property Cancelled: Boolean read GetCancelled; end; TCancellationToken = class(TInterfacedObject, ICancellationToken) private FCancelled: Boolean; public function GetCancelled: Boolean; procedure Cancel; end; function TCancellationToken.GetCancelled: Boolean; begin Result := FCancelled; end; procedure TCancellationToken.Cancel; begin FCancelled := True; end; ... type TMyClass = class private FCancellationToken: ICancellationToken; public constructor Create; destructor Destroy; override; procedure StartAsyncTask; end; constructor TMyClass.Create; begin inherited Create; FCancellationToken := TCancellationToken.Create; end; destructor TMyClass.Destroy; begin // Signal the cancellation FCancellationToken.Cancel; // Perhaps a wait mechanism implementation here, if needed, but exactly this is not always possible ??? inherited Destroy; end; procedure TMyClass.StartAsyncTask; begin TTask.Run( procedure begin // Example: Loop until cancellation while not FCancellationToken.Cancelled do begin // Simulation of blocking, regularily checking for cancellation. Exactly this might not alwys be possible. Sleep(100); end; if FCancellationToken.Cancelled then begin // Task is cancelled Exit; end; TThread.Synchronize(nil, procedure begin // Callback-Code Writeln('Task finished gracefully.'); end); end); end; -
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
Ok, I'm open for your proposals If you got very sporadic AV on some customers devices and you are not able to reproduce that or to find any hints .... Sometimes a fast solution is needed, when a complete rewrite is currently not possible in time and you're unsure about the root cause. Of course I like to solve things once and forever too, and I only try to find possible use cases for the FreeandNil, which I have seen before. -
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
Yes, but from my experience, this helps to REDUCE the risk of AV's, in case of async processes, where you cannot safely cancel such async operation, because its not directly under your control. Another example could be a call inside from an anonymous method, how can you canel that, if the class it freed? -
Guidance on FreeAndNil for Delphi noob
Rollo62 replied to Paul Dardeau's topic in RTL and Delphi Object Pascal
To make this discussion less academic: I like to use FreeAndNil in places, where Async callbacks may occur. For example like this (roughly hacked example, excuse typos): type TMyClass = class private FMyVar : TStringList; // The problematic object FMyCallback : TProc; public constructor Create; destructor Destroy; override; procedure Conf_Callback(const AProc: TProc); procedure DoOnCallback; end; constructor TMyClass.Create; begin inherited Create; FMyVar := TStringList.Create; FMyCallback := nil; end; destructor TMyClass.Destroy; begin FreeAndNil( FMyVar ); // Free the object and prevent further calling it FMyCallback := nil; inherited Destroy; end; procedure TMyClass.Conf_Callback(const AProc: TProc); begin FMyCallback := AProc; end; procedure TMyClass.DoOnCallback; begin if not Assigned(FMyVar) then begin DoLogThisIssue; // Logging the rare problem Exit; //<== GUARD end; FMyVar.Add( 'Hello'); // Using an existing object, which is protected by FreeAndNil end; In cases where TMyClass is already freed, but pending async functions might still call the DoOnCallback function. If this happens, the guard may REDUCE THE RISK of an sporadic AV, probably. I know, the arguments against this are, that this should never happen and I should rewrite the code calling DoOnCallback in the first place. But in reality, I see these things might happen, especially in highly async, undetermined, not well testable situations, which will result in unwanted AV's, but where this situation only happens very rarely of system dependent. In that case I prefer to have at least an AV prevention, over having some kind of other issues in the app ( this is of course not a banking app ). At least I'm able to debug or log these rare situations in the guard. I would think of like these two categories: # High critical apps: Either you need a perfect stable, reliable and high-security app ( like banking, high security authentication, database, airplane control, etc. ) # Uncritical apps : Or you have an relative uncritical app, where its more important to not annoy customers by rare crashes, where you can try to catch such issues by logging. -
Looking but not finding...
Rollo62 replied to Rick_Delphi's topic in Job Opportunities / Coder for Hire
Unfortunately, they wont use Delphi, do they? -
Thanks for the info. From what I understood, these components came as binary package only, which would be a no-go for me. Can you confirm this, or am I interpreting their specs falsely?
-
I usually look into market surveys, which phones or brands were selling best https://www.heise.de/news/Smartphone-Markt-hat-sich-2024-erholt-chinesische-Marken-legen-zu-10241291.html#nav_marktanteile__1 Then you have a chance that you are testing on whats your clients are using most. Google Pixel is perhaps the best, most modern and best supported Android phone, which helps to be state-of-the-art, but its market share is quite low still.
-
Thanks, I know the OrangePi company, I will check that board. Thats a reasonable price, if so much variation in prices exists, its good to have a recommendation like yours.
-
@tomye Thanks, thats a very interesting project. That makes Rockchip an interesting option, when it comes to neural networks. I assume that you run this project under Android. There are at least some boards in the market that come with Android naturally, are these boards supported by Delphi out-of-the-box, like a Samsung or Pixel phone, or do we need special drivers or other measures, drivers or modules to make it compatible? Maybe you can tell us also something about the hardware you used too, which would be needed to run that smoothly? I assume a Firefly board would be a good choice, but it seems also to be quite costly, about 200 -300 USD. https://en.t-firefly.com/doc/download/207.html While a Radxa Rock 5A is available from 22 USD, I would expect from the data that it has NPU too, perhaps there are some drawbacks for that price. https://radxa.com/products/rock5/5a/ I have not checked where the differences in detail are, I assume both support the NPU in the same way, but I'm not an Rockchip expert. Maybe there are subtle differences in the Rockchip model code, which lead to biggers differences, which CPU model will be the most promising? Do you have recommendations for some capable Rockchip boards for testing, maybe there are many other boards than the two above, which are newer and more powerful, I'm not aware of.
-
PasLibVLC? https://stackoverflow.com/questions/36567287/delphi-paslibvlc-use-without-installing-vlc-player
-
What new features would you like to see in Delphi 13?
Rollo62 replied to PeterPanettone's topic in Delphi IDE and APIs
What features are most wanted: Under all platforms (Win32, Win64, Macos, iOS, Android, Linux, ...) I would wish to have - A debug experience, that is reliable and shows and behaves consistently under all platforms - A rock solid debugging function, with at least breakpoint, step-over, step-into ... likely the full feature set - A rock solid and consistent debug inspection view, with ability to show on mouseover or inspect, for all structures in the same way - A debug inspection view, that is able to decode all sub-structures of classes or records correctly and is fast and easy to access its underlaying members - A debug inspection view, that defaults to human readable data representation first, while there were options to watch single variables in many views. - A debug inspection view or watch, that can reliably switched between decimal or hex view at least (and even more integer/hex/string/byte array,pointer,... ) - A debug inspection view or watch, maybe on the breakpoint level, that can define the preferred view representation of the current session permanently, for all different views (hoover, inspect, watch,...) The Win32 behaviour is more or less the best reference so far, while other platforms are still not there. -
New Book Delphi Quality-Driven Development
Rollo62 replied to Dalija Prasnikar's topic in Tips / Blogs / Tutorials / Videos
Nice, now I have something very interesting to read in the next cold winter days The whole payment and download experience with PayHip was also extraordinary pleasing, I can recommend that. -
Does anyone know a delphi component that can play videos from a stream
Rollo62 replied to ToddFrankson's topic in VCL
This is interesting blog https://blogs.embarcadero.com/execute-scripts-and-view-source-with-tedgebrowser/ Perhaps this might work for showing videos, but there is also the possibility that certain Codecs or Plugins were missing, like HLS (.m3u8) : var HTMLContent: string; begin HTMLContent := '<!DOCTYPE html>' + '<html>' + '<body>' + '<video width="640" height="480" controls>' + //either local file '<source src="file:///C:/Pfad/zum/Video.mp4" type="video/mp4">' + //or stream '<source src="https://example.com/stream.m3u8" type="application/x-mpegURL">' + 'Dein Browser unterstützt das Video-Tag nicht.' + '</video>' + '</body>' + '</html>'; EdgeBrowser1.NavigateToString(HTMLContent); end; For accessing local files, there could be the need to add AdditionalBrowserArgument flags https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/working-with-local-content?tabs=dotnetcsharp#loading-local-content-by-navigating-to-a-file-url https://docwiki.embarcadero.com/Libraries/Athens//de/Vcl.Edge.TCustomEdgeBrowser.AdditionalBrowserArguments -
Loading a JPEG into FMX.TBitmap honoring EXIF orientation
Rollo62 replied to Alexander Halser's topic in FMX
Exactly, but if that doesn't set the value reliably, then you can use a second opinion by another internal sensor, or not? While you take that image in the phone, you could try to fix this, in your Android App. If you only read/export images from the Gallery and if you have no own Andoid App inbeteeen, then you have little chance. Still there could be the options to fix images, depending on device dependend information, e.g. Samsung S20 always needs 90° rotation, iPhone 14 doesn't need that. But such list will be huge and fragile and maybe also depends on specific mobile device settings.