Jump to content

Alexander Elagin

  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by Alexander Elagin

  1. Alexander Elagin

    Write blob field to database from client

    A generic TStream has no idea how to store data, it is just an abstract class. Therefore any data written to it after this code snippet: are simply discarded. I'd replace the first line with this: ms := TMemoryStream.Create; The variable declaration can remain the same.
  2. Alexander Elagin

    Developer Express gave up on FMX

    After a bit of googling I got the following information regarding DevExpress. 1. While the management and a group of developers are located in USA, almost all development and support team are in Russia (namely, in Tula, Kaluga and St.Peterburg). A rather old article in Russian briefly introduces the company: https://habr.com/ru/company/developersoft/blog/104047/ 2. From this page we can find out the web address of the russian branch: https://www.developersoft.ru Exploring this site (description, portfolio, history...) it is easy to see that this is really the other face of DevExpress, or at least the company which does all the work. 3. And now the most interesting statement from the mentioned page: That is, the Company is suspending all hiring and operations indefinitely as of March 2, 2022. 4. Conclusion. Given the current political and economical situation (first of all, blocking of virtually all payments between Russia and the western world, meaning that the developers cannot be paid) it means that either DevExpress management has to be able to relocate the development and support team somewhere outside the russian borders, or it has to hire an absolutely new team as a replacement, or cease any development until all this madness ends. All the information is from the internet, I'd prefer not to trust it 100%, but unfortunately it seems too matching to be true.
  3. Syntax diagrams are easier to read and understand than BNF or ABNF and they look good in any documentation , but BNF is better suited for automated parsing and validation.
  4. Alexander Elagin

    Delphi 5 - VirtualTreeView

    VTSourceOnly.4.2.30.zip : https://drive.google.com/file/d/19VQ2v-_Zef26zZB3U1go1MmHS_k8uWaC/view?usp=sharing VirtualTreeviewSetup.4.8.7.exe: https://drive.google.com/file/d/1bMgUg15T0ho5yUv1gVxh4NUhzuyJocxl/view?usp=sharing
  5. Alexander Elagin

    Delphi 5 - VirtualTreeView

    I have a zipped Virtual Treeview archive from 2004, it contains packages for Delphi 4 - Delphi 9 (2005?). If anybody is interested, I can share it. Also found the installer for VTV 4.8.7, dated 15.12.2010.
  6. History teaches us that nothing is new under the moon. Limiting the scope of a varable to the begin/end block was invented long ago, just have a look at the PL/I specification from 1964:
  7. Alexander Elagin

    Opinions about Pascal vs C/C++ IDE

    I also wrote a lot of assembly code a while ago, mostly for the 8051 family. Nothing beats a good assembler code when you need to get the most from the hardware. All those fancy higher level languages make it easier to write programs, but when all you have is 8K of program memory and 256 bytes of RAM shared with bits and register banks, then the real work begins
  8. Alexander Elagin

    Opinions about Pascal vs C/C++ IDE

    As for embedded controllers - yes, plain C is the best choice. The new generations of coders may prefer Rust or C++ for this, current microcontrollers are way more powerful than a two decades old desktop PCs. But one can use a custom edition of Lazarus for bare metal programming of Raspberry Pi: https://ultibo.org/
  9. Alexander Elagin


    I do not get any error here in 10.3: uses Types, StrUtils; var S, FS, SS: String; A: TStringDynArray; begin S := '5/10'; A := SplitString(S, '/'); if Length(A) >= 2 then begin FS := A[0]; SS := A[1]; end; end;
  10. Alexander Elagin


    There is also a function SplitString() in StrUtils.pas.
  11. Also look here: https://web.archive.org/web/20050307135804/https://www.simdesign.nl/fft.html The archived version has all the necessary files while the actual site currently produces error 404
  12. Alexander Elagin

    SudokuHelper - Example for uncoupled design via interfaces

    A small correction: 8080 has a 16-bit address bus and a 8-bit data bus (I am currently building a retro computer based on 8080A + 8224 + 8257 + 8275 + 8255A). 8085 also had a 16-bit address bus but it was multiplexed with the 8-bit data bus and required an additional latch for full address decode. Otherwise, your post was outstanding and very informative, thank you!
  13. Alexander Elagin

    SudokuHelper - Example for uncoupled design via interfaces

    Does not compile in 10.1 because of inline variables. What was the reason to use the cosmetic feature only available in the latest versions?
  14. Alexander Elagin

    Firebird Admin Tool

    IBExpert can do it as well:
  15. Alexander Elagin

    Firebird Admin Tool

    IBExpert, of course (https://www.ibexpert.net). DBeaver is a good tool, but not so fine tuned for the Firebird specifics.
  16. Alexander Elagin

    New to JSON

    Have a look at Andreas Hausladen's JsonDataObjects (https://github.com/ahausladen/JsonDataObjects), I think it is easier to use than the stock TJSONObject.
  17. Alexander Elagin

    RAD Studio 11 Alexandria Patch 1 Available

    All this once again raises a question about a LTS verison of Delphi. Let those who need yearly new bells and whistles have their yearly releases, and the others who need to have a solid stable version have it with all the necessary patches.
  18. A redundant begin/end block around a single Continue, maybe? It just increases the number of lines and clutters the view, IMHO. if Utc.IsZero then Continue else begin _UtcValid := Utc; ...
  19. Alexander Elagin

    DevExpress PDF Viewer

    Delphi 10.1 DevExpress VCL 20.1.5 win32 / Debug configuration Blank application: 2 200 576 bytes Blank application with a single TdxPDFViewer: 15 368 704 bytes With an autogenerated toolbar: 21 126 656 bytes.
  20. Alexander Elagin

    OLE structured storage library replacement for Plasmatech

    I think that not much has changed in the structured storage implementation in the last two decades. If the library you are using works (and you have the sources) it will work until MS drops the OLE storage (or CFB, as they call it now) support. Anyway, it is all based on a simple set of COM interfaces (IStorage) and it would be easy to use them directly or write a simple wrapper if needed. Documentation for IStorage compound file implementation
  21. Alexander Elagin

    Delphi 11 Windows XP compatibility tweak

    It is more stable in the configurations it is being used now. If nothing in the OS has broken thus far and no updates expected which can break something (as it regularily happens with "supported" OSes) I'd say XP machines will run until they break physically. Again, those computers are mostly not exposed to internet and are therefore not vulnerable to net exploits.
  22. Alexander Elagin

    Delphi 11 Windows XP compatibility tweak

    I was going to suggest this solution myself but then I thought it was too obvious 😉 and the code in System.Threading (which I quoted) was written by somebody more clever than me...
  23. Alexander Elagin

    Delphi 11 Windows XP compatibility tweak

    But using GetTickCount64 in fact is a must for their code in the Threading unit which internally uses the milliseconds counter. As you know, the counter overflows every 49 or so days and some threads in your server application just hang waiting until the condition TThread.GetTickCount > FLastSuspendTick.Value + TThreadPool.SuspendInterval is fulfilled... I got hit by this myself. Of course, it mostly matters for the applications that run 24/7, but anyway using the 64 bit counter is a wise decision.
  24. Alexander Elagin

    10.4.1+ Custom Managed Records usable?

    It is probably a semantic question. A ternary operator, by definition, is any operator that takes three arguments. The conditional operator ?: is just one of the set of such possible operators. It is easy to imagine, say, operator AAAND which takes three logical arguments and produces TRUE only if all of them are true, but the usefullness of such operator is not high. As for the textual representation of a ternary operator, it is a problem. While a binary operator naturally is placed between its arguments, it is worse in case of the ?: operator which in fact is written as two lexems divided by one of arguments. Were it written as a = ?: b, c, d it would be more strict. Maybe. Or maybe not.