The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,861 other subscribers

Archive for the ‘Delphi XE7’ Category

Delphi XE7: The new Tasks / Parallel Computing Library. Like any library, it is not a magic bullet!

Posted by jpluimers on 2015/01/01

In Delphi XE7, Embarcadero introduced a new Parallel Computing Library.

Programmers – human as they are – see this as a silver bullet, thinking using such a library will take away all your performance issues without having to know about solving race conditions.

Boy are they wrong. The library helps you, and makes it easier. Easier in the sens of “less hard”.

So here is my friendly warning:

Parallel programming is hard. Live with it.

This apart from another important warning:

Delphi XE7 is the first version where this library is introduced. So expect bugs and more bugs.

This isn’t to say you should not use a library for parallel computing (the OmniThreadLibrary has been around for a reason), just that it is hard to get these right, even for library writers. They often get it right better and faster than rolling your own.

Read the rest of this entry »

Posted in Delphi, Delphi XE7, Development, Software Development | 5 Comments »

Delphi memory managers – via Tommi Prami G+

Posted by jpluimers on 2014/12/30

There is a nice Delphi memory thread at G+ initiated by Tommi Prami for which I added some links to the memory managers:

  • FastMM (No signs of the Version 5)
  • ScaleMM – Interesting (two versions)
  • SynScaleMM – Fork of the previous
  • SapMM – Just found out about this, but tries to tackle multithreading issue.

More interesting comments (most people seem to favour FastMM, as they can get very good performance out of it even in multi-threaded environments) at There have not been much of the Talk of MemoryManagers lately….

Note there is also TBBMM based on TBB, but it seems unmaintained.

Barry Kelly’s memory manager is based on Boehm-Demers-Weiser GC.

–jeroen

Posted in Delphi, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Software Development | Leave a Comment »

Delphi Cookbook for USD 5 (or EUR 4.80); actually: get any Packt eBook or video for that price – #packt5dollar

Posted by jpluimers on 2014/12/20

Earlie this month, I wrote a review about Delphi Cookbook.

Well: as of last thursday, you can get that for USD 5 (or EUR 4.80, so better get yourself a USA account: just ensure your address is in the USA).

Heck: until januari 6th, you can get any eBook or Video on Packt for USD 5.

Note there is even an x-Mas countdown on the way (with each day a free book that is readable/downloadable for 24 hours).

There’s over 2500+ books to choose from, so I’m grabbing this chance to learn a few things on OpenCV, Scala, and PowerShell.

–jeroen

via: Book review: Delphi Cookbook by Daniele Teti, Packt publishing.

Posted in .NET, CommandLine, Delphi, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Java Platform, PowerShell, Scala, Scripting, Software Development | Tagged: , | Leave a Comment »

Which Delphi extensions to (not) put in version control: Delphi File Extensions – Delphi Programming (via Delphi.wikia.com)

Posted by jpluimers on 2014/12/10

Convenient list to decide what to put in your version control system: Delphi File Extensions – Delphi Programming.

–jeroen

Posted in Delphi, Delphi 1, Delphi 2, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi 8, Delphi x64, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Software Development | Leave a Comment »

Book review: Delphi Cookbook by Daniele Teti, Packt publishing

Posted by jpluimers on 2014/12/01

After speaking on EKON 2014 and ItDevCon 2014, the last month has been extremely busy on both the work and family side of things.

So it took longer to write my review of the Delphi Cookbook by Daniele Teti, Packt publishing (ISBN 978-1783559586).

Before the review, first two ways to see for yourself if you’d like the book:

Daniele Teti has a Table of Contents on the page where he introduced his book, but that ToC is a bit poorly formatted, so I included a better formatted one below.

Some other reviews of the Delphi Cookbook also make an interesting read (I read them after writing my own):

Before the review a disclaimer. I bought the eBook version before Packt publishing asked for reviewers. They sent me a paper copy for free (which somehow took 2 weeks to arrive). I read about 25% of the book before the two European Delphi conferences, and the rest over the last two weeks.

The Review

