Should a contract developer pay for their own components?

I’ve been off blogging on the official Embarcadero blog here: https://blogs.embarcadero.com/author/ianbarker/

I’ve also been either occasionally guesting or moderating the TCoffeeAndCode webinar series. You can see the latest video below and subscribe to the series here: https://embt.co/3uyNUkg

I really must learn to talk less and listen more.

Should a contract developer be expected to pay for their own components?

I just had slightly painful conversation with a customer who was questioning why they should pay for the purchase of a set of Delphi custom components in order for a contract programmer (not me) to carry out some work for them. The customer’s argument is “it’s like expecting a plumber to get you to buy their screwdriver”. The person chose a firebrand of an analogy there: notwithstanding the fact that in most Western cultures plumbers are horrendously expensive, have call-out fees and hourly rates which put some lawyers to shame and often expect you to sit with a water leak drowning out your house until they are available, it’s also very poor when this particular contractor being discussed is actually from what is often referred to as “a third-world” country.

Globalization is not homogeneous

This particular out-sourced software developer contractor is being paid an hourly rate that is less than the company’s least qualified office staff. The price of the components I was discussing with the company is the same whether the contractor is living in Silicon Valley or a tent in the Sahara desert. The wages of the contractor are reasonable for their culture and represent what he considers to be fair pay for fair work when compared to the cost of living in their home country. But the cost of the component set is almost beyond his reach financially. Welcome to the disparity of globalization. He’s ‘cheap’ in terms of labor costs but the components we are asking him to use have no cost-of-living benefit since they are made in the fluffy environs of a first-world company with corresponding taxation and labor charges of their own, so they set the price to cover those expenses and to make a profit fit for their average standard of living in their country, not the contractor’s more modest financial needs.

What answer can you give to a company who wants the contractor to pay for the third-party components?

The company need the contractor to use a specific set of components which he doesn’t have; which are not particularly common but are vital to the aim of the development and have no credible, cheaper alternative. They have a couple of choices: they can find a contractor already using the components and pay the more expensive going rate for their time, they can get the contractor to pay for them and reimburse him – which his cash-flow might not allow, or they can buy them for him.

Here’s my explanation to the non-technical gate-keeping manager

XXXXX [the Delphi contractor] uses his own RAD Studio Delphi license. I would expect all contractors to have that available as a minimum or I can’t really see how they could be Delphi programmers.

To use a non technical analogy: it’s like us owning a restaurant and hiring a top chef: the chef generally brings his own knives and a bunch of recipes – these are Delphi and the routines and techniques the programmer has learned – but the chef doesn’t usually bring the vegetables and meat to make the meals but if he did you’d probably have to pay him for them – this is like the component sets we choose or need to use.

Sometimes the chef brings in herbs and some beans he grew in his own garden and adds them to the dish and says “I don’t want payment for them” even though he bought the seeds and nurtured them himself – this is like the programmer bringing along some component sets we don’t have but are shareable.

When you have friends

I know a fair few people in the Delphi world and I’m fortunate to call several of them my friends. It’s nice to hang out online with fellow like-minded developers and it’s doubly-handy since we often swap ideas about tricky stuff we’re stuck on. Generally one of us has something useful to contribute which can help unstick the stuck code. We’re not turning up at each other’s doorsteps with cakes and cookies but we’re techies anyway so that sort of stuff would be odd even without a global pandemic.

We hang out in a group where it’s a safe space to chat about things that we might not always want to waft into the air at a webinar or website. Nothing too dramatic, but it’s good to have somewhere like that. I’ve mentioned people like Holger Flick before since we often crop up on webinars together but there are others, all of whom are top notch. I find the more I put into my support of the Delphi language the more I discover some truly great people beavering away, all of us with the same shared purpose, often in very different ways, sometimes different countries. We’re all on the same page when it comes to Delphi and RAD Studio though.

We’re also fundamentally a very like-minded bunch – geeky, into things like Star Trek, LOTR and we even discovered today that a few of us are into the movie War Games, partly as a result of me posting pictures of myself, from a few years ago, wearing a T-shirt saying “how about a nice game of chess” while I was standing next to the press podium at Strategic Air Command where they would have announced the beginning of a global thermonuclear war.

Yes I am that War Games geek…

Today a gift arrived curtesy of one of those Delphi folk: Zach Briggs. He sent me an official Delphi Mystics coffee mug. It is enormous, as it should be in order to adequately fuel a professional software developer. ?

Quality stuff. Thanks Zach… and thanks to the Trekkies, Holger and the others who keep me sane whilst I knock out program code; you know who you are.

