Leaderboard
Popular Content
Showing content with the highest reputation on 02/25/20 in all areas
-
Tell them you agree. If the applications are in maintenance mode then I don't see any reason to upgrade, potentially introducing new problems with no benefit to the company or its customers. Keeping Delphi, and 3rd party libraries, up to date is a costly investment and unless a product is being actively developed that investment might not yield a sensible return. Whenever someone mentions the idea of a completely rewriting something from scratch I simply respond "Like Netscape?" https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ I've been through a couple of successful complete rewrites myself, but they were architectural rewrites that were done incrementally. We basically refactored everything one tiny thing at a time until we finally arrived at the destination, many years later. And we stayed with Delphi. An incremental rewrite isn't really possible when you're replacing the platform.
-
Experience shows that this usually never happens - and if, it will not happen in the expected time frame, cost and functionality. The first barrier is usually the lack of documentation what the Delphi software does, how it does it and why it does it that way. I personally have seen a couple of such endeavors going down the drain. They could as well have burned the money in the first place.
-
As a single developer, I sometimes rewrite my projects to newer technologies without a significant improvement just to keep myself up-to-date. But I can't understand why business decides to rewrite a working and tested project written on "good old lang A" from scratch using a "brand new shining lang B". Especially considering that "lang A" is pretty alive and developing. Geek coders sometimes tend to rewrite things just because existing stuff uses a language, libs or even a license they dislike but a company with customers shouldn't be such geek.
-
Interesting size reduction algorithm for HashTable
Tommi Prami replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
Yo duderinos. Could someone even slightly talk about the original subject, for courtesy 😄 -Tee- -
Accessing variables outside a For loop
Fr0sT.Brutal replied to Bernard's topic in Algorithms, Data Structures and Class Design
I was trying to express that final value will be uncertain, probably I did it unclear. Nevertheless if we're talking about for-in loops, I think nothing dangerous would happen. It's just a syntax sugar for while iterator.GetNext(variable) do ... so the value after the loop will be initial (if list is empty) or equal to last item in list. AFAIK that warning is actual for simple for loops only as compiler can optimize the counter with CPU register. This is not the case with for-in loops of course. You use inequality sign in an enemy language's style ! I suspect you're a C++ spy here in the heart of Delphiland xDDD -
pre-generic dictionary class
Edwin Yip replied to dummzeuch's topic in Algorithms, Data Structures and Class Design
Agreed. Check TSynDictionary from SynCommons.pas of the mORMot framework. SynCommons.pas is self-contained without any dependency. -
pre-generic dictionary class
Attila Kovacs replied to dummzeuch's topic in Algorithms, Data Structures and Class Design
I must have misunderstood the topic title. My apologies. -
At the very top of the Java file: package com.mydomain.mypackage (for example) There's a plethora of examples on the internet, e.g in the files here: https://github.com/DelphiWorlds/KastriFree/tree/master/Java
-
FDMetaInfoQuery1.MetaInfoKind := mkResultSetFields; FDMetaInfoQuery1.ObjectName := 'RESOURCE'; FDMetaInfoQuery1.Open;
-
pre-generic dictionary class
Fr0sT.Brutal replied to dummzeuch's topic in Algorithms, Data Structures and Class Design
I believe mORMot has the fastest implementation of everything :)) There also big libs like Griijy , TheUnknownOnes etc. Check https://github.com/Fr0sT-Brutal/awesome-pascal -
When you are up-to-date with Delphi, it is easier to accomodate the software to new demands (such as was UTF or HDPI in the past, may be 64 bit in the future - hard to say how many years 32bit apps will be supported, new encryptions etc). Move software to another language will cost a lot of money and time (and new bugs and old features missing in the beginning).
-
I personally know of two companies in my field of work (medical software), that have killed themselves over the "simple" task of moving from "some old outdated" language to C#. Both companies have enjoyed the questionable pleasure of being tutored by MS consultants. What everybody involved forgot, is the amount of customizing that went into the software for some special really needy customers - customizing, that went unnoticed or at least undocumented. So a bunch of features, and I mean a really big bunch, did not end up in the painfully created C# versions of their software, and the customers simply left. Because it got more expensive as well. And then from the customers POV it's just simple math: less features + more cost = bye bye. Now both of those companies have been bought for a penny and a dime by the one I was in at the time. And constant rumors of the need to move to C# with our divisions software kept rolling around...but never became true (someone at the top must have learned something). New projects where done in other languages, but that is totally OK.
-
pre-generic dictionary class
Angus Robertson replied to dummzeuch's topic in Algorithms, Data Structures and Class Design
ICS includes a unit OverbyteIcsAvlTrees.pas written by Arno Garrels, from the unit: Implements a fast cache-like data storage based on two linked AVL-Trees for primary and secondary indexing. Primary key of type string has to be unique, secondary key of type TDateTime may have duplicates. AVL or balanced binary trees are extremely efficient data structures for searching data. Finding an element in 65536 requires at most 16 compares. Uses an AVL-Tree as it is described in the book "Algorithms & Data Structures", Prof. Niklaus Wirth. No real dependencies on other ICS units. Angus -
pre-generic dictionary class
Alexander Sviridenkov replied to dummzeuch's topic in Algorithms, Data Structures and Class Design
@dummzeuch written in a unit header - "Free for any use" -
pre-generic dictionary class
dummzeuch replied to dummzeuch's topic in Algorithms, Data Structures and Class Design
Even if that was as easy as it sounds, I doubt that this meets the definition of "free implementation". Yes, this is what many people tell me. I might even drop some of them, but since I do most of my professional work with Delphi 2007 (the last pre Unicode version), dropping support for it in GExperts would not really be smart. -
1. You don't need to add the classes.dex file to the project, nor the .java files 2. The UseAsJar.java file is missing the package directive which by convention is a domain in reverse order followed by a package identifier, e.g. com.mydomain.mypackage. Also, you do not need a main method, unless you're intending to run the jar separately. 3. Your import (android.JNI.UseAsJAR) is incorrect, since the signature for JUseAsJar does not match the package/class. It should be the package name followed by the class name e.g. com/mydomain/mypackage/UseAsJar. You don't need RegisterTypes, either; I believe that's a hangover from earlier versions of Delphi. 4. Once you've recompiled the .jar, add it to the project, in Project Manager under Target Platforms > Android. This saves having to manually deploy the classes.dex. You could then remove that manual addition. I'd also recommend updating to Delphi 10.3.3
-
Android Mobile application using Firemonkey
Antony Augustus replied to Antony Augustus's topic in I made this
Sorry for the late response. Thanks for all your wonderful suggestions! The application looks more refined and professional than before.- 18 replies
-
- android
- firemonkey
-
(and 1 more)
Tagged with:
-
Best approach to Multi-file, multi-thread debug logging
Arnaud Bouchez replied to Yaron's topic in General Help
We use our https://github.com/synopse/mORMot/blob/master/SynLog.pas Open Source logging framework on server side, with sometimes dozens of threads into the same log file. It has very high performance, so logging don't slow down the process, and you can make very useful forensic and analysis if needed. Having all threads logging in the same log file is at the same time a nightmare and a blessing. It may be a nightmare since all operations are interleaved and difficult to identify. It is a blessing with the right tool, able to filter for one or several threads, then find out what is really occuring: in this case, a single log file is better than several. For instance, one of our https://livemon.com server generates TB of logs - see https://leela1.livemon.net/metrics/counters - and we can still handle it. This instance for instance is running since more than 8 months without being restarted, and with hunderths of simultaneous connections, logging incoming data every second... 🙂 We defined our simple and very usable log viewer tool - see http://blog.synopse.info/post/2011/08/20/Enhanced-Log-viewer and https://synopse.info/files/html/Synopse mORMot Framework SAD 1.18.html#TITL_103 This is the key to be able to have something usable from heavily multithreaded logs. So if you can, rather use a single log file per process, with proper thread identification and filtering. -
New section for native apps
Yaroslav Brovin replied to Alberto Miola's topic in Community Management
Flutter is interesting. Instant run, interesting language. BUT, we love Delphi for good and convenient working with DB, incredibly fast creating UI mock. And I'm sure the biggest part of developers in this forum has a lot of existing Delphi code, which is very interesting to run in mobile platforms. So I believe Flutter is not a magic bullet. I'll say the obvious thing, but each technologies has advantages and disadvantages for each project. So everybody select solution based on his own preferences.