I’ll try to keep this to the point, as too much detail would be killing. And I’m not writing a book here (:

So lets start with what I like:

  • Writing style: most of it is very pleasantly and encouraging to read.
  • Structure
    • introduction – short description of the aim
    • how to do it – step by step explanation to get an example working
    • how it works – explaining the crucial parts of the example
    • there’s more – revealing more details and providing background information
  • Explanation where recipe deviates from best practices
  • Mix of topics
  • Fresh and surprising examples
  • Building the examples on (relatively) new language and library features without distracting the examples: I was positively surprised about every other example how well Daniele did this
  • For Delphi features in the book introduced in a specific Delphi version mentioning this version
  • Keeping a variety of topics throughout the book, while still building up on previous sections during the book

I want to stress the last: Daniele Teti did an excellent job on this.

When writing a book or teaching material, it is hard to strike balances between the kinds and diversity of topics, the depth and order of the topics, and choosing between what to cover and how to cover it.

The way the chapters a built together with a variety of interesting topics per chapter, a great mix of chapters, and the various topics building (but not too much relying) on previously covered topics is really great. The whole book shows that Daniele is a great teacher. Well done.

Then a few things I dislike:

  • Chapter 1
    • The first chapter has a few VCL topics that could have been explained better. I have the feeling those were the initial writing chapters, and Daniele and the reviewers were still settling down on a routine. Shortly after that, the book gets much much better: like hearing Daniele doing a talk on a conference.
  • Code formatting
    • Especially in the eBook, the code is poorly formatted. There are enough tools to to a properly formatted example code export from Delphi, so this should have been done much better.
  •  Proofreading
    • There is still a quite a bit of non-English idiom and sentence structure in the book. This can be distracting. The reviewers and editors should have done a better job on this.
  • Security
    • Even though explaining SQL injection, the book does not talk about any other kinds of injection. Since there are many examples of clients and servers passing parameters by strings, there is virtually no error checking. This is bad, as exactly those kinds of parameter passing can make for very vulnerable applications.
  • Hard coded Delphi XE6 links
    • most of the Embarcadero web site allows you to link to topics in a non-Delphi version speficif way
  • Some “there’s more” portions are a bit thin
    • I know this is a trade off: so few pages, to much to cover. But still (: Maybe Daniele finds time to write a series of blog posts on the “there’s more” portion.
  • Cleanup without doing try..finally
    • Way too few programmers value the try..finally construct (Delphi, C#, and many other languages) so this should be the cornerstone of every resource cleanup example.

The dislikes are minor compared to the likes, so here is the…

Verdict

I didn’t buy the book by accident: knowing the presentation and teaching style of Daniele, I was expecting a nice mix of topics explained in a light and fun way. The book surpassed those expectations by far.

So any Delphi programmer should buy this book. If not for using right now, then for getting some ideas, and reading the various topics later.

Below some suggested combinations for using this book various Delphi audiences.

Audiences

Starters

Buy this book. It gets you inspired, even if only some of the topics are suited for real beginners. Then get the books below, read them and get back to the Delphi Cookbook for more inspiration:

Average Delphi users

Buy this book. Consider buying Coding in Delphi by Nick Hodges.

Advanced Delphi users

Also read Coding in Delphi by Nick Hodges.

Delphi gurus

I know few people that master all Delphi topics well (I’m not one of them: especially on the mobile side I’ve still a lot to learn). Even for gurus, I think this is a nice book, especially considering the price.

–jeroen

Table of Contents

Chapter 1: Delphi Basics

  1. Changing your application’s look and feel with VCL styles and no code
  2. Changing the style of your VCL application at runtime
  3. Customizing TDBGrid
  4. Using the owner’s draw combos and listboxes
  5. Creating a stack of embedded forms
  6. Manipulating JSON
  7. Manipulating and transforming XML documents
  8. I/O in the twenty-first century – knowing streams
  9. Putting your VCL application in the tray
  10. Creating a Windows service
  11. Associating a file extension with your application on Windows

Chapter 2: Become a Delphi Language Ninja

  1. Fun with anonymous methods – using higher-order functions
  2. Writing enumerable types
  3. RTTI to the rescue – configuring your class at runtime
  4. Duck typing using RTTI
  5. Creating helpers for your classes
  6. Checking strings with regular expressions

Chapter 3: Going Cross Platform with FireMonkey

  1. Giving a new appearance to the standard FireMonkey controls using styles
  2. Creating a styled TListBox
  3. Impressing your clients with animations
  4. Using master/details with LiveBindings
  5. Showing complex vector shapes using paths
  6. Using FireMonkey in a VCL application

Chapter 4: The Thousand Faces of Multithreading

Synchronizing shared resources with TMonitor
Talking with the main thread using a thread-safe queue
Synchronizing multiple threads using TEvent
Displaying a measure on a 2D graph like an oscilloscope

Chapter 5: Putting Delphi on the Server

  1. Web client JavaScript application with WebBroker on the server
  2. Converting a console service application to a Windows service
  3. Serializing a dataset to JSON and back
  4. Serializing objects to JSON and back using RTTI
  5. Sending a POST HTTP request encoding parameters
  6. Implementing a RESTful interface using WebBroker
  7. Controlling remote applications using UDP
  8. Using App Tethering to create a companion app
  9. Creating DataSnap Apache modules

Chapter 6: Riding the Mobile Revolution with FireMonkey

  1. Taking a photo, applying effects, and sharing it
  2. Using listview to show and search local data
  3. Do not block the main thread!
  4. Using SQLite databases to handle a to-do list
  5. Using a styled TListView to handle a long list of data
  6. Taking a photo and location and sending it to a server continuously
  7. Talking to the backend
  8. Making a phone call from your app!
  9. Tracking the application’s life cycle

Chapter 7: Using Specific Platform Features

  1. Using Android SDK Java classes
  2. Using iOS Objective-C SDK classes
  3. Displaying PDF files in your app
  4. Sending Android intents
  5. Letting your phone talk – using the Android TextToSpeech engine

–eof–

Posted in Delphi, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Software Development | 5 Comments »

How do I test an interface? Should I even do that? | Software on a String

Posted by jpluimers on 2014/11/20

Please someone add the Software on a String blog to DelphiFeeds (:

Great article on testing implementations of interfaces in a generic way. With examples in NUnit and DUnit.

How do I test an interface? Should I even do that? | Software on a String.

And then Stefan Glienke made a great comment at https://plus.google.com/u/0/+MarjanVenema/posts/Dgb8WADLwXZ making the DUnit implementation even easier:

But even if you go without that extra base class the cool thing is that you don’t need to restrict your classes to be a TInterfacedObject but specify the interface they need to implement (yay, compiletime type safety) and then you can get rid of the Supports call and directly assign the result of the ctor call to the sut variable.

–jeroen

Stefan’s code:

Read the rest of this entry »

Posted in Delphi, Delphi 2007, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Software Development | Leave a Comment »

JCL & JVCL – What are the Real Gems in these Tool Sets

Posted by jpluimers on 2014/11/13

Steve Maughan posted a great question on G+ last week:

JCL & JVCL – What are the Real Gems in these Tool Sets

The resulting thread is full of people answering with their favorite JVCL and JCL gems.

Recommended reading!

–jeroen

via JCL & JVCL – What are the Real Gems in these Tool Sets I’ve just installed JCL….

Posted in Delphi, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi x64, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Software Development | 1 Comment »

Delphi: removing “unused” units from uses lists cannot be fully automated (via: SO)

Posted by jpluimers on 2014/11/11

One of the things a lot of Delphi users want is to be able to automagically remove unused units from their uses lists and projects.

The short answer is: you can’t.

The long answer starts with: you can’t fore a number of reasons.

Similar reasonings hold for many other development environments. Plain Windows EXEs and DLL dependencies. .NET projects and assembly dependencies, etc.

Initialization/Finalization dependency

The first reason is that each unit (module, assembly, or other dependency) can contain global code to be executed at unit start/load or finish/unload.

So even though you do not reference anything inside that unit, the initialization and finalization sections can be run.

Removing the dependency from your units and project, kills that functionality. And might break all sorts of things.

Load order dependency

Sometimes you have subtle load order dependencies of units. Those should be rare, and if they are there, should be enforced by the affected units themselves. But everyone knows those subtle dependencies are more often a by product not enforced by anything than coincidence.

So if you start removing references, the load order might change, and subtle bugs may occur.

In other words: test, test, test and test your codebase before and after removing unit references from uses lists.

Parsing

If you understands the dependencies of initializtion/finalization or load order, you will get interested to know what units are actually being used.

The ultimate source for this would be the Delphi compiler. Bad luck here: you cannot use it as the IDE and command-line interfaces don’t offer a hook to it to do just this.

So you need alternative parsers that can help out. The answers to How to remove unused units from all source files on Delphi XE2 describe a few and they all have the same drawback: they are not the Delphi compiler, so they are a rough approximation of what the compiler would do.

And even if the approximation would be perfect, they all suffer from the same thing the compiler suffers from: you can only have one set of conditional defines, platforms, etc at the same time.

There is lots of code for which the usage is conditional, but where the uses list does not reflect this.

Fazit

Optimizing uses lists to eliminate unused units seems a simple thing at start, but isn’t.

The best way to keep those optimized is to prune them while developing. So if you remove code, try to remember cutting down the uses lists by hand.

And then test, test, test and test your codebase.

–jeroen

via: ide – How to remove unused units from all source files on Delphi XE2? – Stack Overflow.

Posted in Delphi, Delphi 1, Delphi 2, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi 8, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Software Development | 8 Comments »

Windows .RES/Resource editors

Posted by jpluimers on 2014/11/07

While researching the manifest problem I will post about next week, I made a short list of free Windows Resource Editors:

All other resource editors I found were not free, and someof them not maintained for an even longer period than the free ones.

–jeroen

Posted in Delphi, Delphi 2, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Power User, Software Development, Windows, Windows 7, Windows 8, Windows Server 2000, Windows Server 2003, Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2, Windows Vista, Windows XP | 4 Comments »

ITDevCon and EKON session materials on Delphi Unit Testing + Build Automation and Continuous Integration on-line

Posted by jpluimers on 2014/11/06

The last couple of weeks I taught two sessions at both ITDevCon 2014 in Milano, Italy and EKON 2014 in Köln, Germany.

The EKON materials are slightly more up to date and elaborate (sessions there were 75 minutes), so below are all the links.

Notes:

  • I’ve switched to Markdown for presenting as that is very version control friendly
  • GitHub very good at handling relative links from your Markdown files to other resources, that I’ve switched the Conference repository to GitHub from BitBucket.
  • Somewhere over the next few months, the BeSharp.net repository will convert from Mercurial to Git and also move to GitHub.

Read the rest of this entry »

Posted in Delphi, Delphi 2007, Delphi 2009, Delphi 2010, Delphi x64, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Development, Software Development | 1 Comment »