-
Content Count
2857 -
Joined
-
Last visited
-
Days Won
101
Everything posted by dummzeuch
-
Depends which OS runs on it. 6 GB ram is a bit low for Windows 10. But if it runs Windows XP I'm sure Delphi 2007 will work fairly well (I've got a 6 years old netbook with only 2 GB ram that is useable with it). I guess that goes for any version that still officially supported XP and probably some later ones too. 6 GB is wasted on XP though, since it supports only up to 4 in the widely used 32 bit version. Buteven with Windows 10 it should run recent versions of Delphi, probably not very fast though. Personally I have no use for that kind of computer. My office / workplace at home has enough room for a full sized tower computer, I need more space for the monitors. And I like to be able to upgrade and replace components.
-
A bug in the TStringGrid implementation in Delphi 10.4. https://quality.embarcadero.com/browse/RSP-28821
-
fixed in revsion #3182 on 2020-06-06
-
Matthias Eissing works for Embarcadero, so it's an official offer by the company, I guess. On the other hand, I can understand why Andreas might not want to accept it. There are always strings attached, even if they don't come in the form of a written agreement.
-
As far as I know, he does not have a current Delphi license any more and needs the community edition of 10.4 before he can even start working on it.
-
In that case you could get rid of some lines in the .dpk file. VER200 is the first Unicode version (Delphi 2009), It's also the first version that introduced Generics (no idea how usable/buggy they were in that version).
-
function TMemoryStream.Write(const Buffer; Count: Longint): Longint; var Pos: Int64; begin if (FPosition >= 0) and (Count >= 0) then begin Pos := FPosition + Count; if Pos > 0 then begin if Pos > FSize then begin if Pos > FCapacity then SetCapacity(Pos); FSize := Pos; end; System.Move(Buffer, (PByte(FMemory) + FPosition)^, Count); FPosition := Pos; Result := Count; Exit; end; end; Result := 0; end; This is TMemoryStream.Write from System.Classes (which apart from using Int64 now seems to be unchanged since at least Delphi 2007). It looks rather inefficient to me: It checks for Count >= 0 while in my opinion it should check for Count > 0 because otherwise nothing gets written anyway and Result gets set to 0 (Remember Count is 0 in that case) which is done after the if statement anyway. If it did check for Count > 0 it could simply omit the Pos > 0 check because we already know that it must be because FPosition >= 0 and Count > 0, so FPosition + Count must also be > 0. So, my implementation would look like this: function TMemoryStream.Write(const Buffer; Count: Integer): Longint; var Pos: Int64; begin if (FPosition < 0) or (Count <= 0) then begin Result := 0; Exit; //==> end; Pos := FPosition + Count; if Pos > FSize then begin if Pos > FCapacity then SetCapacity(Pos); FSize := Pos; end; System.Move(Buffer, Pointer(Longint(FMemory) + FPosition)^, Count); FPosition := Pos; Result := Count; end; Am I missing something? Another oddity is that the GetSize method is not overridden to simply return FSize rather than calling Seek three times. Given that there are quite a few places in the RTL / VCL (and also JCL / JVCL, Indy and of course my own code) which use TMemoryStream as a convenient way to move around some bytes, it's odd that it still has these inefficiencies.
-
Judging from the VERxxx constants in the package source, SynEdit2 supports Delphi 2006 and up, correct? Could you please add that to the project description? @pyscripter
-
Quite possible. But on the other hand I had not yet arrived at the optimization step. I was still looking at the code and tried to understand what it was doing and why. And of course there is always the "I'm doing this because it's fun" part of optimizing. Btw: The best optimization for the code I actually care about (it's about writing JPEGs and text to an MJPEG video) probably is not using TMemoryStream at all but a simple byte buffer instead. That stream just was a convenience there.
-
Longint = integer since basically forever.
-
OK, so I understand that there might be the possibility of an Int64 overflow, here: which could result in Pos becoming negative. On the other hand that would mean a stream with about MaxInt64 bytes of data, which is quite a lot: 9,223,372,036,854,775,807 or 2^33 gibibytes. Do 64 bit processors actually have the capacity of addressing that much (virtual) memory? Are there any other bugs in my implementation? There might also be no performance gain at all due to highly sophisticated features of the CPU. And of course: There might be other possible improvements If I want this to be optimized I should submit a report to Embarcadero Why did I actually bring this up? I was looking at some code that was extensively using TMemoryStream as a buffer for various operations, where it accessed the Position and Size properties all the time and thought about the possible overhead of these method calls. Then I looked at the implementation of GetSize and found 3 calls to Seek in there, just to eventually get the value of a field. And then I looked at various other methods of T(Custom)MemoryStream and thought WTF is this? That I used the Write method as an example above was pure chance, it was just the last method I had been looking at.
-
ParnassusCoreEditor.dll AccessViolation
dummzeuch replied to bazzer747's topic in Delphi Third-Party
In ISO 9001 consistency is everything. You must have rules and follow them. It doesn't matter whether the result is correct or not, it must reproducible every single time. (OK, I'll stop now, I just have suffered too much pain due to this idiocy.) -
No, there is no way to change that order. But there is the configurable Editor Popup Menu (in Editor Experts), which might help you there.
-
Depth First Search vs. Breadth First Search in directories
dummzeuch posted a topic in Algorithms, Data Structures and Class Design
Given a large directory tree with many files and sub directories and a depth of about 5 located on a Samba server share which must be fully traversed: What is more efficient: Depth First Search: Recursive FindFirst/Next which immediately handles each sub directory when it is encountered. Breadth First Search: Iterative FindFirst/Next which maintains a list of directories to process and appends sub directories to this list when they are encountered to be processed later. I have so far implemented DFS, simply because it was the easiest. It takes a very long time (about 60 seconds in my test scenario). Before I try to implement BFS: Has anybody ever compared the performance of these approaches on Windows + network shares? I googled, but could not find anything definitive (which really surprised me), maybe my google fu has let me down again. -
Depth First Search vs. Breadth First Search in directories
dummzeuch replied to dummzeuch's topic in Algorithms, Data Structures and Class Design
I did some more tests: On Windows 10 1909 on a physical computer and a local drive I found that it makes no difference whether I use FindFirstFileEx or FindFirstFile. On Windows 10 1909 on a Samba share (same as in the first tests) there is still an advantage of using FindFirstFileEx, but it isn't as big as in my tests on Windows 8.1. Since the contents of the drive have changed in the meantime and the Windows 10 installation is on a virtual machine while the Windows 8.1 installation is on a physical computer I can't meaningfully compare them to the original tests. -
GExperts 1.3.12 beta for Delphi 10.3 Rio available
dummzeuch replied to dummzeuch's topic in GExperts
I'm happy to report that the problem with the icons in the popup menus causing empty entries seems to have been fixed in Delphi 10.4. So I have now enabled them in GExperts again. -
Delphi IDE Explorer expert: "Test" menu item?
dummzeuch replied to PeterPanettone's topic in Delphi IDE and APIs
It doesn't do anything at all. And if you remove the conditional define testWizard, it doesn't get installed. That item was just a convenient way to test some possible wizard functionality without having to write a new plugin. -
Quick Edit: How to invoke by hotkey?
dummzeuch replied to Der schöne Günther's topic in Delphi IDE and APIs
The GExperts Rename Components expert has some limited functionality similiar to Quick Edit and it has a keyboard shortcut. https://blog.dummzeuch.de/2018/07/21/selecting-alignment-and-anchors-in-the-rename-components-expert/ Adding a keyboard shortcut for Quick Ediit is on my wish list, but not as easy as I expected. I already wasted several hours on this. -
Delphi IDE Explorer expert: "Test" menu item?
dummzeuch replied to PeterPanettone's topic in Delphi IDE and APIs
Once I've restored the backup of my data hard disk (which crashed on me last weekend), I will have a look and tell you what it does. Until then, you will either have to look yourself or live with the suspense. 😉 -
Delphi IDE Explorer expert: "Test" menu item?
dummzeuch replied to PeterPanettone's topic in Delphi IDE and APIs
I wonder what that menu item does? 😉 Acutally I have no idea, it's probably a leftover from some testing code which I forgot to remove again. This is the first time I heard from somebody else who actually used that plugin. -
Embarcadero LSP Server for Delphi has stopped working
dummzeuch posted a topic in Delphi IDE and APIs
I have seen this error several times already: I close a project and get the error in the title. Has anybody else experienced this? -
wuppdi Welcome Page for Delphi 10.4?
dummzeuch replied to PeterPanettone's topic in Delphi IDE and APIs
Hey, give us something to laugh! Would make for a nice change for me right now. -
Since I have no idea which functionality of the IDE FixInsight might hook (or even which events or maybe what else it might in stall), I have no idea where to look. I know that there are still some issues with GExperts crashing when exiting the IDE but none of them so far was reproducible enough to track down the issue. And as David Heffernan said: It could be anything. There aren't many safe guards inside the IDE to separate itself from plugins and plugins from each other.
-
Make Messages TOOL WINDOW remain always visible after Build/Compile
dummzeuch replied to PeterPanettone's topic in Delphi IDE and APIs
GExperts has an option to automatically close it on successful compile. Maybe you have enabled it? (Default is disabled though.) -
dzBdsLauncher 1.0.5 released with major improvements
dummzeuch posted a topic in Tips / Blogs / Tutorials / Videos
I revisited my dzBdsLauncher tool again – no idea why, it just occurred to me 😉 – and added quite a few improvements: It now supports .dof (Delphi 6 and 7) and .bdsproj (Delphi 2005 and 2006) files. In addition to the previous checks it now also looks at the disabled packages list to determine which Delphi version to start. That’s the only option for Delphi 2005 and 2006 because these files are nearly identical. It can now also handle .dpr files by looking for corresponding .dproj, .bdsproj and .dof files (in that order) and taking these to determine the correct Delphi version. As a side effect I found a problem with the Delphi 10.1 version of the GExperts .dproj file. It had a wrong ProjectVersion entry. The blog post with download link is here.