Jump to content

Brian Evans

Members
  • Content Count

    417
  • Joined

  • Last visited

  • Days Won

    6

Posts posted by Brian Evans


  1. In recent releases deleting the plugin content from the layout is another approach. Use the Edit Layout at the bottom left of the Welcome page. Leaves a welcome page that loads fast and has a nice color gradient that closes when you open a project. 

     

    I find the "no tabs yet" thing it puts in the middle of blank space when nothing is open more distracting than the empty welcome page with gradient. 


  2. From my understanding: expressions always evaluate the same and it is the assignment operation doing type conversions when they are straightforward. That works for assignment because there is a variable on the left of a specific type and not an expression and they are never reversed. A comparison has an expression on both sides and can be reversed so type conversion on corner cases could mean A = B and B = A give different results. Better to have the programmer explicitly make each expression evaluate to the same type or at least be stricter than what happens on assignment. 


  3. Postgres limitation - no multiple statements in a prepared query (queries must be prepared if they use parameters).

     

    Note a single statement runs in a transaction anyway so the begin;/end; are not needed in the example. 

     

    Most use stored procedures in the database when there is a need to execute multiple statements based off passed in parameters. 

     

    Some use DO and pass in the contents of a stored procedure body as a string to run as an anonymous code block but then you can't pass in any parameters. 

    • Like 1

  4. In Postgres BEGIN needs to be followed by a semicolon. It is equivalent to some other databases START TRANSACTION. It should be paired with a COMMIT and not END.

    Ref: PostgreSQL: Documentation: 17: 3.4. Transactions

     

    Single statements usually run as a transaction anyway - either the whole statement executes or none of it does. So, for a single statement your SQL would just be:

    update mytable set testno = testno + :increment where id = 1;

     

    • Like 1

  5. 5 hours ago, Die Holländer said:

    Maybe they should be clear about the costs instead of you must contacting sales.

    I think this is a hurdle for many developers. (Normally you see this when the costs is high..)

    Just put some system senarios on the webpage with the costs needed.

    Even with (bit complex) MS-Azure subscription, for example, it is possible to do an overview of the costs.

    That has always annoyed me - step one of looking for products/solutions is to survey what is out there and compile a list with basic information. I usually just ignore/skip anything where the information is hard to come by as I have been burned too many times. Far too many companies' think their product is good for X when feature wise that would be true, but price or licensing terms make it not. I want to know that from the start not after wasting hours evaluating a product and dealing with sales calls. Most of the time 'contact sales' means the product has runtime fees, weird tiered pricing or terms making it unsuitable for a lot of scenarios. 

    • Like 1

  6. 34 minutes ago, Brandon Staggs said:

    I can't compare emulated Delphi x64 code on Windows vs compiled ARM64 code because Embarcadero doesn't offer the latter yet. Ostensibly, the benefit will be not having to rely on a layer of processor architecture emulation.

     

    I certainly can't see the benefit of Embarcadero pretending there is no ARM64 Windows executable format and ignoring it altogether. If you decide the x64 output works better you aren't going to be forced to distribute ARM64 binaries.

    There is not one executable format but two: ARM64 and ARM64EC (ARM64X PE files) on Windows 11 ARM64. The latter makes moving to ARM incrementally easier but does complicate things for third party compiler makers like Embarcadero. Bit a shit show from Microsoft over the last decade - first Windows on ARM had a new API only, then Win32 / x86 emulation and now finally a way to mix x86 and specially built ARM binaries. 

     

    I think ARM will fall behind as a platform because it is fragmented and siloed. Remember how M68000 got beat by x86 - thanks to DOS and then Windows becoming a widely used platform x86 got an order of magnitude more $$$ invested into the platform. ARM just doesn't have the $$$ getting invested into platform improvements that x86 does and some of the improvements don't go to all users - like x86 emulation help on Apple M1 CPUs not available elsewhere. Contrast that to AMD's Ryzen/EPYC all using the same CPU tiles - the improvements from investment hit everything from Valve Steam Deck handhelds, Threadripper PRO workstations and the FRONTIER supercomputer. 

    • Like 1

  7. 2 hours ago, terran said:

    Don't know anything about thread-safety and mask at every call. Why not mask once if you need this?

     

    Consider when code using unmasked exceptions calls code in a DLL that uses masked exceptions. The floating-point control register (FPCR) needs to be set to mask exceptions just before the call then unmask them on return.  The functions provided by Delphi to update the FPCR are not thread safe so they can botch it. 

     

    For the non-FMX Windows platform Delphi code ran with unmasked floating-point exceptions on by default before the recent change. Most C/C++/C# code runs with them masked. This meant the above scenario happened when calling into most non-Delphi DLLs from Delphi. 


  8. I started with FlashFiler then migrated to NexusDB for both standalone and C/S versions of applications. The former was available years before SQLite came on the scene and the latter was the spiritual successor of the former. Never migrated to SQLite because using C/S tooling during development of even a standalone application makes things easier. Both a database development tool like Upscene Production's Database Workbench and the application itself can access the live database tables at the same time easing debugging and other tasks. Can then ship the application with the same database engine compiled into the EXE but hooked up directly instead of through C/S components. 

     

    Originally used FlashFiler as the database engine for an application + database published monthly on a CDROM. With some modifications to the source to open read-only files as shared it worked well for years. Both FlashFiler and NexusDB are royalty free so no per user fees in either standalone or C/S configurations. 

    • Like 1

  9. From an organizational perspective a web server like IIS is easier to manage, especially in the long term, than individual web services running on random machines and ports. System administrators are familiar with the logging and configuration of a web server and can perform various tasks without involving the developers. For example, keeping https settings up to date by disabling weak protocols and cyphers.

     

    You don't need a web server, but it might be beneficial to consider using one. 


  10. With any substantial number and sizes of files that could waste a lot of time as the whole operation keeps being restarted after each problem is encountered and fixed. 

     

    I would suggest doing the copy with a tool that synchronizes directories then once everything is copied successfully delete from the source. Can even use the same tool for both steps - like robocopy to copy everything followed by a /MOVE pass to pick up any last minute changes while clearing out the source. 

     

     


  11. 4 hours ago, Der schöne Günther said:

    I am not familiar with Delphi 11 (yet), but at least with Delphi 10, most of the time of starting and ending a debugging session is spent with the IDE flickering and constantly redrawing itself over and over.

    I found that annoying as well. For several years I would set the debug desktop to the regular desktop and turn off hide designers on run. Made compile/run/test cycles much faster. I usually did not need the debug panels as most testing was in the application being developed. No longer needed with very recent versions as IDE redrawing is better so switching desktops and hiding/unhiding designers is fast.

    • Like 1

  12. There are no new license/serials - you use the existing license. 

     

    The My Registered Products at Registered Products Portal (embarcadero.com), the product+serial you did a support renewal for should have a new / extended Subscription End Date and a Subscription Status of Active.

    The matching download should be available under My Downloads. 

     

    With an active subscription 12.2 should be available - it is for me and the product line in my registered products is Delphi 10.2 Tokyo Enterprise Named User. first registered in 2018.

     

     


  13. Sales is also supposed to be able to do the license bump for those without active support. At least that is what has been said when this has come up in recent years. 

     

    Not sure why they don't make it smoother or more explicit - the uncertainty produces anxiety and negative feelings in users. 


  14. Best to read up on it - https://developer.amazon.com/docs/in-app-purchasing/iap-overview.html the basic choice is between an SDK and a compatibility SDK. Not sure how much effort it is to use the code that comes with Delphi with the compatibility SDK but it would be easier than using the SDK. 

     

    Quote

    When porting your app to the Amazon Appstore, you can choose the Appstore SDK IAP or the Appstore Billing Compatibility SDK. The Appstore Billing Compatibility SDK mirrors Google Play Billing Library and allows you to port an existing app with minimal changes to your code. 

     

×