Flotsam and Jetsam #119

  • Hey, we have a hotfix available for RAD Studio.  It can be found on Code Central.  It focuses on some issues in the tool chain.  Given that it’s a hotfix, it only replaces a few choice files and doesn’t require an uninstall/reinstall process.
  • Thanks to everyone who filled out the RAD Studio survey.  We had a very good response, and we’ll pour over the results and make decisions based on what we learn from there.  Thanks.
  • If you are an InterBase customer,  the InterBase 2017 survey is out and available. This is your chance to have your voice be heard on the InterBase front. 
  • Jason Southwell is at it again. This time he has an interesting framework called ConinAsync that makes parallel programming with data structures really easy.  Give it a look.
  • A lot of folks have been asking when my new book, Dependency Injection in Delphi, will be available in physical form.  Well, it’s available now on Amazon.  I’m grateful to all of you who buy my books.

Delphius and Basicus Each Struggle with a Problem

Delphius and Basicus were both working on problems.  Delphius was trying to fix his roof, and Basicus was trying to repair his front door.    Both found their problem difficult.

Delphius was unable to come  up with a good solution for his problem.  After a brief time of contemplating, he decided to ask his neighbor Pascala what he should do. 

Pascala was a wise woman and gave Delphius some sage advice that soon led to a sound and solid repair of Delphius’ roof.

Basicus spent the the day frustrated, working on his front door by himself, and eventually came up with a fix that made things worse, would soon fail, and would eventually require paying a tradesmen to fix.

A Busy Week Produces 10.2 Tokyo

“Shipping is a feature” is one of my favorite sayings.  In fact, I’d argue that shipping is the most important feature, because without it, you don’t get any other features. 

But shipping is a lot of work – as this past week proved.  On Wednesday, we shipped RAD Studio 10.2 Tokyo, and we got it done two days earlier than we originally planned.  (Here’s a hint from the time we did it with Delphi 2007 and I spent the entire weekend helping customers with issues – never ship on a Friday).  Anyway, we worked hard and shipped on Wednesday, and it all worked out.

So, have you tried Tokyo yet?  If you haven’t, hop on over and give it a whirl.  I’ll wait. 

Okay, now that you’ve tried it out, you can get a good deal until the end of the month.  Definitely worth seriously considering.

My favorite of the new features is the Linux support,  but I’m guessing many of you are, like me, Windows people and aren’t that familiar with how things work on the Linux side of things.  However, things aren’t that difficult.  To get started, I recommend that you read and follow this excellent (and startlingly detailed) blog post by Craig Chapman.  It should get your Linux all set up and ready to run.  You’ll even get a sample application running in the debugger.

Linux support brings to five the number of platforms that Delphi supports.  It’s a list of familiar names —  Windows, MacOS, Android, iOS, and now Linux.  Delphi (and soon C++ for Linux) takes you where ever you need to go.  One codebase, natively compiled on  your favorite operating system.  We’ve come a long way from the days of just supporting WIndows, eh?

Flotsam and Jetsam #118

  • Delphi for Linux is soon to be here.  We’ve unleashed the Beta Bloggers, so keep an eye out for more information coming from any number of sources.
  • Thanks to all of you who have bought my new book, Dependency Injection in Delphi.  I’m grateful for all the support.  My wife is working on the cover for the paperback edition, and it should be available soon.
  • I’ve had a job change – I’m moving from being the Director of Product Management to the Director of Engineering.  Instead of managing the Product itself, I’ll be managing the actual development process for all the Embarcadero products, as well a couple of other Idera tools.  It’s a bit of a switch, but one I’m looking forward to.  Managing the development process is no small task, but I feel up to the challenge.
  • I’ve always said that if I could teach new developers one thing, it would be to “program to an abstraction, not to an implementation”.  I was at a great talk on Code Reviews by Travis Laborde at a recent Philly Code Camp, and he said that that most important thing to teach a new developer was the Single Responsibility Principle.  I thought that was a worthy competitor.  What do you think is the most important thing to teach to a new developer?

The New Release Pattern

Are you on Update Subscription for RAD Studio?

You are?  Great.  Wise move.

You aren’t?  Why not?