Join TCoffeeAndCode For Developer Chats

Have you watched any of the TCofeeAndCode series yet? They are informal discussions ranging from 30 minute lunch-time “espresso sized” ones to two hour (or more) full discussions. Being the media darling that I am I’ve been a guest on a few of these. I’m also on one later today – Wednesday 21st April 2021 – where we’ll being discussing security issues and best practices for developers and dev-ops people.

Here’s a screenshot from a previous TCoffeeAndCode

TCofeeAndCode screenshot

TCoffeeAndCode is not quite like the usual webinars – it’s pretty much unscripted and you can actually join in the discussions. In some of them we can even SEE your face and HEAR you if you enable your webcam and have a microphone or headset!

Here’s Jim’s post about the current TCoffeeAndCode series

You can register to watch the entire series – and get notified of the replays if you can’t make it by clicking the link to visit Jim’s post and then following the registration instructions on there.

Here’s a blog post by Embarcadero’s Stephen Ball to accompany one of the previous TCoffeAndCode ‘espresso sized’ discussions including one on user interface design I was on.

TCoffeeAndCode replays

You can watch a few of the replays here: https://blogs.embarcadero.com/en/tcoffeeandcode-developer-chats-in-march-2021/ and catch the others on the official Embarcadero YouTube Playlist:

Please join us if you get a chance, it’s a lot of fun.

TCoffeeAndCode US Panel

TCoffeeAndCode full panel with some great guests

After yesterday’s post with the replay of the “espresso-sized” UK TCoffeeAndCode panel I was on – here’s a link to the bigger, fuller, calorie-laden USA TCoffeeAndCode panel.

This was a great panel to be on and it was pretty cool to be among such illustrious company. Guests on the panel were

  • Marco Cantu,  Delphi & RAD Studio Product Manager at Embarcadero Technologies.
  • Anders Ohlsson, Senior Director, Software Engineering at Wide Orbit Inc.
  • Dave Akerman, an excellent Delphi and FreePascal programmer (and the only one among us to own a Tardis)
  • Zach Briggs, Delphi MVP and actual Delphi Mystic (but I know him as Dungeon Master – don’t ask)
  • Host Jim McKeeth, the man who brought us all “swipe to unlock” and now is Overlord of All Things Delphi. Jim did a marvelous job of keeping us all corralled and as on-focus as TCollection of Delphi Programmers can be. ?
  • Oh and me!

We talked about a great deal of things and there were some absolutely fascinating insights into things like near real-time processing data of data on a massive scale and even Delphi’s role in the latest Mars Lander.

It’s a long one – around two hours or so – but it’s totally worth it.

“Espresso sized” user interface design replay

I’ve been invited just recently to appear on a few webinars to regale people with thoughts about user interface design. As Stephen Ball said during his introduction of me, I’m a bit of a user interface design geek really. I’ll blog another time about the longer Embarcadero USA TCoffeeAndCode event I appeared on as a panelist which was a two plus hour festival of Very Good Things.

In the meantime, here’s a link to the replay of the shorter “espresso-sized” (as Jim McKeeth described it) TCoffeeAndCode UK edition hosted by Stephen Ball. With us was Dr. Holger Flick, fellow Delphi MVP and product evangelist for TMS Software. These events are a lot of fun and they’re held using GoToMeeting so I get to see the faces of attendees if they have turned on their cameras.

I’m sorry about my flock of birds tweeting quietly in the background. The Covid-19 pandemic means I’m in the next room from the 15 parakeets and our beautiful parrotlet. Like most things I’d normally be in a cozy office where their squeaks will not be picked up by the mic. although some people said they find it comforting!

Anyway, on to the next event. Exciting things are coming!

Where NOT to put your Delphi components

This is just a bit of an observation of things I’ve noticed in the past month or so.

As an MVP I often have several copies of Delphi, both release and beta, installed on multiple machines. I also have a burgeoning amount of components on those machines; either ones I use or ones I want to write about or ones I’ve been sent by the vendors for me to comment on and provide feedback.

I know I’m not totally typical but I’m also a professional software developer writing code day in and day out using Delphi and using the component-based ecosystem to its full advantage.

So, in the style of a battle-hardened action movie character: “I’ve seen things… things you wouldn’t believe“.

It’s common for some Delphi component suppliers to install things into your documents folder. I have no problem with that and it’s quite often just documentation which makes a lot of sense.

