- 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?
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.
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
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('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:
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.
- 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.
- 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.
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.
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
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.
- 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 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.
- 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 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.
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:
- Chicago on November 14 – 15
- Copenhagen on November 24 – 25
- Frankfurt on November 28 – 29
- Baltimore on December 5 – 6
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.
- 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.
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.
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.
- Donald Trump
- Heavily coupled code
- When people think that Delphi is dead
- Pineapple on Pizza
- Mean people
- Rap “Music”
- Not having enough battery
- The New York Yankees
- Restaurants that don’t have free wireless
- Hillary Clinton
- Kanye West
- Bad grammar
- Stop lights
- Lima Beans
- The Caps Lock key
- When Windows steals the focus and your keystrokes go somewhere you don’t want them to
- Cleaning the bathroom
- Whoopi Goldberg
- Little dogs that yap and yap and yap
- When people don’t mean it when they agree to a EULA
- Tabs in source code
- Cold, rainy days
- Meaningless variable names
- The Lord of the Rings books
- May 4th as “Star Wars Day” (Stop talking like Daffy Duck)
- Mowing the lawn
- Delphi’s ‘with’ statement
- Cleaning litter boxes
- Headphones that tangle
- Smugness. I can take arrogant, but not smug.
- Software pirates
- Being sick
- Dress codes
- When my team loses
- Long meetings
- Global Variables
- The Green Bay Packers
- Being overweight
- Entities that oppose Uber
- Badly formatted code
- Really spicy food
- Cable companies
- When my wife is away.
Okay, no cheating now. That is, no running the code until you’ve guessed.
What is the output of this code?
S := nil;
if S is TObject then
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
How sure are you?
Now run it and find out. Were you right?
- The Delphi Community
- Clipmate (written in Delphi, by the way)
- Everything search tool
- NBA Basketball
- My Nexus 5x phone
- Visual Studio Code
- Taylor Swift
- Bruce Springsteen
- Cream Cheese
- Being married
- Being a Dad
- Lonesome Dove
- Taking a nap on Sunday afternoon
- Working at Gateway Ticketing
- The Spring for Delphi Framework
- The Delphi MVC Framework
- Patty Griffin
- Mat Kearney
- Cool Spring days
- Iced Tea
- Raize Components (and yes, I liked them before Embarcadero bought them. 😉 )
- Harry Potter
- Loosely coupled code
- The Minnesota Timberwolves
- The Chrome Browser
- Donating to open source projects
- Raspberry Pi
- Pickled Herring
- Giving presentations at conferences
- Writing code
- The Good Wife
- My Roku
- The Caine Mutiny (The book, not the movie. The movie was terrible)
- Birds of Prey – all kinds
- Black Panthers
- Wood burning stoves.
- I’d like to offer my public and profuse thanks to the Danish Delphi Developers group – and most notably MVP Jens Fudge and his family – for their wonderful hospitality while I was in Denmark presenting at the DAPUG group. I talked for two days and had a great time. They were also kind enough to allow me to bring my 13 year old daughter along, who had a great time and a great experience. It was my third trip there and it’s always a very, very pleasant and enjoyable time. (Hidden secret of the conference: The hotel is magnificent and the food – oh, the food! — is incredible.) Anyway, thanks very much to all involved, and again, to Jens for his always superior kindness and hospitality.
- I seriously think that most people don’t understand Markdown. Markdown is supposed to be human readable and human writable. You aren’t supposed to need a special tool to use it. It’s so simple that you should be able to deal with it just fine in Notepad.
- I was honored to be the MVP of the Week this week. The best part was a chance to chat with my good friend Jim McKeeth on the Delphi Podcast. I don’t think it is posted yet, but I’ll publish the link when it is. I appreciate all the kind words.
- Baoquan Zuo has released a fantastic new IDE tool – CodeInsightPlus. This thing is pure gold. Go out and get it right now. My typing speed easily doubled with this thing, even over regular Code Insight. My favorite feature is when you have a class named “TWidgetDatabaseProcessor” and you type “twdp” and then hit enter and it finds it and completes it. And that just touches the surface of what it will do. Seriously, this is really cool. When you add this to the stuff coming from Parnassus, Source Oddity, and others, it’s a great time for the Delphi IDE.
- In a related matter, Delphi developer David Hoyle has released a very nice and very useful book on the IDE’s Open Tools API (OTAPI). The best part it is actually a free PDF download. Well worth a look. (And David, if you want to actually publish and sell this marvelous book, please let me know. I can make that happen.)
- Not that anyone probably cares, and not to be too much of a martyr, but I’ve quit the Delphi non-tech group. It was just getting so tiring, and I didn’t like how it kind of made me obnoxious. I fully confess I was addicted to reading and posting there. I decided it wasn’t a productive use of my time, and won’t be posting there anymore. Like I said, maybe no one cares, maybe people are happy. All I know is my blood pressure is reduced. 😉 If you want to find me, I’m active on the Delphi Developers Google Plus community.
- Does anyone know what the hell this “Delphi Parser” thing is? Are you getting emails on it? They’ve been sending me advertising emails, and I don’t have any idea who they are or what they do. I do know they win the prize for “The Most Expensive Delphi Tool of All Time.” Am I missing something?
- Have you donated to your favorite productivity tool lately? I just made a humble donation to Test Insight. I really like it, and so I donated. I encourage you to do the same for your favorite tool or framework, whether it be for a Delphi tool or framework, or a general utility, or whatever. If we all started making donations – even small ones – to those folks who make our developing and computing experiences better, well, I think that would be a good thing. Go on, do it right now.
Want to buy both of my books in electronic form? Well now you can get a deal on it – The Coding in Delphi Bundle. Buy the bundle and save $15!
As always, I’m very grateful to the Delphi community for all your support.
- My friends David Millington and Roman Yankovsky have teamed up to offer a Christmas time special. You can buy both of their tools for the price of Fix Insight. What are those tools? Well, David’s tool is Navigator – a powerful, easy to use way to navigate your code. Roman’s tool is Fix Insight – a static code analysis tool. Right now, you can get both for the price of Fix Insight – that’s a $40 in savings. I can vouch for both tools as being very useful and of high quality. Don’t miss this good chance to get two excellent tools at a low price. (While you are at David’s website, be sure to download the excellent and free Bookmarks plugin. And did you know that he has some open source items available as well?)
- ‘Tis the season for Delphi updates. Of course, Delphi 10 Seattle Update 1 is out. It even includes a few new features. It is available for all people on Update Subscription. (For those of you complaining about this, I hate to say it, but you were given plenty of warning and opportunities to get on board.) Dr. Bob reports on two hot fixes that are also available.
- It looks like I’m going to be speaking in Denmark in April at DAPUG’s annual conference. I have spoken twice before, and have always enjoyed my trips there, and the fine hospitality provided by Jens Fudge and his family. I’m looking forward to speaking there again. Not 100% sure what the topics will be yet, but I promise it will be interesting.
- I had a great time at EKON 19 – you should attend next year no matter where you are in the world – and the thing I enjoyed the most was my three hour seminar on Dependency Injection. I covered Dependency Injection in Coding in Delphi, but things have changed in the mean time, and there have been additions to the Spring for Delphi framework that make things even more powerful and capable. So much so, in fact, that I’ve decided to write a book entitled Dependency Injection in Delphi. It will very likely be shorter than my other two books, and I think to start I’ll sell it as an ebook only (MOBI, ePub, and PDF) on Leanpub. It will, however, go into Dependency Injection much more in depth than my two chapters in Coding in Delphi. In any event, you can follow this link and sign up for updates about the book and let me know how much you think I should charge for it. There’s absolutely no time table on this – as you saw above, I have a lot of preparation to do for DAPUG – but I will be working on it. I’ll go with “it will be available later this year”. Again, I’m humbled and grateful by all the people who have bought my books.