We are very interested in you being on Update Subscription — so much so that you pretty much have to be when you upgrade.  We do this because Update Subscription is really great for you, and not bad for us, either.

It is great for you because you pay less over time.  It is great for you because you always have access to the latest and greatest versions and features.   It is great for you because you can budget annually for your software development tools.

And it is great for you because it incents us to release software when it is ready, and no sooner.  Because we no longer have to wait a whole year or more to release new features (as we did previously without Update Subscription), we can more gradually release features when they are ready.  We don’t have to push a feature to make a date because we know that there’s another date not too far off where we can ship that feature. We don’t have to pile a bunch of features into a single release to make it sound “big”.

For instance, C++ for Linux is proving to be a bit more challenging that we thought.  We originally planned to release C++ for Linux with the 10.2 (Godzilla) release.  But we don’t have to, and so we aren’t.  Instead, we are going to get Delphi for Linux in your hands as soon as possible, and then get C++ for Linux in your hands a bit later, when it is ready.  You get quality software sooner, and later.  We ship Delphi for Linux now, and then in a few short months, we ship C++ for Linux in the 10.2.1 release.

Okay, a little terminology.  Because of the fact that we can — and will — ship new features in all of our releases, we are going to stop  using the word “Update” and start using “Release” for all of our, well, releases.  Why?  One reason is because we find that many customers think of an Update as bug fixes only.  That isn’t true, and we don’t want to give that message by using the word that has meant that in the past.  Another reason is that “Release” connotes newness, and that’s the message we want to send.  So from now on, it’s Releases, not updates.  Everything we ship will be a release.

We can do this because you all are on Update Subscription.  Why is that?  Suffice it to say that it has to do with arcane accounting rules.  I know — that sounds lame, but it’s true.  Trust me, you don’t want to know the details.

Because of Update Subscription, we can now do two or three (or more if we want) releases a year.  We can deliver a constant stream of new features and quality fixes.  We are committed to making that upgrade path as smooth as possible.  We want you to be happy with this steady stream of goodness because we want you to renew your subscription when the time comes.  From now on, we make our money by continuously delighting you, and thus we are highly incented to do that.  That means quality and valuable new features on a steady and continuing basis.  It means we can ship no code before its time.

We have lots in the pipeline to keep you delighted.  We can ship these new features when they are ready.  That’s big win for everyone.

MultiPaste in the RAD Studio IDE

Late last year I had the honor of speaking with Cary Jensen at the Delphi Developer Days events. It was a great opportunity to meet some new folks, folks I’ve known online for years, and to present some useful information about Delphi.

One of the presentations we gave was entitled “Delphi Tips, Tricks, and Techniques”.  We showed a bunch of cool shortcuts and other things. It was fun and well received.

So we were in Copenhagen for our second DDD event, and my good friend Jens Fudge comes up to me after I gave my Tips and Tricks and says that I should add MultiPaste to the talk.

Of course, much to my embarrassment, my response was “What is MultiPaste”.  Well, Jens showed me, and now I’m about to show you.  (To make myself look a little better, when I presented MultiPaste in Frankfurt, no one there had heard of it either……)

Okay, so what is MultiPaste?  It’s a feature that came along with the Castalia acquisition, and one that clearly hasn’t had enough attention paid to it.

Ever had a problem like this?  You have some SQL, say:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

and you want to add that SQL to the SQL property of a query at runtime.  You end up either having to turn this into a string like this:

'SELECT Customers.CustomerName, Orders.OrderID' +
'FROM Customers' +
'FULL OUTER JOIN Orders' +
'ON Customers.CustomerID = Orders.CustomerID' +
'ORDER BY Customers.CustomerName;'

or manually in each line like this:

FDQuery1.SQL.Add('SELECT Customers.CustomerName, Orders.OrderID');
FDQuery1.SQL.Add('FROM Customers');
FDQuery1.SQL.Add('FULL OUTER JOIN Orders');
FDQuery1.SQL.Add('ON Customers.CustomerID = Orders.CustomerID');
FDQuery1.SQL.Add('ORDER BY Customers.CustomerName;');

Both choices are a big pain in the butt to code.

But not anymore.  MultiPaste makes this kind of thing pathetically easy!