However, I’ve noticed a few components, for whatever reason, actually installing the source code of the components into the “My Documents” folder. I’m not sure if it has been because of a default I might have picked eons ago or a general default but right now, if you use OneDrive or Windows 10 it’s a Very Bad Thing. Windows 10 changed quite a lot of things over the years, drip-feeding new features bit by bit into the desktop experience. That’s a great idea and helps ease people into a forward direction without overwhelming them with too many changes all at once.

However, one of those more recent features is that, for Microsoft Office users at least, many things are actively being stored on Microsoft’s OneDrive cloud storage solution. In latter versions of Windows 10 this means that files you copy to the “My Documents” folder are then synced to ‘the cloud’ and become available on any of your other machines.

Except they’re not really there. There is a file system ‘stub’ entry and when you look at those files in Explorer you’ll see a little ‘cloud’ icon:

The cloud means that the file is not physically present on your machine.

That’s when the trouble starts.

If you install a set of Delphi components and the destination is anywhere under one of the ‘special’ Windows folders such as “My Documents” or “Desktop” (seriously I have seen a Delphi developer doing that – don’t do that) then any of your other PCs which are running Windows 10 and are signed in using the same Microsoft account will ‘magically’ get those component folders appear on their machine in the same places… except those files aren’t really there.

When you go to compile a project on your other machine – the one without the actual files but with those cloud icons – the whole process will either fail or go very slowly – and I mean like MINUTES slowly. The reason it goes so slow is that Windows actually creates a deliberate pause accessing the virtual/cloud files while it syncs with OneDrive and downloads them for real onto your PC. Even on a machine with a 1GB fiber connection like mine this is still relatively slow – and in the case of a bigger library it’s going to take quite some time.

Then there’s an even worse problem. Let’s say you now decide to uninstall the components from that second synced machine. The uninstall removes all the source code (as it should) and any BPLs and so on. Now you install a later version of the component set, once again into one of the OneDrive synced folders. When you swap back to your original machine OneDrive starts to sync the changes… and disaster unfolds. You start to get mismatched source and BPLs along with Delphi project and DFM files which are from the later version of the components on your secondary machine.

You’ll also find that – at least currently – OneDrive will spend a VERY long time trying to sync all the file changes between the two machines. You will also get warnings from OneDrive that you “recently deleted a large number of files” and asking if you want to clean out the trash folder with no indication of whether or not this is a good or bad thing. Spoiler alert: do it. ?

If you have more than one PC and are using OneDrive and you have one or more machines going more slowly than you expect then this could well be what appears to be a problem with OneDrive at the moment; never-ending or very slow synchronizing of files. On a machine which I found to have this problem I temporarily disabled the OneDrive sync and suddenly the machine was back to normal speed.

Also, for any component developers reading this: don’t store things in the program files folders, especially source code and examples. Increasingly these folders are heavily restricted and in many customer configurations they are virtualized. %PROGRAMDATA% and %APPDATA% (depending on your use case) is the correct place for all of that. You can read more here: What Is the ProgramData Folder in Windows? (howtogeek.com)

If you store your samples/demos in the program files folders your users will get error messages trying to run the projects since by default the folders are not writable by mere mortals.

To return to “where to store your components” – I’d suggest you create a folder called "\comps\" and use that as the target destination when installing new components from vendors. This has a couple of advantages –

  • If you have more than one machine all your components will be in the same place rather than program files (86)\name_of_vendor or program files\name_of_vendor
  • It will not get synced by OneDrive by default and you avoid the problems I described above.
  • The path is SHORT which is currently quite significant for RAD Studio which uses the Windows PATH environment variable and you’ve probably seen by now a warning stating the maximum path length is close to being reached.

Of course, none of this may affect you. Perhaps you don’t knowingly use OneDrive (don’t get too complacent, Microsoft are pushing OneDrive and cloud storage hard) or maybe you only use one PC or already store your components in an alternate folder. All good.

But if not then maybe this post might save you some of the grief I’ve experienced in the past few months.

UPDATE: A small update to this – this applies to ANY component library good, bad or ugly – and some people have suggested that their copy of OneDrive doesn’t sync documents folders automatically although I have checked this on a collection of machines both in the UK and US and it definitely affected all of them. A quick Google search shows it to be a common problem too: https://www.google.com/search?q=onedrive+constantly+processing+changes

I’m definitely NOT calling out any component vendors and saying this is their fault but what I am saying is, based on my experience, putting stuff in the documents folder when it is synchronized to the OneDrive cloud can be a major problem; it certainly was for me and even this morning a couple of days after I originally wrote this article I had the problem occur again with a component library and had to manually stop things syncing and delete files to overcome it.

