Tim, Graham and I are back with our wrap up of Day 2 of Jenkins World 2017. We’ve all had a lot more sleep than yesterday’s so hopefully it’s not as rambling…although Graham does have a moment in there 😉
This was the final day of Jenkins World and at the closing keynote they confirmed that the recordings of all the sessions will be available soon. We’ll post a link as soon as they go up.
Oh, and I totally forgot to mention the awesome session on DevOptics Deliver that Karan Malhi, the DevOptics Deliver PM gave. Definitely worth watching on the replays, as he goes deeper into what problems they are trying to solve, gives a longer demo and also gives some insight into how it is implemented.
A few of the team and I have travelled to the San Francisco for Jenkins World and after a long day 1 of the conference, we recorded a quick wrap-up of some of our highlights.
We’re seriously suffering from jetlag and too much coffee, but if you weren’t able to make it to Jenkins World this year, hopefully this will give you a taste of some of the announcements and sessions.
I believe the sessions are being recorded, so at some stage they should come online.
Every developer who works with UI handles a lot of user input. And it’s not a rare situation that we don’t need to handle every incoming event because there might be just too many of them.
Consider this example, a user fills an email field on “Sign up” form in some application which works with a REST API. We want to validate entered email before a user actually will click “Submit” button. To do it, we make a call to hypothetical “/email/validate” REST endpoint and display validation status on the UI, which enables a user to adjust his input until he finishes working with the form.
Some people type really fast, so we don’t want to make a REST call for every entered character. Lots of APIs have request limits and in order not to exceed them it’s necessary to “throttle” events emitted by fast user typing.
In one of our customer projects, we had an Android app that was receiving broadcasts on a background thread (I’ll call this the Receiver thread). On receipt of a message, the Receiver thread needed to do some processing on that message and then update the main thread (the UI thread).
The initial solution to this was pretty simple, call TThread.Synchronize from the Receiver thread, passing in an anonymous method that updates the UI Thread.
Testing this on Windows worked fine, however running it on Android revealed a problem. (more…)
It was only today that I got around to updating the VM I use for demos to RAD Studio 10.2.1. Unlike the VM’s I use for customer projects, this one is using my MVP License. I installed 10.2.1 no problems, but upon running I got the following error message:
An Update Subscription for Embarcadero Delphi 10.2 is required which has expired prior to this release
After a moment of confusion, I realised I might have used my old Berlin MVP license during the install, so the error message is probably correct.
This is easy enough to fix, but I’ve had a few customers ask me about this so I thought I’d grab some screenshots and write up how to replace serials in a RAD Studio install.
Links for the ISO download are here, and the Web Installer is here. Note that with the recent changes to how the Web Installer works, I actually find it a faster total install. Remember to retain your component settings when uninstalling 10.2, or use the Settings Migration Tool to export them and import them into 10.2.1
Personally, I’ve been using 10.2.1 for the Android changes over the last few days and I can tell you the experience is much improved, both for Android and in general. Definitely worth the install.
You might have seen the recent Beta announcement from Embarcadero for the Enterprise Connectors. I’ve been doing some work with a few of them lately, so wanted to give you an overview of my experiences, starting with the Salesforce driver.
If you’re not aware, the Enterprise Conenctors are a whole bunch of FireDAC drivers that allow you to interact with a wide range of backend systems as if they were relational databases. There are more than 80 systems supported, including Salesforce, Xero, QuickBooks, Magento, ServiceNow amongst others. The theory is that given most RAD Studio developers are very comfortable interacting with a database, if you can make something look like a database, it should be easier to use.
Nice theory, but I was keen to see how well it worked. I’ve done a fair bit of development with Salesforce, including using the API, so I figured I’d try that driver out first.
A few things to note:
The Enterprise Connectors work with 10.2 Tokyo.
The beta versions of all the drivers are available in GetIt, so you can try them out really easily.
They are FireDAC drivers, but they work happily with FireDAC in Professional (despite the Enterprise Connectors name)
First up, connecting to salesforce is very easy. You have a bunch of options for how you connect (see the documentation here) but I went with the simple username, password and Security Token option. These are all available as parameters in the FireDAC Connection wizard, as well as properties in the component. (more…)
In this post I deploy the Jenkins distributed builds model: a Jenkins client master will delegate build jobs to one or more Jenkins agents. In addition, I deploy a Jenkins Operations Center to manage all client masters in one place. (more…)
I’ve been trying out Enterprise Jenkins on Azure. The inspiration was a webinar, Achieving Continuous Delivery on Microsoft Azure, about the “four quadrants of DevOps maturity”, and how to address the needs of different teams in the delivery pipeline using tools from Azure and Enterprise Jenkins. The webinar includes a demo of a cloud-based Jenkins Pipeline job, and the source code is freely available.
I tried out the demo and got it working with minor changes and a few workarounds. This post is part 1 of a series.
RAD Studio’s ability to do remote debugging of Android apps on device is fantastic for tracking down issues. However sometimes you have issues where the debugger can’t help. Case in point is one of the projects we were doing for a customer recently. The Android portion included a Service, which needed to be auto-started when the Android device booted. It worked fine if it was started manually, but auto-starting at boot resulted in a crash. We couldn’t use the RAD Studio debugger as it was all over so quickly at boot time. Fortunately we were already logging messages out to the Android logs from within our app, so we were able to track down the problem. How?