Jump to content

John Kouraklis

Members
  • Content Count

    319
  • Joined

  • Last visited

  • Days Won

    5

Posts posted by John Kouraklis


  1. On 4/23/2020 at 6:26 PM, Tom F said:

    I more recently purchased Nexus Quality Suite and was very happy with it.  Great tool, great support, great modern product: https://www.nexusdb.com/support/index.php?q=node/27156.  

    As someone previously said, "You get what you pay for."  NQS was well worth what we paid for it.

    I tried NQS for a while. The UI is very confusing to me. It is 80s but I don't mind that much; what I don't get is how you load the projects and profile them. Even when you launch it from inside Delphi, it doesn't work smoothly. I found it very cumbersome.

     

    The only other reliable and affordable solution I found is ProDelphi. I haven't tried the x64 version but the x32 works nicely. The only downside is that it alters the source code during what they call instrumentation. But it cleans the sources after that perfectly.

     

    And they are very responsive with support. 


  2. Hi,

     

    I've got an app that launches a few threads. Each thread does different things but they all write in the same log file. Some threads check the internet too. 

     

    Everything works well in the normal course of the application.

     

    The problem I have is when the user tries to shut down the app. What happens is that those threads that are attempting a web query or are writing in the log file raise an AV complaining that another process is attempting to write the log file. The writing process to log file is thread-safe for sure. 

     

    Then, I created a global var to indicate the background running tasks. I use Atomic Inc/Dec to change the value and in FormCloseQuery I am waiting for the value to get to zero before the form is allowed to close.

     

    But the problem with the log file still appears.

     

    What's the strategy to shut down a multi-thread app?

     

    I also contemplated the idea of having another global var to indicate that the app is shutting down and then exit from the threads but this will pollute the code and it does not feel right.   

     

     


  3. Unless you have only Win apps and things like Win utils, FMX or more correctly cross-platform is the only way to go. The landscape in the market is vastly and rapidly changing and more platforms appear every other day. Unless you are an established large company, you can not afford to miss the opportunity of jumping into new markets quickly and with limited resources.

     

    We should not judge FMX's state and value based on what DevExpress says.

     

    I think their decision is more of a business one rather than a technical. Their clients are VCL develops and to me it is not a surprise that not many of them have adopted FMX. In fact, it is surprising they concluded there is no market for them. To me it seems very short-sighted understanding of the market. I am sure if they insisted, in 2-3 years their evaluation would be different. And I am also pretty sure when they started with the VCL suite, they had to iron out bugs, etc. But back then they were not the company they are now.

     

    Having said this, I have to mention here that I am not pleased with the way EMBA sees FMX either. I understand that most of Delphi clients are largely VLC developers. On the other hand, EMBA promotes Delphi as the one code base cross platform dev tool and yet they mostly focus on the introduction of new VLC products. This is a mess with their strategic priorities and every time I attend the webinars for new releases, I am disappointed to see they continue with the same approach.

     

    For example, they introduced a new TNumberBox---why is this not a FMX and VLC compoent? or the Control list?:classic_dry:

     

     

           

    • Like 5

  4. 3 hours ago, Vincent Parrett said:

    I like this plan. I ran FixInsight over the code and there are lots of opportunities to clean up the code. Unfortunately fixinsight also produces a lot of 'noise' because there are lots of empty virtual methods which appear to be for c++builder support (no abstract support in c++ builder?) - but it's still a worthwhile exercise.  

     

    I look forward to the day I can install Delphi, chose not to install the bundled Indy and install Indy via DPM, choosing which particular version I want, and not having to modify my projects as Libsuffix will be set on the packages 😉

     

    Pascal Analyser is more thorough I think


  5. On 2/25/2021 at 9:56 AM, timfrost said:

    In the Webinar yesterday, responding to a question about compiler updates/upgrades, I heard Marco say that 'Getit is a bit of a problem because it always uninstalls the old version before installing'. How can anyone defend this approach? What happens when you test the new version and something fails to work?  Where is the old source code for you to compare the differences and either fix them or adjust your usage?  A component installer should never force an install into the location of the production library; it should always be checked and validated before it is too late to do this.

    Sometimes I am speechless when I hear the way some people in EMBA respond to questions. They have a degree of naivety that makes you think they are talking about a product from another company😏  

    • Haha 1

  6. Quick Questions: 

     

    1. Why do we need the Migration Tool? This is a minor upgrade. If I don' use it, will the settings be lost?

     

    2. Yesterday in the webinar, it was mentioned that the binaries should be compatible with 10.4.2. However, the binaries from 10.4.0 are not compatible with 10.4.1.   


  7. Hi,

    I've got difficulties figuring out what is wrong with the following code:

    
    program Project1;
    
    {$APPTYPE CONSOLE}
    
    {$R *.res}
    
    uses
      System.SysUtils,
      System.Generics.Collections;
    
    var
      dic: TObjectDictionary<string, TList<string>>;
      list: TList<string>;
    begin
      try
        dic:=TObjectDictionary<string, TList<string>>.Create([doOwnsValues]);
        list:=TList<string>.Create;
        list.Add('111');
        dic.AddOrSetValue('aaa', list);
        var gg: integer:=dic.Items['aaa'].Count;
        writeln(gg); // 1
    
        var l2: TList<string>:=dic.Items['aaa'];
        var a:integer:=l2.Count;
        writeln(a);        // 1
    
        l2.Add('222');
        a:=l2.Count;
        writeln(a);  // 2
    
        dic.Items['aaa']:=l2;
    
        a:=l2.Count;
        writeln(a);  // 0???
    
        a:=dic.Items['aaa'].count;
        writeln(a);  // 0???
    
        dic.Free;   // Invalid point?
    
        readln;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
    end.

    When I assign the TList to the dictionary Value, it loses all the elements.

     

    What am I doing wrong here? Can't see what is going on.

     

    Thanks


  8. I use TWebBrowser and trying to login to an email account. After the initial page, I get an error saying that "The browser or app may be insecure. Try using different browser".

     

    Does anyone know how to fix it? I read on the net that I can change the User Agent header to reflect a newer browser but couldn't find how to change the header in the component.

     

    Thanks

     


  9. Hi, 

     

    I want to implement push notifications in a desktop app for GMail. I have read the dev guides and looked it up on the web and I all tutorials talk about how to do it in web apps.

     

    My email client on Android uses push notifications. Can anyone guide me on this? Or, any demo apps, perhaps?

     

    Thanks


  10. 2 hours ago, Anders Melander said:

    On Windows: Yes. Everywhere else: No.

    On Windows it works the exact same way as with VCL; Forms are stored in the EXE resources in DFM format and resourcestrings are stored as string resources.

    Yes, I was sure that other platforms wouldn't be easy to work with. 

     

    Thanks for the tips.


  11. 4 hours ago, dummzeuch said:

    Does it also cover when (which Delphi version) a particular syntax extension was introduced?

    Apart from the additions in 10.3 and 10.4 I found very difficult to track down and verify this information and then to present everything in a concise way. And I am not sure a newcomer would really find this useful.

     

    Perhaps if you write components and need to cover old versions this would be useful but I feel this is a bit out of the scope of the book.


  12. Hi all,

     

    I'd like to share that my new book is almost out. Apress is working hard to put it in the market.

     

    We always discuss how we can bring new people to Delphi so I thought it would be a good idea to ease their way in by providing a quick up-to-date guide on the basics of the language. The book covers new features introduced in 10.4

     

    Of course, a reference book is always useful to experienced coders as well; we all need a refresher every now and then 🙂

     

    I would like to cordially thank Dr. Holger Flick for reviewing the chapters; his experienced view guided me during the writing of the book.

     

     

    Regards,

     

    John

     

     

     

    9781484261118.tif

    • Like 6

  13. Hi @Dan Moore,

     

    I ended up writing my own. It does not provide full cover of the API; I only added the calls I needed.

     

    I can share it with the community but need to clear it up a bit as at the moment it uses some proprietary code. I only used it for simplicity but it can be replaces with open source.

     

    Thanks 

     

    John

     

     

    • Thanks 2
×