Jump to content


Popular Content

Showing content with the highest reputation on 04/23/19 in all areas

  1. While writing Design Patterns with Delphi, I spent quite some time researching existing literature on design patterns implementation in Delphi, design patterns in other languages, other types of patterns, design principles and so on … In case you would like to dig deeper than the book takes you, here is my reading list. Design Patterns Essentials Software design pattern Computer Science Design Patterns The 23 patterns from the GoF Design Patterns with examples in different languages (including Delphi) Gang of Four Design Patterns Reference Sheet Programming principles Design principles and design patterns SOLID Don't Repeat Yourself (DRY) KISS YAGNI (You Ain't Gonna Need It) Software Design Patterns Are Not Goals, They Are Tools I'm Sick Of GoF Design Patterns Software Development AntiPatterns Big Ball of Mud Design Patterns for Humans Spring4D MMX Code Explorer Singleton https://en.wikipedia.org/wiki/Singleton_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Singleton http://www.yanniel.info/2010/10/singleton-pattern-delphi.html https://ibeblog.com/2010/08/18/delphi-singleton-patterns/ https://stackoverflow.com/a/1409672/4997 https://github.com/jimmckeeth/DelphiPatterns/tree/master/Creational.Singleton https://stackoverflow.com/questions/1409593/creating-a-singleton-in-delphi-using-the-new-features-of-d2009-and-d2010 https://sourcemaking.com/design_patterns/singleton https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/ https://github.com/kamranahmedse/design-patterns-for-humans#-singleton Dependency injection https://en.wikipedia.org/wiki/Dependency_injection http://www.nickhodges.com/post/Service-Locator-is-Indeed-an-Anti-pattern.aspx https://softwareengineering.stackexchange.com/questions/135914/why-was-dependency-injection-pattern-not-included-in-the-gang-of-four/135982 https://stackoverflow.com/questions/4176520/what-is-the-difference-between-strategy-pattern-and-dependency-injection Lazy Initialization https://en.wikipedia.org/wiki/Lazy_initialization Object pool https://en.wikipedia.org/wiki/Object_pool_pattern https://sourcemaking.com/design_patterns/object_pool Factory method https://en.wikipedia.org/wiki/Factory_method_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Factory_method https://github.com/jimmckeeth/DelphiPatterns/tree/master/Creational.FactoryMethod https://sourcemaking.com/design_patterns/factory_method https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/ https://github.com/kamranahmedse/design-patterns-for-humans#-factory-method Abstract factory https://en.wikipedia.org/wiki/Abstract_factory_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Abstract_Factory http://www.felix-colibri.com/papers/design_patterns/factory_and_bridge_patterns/factory_and_bridge_patterns.html#abstract_factory_pattern https://github.com/jimmckeeth/DelphiPatterns/tree/master/Creational.AbstractFactory http://www.nickhodges.com/post/Delphi-and-the-Factory-Pattern-Simple-Factory.aspx https://sourcemaking.com/design_patterns/abstract_factory https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/ https://github.com/kamranahmedse/design-patterns-for-humans#-abstract-factory Prototype https://sourcemaking.com/design_patterns/prototype https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/ https://en.wikipedia.org/wiki/Object_copying#Deep_copy https://github.com/kamranahmedse/design-patterns-for-humans#-prototype Builder https://en.wikipedia.org/wiki/Builder_pattern https://github.com/jimmckeeth/DelphiPatterns/tree/master/Creational.Builder https://sourcemaking.com/design_patterns/builder https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/ https://github.com/kamranahmedse/design-patterns-for-humans#-builder Composite https://en.wikipedia.org/wiki/Composite_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Composite https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Composite https://sourcemaking.com/design_patterns/composite https://github.com/kamranahmedse/design-patterns-for-humans#-composite Flyweight https://en.wikipedia.org/wiki/Flyweight_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Flyweight https://sourcemaking.com/design_patterns/flyweight https://github.com/kamranahmedse/design-patterns-for-humans#-flyweight https://en.wikipedia.org/wiki/String_interning Marker interface https://en.wikipedia.org/wiki/Marker_interface_pattern Bridge https://stackoverflow.com/questions/350404/how-do-the-proxy-decorator-adapter-and-bridge-patterns-differ https://en.wikipedia.org/wiki/Bridge_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Bridge https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Bridge https://sourcemaking.com/design_patterns/bridge http://www.felix-colibri.com/papers/design_patterns/factory_and_bridge_patterns/factory_and_bridge_patterns.html#the_bridge_design_pattern https://simpleprogrammer.com/design-patterns-simplified-the-bridge-pattern/ https://github.com/kamranahmedse/design-patterns-for-humans#-bridge https://stackoverflow.com/q/319728/4997 Adapter https://en.wikipedia.org/wiki/Adapter_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Adapter https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Adapter https://sourcemaking.com/design_patterns/adapter https://github.com/kamranahmedse/design-patterns-for-humans#-adapter Proxy https://en.wikipedia.org/wiki/Proxy_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Proxy https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Proxy https://sourcemaking.com/design_patterns/proxy https://github.com/kamranahmedse/design-patterns-for-humans#-proxy Decorator https://en.wikipedia.org/wiki/Decorator_pattern https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Decorator https://sourcemaking.com/design_patterns/decorator https://github.com/kamranahmedse/design-patterns-for-humans#-decorator Facade https://en.wikipedia.org/wiki/Facade_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Facade https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Facade https://sourcemaking.com/design_patterns/facade https://github.com/kamranahmedse/design-patterns-for-humans#-facade Null object https://en.wikipedia.org/wiki/Null_object_pattern https://sourcemaking.com/design_patterns/null_object Template method https://en.wikipedia.org/wiki/Template_method_pattern https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.TemplateMethod https://www.codeproject.com/Articles/516094/TemplateplusMethodplusDesignplusPatternplusinplusD https://sourcemaking.com/design_patterns/template_method https://github.com/kamranahmedse/design-patterns-for-humans#-template-method Command https://en.wikipedia.org/wiki/Command_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Command https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Command https://sourcemaking.com/design_patterns/command https://github.com/kamranahmedse/design-patterns-for-humans#-command https://stackoverflow.com/q/6064116/4997 State https://en.wikipedia.org/wiki/State_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/State https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.State https://sourcemaking.com/design_patterns/state https://sourcemaking.com/design_patterns/state/delphi https://github.com/kamranahmedse/design-patterns-for-humans#-state https://en.wikipedia.org/wiki/Finite-state_machine Iterator https://en.wikipedia.org/wiki/Iterator_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Iterator https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Iterator https://sourcemaking.com/design_patterns/iterator https://github.com/kamranahmedse/design-patterns-for-humans#-iterator http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Declarations_and_Statements_(Delphi)#For_Statements Visitor https://en.wikipedia.org/wiki/Visitor_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Visitor https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Visitor https://sourcemaking.com/design_patterns/visitor https://sourcemaking.com/design_patterns/visitor/delphi https://github.com/kamranahmedse/design-patterns-for-humans#-visitor Observer https://en.wikipedia.org/wiki/Observer_pattern https://en.wikipedia.org/wiki/Publish–subscribe_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Observer https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Observer https://github.com/spinettaro/delphi-event-bus https://sourcemaking.com/design_patterns/observer/delphi https://github.com/kamranahmedse/design-patterns-for-humans#-observer http://docwiki.embarcadero.com/Libraries/en/System.Messaging.TMessageManager http://docwiki.embarcadero.com/RADStudio/en/Using_the_RTL_Cross-Platform_Messaging_Solution http://docwiki.embarcadero.com/RADStudio/en/Sending_and_Receiving_Messages_Using_the_RTL http://docwiki.embarcadero.com/Libraries/en/System.Classes.TComponent.Observers Memento https://en.wikipedia.org/wiki/Memento_pattern https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Memento https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Memento https://sourcemaking.com/design_patterns/memento https://github.com/kamranahmedse/design-patterns-for-humans#-memento Lock https://en.wikipedia.org/wiki/Lock_(computer_science) https://en.wikipedia.org/wiki/Spinlock Lock striping https://netjs.blogspot.si/2016/05/lock-striping-in-java-concurrency.html Double-checked locking https://en.wikipedia.org/wiki/Double-checked_locking https://en.wikipedia.org/wiki/Test_and_test-and-set Optimistic locking https://www.javaworld.com/article/2075406/java-web-development/optimistic-locking-pattern-for-ejbs.html https://martinfowler.com/eaaCatalog/optimisticOfflineLock.html https://en.wikipedia.org/wiki/Optimistic_concurrency_control Readers-writer lock https://en.wikipedia.org/wiki/Readers–writer_lock https://docs.microsoft.com/en-us/windows/desktop/sync/slim-reader-writer--srw--locks Thread pool https://en.wikipedia.org/wiki/Thread_pool https://stackoverflow.com/questions/47504201/delphi-ttask-and-tthreadpool Messaging https://en.wikipedia.org/wiki/Message_passing https://en.wikipedia.org/wiki/Message_queue Future https://en.wikipedia.org/wiki/Futures_and_promises Pipeline https://en.wikipedia.org/wiki/Staged_event-driven_architecture Designing Delphi programs https://en.wikipedia.org/wiki/Event-driven_programming http://blong.com/Articles/Actions/Actions.htm https://github.com/andrea-magni/TFrameStand https://martinfowler.com/eaaCatalog/tableModule.html https://stackoverflow.com/questions/433819/table-module-vs-domain-model http://docwiki.embarcadero.com/RADStudio/en/LiveBindings_in_RAD_Studio https://www.embarcadero.com/images/dm/technical-papers/understanding_rad_studio_livebindings.pdf Other kinds of patterns https://en.wikipedia.org/wiki/Exception_handling http://wiki.c2.com/?ExceptionPatterns http://docwiki.embarcadero.com/Libraries/en/System.TObject.Destroy http://www.heaventools.com/eurekalog-exception-logger.htm http://www.madshi.net/madExceptDescription.htm https://github.com/project-jedi/jvcl https://en.wikipedia.org/wiki/Debugging_patterns https://git-scm.com/docs/git-bisect http://www.washi.cs.waseda.ac.jp/wp-content/uploads/2017/03/Woei-Kae-Chen.pdf https://github.com/colinj/Functional https://fsharpforfunandprofit.com/fppatterns/ https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms Books & papers Architectural Patterns, Pethuru Raj, Anupama Raman, Harihara Subramanian Coding in Delphi, Nick Hodges Concurrency with Modern C++, Rainer Grimm Concurrent Patterns and Best Practices, Atul S. Khot Dependency Injection in Delphi, Nick Hodges Design Patterns for Humans, Kamran Ahmed Design Patterns Past and Future, Aleksandar Bulajic Design Patterns - Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Dive Into Design Patterns, Alexander Shvets Java Design Patterns, Devendra Singh More Coding in Delphi, Nick Hodges The Null Object Pattern, Bobby Woolf
  2. Sherlock

    How to clone settings ?

    Amen to that! Every Tom, Dick or Harry writes something into the registry nowadays. It's just as cluttered as the good old win.ini was back in the day.
  3. In my last blog post Getting the Windows version, I claimed that there is no way to get the actual version number of Windows 10 without reading the version information of the Kernel32.dll and interpreting it 1. Since then I have been told that there is actually a Registry key that contains the Windows version: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion It has several entries that can be used to get the same version info that the Winver tool displays to the user. On Windows 10 that’s: ProductName ReleaseId CurrentBuildNumber UBR On my test installation they get me “Windows 10 Pro” Version “1809” (OS Build “17762”.”437″) (The quotes denote values read from the registry.) https://blog.dummzeuch.de/2019/04/22/getting-the-windows-version-revisited/ Just to make it clear: The above text is not the full blog post.
  4. Most "older" applications do not have full support of High-DPI scaling. To enhance the appearance of these applications Microsoft added the gdiScaling option in Windows 10 Creators Update (1703) . <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings"> <gdiScaling>true</gdiScaling> </asmv3:windowsSettings> </asmv3:application> In the compatibility settings of the windows property dialog of an application this is marked as "System (enhanced)" Delphi manifest option do not support this scaling mode at the moment. Our Build-tool sets the gdiScaling option in the manifest - but a build inside the IDE with gdiScaling is not possible! I also added a feature request in QP: https://quality.embarcadero.com/browse/RSP-24175. If you miss this option too - please vote for It. Best regards, Tom
  5. freeman35

    How to clone settings ?

    No I'm not wait, ini file is better. And Have not to be one file. xml is not easy edit and easy find name&value, my vote to ini. But no one share how to clone settings now :) registry or where is that ? This is much importend and main question :) Thank you. And sorry Uwe, I forget, thank you so much for much helpful project and shared it to free. Best regards.
  6. Dalija Prasnikar

    Add support for High-DPI gdiScaling

    To achieve what you want you can also use custom manifest instead of automatically generated one. Also, your request is a bit confusing - System (Enhanced) scaling in application properties dialog has nothing to do with System Aware setting you can choose for manifest. Auto generated manifest sets only dpiAware and dpiAwareness elements and you want ability to include gdiScaling element.
  7. Uwe Raabe

    How to clone settings ?

    I actually think the same! Unfortunately it cannot be changed that easy. There are several places with registry access which have to be taken care of. Even the splitting in MMX and Shared, which have their roots in the common code between ModelMaker and ModelMaker Code Explorer, are a bit clumsy. Also it will not going to be an INI file because of the hierarchical structure of the settings tree. I will probably choose XML. Don't expect that soon, though.
  8. Lars Fosdal

    Deep Dive into Design Patterns

    The book is on my desktop, under the 70-762 Developing SQL Databases book. I need to start reading.
  9. Rudy Velthuis

    On-demand ARC feature discussed

    In a company like Embarcadero, they are never made by one person alone. That the RSP was closed did not mean they would never do it Just that at that time, it was not necessary. But it actually makes a lot of sense right now, in the context of mrecords (i.e. those with default constructors etc). We didn't get those yet, but we got the inlined the variables. With inlined variables, and local block scopes, mrecords can be default constructed and more importantly, default destroyed, in a single block, just by declaring them inline in such a block, or in a loop context. In and of themselves, they still do not make a lot of business sense, IMO. They are nice to have, but not absolutely necessary. Only together with mrecords, they start to make sense. They changed some other policies, e.g. the use of ARC on Linux or the exclusion of 8-bit strings (Utf8Sring, RawByteString) in mobile. I doubt they will ever reverse their decision about slowy phasing out ARC, because that was a reversal already.
  10. Daniel

    Limit to reactions

    🧑🌴 ... ? 😂
  11. Stefan Glienke

    Limit to reactions

    Recently I'm in desperate need of the facepalm reaction...
  12. Alek, I really don’t understand your intentions. You obviously have your opinion and that’s okay - but you are not allowing other points of view without insulting other members of this community. Stop this now. As long as you act this way, we cannot discuss with each other (read: with you). Rudy - sometimes a discussion must stop when we realize that it will lead to nowhere. Especially in a web-forum with a linear discussion-thread. The tree-based layout of a usenet-group allowed yo to discuss side-aspects for ever. But here this style just captures a whole thread.
  13. Dalija Prasnikar

    On-demand ARC feature discussed

    We already have mixed memory management model where ARC based classes coexist with non ARC based classes. Now different people have different views how well that model works, but generally it doesn't. It is complex model that requires plenty of knowledge to use it safely, and even if you know how to use it, you constantly have to jump through the hoops because quite commonly you don't have what you really need in particular code. You will either have reference counted class when you don't need one, or you will have non reference counted when you could really use it. On top of that you have TComponent based ownership model that will get in your way when you least need it. OK, it is not all that bad... but situation is far from ideal. Then we got ARC compiler, that solves all that duality problems perfectly. To be clear, no memory management model is perfect for all use cases, but in case of Delphi full ARC was the best fit in terms of existing code bases and integration with existing ARC based model for interfaces. But, it turned out that even though it was the best fit for majority use cases, changes required in existing code bases were too huge, also it required learning and adopting to new ways of writing code. Guess what? ARC was not welcomed by majority of Delphi developers that lead to decisions Macro explained in his blog post and decision that ARC compiler is deprecated. So, after this ARC compiler failure. You want to implement your completely different mixed model that would still suffer from various problems - because no matter how far you go (and even if you can make your model work slightly better that the current one) you still cannot successfully mix ARC and non-ARC objects. Not only you didn't solved original problem, you also introduced another one - your model is completely incompatible with existing code and would require even greater changes to existing code bases. For me that is end of story. This is not viable option, no matter how you turn it.
  14. David Heffernan

    Wow, first time using repeat ... until

    The C++ for loop, in its general form, is trivially translated into a while loop. So for (init; condition; iteration) statement becomes init; while (condition) { statement; iteration; } It is well worth knowing this if you are in the business of translating pieces of code. So in C++ the for loop is syntactic sugar on top of the while loop. In Delphi also the classic for loop can also be trivially expressed as a while loop. This for loop is simpler than that of C++ but it's still just a while loop (condition tested before body executed) with implicit increment. They Pascal repeat loop is like the C++ do loop. They key being that the condition is at the end of the body rather than the beginning.
  15. Rudy Velthuis

    On-demand ARC feature discussed

    If every container or function taking objects as parameters must be done twice, then that is some kind of Apartheid, instead of easy co-existence. And you claimed there would be easy co-existence. I assume you know what Marco Cantù wrote, and that that probably is the opinion of the entire Delphi team (http://blog.marcocantu.com/blog/2018-october-Delphi-ARC-directions.html): That is exactly what I am saying, and you have proven it a few times now. I have shown that you must either separate containers and functions, or that you must add explicit runtime code to everything that allows you to mix such objects, i.e. there is an added runtime cost (and not just at compile-time, as you claimed). If you add that, no matter how you implement it, even if it is only as a flag, there is a runtime cost too, then it is clear that this is not a viable solution. It is kludgy, it requires a lot of code duplication, it slows things down and it is confusing. I am very much in favour of finding a way to make lifetime management of objects easier, and ARC would be one way, but mixing ARC and non-ARC is not a viable one. Also, the move back to non-ARC was done for simplicity and speed and to finally get back to one object model for all platforms. You would lose these advantages with your mixing model. So you can talk about it a little more, but I am sure that neither your attitude nor your arguments are helpful in convincing them. In other words: I am pretty sure what you want will never be done. Perhaps you can convince the FPC people to implement it for you (although I guess they would refuse that too, for similar and probably for some more reasons), or you can try to find a group of people who fork FPC and then implement if for you. Good luck. I have said what there is to be said. I agree with the Delphi team and I am pretty sure they had the same insight and reasons as I had.
  16. Attila Kovacs

    What does "G" in GExperts mean?

    Luck, you are not Stefan or Sigmund..
  17. dummzeuch

    What does "G" in GExperts mean?

    I don't remember ever hearing how the name came to be, but since Gerald was the guy who started the tool in the 1990ies, it's likely that he named it after himself. Time to call it TExperts then... (Just kidding)
  18. dummzeuch

    IDE UI inconsistency?

    Are you aware that this is neither the embarcadero support forum, nor the quality portal? If you encounter bugs, you should file bug reports in the latter.
  19. Uwe Raabe

    MMX Beta 14.1 available

    Build 2289 available: fix: missing images in Entity Insight toolbar fix: scaling problem in About screen fix: problem sending email from support link