#2 “dorm, the Delphi ORM” bullettin

Uncategorized, dorm 3 Comments »

This is the second post regarding a fast update on the last changes to the dorm project in terms of management and code.

  • Welcome to 2 new contributors: Marco Mottadelli and BraveCobra (this is the full list http://code.google.com/p/delphi-orm/people/list)
  • Added 2 new PersistentStrategy for MSSQLServer based on dbExpress (the 1st use the Embarcadero dbExpress driver, while the 2nd use the DevArt dbExpress driver)
  • Added another PersistentStrategy for MSSQLServer based on ADO (so also Delphi Professional users can use dorm with MSSQLServer)
  • The new mapping strategy is under development. There will be “3 levels” of mapping: Config File, RTTI Attributes and “Conventions Over Configuration” (CoC) (do you wanna check the code in dev branch? Click here)
  • Added more unittests
  • Roadmap updated
  • Introduction to dorm, now is a PDF document
  • The config file has been splitted in “Persistence” and “Mapping” for a more flexible configuration
  • Added packages (Thank you BraveCobra)
  • Added MappingCreator. Now you can create the mapping file using an existent database.
  • IWrapperList (a duck typed list) now is used EVERYWHERE! You can use whatever list from whatever library you want to use. The list must have only a specific methods named as following: Add, Clear, GetElement/GetItem, Count
  • Added FillList methods
There are plenty of new features still to come. Stay tuned!

#1 “dorm, the Delphi ORM” bullettin

"The Delphi ORM" 1 Comment »

This is the first post regarding a fast update on the last changes to the dorm project in terms of management and code.

  • Welcome to 2 new contributors: mrbar2000 and magnomp (this is the full list http://code.google.com/p/delphi-orm/people/list)
  • Added a PersistentStrategy for SQLite.
  • New Google Group related to dorm. Post your questions, comments and request here!
  • Added support for Generics Collections. No more needs of TdormCollection. You classes are completely decoupled from the framework.
  • A brand new mapping strategy is under development. There will be “3 levels” of mapping: Config File, RTTI Attributes and “Conventions Over Configuration” (CoC) (do you wanna check the code in dev branch? Click here)
  • Added more unittests
  • Roadmap updated
  • Initial support for MS SQLServer in a development branch (Thanks to Claudio Regonat)
There are plenty of new features still to come. Stay tuned!

Do you wanna see an enormous potential tool? Here’s the pascal for Java and Android

Programming 15 Comments »

Yes, this is very cool. I’m not a Java hater, in terms of language (and I dont want to start a language-war), but some Java features, IMHO, are a bit uncomfortable for me.
However, Java is very powerful and there are an enormous amount of good open source project for Java. So, seeing java libraries used in simil-pascal code (is not Delphi’s Pascal, but enough similar), is nice. In this way, you can use all the java libraries in Pascal!
I’d like to have this integration in Delphi IDE too with a good designer for Android activities.

I’m testing Oxygene for Java (form RemObjects) for a couple of things, specifically Android related.
This is my first console project in Oxygene for Java, just to see some code.

Oxygene for Java - Simple console app using specific Java libraries

Oxygene for Java - Simple console app using specific Java libraries

IMHO there is an enormous potential for the Delphi developer and for all the developers that need a unique language to do server, mobile and native ultra fast app.

I dream to have this technology into the Delphi IDE.

Duck Typing in Delphi

"The Delphi ORM", Delphi XE2, Programming, Uncategorized 8 Comments »

During a new dorm feature development, I’m faced a nice problem:

I want to have a generic access to a “kind” of list

Let’s say:

  1. procedure DoSomething(Obj: TMyListType);
  2. begin
  3. end;

But, I want to have that generic access without a Layer Supertype object, because I need to be able to use objects from other libraries or 3rd party. In this case traditional polimorphism is not usable, so I’ve opted for an interface…

  1. procedure DoSomething(MyIntf: IMyListInterface);
  2. begin
  3. end;

Cool, but I want to have that access without any change to that object. So implement an interface is not a viable solution. This is particulary true because the generics data structure in Delphi do not implement an interface. Will be nice to have a fully interfaced list and dictionaries in a future Delphi version.

So, how I could implement a generic access to a generic list?

  1. procedure DoSomething(MySomething: ???);
  2. begin
  3. end;

However, operations on that list are few and well known, so I’ve opted for a “DuckTyping“.

Introducing The Duck

Introducing The Duck

The name of the concept refers to the duck test, attributed to James Whitcomb Riley, which may be phrased as follows:

“When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.”

So, in my case, I’ve created an Adapter object wich adapts the external interface (few, well know operations) to the “duck” inside it.

The adapter is useful because I can use the compiler checking that the RAW RTTI access doesn’t allow.

Write an “RTTI adapter” using the new Delphi RTTI, is very simple. This is the code of the class TDuckTypedList that allow to use any object as a “list”. How I can define that the object is actually a list?

The criteria is:

If the object has
- An “Add” method with one parameter of type TObject (or descendant);
- A “Count” property;
- A “GetItem” method that have an integer parameter and return an object;
- A “Clear” method;
then, that object is a list.

So I can write the following:

  1. DuckObject := TDuckTypedList.Create(Coll);  //the adapter
  2. for x := 0 to DuckObject.Count - 1 do
  3.   DoSomething(DuckObject.GetItem(x));

I’ve done some speed tests comparing this way to the classic static way, and the speed is almost the same because the RTTI lookup is cached in the constructor of the adapter. So, so far so good.

This solution is already in use inside the dorm code in a feature branch.

Full code is available in the dorm SVN

Any comments?

dorm, “The Delphi ORM”, officially published at ITDevCon

Projects, Uncategorized, dorm 10 Comments »

As all the attendees have seen, at the last ITDevCon, I’ve officially published dorm as an OpenSource project.

dorm, The Delphi ORM

dorm, The Delphi ORM

You can find the project on google code: http://code.google.com/p/delphi-orm/

An introduction to dorm is available on google docs.

dorm begins as a my personal project more than one year ago, and now is sponsored by bitTime Software that offers custom development, consultancy, mentoring and so on.

Why dorm?

These are my personal reasons of because I’ve started to write dorm:
I WANT an ORM for Delphi… but:
I dont want (or I cant) change my database
I want persistence ignorance
I want to access to the «metal»
I want to persist PODO
I don’t hate SQL, but I know that 90% of it is boilerplate and errors prone

First example

Insert and retrieve object with dorm

Insert and retrieve object with dorm

You can persist anything you want.
bitTime actively use dorm, so it’s continuosly updated and evolved.

Repeat, you can find the project on google code and an introduction to dorm is available on google docs.

Let me know what do you think about.

Do you need an ORM like dorm in Delphi?

ITDevCon 2011, recap

Delphi XE2, Embarcadero, Events, ITDevCon, ITDevCon2011, Programming, Uncategorized No Comments »

Last Friday ended the third edition of ITDevCon, the European Conference on Delphi and its related technologies.
ITDevCon this year was even bigger and funny.
There have been more present, more sponsors, more speakers, more topics and a lot of people with the desire to learn new things and improve their every day work.

A special thanks goes to all the speakers who participated and the sponsors who have contributed their support to make this conference a major event for the European community Delphi.

I hope that the content and the organization is liked to you at least half of how much it is liked to me.
We are organizing slides, videos and examples for each speech to put it all on-line available to participants at the conference as soon as possible. You will receive an email informing you of how to download all the material available.
In the coming days, on the conference website (www.itdevcon.it) we will post all the pictures we have done in these three days.

If you have any photos that you want to see published, send them to me, we’ll publish it on the official website.

Some friends (and speakers) already blogged about the conference:

DavidI
http://blogs.embarcadero.com/davidi/2011/10/24/41413

Paweł Głowacki
http://blogs.embarcadero.com/pawelglowacki/2011/10/30/39392

Primoz Gabrijelcic
http://www.thedelphigeek.com/2011/10/itdevcon-2011recap.html

Marco Cantù
http://blog.marcocantu.com/blog/itdevcon2011_summary.html

And now, Daniele Teti :-)

ASAP I’ll publish the slides of every speeches.

If you want to see the tweet about the conference, you can go here.

Here’s some photos from the conference.

During the “Country Evening” some of us have been singing with the good “Tex Roses” friend (an italian country band). Probably there are at least 15 video documenting my “performance”!

Here’s the video recorded by Primož (the Delphi Geek)

I thank again all those who have spoken and all those who have attended to ITDevCon.
See you next year.

– Daniele

App Android ITDevCon2011 disponibile sul Market (ITALIAN)

Android, Delphi XE2, ITDevCon, ITDevCon2011, RAD Studio XE2, bit Time Software No Comments »

Manca solo una settima all’inizio di ITDevCon2011. Per permettere a tutti gli iscritti (e far decidere chi è ancora indeciso) di sfruttare al meglio i due giorni di intensa formazione, abbiamo appena pubblicato l’applicazione ITDevCON2011 sul’Android Market.
Trevete il programma completo della conferenza, i profili degli speaker e informazioni sugli sponsor.
Inoltre, potrete definire i vostri speech preferiti in modo da essere avvisati subito prima dell’inizio dello speech.
Potrete votare e commentare ogni speech. Potete commentare da subito inserendo le vostre aspettative per lo speech o alcune delucidazioni sul contenuto. Il voto invece sarà possibile solo a speech avvenuto.

Dal punto di vista tecnico, questa applicazione Android utilizza un servizio REST scritto con Delphi utilizzando DataSnap e i Mobile DataSnap connectors per Android.
Per chi fosse interessato al “Making”, durante la conferenza potrà assistere allo speech di Salvatore Sparacino che illustrerà i vari step dello sviluppo e le soluzioni tecnologiche adottate.
Per definire il vostro profilo, votare e commentare, dovrete utilizzare il codice fornito al momento dell’iscrizione. Se non siete partecipanti, o ancora non vi è arrivato il codice di accesso, potete utilizzare l’applicazione come “anomymous”. In questo caso non potrete salvare i vostri speech preferiti Né votare o commentare.

Dashboard


La time table

Speaker details

Dettagli dello speaker (in questo screenshot, DavidI)

Il link da dove installare l’applicazione è il seguente:
https://market.android.com/details?id=it.bittime.itdevcon2011

Happy ITDevCon2011

ITDevCon2011 Android App

Android, Delphi XE2, ITDevCon2011, Uncategorized No Comments »

In less that a week, ITDevCon2011 will begin. To allow all members (and to let decide who is still undecided) to take advantage of the two days of intense training, we have just published the application ITDevCON2011 on the Android Market. You’ll find full conference program, speaker profiles and information about the sponsors.
In addition, you can define your favorite speeches in order to be alerted immediately before the start of the speech.

You can vote and comment every speech. You can comment now by entering your expectations for the speech or some clarifications on the content. The vote, however, is allow only after the speech.
From a technical standpoint, this Android application uses a Delphi DataSnap REST service and the DataSnap Mobile Connectors for Android.

For those interested in the “Application Making Of” during the conference may attend the speech of Salvatore Sparacino illustrating the various steps of development and the technological solutions adopted. Very cool! Salvatore will talk about a REAL app, not only a demo!

To define your training profile, add rates and comments, you have to use the code provided at registration. If you’ll not attend, or you have not received your access code, you can use the application as “anomymous.” In this case, you cannot save your favorite speeches or votes or comments.

Dashboard


The time table

Speaker details

Speaker details (here DavidI)

The link to install the application is as follows:
https://market.android.com/details?id=it.bittime.itdevcon2011

Happy ITDevCon2011!

ITDevCon 2011 Time Table

Delphi XE2, Embarcadero, Events, ITDevCon, ITDevCon2011, RAD Studio XE2, RADPHP, Uncategorized No Comments »

Yes, it is a bit late, but this year has been really difficult to choose between all the speeches proposals arrived from all over the world.
The new Delphi XE2 version (and the RAD Studio XE2 Suite too) are really full of new cool features and many of the best delphi developers want to show what can be done in Delphi XE2. Great situation!

However, also this year, there will be many talks and many speakers. For the first time there will be 2 plenary sessions with more than one speaker in the main TObject hall. During these sessions all the attendants will be in the same hall and I’m sure that there will be very interesting Q&A time at the end of the sessions.
As usual there will be english and italian speeches. In every time frame you will find a suitable talk for your language.

This year we are glad to have DavidI as a conference speaker. Thanks to be with us David!

As you can see from the time table, there will be many topics, but if you are particulary interested in Firemonkey, LiveBindings, DataSnap and Mobile, you will find a specific sets of speeches about these topics.

In particular:

  • DavidI and Pavel Glowacky will show all the cool stuff available in Delphi XE2
  • Marco Cantù will held an interesting session about Firemonkey development
  • Bruno Fierens will held a 2 parts session about Firemonkey cross-platform component development.
  • I’ll hold 2 sessions about LiveBindings and how to use them with the most popular Data Access Design Patterns
  • Debora Mizzoni (web) and Luca Giacalone (android) will talk about mobile development with RadPHP
  • Salvatore Sparacino will show how to use the datasnap mobile connectors to develop a real-world app
  • and many others on many others topics

This year we’ll have also a “Conference App” very similar to the Google I/O one. With this app you will be able to:

  • Read the time table
  • Set you preferred speeches
  • Read infos about the speakers
  • Comment on speeches
  • Share you comments about itdevcon on facebook and twitter
  • Read infos about our sponsors

This app has been developed using Delphi and the datasnap mobile connectors (for the backend) and an Android device for the frontend. ASAP the app will be published on the Android Market. Here’s some screen shots from the “ITDevCon2011″ android app.

The home screen

The time table with all the speeches infos. The starred ones are your preferred speeches.

Speaker's details

The principal developer of this app (Salvatore Sparacino) will explain all parts (datasnap, the connectors, and the android development) in a specific talk. Are you interested in mobile development using Delphi as backend? If yes, you cannot miss his talk!

The time table is available here.
The complete speakers list is available here.

You can register for the event here.

There are interesting discounts for groups, students and for whom will buy RAD Studio XE2 in these days. If you are interested, contact directly our sales office at dir_comm at bittime.it.

See you in Verona!

In the core of LiveBindings expressions of RAD Studio XE2

Delphi XE2, Design Patterns, Events, ITDevCon, ITDevCon2011, RAD Studio XE2, Uncategorized 5 Comments »

WARNING! I’ve been authorized by EMBARCADERO to write about RAD Studio XE2.

RAD Studio XE2 is full of nice and exciting features. One of the most awaited of them is the LiveBindings.

The LiveBindings is available to the VCL and the new FireMonkey framework and allows to connect a property object to another using an expression and a set of observers.
Let’s say Edit1.Text “is binded to” Person1.Name also in a bidirectional way. The “link” between a property (or a group of properties) and another property can also be very complex.

The following is an example of a complex bind expression that return a value:

  1. "This is a full name: " + Trim(ToUpperCase(FirstName)) + ", " + Trim(ToUpperCase(LastName))

I’ve waited LiveBindings for ages and now they are here!

So, let’s look a deep inside to the core of livebindings expression evaluator,
the TBindingExpression.

The TBindingExpression is an abstract class that allows to evaluate an expression. But, what’s an expression? An expression is a string that return, or not return, a value. You could see an expression as a little function or procedure.
To explain the concept, I’ve build a simple expression interpreter using an XE2 beta version.

It is very simple but shows the power of expression engine.
This is the scriptengine while evaluates a simple arithmetic expression.

The expression engine is not only a “static” evaluator. Using the powerful Delphi RTTI introduced in Delphi 2010, you can also allows the expression to “read” and “call” property and method of your Delphi objects!!

So, now, some code is needed.

As you can see, you can “register” some association between a real object and an alias in the expression. So, if my object are declared as the following:

I can use a expression as the following:

Going further, you can call methods in your expression!

So, if you have methods declared as following:

You can use the following expression:

Obviously, when you link a property to another you should not use dialogs in the expressions, but this feature is VERY powerful.
You can create different expression and use them as a custom calculator for specific business rules. The expressions are strings, so you can store them in a file or in a database and use them as needed. The expression engine is not a complete scripting language, but it can be used (and abused) in a very broad range of situations.

For complex business rules, I hate the classic chain

  1. Data->TDataSet->DBAware

so I usually use a DomainModel that use datasets only to read data.

The LiveBinding allows me to use (for complex business rules) the following chain

  1. Data->ORM->DataObjects->Bindings->VisualControls

This is only an introduction to the LiveBingind engine. ASAP I’ll post other articles about it.

I’ll talk about the livebinding engine at the ITDevCon2011 conference. Will be you there?

RAD Studio XE2 will be officially presented all over the world during the “RADStudio XE2 World Tour”.
You can find the list of all launch events in the RADStudio XE2 World Tour page.

I’ll be a presenter at 3 launch events in Italy and United Arab Emitates.
These are the events where I’ll be (click to register):

  • 19th Dubai, United Arab Emirates
  • 21nd Milan, Italy
  • 22nd Rome, Italy

Stay tuned.

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