Book Review: “ZeroMQ” (PACKT Publishing)

Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Embarcadero, Programming, RAD STUDIO XE 3 Comments »


Some days ago I was contacted by a representative from PACKT Publishing asking me to write a review for their last book about the ZeroMQ library.



In 2009 I was looking for a fast, very fast, messaging system for a complex project and I meet ZeroMQ. At that time there was the 1.x version and I wrote a Delphi wrapper for the C dll that some days later has been included in the official ZeroMQ distribution.

Now, after 4 year since then, I’m using ZeroMQ for a lot of things. I’ve talked about ZeroMQ to the popular ITDevCon (The European Delphi Conference), so I’m very happy to write about ZeroMQ another time.

So, back to the book review…

The book title is simply “ZeroMQ”, but the subtitle explains what you’ll really learn from it: “Use ZeroMQ and learn how to apply different message patterns”.

Yes, this book is really a crash course in ZeroMQ. In about 100 pages, this “small but full of interesting things” book, explains all the most useful message patterns implemented in ZeroMQ. Congrats to Faruk Akgul (the author).

Traditional message queuing systems use a broker. However, ZeroMQ is brokerless. In a brokerless design, applications can directly communicate with each other without any broker in the middle. All the complexity is hidden, and handled, by ZeroMQ. In this situation there isn’t the “single point of failure”. In some cases this architecture cannot be used, but when it can be, you can gain a lot of flexibility, speed with no added complexity.

Let’s give a more  deeper overview for each chapter.

Chapter 1: Getting Started

In this chapter there are some informations about the messaging architectures in general (good for newcomers to the topic) and about ZeroMQ messaging (in particular). Some concepts introduced in this chapter are reused a lot in the rest of the book.

In chapter 1 is introduced the first and the simpler ZeroMQ pattern, the request-replay.

Chapter 2: Introduction to Socket

This chapter starts with a nice introduction to the publish-subscribe pattern and the related filtering (ZeroMQ can filter messages with a very simple “match” pattern). Then, the chapter talks about one of the most interesting patterns when speed is important: the pipeline pattern. While is talking about the pipeline, it explain the ZMQ_PULL and the ZMQ_PUSH socket types. At the end of the chapter, there is an introduction to the Valgrind’s tools suite to detect memory leaks in C/C++ programs. In Delphi can be used FastMM or other similar tools for the same thing.

Chapter 3: Using Socket Topology

In this chapter there is a small introduction to the types of Internet Sockets and TCP. There there is a nice comparison between the “plain” sockets and the ZeroMQ sockets.

At the end, there is an introduction to the CZMQ, a small helper library which lets

C developers to code their ZeroMQ applications easier and shorter. For a Delphi programmer there are a number of ZeroMQ wrapper that makes its use really a snap.

Chapter 4: Advanced Patterns

In this last chapter, are introduced some advanced variation of the previously introduced patterns. Then, there is a nice explanation of some critical situations that could happened in a messaging system. To help the programmer to handle this cases there a number of examples of the ZeroMQ “High Watermark” setting. As very last topic, there is a well known problem, the infamous “slow subscribers in a publish-subscribe pattern”.


The “ZeroMQ” book published by PACKT Publishing is a small but very nice book. Can be very useful to all those people that don’t know about messaging or want add the power of ZeroMQ to their messaging knowledge.

As in every single thing, there are good aspects and bad aspects.

This book is good for an introduction but is not so good for advanced users. There are some other ZeroMQ patterns and features that are not explained at all. However, these patterns are not the most used, or are advanced stuff, so this could not be a big issue.

Considering, the price, the contents and the informative density, is a definitely a good book that can be read, and studied, in few hours and could change your way to do things in everyday programming (messaging are very often not used, or used in a bad way, simply because usually is complex to write and maintain a good messaging system).

One of the more nice features about ZeroMQ is that it can use different transportation protocols. The same library and the same code can be used to do messaging between machines, between processes or between threads in the same process (ipc). As last note, ZeroMQ can handle, without much effort, millions of messages per seconds. If you need speed… consider this.

P.S. I’ll translate and publish on this blog, some of the C examples contained in the book, in Delphi. Stay tuned.

Delphi MVC Web Framework - “Hello World”

Delphi XE, Delphi XE2, Design Patterns, Embarcadero, MVC, RTTI, dorm 6 Comments »

This is the first “Hello World” for my Delphi MVC Web Framework.

