Jump to content

All Activity

This stream auto-updates     

  1. Yesterday
  2. Interesting. I haven't used Semantic Merge either, but was considering trying it for our .net code(c#), we're in the process of migrating a huge codebase to .net core and have had quite a few merge issues lately semantic merge could possibly have dealt with better. I have so many other open source projects on the go at the moment, so I will have to restrain myself from taking on another one (tempting as it is!) - I also have a day job, admittedly working for myself, but I often have to restrain myself from working on fun projects so I can earn a living!
  3. No. PlasticMerge is a part of PlasticSCM. So what you do is to install the free version of PlasticSCM and then just use the stand alone merge tool. It used to be a separate download but it's long been a part of the SCM suite. I haven't tried SemanticMerge. I believe there's an abandoned project for a Delphi parser somewhere out there. Yup, found it: https://github.com/andremussche/SemanticMergeDelphi (last commit 7 years ago) Linked to from here: http://blog.plasticscm.com/2015/09/custom-languages-in-semantic-version.html
  4. I assume you mean SemanticMerge rather than plasticscm (same company, different product)? I didn't think it had a parser for delphi? That would be a fun project, using https://github.com/RomanYankovsky/DelphiAST perhaps. We use Beyond Compare (written in Delphi, built with FinalBuilder!) - can't fault it and the price is very reasonable.
  5. It still supports older versions of windows (not sure which but I would imagine windows 7+. The work to integrate Direct2D support has not been done yet.. more refactoring required to abstract the rendering so that different svg engines can be used. @pyscripter has made some major improvements to the existing svg engine, fixing several bugs and improving performance.
  6. As I mentioned I use SourceTree too and I'm fairly satisfied with it. Latest version is 3.3.9. The basic functionality works well but there are some annoying bugs with regard to BitBucket integration that keeps being fixed and then come back after a few releases: The BitBucket integration (Check out in SourceTree) crashes SourceTree: SRCTREE-7109 The remote account extended integration option isn't persisted: SRCTREEWIN-12912 The worst thing however is the poor performance of the integrated Diff view. Select a large DFM-file and it can take 20-30 seconds before the UI responds. Stage one hunk and you have to wait for the diff to complete again. Now imagine having to cherry pick changes from a large DFM with hundreds of small changes. In this scenario its best to have an alternative tool for just that case. That's one of the nice things with Git; All the tools are compatible. You can stage some changes in one tool and others in another. I usually handle file renames and moves by staging in TortoiseGit and then committing in SourceTree. Oh and one absolutely needs to have an external Diff and Merge tool. I use Araxis for Diff and Plastic for Merge. Plastic is free if you just install the community edition.
  7. When i was trying to monitor it, it did happen, it worked for long time ( over 5 minutes) so i had to stop it, all other runs worked less than 30 second. There is a bug in there, it is serious and should be discovered and handled, so i suggest to try to reproduce it and track it in multithreaded if needed. On side note : i never liked OpenSSL, it does have many unexplained things and default values, if i would suggest replacement then it would be one of two 1) BoringSSL the OpenSSL forked by Google. 2) NSS from Mozilla which is the best of them all, it does everything you need from OpenSSL, but very similar interfaced and well written and tested, it is not slower than OpenSSL. That was a suggestion as food for thoughts, someone might take this and port the interface to Pascal/Delphi.
  8. Aren't those two are effectively the same thing? Afaik, .MultiThreaded := True only means the socket will use it's internal message pump. You easily can create a deadlock in any VCL application if you have two "While xxx Do Application.ProcessMessages" blocks running "simultaneously". Maybe this is the case here...?
  9. Oh, no, it crashed on first refresh to show a change in repository. Shame.
  10. That was my initial thought when I started to read this thread. In cases like this I try to disable as much 3-rd party dependencies as I possibly can to see if the problem still occurs. SSL would be my first to go in this case.
  11. No, I guess I missed it. I like the checklist at the beginning and what is missing!
  12. The problem seems to be the usage of TwSocket from inside a Thread. I have left the ServerThread unchanged, but the Client is running in the VCL-Thread Context now. I have no problems anymore, the test is still running and has transferred more than 1200000 packets right now, i will test it over night. I created the TwSocket from inside Thread.Execute, told him it shall use MultiThreading, and had a message loop running inside the TClientThread. But maybe my approach to send from the vcl thread like TClientThread.Client.Send(...) was the problem, but i don't know how to send from within the ClientThread Context, if the ClientThread is running its messageloop. Thanks and Good Night, Oliver
  13. Not sure you missed or ignored it but I'll throw this in here for completeness and because it's free: Git Extensions.
  14. I'm a single developer, so the stress test I put on the tool is minimal. I read a lot of bad reviews on it, but for me it works flawlessly. I do remember it looks completely different than what I saw a couple of years ago at the client's site. I use latest version, not sure what that version was.
  15. At work most of my colleagues prefer SourceTree. I find the UI sluggish and hard to complete simple tasks. I personally prefer VS Code's implementation (having it installed as the default text editor on all of my PCs might be a bias-factor, though). For me, Git handling is really easy, fast and easy to understand. As others already pointed out it's all a matter of taste. Some of my colleagues are still starting up Visual Studio for a simple pull, so... 🙂
  16. Thank you all for recommendations! I installed git and tested a few tools - with private github repositories: - TortoiseGit - first one to use, so I was still learning everything, but it was annoying to use with right-click from explorer - Fork - next one I tried, and of course I was impressed by it, compared to TortoiseGit, fast UI, easy to use - SourceTree - feels like copy of Fork, but free - GitKraken - you need to register account with them - skipping - SmartGit - doesn't have an option to recognize repository hosting, others have this option - skipping - Tower - similar to Sourcetree and Fork, but little sluggish, crammed UI For now staying with SourceTree - it's like like Fork, but free.
  17. thor43

    Android AdMob interstitial ads

    Great! tnx! 👍
  18. Can you add to Github a note of precisely which operating systems this supports? At the start of this thread Windows 10 Creators Update or later was mentioned, but this is not made clear as far as I can find. What is the fallback on an unsupported OS?
  19. Today I've merged the great work made by @pyscripter and @Vincent Parrett into SVGIconImageList project and released 1.8 version. Now with the new components SVGIconImageCollection and SVGIconVirtualImageList it's possibile to build multi-form High-DPI app in a multi-monitor environment using a single ImageCollection shared by the forms. Many SVG rendering problems are now fixed!
  20. That is actually part of TSslSocketServer providing you are using IcsHosts to configure it which handles all the SSL stuff for you, even creating a self signed certificate automatically if nothing supplied so it can start and order one from Let's Encrypt. Angus
  21. I tried your example and i agree with Agnus and Fr0sT.Brutal, few will have spare hours to track this, So if you need help, i suggest to simplify that test with one thread for client and one for server and separate them, unless being in the same application is the cause, because i have good news or lets say something to start with. I didn't fire My WireShark as your example already eating most of disk storage with huge logs, and i don't want to close my IDE and reinstall a workaround for loop back or start to debug over internet, but i used the next good thing, Process Monitor After thousands of sending it always stop with this Those packets !, i don't think belongs to ICS per se but most likely to OpenSSL, either some sort of renegotiating or heartbeat or something else.. Those what you need to track in WireShark, if you managed to capture them bring them here for autopsy, just those two 176 bytes and 25 bytes, do you have them with no SSL/TLS connection ? Sorry couldn't help more, but if it is coming form OpenSSL then this is serious, or even worse if it is coming from being client and server in same application.
  22. RTC is a great set of communication classes. kbmMW and mORMot are not only communication layers, but full toolboxes, with plenty of other features. They have very diverse philosophy/design. You may also take a look at the TMS components. One big difference is that mORMot is fully Open Source, is used in several critical projects so is highly maintained, and works fine with FPC on a variety of platforms - we use it on production Linux x86_64 servers to handle TB of data from thousands of clients. The fact that mORMot SOA can use interfaces to define the services, and WebSockets for real-time callbacks from server to client, make it unique. There is a full refactoring called mORMot2 which should be finished next october (I hope).
  23. Did some more reading here. Apple specifically says that extensions are not allowed to launch their host application unless it's a Today widget, "A Today widget (and no other app extension type) can ask the system to open its containing app by calling the openURL:completionHandler: method of the NSExtensionContext class. " https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html#//apple_ref/doc/uid/TP40014214-CH2-SW2 You may get rejected by Apple from the App Store for violating guidelines. That being said, I suspect from reading on StackOverflow that is exactly what some Share extensions are doing and they are in the App store. I attached an example ShareViewController.m that *may* work. Of course you will need to modify the urlString and replace https:// with abcd:// to launch the Url Protocol handler. ShareViewController.m
  24. I'd advice you to get rid of threads and try very-very simple case. Like Angus said, threads in ICS are pretty advanced thing
  25. We have explained why threads are very rarely necessary in ICS applications a few times in this forum. I don't debug such applications. Angus
  26. Hi Angus, thank you very much, i will look in the example code, especially the possibility to automatically order certificates sounds very good. But i really would like to understand what I'm doing wrong. Hi Fr0sT.Brutal, thank you, too. i tried a very lot of things. I suppose you mean the while loop. I know the OnDataAvailable will trigger again, if i don't read everything from the receive buffer. But even if i don't use a while loop, the client hangs after some packets... the last run was more than 18000 Packets, then the same thing... 13.08.2020 17:16:23.963 [07056] scDataAvailable 13.08.2020 17:16:23.963 [09372] MessageHandler: Server hat 18233 128KB-Pakete empfangen 13.08.2020 17:16:23.964 [09372] MessageHandler: Client hat 3 Bytes empfangen 13.08.2020 17:16:23.964 [09372] Sende 128KB, Paket #18233 13.08.2020 17:16:23.966 [07056] scDataAvailable 13.08.2020 17:16:23.966 [07056] scDataAvailable 13.08.2020 17:16:23.967 [07056] scDataAvailable 13.08.2020 17:16:23.967 [15264] TClientThread.ClientDataSent: ErrCode=0 13.08.2020 17:16:23.967 [07056] scDataAvailable 13.08.2020 17:16:23.968 [07056] scDataAvailable 13.08.2020 17:16:23.970 [07056] scDataAvailable 13.08.2020 17:16:23.971 [07056] scDataAvailable 13.08.2020 17:16:23.974 [07056] scDataAvailable 13.08.2020 17:16:23.975 [09372] MessageHandler: Server hat 18234 128KB-Pakete empfangen 13.08.2020 17:16:23.975 [09372] MessageHandler: Client hat 3 Bytes empfangen 13.08.2020 17:16:23.986 [15264] TClientThread.ClientDataSent: ErrCode=0 13.08.2020 17:16:23.986 [09372] Sende 128KB, Paket #18234 Server: procedure TServerThread.ScDataAvailable(Sender: TObject; ErrCode: Word); var Socket: TWSocketClient; pBuffer: PByte; BytesReceived: Integer; AckAnsiString: AnsiString; begin Info('scDataAvailable'); if ErrCode = 0 then begin Socket := TwSocketClient(Sender); Getmem(pBuffer, 32768); BytesReceived := Socket.Receive(pBuffer, 32768); FreeMem(pBuffer); // It's only a Test: Purge the Data, but count the Bytes if BytesReceived >= 0 then ServerBytesReceivedComplete := ServerBytesReceivedComplete + BytesReceived; if ServerBytesReceivedComplete >= 128*1024 then begin // Fine, received 128KB or more. PostMessage WM_SERVER_HAS_RECEIVED_DATA... just for logging... CountPackets := CountPackets+1; ServerBytesReceivedComplete := ServerBytesReceivedComplete - 128*1024; PostMessage(Form1.Handle, WM_SERVER_HAS_RECEIVED_DATA, CountPackets, 0); // Send AnsiString 'ACK' to Client AckAnsiString := 'ACK'; Socket.Send(TWSocketData(@AckAnsiString[1]), 3); end; end else Info('TServerThread.ScDataAvailable: ErrCode=%d', [ErrCode]); end; Client: procedure TClientThread.ClientDataAvailable(Sender: TObject; ErrCode: Word); var Socket: TWSocket; pBuffer: PByte; BytesReceived: Integer; begin // Mal so wie in D:\development\!Delphi\Components\Overbyte ICS\trunk\Samples\Delphi\SslInternet\OverbyteIcsSimpleSslCli.dproj if ErrCode = 0 then begin Socket := TwSocketClient(Sender); Getmem(pBuffer, 128); BytesReceived := Socket.Receive(pBuffer, 128); FreeMem(pBuffer); // Only a Test, purge the Bytes but count them... if BytesReceived > 0 then begin // Count them ClientBytesReceivedComplete := ClientBytesReceivedComplete + BytesReceived; if ClientBytesReceivedComplete >= Length('ACK') then begin ClientBytesReceivedComplete := ClientBytesReceivedComplete - Length('ACK'); // to keep it simple: that was 3 Bytes, in my testcase nothing else will send by the server... PostMessage(Form1.Handle, WM_CLIENT_HAS_RECEIVED_DATA, BytesReceived, 0); // Reaction in Form1: WM_CLIENT_HAS_RECEIVED_DATA -> ClientThread.Client.Send(AnsiStringWith128KB) end; end; end else Info('TClientThread.ClientDataAvailable: ErrCode=%d', [ErrCode]); end; Main (VCL-Thread): procedure TForm1.MessageHandlerClientReceivedData(var Msg: TMessage); begin Info('MessageHandler: Client has received an ACK'); if CheckBoxAutoSendAfterReceivingAck.Checked then btSendDataClick(nil); // Send 128KB-Packet to Server end; and: procedure TForm1.btSendDataClick(Sender: TObject); var i: Integer; Text: AnsiString; BytesSend: Integer; begin if Assigned(Client) then begin SetLength(Text, 128 * 1024); // 128KB for i := 1 to Length(Text) do Text[i] := AnsiChar(Ord('A')+ (i mod 26)); // ABCDEFG...XYZABCDEFG... BytesSend := Client.ClientSocket.Send(TWSocketData(@Text[1]), Length(Text)); if BytesSend = Length(Text) then begin Info('Sende 128KB, Paket #%d', [GesendetePakete]); // always comes... Inc(GesendetePakete); end else begin Info('Fehler: Paket konnte nicht gesendet werden'); // never comes... end; end else Info('Fehler: Client=nil'); end; What am I doing wrong?
  1. Load more activity