Feel free to contact me directly if you think I’m wrong – my details are public; go for it!

I’m kind of crushed that people thought I was being negative about Delphi and particularly about some components – have you not all been paying attention? ?

How to write Delphi apps to run and look great on Windows, macOS and Linux

Last Wednesday I presented an Embarcadero webinar “Cross Platform to Windows, macOS and Linux with Firepower”. Participating in the live Q & A after the demo was Roy Woll of Woll2Woll Software. I think we had a lot of fun doing it and there were tons of questions about Roy’s great components as well other subjects such as making your own components be available for multi-device apps when the user swaps to the FMX Linux target, for example.

Here’s the official Embarcadero replay of the webinar complete with the lively Q & A…

Roy also mentioned a code you can use at check-out for the Woll2Woll components too. The coupon code to use is IBFIREPOWER15 – which should save you 15% on FirePower X.

The Woll2Woll site has demos and a trial copy of the Firepower X components you see me using in the video so you can try things out for yourself.

The first demo app is based on part of a commercially available Delphi program which I work on as part of my ‘day job’. It is a “key personnel display” or “In/Out Board” which shows the in/out work status of employees. We quickly produce a brief version of this module running on Windows and Linux. We then swap to deploying one of Woll2Woll’s demo apps and show it running on Windows 32 and 64 bit, Linux and macOS – all from the same piece code. Pretty cool stuff.

If I can do all this in 29 minutes I think it does demonstrate why I call Delphi “my secret superpower”. Honestly, it’s not difficult to target all those platforms – the hardest part is the initial set up of the paServer and SDK but once that’s done you don’t need to do it again and deploying apps cross platform to the various operating systems is literally a matter of selecting the operating system as a target and hitting compile in the RAD Studio / Delphi IDE.

Jim McKeeth, who steered the webinar has also blogged about it on the Embarcadero Blogs site here: https://blogs.embarcadero.com/cross-platform-to-windows-macos-linux-with-firepower-replay/

If you want a copy of the slides or have questions feel free to get in touch; we present these webinars so it might help and to generally educate people about what a great development tool Delphi and RAD Studio is and I hope this comes across – it’s all about Delphi but, most especially, it’s all about you.

Here are some of the key slides…

How to give your apps the REALLY COOL Windows 10 Fluent UI look and feel with Delphi – Part Two

Here’s a replay of the video played during the webinar – obviously it doesn’t contain the Q & A because that was live. As soon as the Embarcadero’s official recording of the webinar is available I’ll swap it out.

Note that the link to the repo shown in the video is incorrect – it’s actually ->

https://github.com/checkdigits/fancy_ui

Here’s the slides from the webinar…

Write Delphi Object Pascal Code – and out comes a fully working web app

A few days ago I helped host an Embarcadero webinar featuring representatives from TMS Software and AtoZed. This presentation featured a round-up of recent presentations on TMS WEB Core and Intraweb which are two of the THREE web frameworks Embarcadero are currently including in their special holiday promotion which you can find here: Special Offers on RAD Studio, Delphi & C++Builder – Embarcadero. The other framework is UniGui. Click on the preceding link to read more about it all. The same offer also gives you three years of update subscription updates – i.e. upgrades to the latest versions for the next free years included – along with other mind-boggling things like Architect for Enterprise pricing and so on. I’m not an Embarcadero employee although I am an Embarcadero MVP but this is a pretty good offer, I think.

Anyway – on the video replay the Q & A section doesn’t have any slides but we do mention some links being pasted into the chat window which you can’t see in the video. Those links are listed below so you don’t miss out.

I’ve used all three of these web frameworks at one time or another. I have particularly used both Intraweb and TMS WEB Core for commercially available products I’ve written and which are in use in 1000+ customer locations. I can vouch for both systems – and each has their own strengths.

Intraweb is a lot more like creating a Delphi app which then runs either as an ISAPI dll or stand-alone web server exe or service. It has a few idiosyncrasies which you very quickly get used to but overall it’s great to use and has been around for many years. Many Delphi programmers are already familiar with it due to the inclusion of a ‘free’ Embarcadero version of Intraweb and the ability to upgrade that free version to remove some of its restrictions like number of concurrent connections and so on. Go to the AtoZed site to read more. Chad mentions in his section of the video that they’re currently working on version 17 of Intraweb which will add a load of new functionality. I can’t wait to see that in action and I’ll do some reviews once I get my hands on stable copy.

