New Book Pricing

Hey, folks, I have some good news — I’ve dropped the prices on my books all across the board.

This post from a few months ago has been updated with the new pricing.

A few things to note:

These are not temporary price drops — they are permanent.

As always, I am very grateful to everyone who has and will buy my books.

Nick Update

Just a quick update on what I’m up to — you guys have had a few questions.

I have “parted ways” with Embarcadero and am back (for a third time!) at Gateway Ticketing Systems as a Senior Developer.

It’s all good.

How to Buy My Books

First, I want to thank all of you that have bought one or more or my books.  I’m very grateful.

Second, I wanted to post to make sure that everyone knows that I have three books out  and how you can buy them.


Buy in Paperback

Buy in Digital Form

CodingInDelphiCoverFront Buy on Amazon for $24.99 Buy on LeanPub for $24.99, which includes *.MOBI, *.PDF, and *.EPUB
MoreCodingInDelphiCoverFront Buy on Amazon for $29.99


Buy on LeanPub for $29.99, which includes *.MOBI, *.PDF, and *.EPUB
title_page Buy on Amazon for $19.99


Buy on LeanPub for $19.99, which includes *.MOBI, *.PDF, and *.EPUB

Another option, for those that want to buy all three, is to buy them in a digital bundle on LeanPub for $49.99

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:

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:

or manually in each line like this:

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:

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.


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.


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.

Flotsam and Jetsam #115

  • I put up a poll on Google Plus asking what the greatest all time Delphi freeware/open source plugin/framework was.  Thought you might like to vote.
  • Work continues apace as we continue to prepare for Delphi Developer Days.  I’m happy to say that there will be six folks attending in Baltimore from my employer, Gateway Ticketing.  I’m really looking forward to seeing so many Delphi developers from all over the world.  Sign up today if you haven’t already.
  • Remember, the price for the Coding in Delphi Bundle remains at the low price of $54.99 (You can pay more if you want. <g>).   That’s a savings of just over $25 when buying both individually.  Thanks to everyone who has bought the bundle already.
  • Jason Southwell is a friend of mine and a fine contributor to the Delphi community.  His company, Ideal Software, is looking for a Senior Developer.  Sounds like a good opportunity to me.
  • Shameless Plug:  My wife is an artist and writer.  She has a fun coloring book designed for all ages called “Color the Cats”.  Give it a look.
  • My latest book, Dependency Injection in Delphi, is still in the works.  I know I said that a while ago, but it always takes 90% of the time to finish the last 10%, right?

Delphius and Basicus Find a Wall

Delphius and Basicus were walking down a path.  Delphius was a wise software developer with many years of experience.  Basicus, Delphius’ student, had some experience as well, but lacked wisdom and often made foolish errors.

As the two were walking, they came upon a wall blocking the path.  The wall was made of stone and was not high – it could be easily climbed over — and not wide, the brush on either side could be easily walked through.

“What a stupid place for a wall!” exclaimed Basicus.

Delphius considered the wall. 

“Clearly someone put this wall here on purpose,” he said.

Basicus scowled.  “Why would anyone be so dumb as to put a wall in the middle of a path?”

“At the moment I do not know,” replied Delphius.

“I say tear it down!” Basicus cried out.

“One must be very sure about tearing down a wall so carefully constructed,” replied Delphius.  He walked around the wall, through the brush, and on to the path on the other side.

Basicus reluctantly followed.

Delphi Developer Days Agenda

Hey, I’m pretty psyched to do Delphi Developer Days this year.  I always love to travel, and I always love to talk about Delphi, and getting to do both at the same time is pretty great. 

If you haven’t heard, our agenda is out.  We have a general schedule and a description of the presentations.

We’ll be presenting in:

Cary and I will be doing some of the presentations together, and we’ll also break out for separate sessions.  I’m going to be talking about Patterns in Delphi, Unit Testing, and Advanced Language Features.  We’ll also be covering the Debugger, Parallel Programming, and many other interesting topics.

In addition, Marco Cantu will be giving the keynote via Skype and will be available for questions. 

Sign up now as space is limited at each venue. You can also get the early-bird special if you sign up today.   I’d love to see you there.

