-
Content Count
782 -
Joined
-
Last visited
-
Days Won
61
Posts posted by Vincent Parrett
-
-
10.4.2 community edition does not have the command line compiler (10.3 did) - a stupid decision by embarcadero imho, it makes the community edition pretty useless.
-
1
-
-
I've been telling anyone who would listen for years that Omni is the best thing since sliced bread. We use it in the stepping engine in FinalBuilder. Some of the low level stuff is hard to grok though, I struggle with it when I haven't worked on it for a while, but the high level stuff is simple to use.
-
3
-
1
-
-
30 minutes ago, corneliusdavid said:they feel they have the right to highly criticize
You seem to think we should all be grateful for what we get and be quiet, you forget that ultimately we are all paying customers, many of us having sunk significant amounts of money into delphi over the years (not to mention staking our careers on it). As paying customers, we have a right to expect better, and to complain and criticise when it's warranted - and sadly lately with Delphi it is warranted. I've paid for way more versions of delphi than I have actually been able to use (due to quality issues - including D11).
As for the hard working team, well they are anonymous - name 5 people on the team (and I don't mean the product managers).. I'll wait....
Back in the day the dev team were on the newsgroups, interacting with their customers, now you would be hard pressed to name one of them that posts here. I have no idea if the 'team' (1 person, 5, 10? who knows) even reads these forums or if they even have any idea how their customers feels about what they are delivering.
Some days I have to drag myself back to working on my delphi projects.. today I fired up delphi to debug a problem with FinalBuilder, the IDE crashed on the first run - not an uncommon occurance. I've used delphi since 1995, I have millions of lines of code invested in it - so I persist - but I very much doubt that potential new customers would do the same - I know I wouldn't if I were one of them.
-
18
-
4
-
-
45 minutes ago, Rangga said:Hello sir, I tried GExpert 1.3.19 for Delphi 11, but the Configuration Box Dialog is to large on my Laptop 14'' and can't resize
Go and read the other posts about GExperts and Delphi 11 here.. this is a Delphi 11 problem.
-
4 minutes ago, Dalija Prasnikar said:But, have you ever tried debugging such asynchronous HTTP requests. It is mission impossible
I can attest to this, currently rewriting my http client library using the WinHttp C api, as the com api doesn't work in the delphi ide (due to coinit issues) - I'm using it's async mode (not embarcadero's) which uses a callback.. the delphi debugger and it do not play well together!
I really can't understand why more focus hasn't been put on the PPL, and seriously cancellation tokens are a must have.
Embarcadero don't seem to have realised that the world has moved on from everything being a component you drop on a form. If I can't see it at runtime on my screen then it doesn't need to be a component/control, I'm quite capable of instantiating an instance at runtime, and I don't need all the baggage that TComponent brings along.
-
4
-
-
34 minutes ago, Uwe Raabe said:Ahem, AFAIK it was in fact Allen Bauer who laid out the architecture of the APL - if not actually wrote the whole stuff himself:
One significant difference is he was suggesting a helper class for this rather than saddling every tcomponent descendant with it.
-
1
-
-
Thinking about this some more overnight, I suspect this was designed by the same persion who designed the TTitlebar abomination (everything is arse backwards) - why on earth is all this functionality embedded in a TComponent - TComponent just getting more and more heavyweight with code that can't be removed/replaced with a better design later (like TForm now).
Does embarcadero have a chief architect these days - someone to guide the overal design of the rtl and frameworks? Doesn't seem like it. I miss the days when we have people like Allen Bauer - every major feature was carefully considered with regards to future impact etc.
-
2
-
-
A very odd design, I can't imagine why they thought this was a good design.
I you just want to run some tasks in the background, I leveraged OmniThread Library with my own wrapper that allows cancellation (via VSoft.CancellationToken) and returning values. I use in in the ui for the package manager I am working on, changing tabs invokes a background request to fetch package lists, however if you click on another tab before the first request is finished, it will cancel the first request and start a new one. Very simple to use.
-
2
-
-
6 hours ago, VilleK said:I implemented Sugiyama here:
excellent thanks, this is exacly what I was looking for.
-
2
-
-
24 minutes ago, Lars Fosdal said:The X is for eXcellent 🙂
Yes, lets go with that 😉
27 minutes ago, Lars Fosdal said:Also, it is super easy to integrate with Continua CI.
It's alway nice to see no red numbers there 🙂
-
1
-
-
1 minute ago, Mike Torrettinni said:What does X stand for?
Nothing really, I just added it to differentiate it from DUnit 😉
-
2
-
-
5 hours ago, Mike Torrettinni said:I don't need extreme version, yet, so DUnit is just fine for me.
DUnitX isn't an extreme version (whatever that is) - just a diffferent testing framework.. delphi really only has 2 well used unit test frameworks (other languages have many) - pick one you like.
https://www.finalbuilder.com/resources/blogs/introducing-dunitx
-
1
-
-
19 minutes ago, Mike Torrettinni said:I re-read this topic and I assume my tasks are still way too simple for FinalBuilder:
Download a trial version and see for yourself. Yes, you will need to give us your email address so we can send you a code and you will get a few follow up emails that are not sales, just trying to help you evaluate the product - we use drip.com for those emails and you can unsubscribe quite easily.
-
18 minutes ago, Mike Torrettinni said:I only see download for client/server version. Does it also come in a standalone, client only version, or does it need server running all the time?
It's a continuous integration server - it's designed to run as a service running all the time. It monitors your source code repositories (git, svn etc) for changes and triggers builds based on those changes. It can only do that when it's running.
If you just want to automate the build process without doing continuous integration, then look at FinalBuilder. It's a desktop IDE application (there is also a console version included).
-
13 hours ago, Mike Torrettinni said:At least I'm missing these tasks in automated part, which I still plan to integrate :
- backup projects and all important files, docs
- git Push
I think perhaps you are coming at this from the wrong angle.. git push is your backup (assuming you are using an offsite git server/service) - and should also be the trigger for automation in CI - ie you push your git commits, the CI server detects those changes and fires off a build, runs your unit tests, builds your installer, ftp's the files to the server and sends out email notificiations.
(vendor plug)
These days CI is very accessible even for solo developers. Our Continua CI product is free for a single concurrent build and a single build agent (installed on the same machine as the server) - other than that it's fully functional, unlimited configurations (and users) - perfect for solo developers and it's very easy to scale it up (add licenses, install extra agents as needed). It only takes a few minute to install and get up and running with a build process -
The video shows using mercurial, visual studio and nunit, but it works just as well using git, delphi and dunitx.
https://www.finalbuilder.com/resources/blogs/building-delphi-projects-with-continua-ci
If you really want to expand your automation then take a look at FinalBuilder (built with delphi) - over 600 built in actions that cover version control (git, mercurial, svn and a bunch of others), compilation (delphi 3 - 11, msbuild, vs etc) - install builders (innosetup, installshield etc), deployment (FTP/FPTS/SFTP/SSH) and a too many others to mention here.
The cool thing about FinalBuilder is you get to develop and debug your build process in an IDE that lets you step through your build process, stop on breakpoints, watch variables etc.. and then your build project can be checked into version control along with your source code and your CI server can run FinalBuilder to build your projects (using the console version of FinalBuilder).
Of course Continua CI and FinalBuilder play very nicely together - we build FinalBuilder, Automise and Continua CI with FinalBuilder an Continua CI.
https://www.finalbuilder.com/resources/blogs/continuous-integration-with-finalbuilder
-
2
-
-
13 hours ago, Uwe Raabe said:Who says that they weren't?
A salient point.
And then there are the high dpi issues from 10.4.2 that were ignored 🙄
-
I use runtime packages (the application is mostly plugins) so just taking a copy of the unit doesn't work. I use delphi detours where I can (it's not always doable) and like Uwe I have it error out if the compiler version changes so I know I need to look at it again.
-
18 hours ago, Darian Miller said:Synopse documentation builder has some of this built-in which might help... not sure how standalone it is.
Thanks, I'll take a look.
-
Does anyone know of any Delphi libraries that tackle directed acyclic graphs (DAG) and layout algorithms? In particular I'm interested in a layered layout (Sugiyama's algorithm).My goal here is to produce a visual representation of a target dependency graph - something like this.
[Clean] [Build] |________| | [Rebuild] [Sign] |_________| | [Deploy]
It seems like every other language out there has tons to choose from (open source to $$$$ commercial), but so far I have found nothing useful for Delphi. Of course I could attempt to translate another library to delphi.. but I was hoping to avoid that if possible .
-
1
-
-
I forgot there was somethings else I also did to fix this - install the new intermediate certificates on the servers. I don't remember having to do this before, but I was clutching at straws and trying things 😉
-
We had issues with some of our certificates, the fix was to renew them - the new certificates use the R3 root certificatge
-
There isn't really a 1 for 1 conversion here - the Delphi language/ppl does not have any async/await constructs .
So because of that your translation isn't correct. That said, your c# example isn't valid either.
Your TDoTest.Meth doesn't actually return anything so that's a problem there.
So you are left with a few options. Deal with it yourself. which as you have found is not easy (even with the PPL) - or find another library that could handle it. If you are doing this for windows only, OmniThreadLibrary is an option but has a fairly steep learning curve (worth it if you need to do complex threading stuff). For simple code, I wrote a wrapper over Omni (VSoft.Awaitable) which provides a poor mans version of async/await (omni does have this too, but it's missing a few features like cancellation and returning values).
function TDoTest.Meth(AMessage: string): IAwaitable<Test> begin //configure our async call and return the IAwaitable<string> result := TAsync.Configure<Test>( function(const cancelToken : ICancellationToken) : Test begin //.... do some long running thing result := TTest.Create end, token); end; //calling code procedure TAnotherClass.DoSomething; var doTest : TDoTest; begin doTest : TDoTest.Create; //this will not block. doTest.Meth('the message', FTokenSource.Token) // optional .OnException( procedure (const e : Exception) begin //handle the exception - runs in calling thread end) // optional .OnCancellation( procedure begin // call was cancelled - do any cleanup here // runs in calling thread end) // required, the call to Await actually fires off the task .Await( procedure (const value : TTest) begin //runs in the calling thread. Label1.Caption := value.TestMe; end); end;
The FTokenSource above is an ICancellationTokenSource - VSoft.Awaitable depends on VSoft.CancellationToken - in VSoftAwaitable it maps over Omnithread's cancellation token - delphi doesn't have one in the rtl or PPL (a glaring omission imho).
It's hard to give a definative example with the invalid c# example though.
BTW, to understand what async/await actually does in C#, this page sums it up quite nicely.
-
1 hour ago, Fr0sT.Brutal said:Probably you guys authors of all PMs should communicate and establish a single standard of config so that PM1 could utilize PM2-prepared package
Nice in theory, not really doable though - they are all so different because we all have different ideas.
-
3
-
-
6 minutes ago, Wagner Landgraf said:If I'm not wrong, @Vincent Parrett's package manager puts the packages in a global cache. So if you have multiple projects using the same version of JVCL, only one copy will be in your storage. If a couple of projects use an older version, then you will have two copies of JVCL. So it's the ideal scenario. I guess that's how it works, but he can confirm it.
That's correct.
When you install a package in a project, it first looks in the package cache (typically %APPDATA%\.dpm\packages - can be changed by the DPMPACKAGECACHE env variable)
If the package is there then that is used, otherwise it (and any missing dependencies) is downloaded from the registered package sources into the package source.
Then using some msbuild variables the package and it's dependencies are added to the project's search path
This is an example from the dpm ide plugin for 10.4
<PropertyGroup> <DPMCompiler>10.4</DPMCompiler> <DPMCache Condition="'$(DPMCache)' == ''">$(APPDATA)\.dpm\packages</DPMCache> <DPM>$(DPMCache)\$(DPMCompiler)\$(Platform)</DPM> <DPMSearch Condition="'$(Platform)'=='Win32'">$(DPM)\VSoft.VirtualListView\0.3.0-rc8\lib;$(DPM)\VSoft.Uri\0.1.1\lib;$(DPM)\VSoft.SemanticVersion\0.2.2\lib;$(DPM)\VSoft.JsonDataObjects\0.1.1\lib;$(DPM)\VSoft.HttpClient\0.2.4\lib;$(DPM)\VSoft.CancellationToken\0.0.3\lib;$(DPM)\Gabr42.OmniThreadLibrary\3.7.8\lib;$(DPM)\VSoft.Awaitable\0.2.1\lib;$(DPM)\VSoft.AntPatterns\0.1.1\lib;$(DPM)\Spring4D.Extensions\2.0.0-dev7\lib;$(DPM)\Spring4D.Base\2.0.0-dev7\lib;$(DPM)\Spring4D.Core\2.0.0-dev7\lib;</DPMSearch> </PropertyGroup>
Then the DPMSearch variable is added to the project search path
<PropertyGroup Condition="'$(Base)'!=''"> <DCC_UnitSearchPath>$(DPMSearch);$(DCC_UnitSearchPath)</DCC_UnitSearchPath> </PropertyGroup>
and lastly the package references are stored in the dproj so they can be restored (if missing) next time you open the project
<ProjectExtensions> <DPM> <PackageReference id="Spring4D.Core" platform="Win32" version="2.0.0-dev7"> <PackageReference id="Spring4D.Base" platform="Win32" version="2.0.0-dev7" range="[2.0.0-dev7,]"/> </PackageReference> <PackageReference id="Spring4D.Extensions" platform="Win32" version="2.0.0-dev7"> <PackageReference id="Spring4D.Base" platform="Win32" version="2.0.0-dev7" range="[2.0.0-dev7,]"/> </PackageReference> <PackageReference id="VSoft.AntPatterns" platform="Win32" version="0.1.1"/> <PackageReference id="VSoft.Awaitable" platform="Win32" version="0.2.1"> <PackageReference id="Gabr42.OmniThreadLibrary" platform="Win32" version="3.7.8" range="[3.7.8,]"/> <PackageReference id="VSoft.CancellationToken" platform="Win32" version="0.0.3" range="[0.0.3,]"/> </PackageReference> <PackageReference id="VSoft.HttpClient" platform="Win32" version="0.2.4"> <PackageReference id="VSoft.CancellationToken" platform="Win32" version="0.0.3" range="[0.0.3,]"/> </PackageReference> <PackageReference id="VSoft.JsonDataObjects" platform="Win32" version="0.1.1"/> <PackageReference id="VSoft.SemanticVersion" platform="Win32" version="0.2.2"/> <PackageReference id="VSoft.Uri" platform="Win32" version="0.1.1"/> <PackageReference id="VSoft.VirtualListView" platform="Win32" version="0.3.0-rc8"/> </DPM> </ProjectExtensions>
Of course I have simplified the description above, there's a lot more to it but that is the basics.
I'm currently working on project group support (made some good progress today) and then design time component support.
-
1
-
Your Delphi verion does not support COMMAND
in Python4Delphi
Posted
Pretty sure the Pro version has the command line compiler - if it didn't that would be the end of my delphi journey for sure. As a tech partner I have enterprise installed, but my subscription is for pro (I never use the enterprise features).