TMS WEB Core I’ve discussed before both here and at a few webinars. It produces pure HTML 5, CSS and JavaScript right from your regular Delphi code. In essence you write a normal Delphi program and when you hit compile out comes the app as a set of web pages with the JavaScript and CSS to make it work on any standard web host or web server such as Apache. If you have a TMS All Access subscription you get WEB Core included and if you use their FNC components you can write code and generate forms which will work cross platform on Windows, macOS, Linux and the web. TMS WEB Core also allows you to easily turn that set of web pages into a stand-alone progressive web app (PWA) and an Electron app. I took part in some comparitive research recently and created the required test app as a WEB Core app in around 40 minutes and then took that and produced a PWA in an additional 6 minutes including writing notes and in a further 7 minutes after that created the same app as an Electron app. I reused the forms and the back-end code. It was that easy.

Anyway, the participants in the above video are:

and myself who was hosting on behalf of Embarcadero’s Jim McKeeth (Jim was unable to make it at short notice). Video playback was managed by April Calderon of Embarcadero.

Comparative Research Project

I’m going to publish the comparative research project code in the next day or so.

The comparative research code can be found here: ComparisonResearch/calculator/delphi-vcl/barker at main · Embarcadero/ComparisonResearch (github.com)

This code contains the same program produced as a bunch of apps written in pure VCL, Fluent UI VCL, WEB Core, PWA and Electron. It was a fun project to be involved in and really demonstrated the power and brevity of Delphi’s Object Pascal language and how with a bit of thought the amount of code reuse you can achieve without compromising on the power or syntax is pretty extraordinary.

Will December be as busy as November?

So… best laid plans and all that jazz. I did intend to do some streams in November and a few articles but, life being what it is, this didn’t happen, at least not on my blog here although you can catch up with some Embarcadero sessions I appeared on last month.

I am offensively busy with some pretty intense coding at the moment. Pandemic or not I am pleased to say things are doing OK. I know that’s not true for everyone.

In my 38+ years as a professional developer I’ve seen and worked at everything from start-ups which were an inferno of blazing code sessions stretching over several non-stop sleepless caffeine-fueled days and nights, to working at ‘blue chip’ organizations which filed one entire department into one area and another into a hastily-assembled meeting place where they found out we had survived the “refocusing of business direction” and they had not and were consequently out of work as of ten minutes prior to the meeting start.

The first time was in the ’80s. It has repeated itself every decade or so. It never hurts less and, since I have the luck of a leprechaun with two rainbows, I seem to survive those kind of down-sizing decisions and get left with a brutally conflicting sense of relief and sadness as others are slapped in the face by being wrenched from their keyboards and, with it, the code in which they had invested a large part of their emotional and professional well-being, not to mention personal and financial security followed by being discarded, back on a job market, ego crushed, worse fears piqued.

I hope that, if you’re currently becalmed on the Covid seas of despair, things pick up for you soon. {hugs} I can do nothing more than offer you my empathy and, as Roald Dahl would say “think beautiful thoughts” for you.

If you ever need someone to talk to please reach out to me. I might only be able to offer a friendly ear – but sometimes that might help. This time will pass. Things will brighten.

So what DID happen in November?

DelphiCon 2020 happened. DelphiCon was kind of like CodeRage with less rage and more smoothly-targeted sessions using the new session managing software Embarcarcadero have recently used for a few things. Nearly everyone who took part – with the possible exclusion of myself – has at least one book published or well-loved products they curate. They were all bang-on useful sessions which I enjoyed as a viewer as well as a participant.

In particular I took part in the DelphiCon 2020 VCL panel

You can catch the official replay of the VCL session session here:

I’m also taking part in a brand new session next week, December 16th – “Powering The Web with Intraweb and TMS WEB Core“. This is an information-packed session where representatives from TMS Software and AtoZed, as well as myself, are going to show off how to EASILY create some truly powerful web apps targeting straight-forward web servers, Electron apps, progressive web apps (PWA) and other such delights. I’m going to show you a web app created with TMS WEB Core and written in Delphi which I’ll then recreate as a stand-alone cross-platform Electron App in less than five minutes and, just for good measure, a PWA which can either run in your browser, connected, or can run disconnected and stand-alone on your machine or mobile device; once again, in less than five minutes.

Heady stuff.



You can register with the official Embarcadero link here:
https://register.gotowebinar.com/register/6443217715002654221


Fluent UI

I haven’t forgotten about the second part / follow-up to the Fluent UI session either… I have just been completely flooded with ‘the day job’ writing Delphi code every single day. I have a plan. Hopefully it will be of the best laid kind and, bucking the trend, will happen shortly!