Flotsam and Jetsam #114

  • Signups are open for Delphi Developer Days.  Remember, the “Very Early Bird” special price ends on August 12, so start planning now.  I love presenting and hanging out with Delphi developers, so I hope you’ll be at one of the events.  Should be a very fun time all around.  And of course, if your company wants to help sponsor the event, then please be sure to contact Cary via the website.
  • RAD Server is the latest “official” product at Embarcadero.  (It previously was known as the Enterprise Management Server and was a feature of high end Delphi SKU’s).  This is a cool tool.  It’s basically an “AppServer” to Delphi as AppServers are to Java Enterprise Beans (or at least as I understand it).  It in effect makes it pathetically easy to build REST APIs.  Microservices are all the rage, and so this is a well-timed release.  I’m definitely going to investigate it.
  • Book Update:  You can find out the basics of my new book here. You can also sign up to get email updates, and help me price it by letting me know what you’d be willing to pay.  Currently the book is being proof-read and is under technical review.  I can’t say for sure when it will be available, but it’s definitely in the “The last 10% takes 90% of the time” stage.  I just realized that I hadn’t covered attributes enough, so I’m going to have to add a section on that. 
  • I simply cannot say enough good things about CodeInsightPlus.  Here’s the one thing I will say. If you value your time even slightly, get it and install it now.
  • This blog post by Marco started an interesting discussion.  For what it’s worth, I stand on the side of proper encapsulation, after having originally been on the other side of the argument.

Delphi Developer Days 2016

I’m quite happy to announce that I’ll be part of Delphi Developer Days with Cary Jensen this year.  I’m honored to be included, as DDD has long been a successful, interesting, and educational event.  I’m joining a list of distinguished Delphi speakers who have participated in the past. I’ve been to DDD a number of times and have always come away pleased that I went, so I’m glad to be on the delivering end this time.

There will be four events this year:

  • Chicago, USA: 14-15 November 2016 Register
  • Copenhagen, Denmark: 24-25 November 2016 Register
  • Frankfurt, Germany: 28-29 November 2016 Register
  • Baltimore, USA: 5-6 December 2016 Register

The complete agenda isn’t set yet, but we’ll get that out as soon as it is ready.  There is an “Very Early Bird” discount  of 25% for folks who sign up before August 12th.

I’m really excited to do these events and so I hope that I see you there.

Book: Dependency Injection in Delphi

My new book, “Dependency Injection in Delphi” is getting close to being published.  It is a deep dive into Dependency Injection and the Spring4D DI Container. 

It’s going to be about 90 pages long or so, depending on the exact size the book ends up being.  I’ll be publishing it first as an eBook, and then soon after in hard cover. 

You can click on the link above to find out more information, including the chapter list.  Please feel free to enter your email address to be notified about it being published, etc. (You don’t even have to let me know your email address if you don’t want to).

My previous two books – Coding in Delphi and More Coding in Delphi – exceeded my expectations, and I’m very grateful to everyone who bought it.  I know I’ll appreciate the support that Dependency Injection in Delphi receives as well.  Thanks as always.

50 Things I Don’t Like

  1. Donald Trump
  2. Heavily coupled code
  3. When people think that Delphi is dead
  4. Pineapple on Pizza
  5. Mean people
  6. Rap “Music”
  7. Not having enough battery
  8. Wires
  9. The New York Yankees
  10. Restaurants that don’t have free wireless
  11. C++
  12. Waiting
  13. Hillary Clinton
  14. Kanye West
  15. Bad grammar
  16. Stop lights
  17. Lima Beans
  18. The Caps Lock key
  19. When Windows steals the focus and your keystrokes go somewhere you don’t want them to
  20. Cleaning the bathroom
  21. Whoopi Goldberg
  22. Little dogs that yap and yap and yap
  23. When people don’t mean it when they agree to a EULA
  24. Tabs in source code
  25. Cold, rainy days
  26. Meaningless variable names
  27. The Lord of the Rings books
  28. May 4th as “Star Wars Day” (Stop talking like Daffy Duck)
  29. Cancer
  30. Mowing the lawn
  31. Delphi’s ‘with’ statement
  32. Cleaning litter boxes
  33. Headphones that tangle
  34. Smugness.  I can take arrogant, but not smug.
  35. Apple
  36. Winter
  37. Software pirates
  38. Being sick
  39. Dress codes
  40. When my team loses
  41. Long meetings
  42. Cauliflower
  43. Global Variables
  44. The Green Bay Packers
  45. Being overweight
  46. Entities that oppose Uber
  47. Badly formatted code
  48. Really spicy food
  49. Cable companies
  50. When my wife is away.