program DelphiMVCWebFramework;
  4. uses
  5.   System.SysUtils,
  6.   MVCEngine in 'MVCEngine.pas',
  7.   BaseController in 'BaseController.pas';
  9. var
  10.   mvc: TWebMVCEngine;
  11. begin
  12.   mvc := TWebMVCEngine.Create;
  13.   mvc.AddRoute('/', procedure(Context: TWebContext)
  14.     begin
  15.       Context.Write('Hello World');
  16.     end).Start(8080);
  17.   ReadLn;
  18.   mvc.Free;
  19. end.

Features list (some of them are in the internal roadmap)

  • Completely MVC
  • Addressable with servername/controllername/actionname?par1&par2
  • Addressable with servername/controllername/actionname/par1/par2
  • Can also use anonymous methods as actions for very simple app (in the sample)
  • Really RESTful (Level 3 of the Richardson Maturity Model)
  • Fully integrable into WebBroker and DataSnap
  • Supports multiple resource rapresentations
  • Completely customizable routing using internal formatting or regex
  • Inspired to ASP.NET, Sinatra, Java Spring MVC, Java Restlet
  • Scriptable views support (Pascal, Razor, Lua)
  • Component based
  • Session support
  • ORM support using dorm
  • Classic TDataSet support
  • State server to support real loadbalancing using reverse proxy
  • Can be deployed as standalone (in the example), ISAPI dll and Windows Service
  • Fully support https
  • More to come…
  • This framework is still under development.

    Are you interested in? :-)


    The project is open source and you can fint it here

“DataSnap and Android (Part I)” on BlaisePascal

Android, Delphi XE, Magazines 43 Comments »

Issue no.17 is just published.

In this issue there is the first part of my articles about “DataSnap and Android”.

During this series I’ll show how to write a complete TODO application using Delphi DataSnap Server and an Android thin client.

Have a good reading.

Back from Brazil (all slides and code from the Brasilian Delphi Conference)

Android, Delphi XE, Embarcadero, Events, bit Time Software 54 Comments »

Last week I returned from Brazil where I had been to speak to the Delphi Conference.
The conference was held in St. Paul who, like many Brazilians will be able to confirm, is not a typical Brazilian city.

The warmth of local people has been exemplary. Andreano Lanusse has organized all in a really valuable way.

Besides the excellent food, I was surprised by the number of Delphi developers found: 550! In addition, over 150 people
have not had time to register and were placed on a waiting list. Fantastic.

After the inevitable David and his keynote, there were four simultaneous tracks during the day.

My talk was translated from English to Portuguese.

As imagined, the argument Android and seem to raise much interest in the Delphi community.

It was very nice to have confirmation in the first person to what is present and the large Brazilian community Delphi.

Here you can find all the slides and in my GoogleCode svn repository you can find all the DEMO code.

If you live in italy or can speak in italian language, you might be interested in the “ITDEVCON MOBILE BOOST” (

Stay tuned.


Delphi XE, Embarcadero, ITDevCon, ITDevCon2010, Programming, RAD STUDIO XE, bit Time Software 44 Comments »

This year, the launch of the new RADSTUDIO XE has been really nice. We have met some friends and customers exciting to see the new Delphi features and capabilities.
In the event of Rome there was DavidI too.

The agenda has been the following:

Embarcadero Update + XE and All-Access (DavidI)
+ New Products, Ideas, Projects
+ Delphi64 bit compiler preview

What’s New in the IDE (Marco Cantù)
+ SubVersion
+ BeyondCompare
+ AQTime

New features in the RTL, RTTI (Daniele Teti)
+ Threading
+ Virtual Methods Interceptor
+ RegEx
+ CodeSite Express

Agile Development (Daniele Teti)
+ UML modeling
+ audits, metrics
+ repository
+ unit testing
+ Final Builder

Web, Cloud e Database Support (Marco Cantù)
+ Microsoft Azure Components
+ Deploy in the Amazon EC2 Cloud

What’s new in Datasnap (Daniele Teti and MArco Cantù)
+ Developing DataSnap server (Daniele)
+ DS Authentication/Authorization (Daniele)
+ DS Filters (Daniele)
+ DS RequestFilters (Marco)
+ Using DS from Delphi Client (Daniele)
+ Using DS from PHP Client (Daniele)
+ Using DS from Javascript Client (Marco)
+ Using DS from Android Client (Daniele)

Summary and Q&A

The last DEMO has been an Android APP wich use a REST DataSnap Server built with Delphi. Audience has been very excited about it.

Many attendedees have been very interested in the upcoming ITDevCon ( and for the new courses in the bit Time offers.

Some of the photos are uploaded on Google Picasa. You can see them here.

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in