Let’s choose the second option above — the manual adding of the SQL code one line at a time.

First, copy the SQL to your clipboard.  This is important — the text that you want to manipulate must be on your clipboard.

Next, place your cursor where you want the resulting text to be inserted.

Then, select Edit|MultiPaste  from the IDE’s menu  (You’ll need to have a code window open for the menu item to be active).  You’ll see this:

Now, from there, you can type this in the first edit box:

FDQuery1.SQL.Add('

and then in the second edit box, type:

');

You should then notice that the main memo box is changing the text you have on your clipboard by adding the contents of the first edit box to the beginning of each line, and the contents of the second edit box to the end of each line.  You should end up with a dialog that looks like this:

Then, hit Ok and the text that you created is inserted at the cursor point.   Pretty cool, huh?

Thus, MultiPaste allows you to avoid a bit of the time consuming and tedious coding that we all have done at one time or another.

Just another great feature to make your IDE a bit more productive.

Flotsam and Jetsam #117

  • I can’t seem to find a WordPress theme that I like.  Look for the theme to change a bunch while I play around with different ones. 

  • I’ve started a new blog over on the Embarcadero Community site.  It will be for more “official” stuff that I post about.  You can follow me there as well as here.  Don’t worry, as you can see, Flotsam and Jetsam is still alive and well.
  • Delphi Developer Days is rapidly approaching – and I have a lot of work to do.  There are still a few seats available for Chicago, Baltimore, and Frankfurt.  It’s not too late – we’d love to see you there.  Cary Jensen and I will be doing a session live from our Chicago event at CodeRage XI. 

  • Speaking of CodeRage, it is also not too late to submit a paper to CodeRage XI.  CodeRage is always a great time, and the perfect opportunity to share with people what you are working on and what you know.  The talks are pre-recorded, so, it’s a perfect venue for that developer who has never presented at a conference, but wants to give it a try.   I encourage you to submit a talk even if you are just thinking about it.  What could go wrong? Nothing, that’s what. Smile
  • I’ve posted twice now on RAD Server – once here and also with my first post on my new blog at the community site.  I’d really like you to give it a look.  I really think it can solve the problem that many of you are having: How to modernize your codebase.  It really can do that.
  • Berlin Update 2 – Anniversary Edition is coming soon.  There’s a webinar about it on Thursday if you’d like to attend one of the two time slots. This update represents our new approach to releasing software.  Fewer major feature releases and more smaller, focused feature releases.  Unlike previous updates, Update 2 – Anniversary Edition contains new features.  It represents our commitment to making your Update Subscription an ongoing and valuable asset.

What is RAD Server and How You Can Use It?

I’m digging the new job. Lots of interesting things going on. Lots of great plans.

Now, you may not realize it, but I’m the Director of Product Management for all the Embarcadero products,  including a very cool product named RAD Server.

Many of you may have heard of RAD Server, but aren’t exactly sure what it is or why you’d want or need it. Well, read this blog post, and you won’t wonder anymore.

At its root, RAD Server allows you to build REST Server APIs with Delphi and C++Builder. You can read up here on what, exactly, REST is.

REST is beautifully simple. It functions on the notion that the four operations of the HTTP protocol – GET, POST, PUT, DELETE – correspond quite closely to the four CRUD operations – CREATE, READ, UPDATE, and DELETE. REST (along with JSON) has to a large degree taken over what SOAP and Web Services do/did.

So RAD Server accelerates building modern REST applications, services, and micro-services with Delphi and C++ Builder. This allows you a terrific amount of flexibility. First, you can easily build a back-end for a mobile application. RAD Server can provide a JSON-based REST API that your mobile application can use to manage all its data needs. The “heavy lifting” gets done by RAD Server, and the mobile application deals entirely with JSON. Nice.

In addition, because it uses the industry standards of REST, you can build any client front-end that you want for your RAD Server application. Any tool that can consume JSON via HTTP can be used to build a RAD Server client. PHP, Javascript, Angular, C#, whatever – doesn’t matter. As the graphic below shows, you can leverage almost anything to consume a RAD Server service.

image

And of course, you can build a very nice REST client using the tools in RAD Studio.

Leverage Delphi and C++Builder

But the real power comes in that you can write your code in Delphi or C++Builder. It’s pathetically easy to create a powerful set of REST API endpoints using a RAD Server plugin built with Delphi. You have total control over the URLs and the results of those URL requests. You can use FireDAC to access your favorite backend database. You can, literally, build any REST service with the full power of RAD Studio. Another cool thing – it’s naturally really easy to leverage your existing code base and transform it into a REST API.

Built-in Services to Get Up and Running Fast

But wait, there’s more! RAD Server includes a full-featured set of built-in core services to power application back-ends, meaning that you don’t have to build any of them yourself. Such core services include User Directory services, Authentication, and Access Control, Push Notifications, JSON data-storage, etc. These services are all ready to go right out of the box.

REST API applications are different than the typical Client/Server application. You’ve heard me ranting about loose coupling for years now. Well, there’s no looser coupling than a thin REST API serving up JSON. Separating business logic from the client is a natural as falling off of a log. Basically you are building a different form of a multi-tier application. Thus, RAD Server is a great complement to DataSnap by providing another, industry standard way to build multi-tier applications.

Want to get started? RAD Studio Enterprise includes a test version of RAD Server that allows you to build RAD Server applications via packages.  It’s very easy to get going. 

A Simple Use Case

One of our customers had a client server app for order management. In its old form, a separate server was installed at every store. The development team used RAD server to re-architect the front-end with a Javascript Angular web-based client and the back-end with RAD Server.   In only three months, they had a robust application that can service a host of new stores with minimal infrastructure investment. At first, they were considering a costly parallel Java development that was going to take over six months and require a whole separate team. Want to find out more about this customer? Watch this great video by our partner Malcolm Groves of CodeInsight.

Conclusion

There never has been a better time to move to a multi-tier architecture that separates your concerns and makes your applications both easier to maintain and more flexible. RAD Server allows you to migrate existing code to a more robust, modern architecture using REST APIs. Keep your eyes peeled for a Webinar covering all of this in the coming weeks.

In addition, we’re going to be running some pretty compelling sales programs that will make it easier than ever to get started with RAD Server. All in all, RAD Server is a bargain and you should give it a closer look.

Flotsam and Jetsam #116

  • The Starter Version of Delphi is currently 100% off.  I.e.  Free as in beer.
  • The proper use of comments is to compensate for our failure to express ourselves in code.” – Uncle Bob Martin
  • I continue working hard on my materials for Delphi Developer Days.  If you haven’t signed up yet, do it.  I’m really looking forward to seeing you all there.
  • I’m really looking forward to attending TechBash 2016 at the end of the month here in the Poconos in Pennsylvania.  Not only will there be a great lineup of speakers and a great venue, there will be some old friends there that I’m looking forward to seeing again.  It’s nice to have a world-class event like this so close to where I live – it’s so close that I’m driving, as well as taking advantage of the water park.  🙂
  • And while we are on the topic of conferences, I’ll be at Philly CodeCamp this year as well, on October 21-22.  It’s at the Microsoft Malvern office.  Friday is a pay-for-it all day session, where Saturday is hour long talks and is totally free.  If you are in the area, you should go.  It’s always been very good, and they give away a lot of prizes.
  • The new book is drawing closer.  I know I keep saying that, but I only so because it is true.  It will finish sooner rather than later.  As always, you can sign up to  be kept abreast of things.

Delphius and Basicus Stop for the Night

Delphius and Basicus were on a long journey, requiring several days travel.

They stopped for the night at a campsite beside the trail.  It had obviously been used as a campsite previously, as there were many signs of previous inhabitants.

Delphius and Basicus made camp and slept comfortably, for their journey was long and they were tired.

In the morning, Delphius began cleaning up the remains left by previous users of the site. 

“Why are you cleaning up another’s mess, Delphius.  They should have done it.  Why are you doing it?” said Basicus.

“Because someone else will want to use this site in the future, and we should do what we can for those future residents,” said Delphius.  “Those residents might even be us on the return journey.”

Delphius and Basicus continued on their journey.  Basicus remained puzzled, but Delphius knew the wisdom of his actions.