Delphi | Andreano Lanusse | Technology and Software Development Where Andreano Lanusse talk about technology, software development, programming techniques, databases, games and more through articles, tutorials and videos Wed, 31 Jan 2018 04:26:44 +0000 en hourly 1 https://wordpress.org/?v=6.3.4 Performance benchmark from Delphi 2010 to Delphi XE6 http://www.andreanolanusse.com/en/performance-benchmark-delphi-2010-delphi-xe6/ http://www.andreanolanusse.com/en/performance-benchmark-delphi-2010-delphi-xe6/#comments Mon, 09 Jun 2014 04:27:36 +0000 http://www.andreanolanusse.com/en/?p=969 Thomas Grubb from Words from a Delphi CodeSmith blog, did a fantastic job comparing performance from Delphi 2010 to XE6. His motivation around this benchmark was to validate Delphi Quality, Performance, and Stability (QPS) over the years, specially now where Embarcadero claims a lot of focus on these areas with Delphi XE6 release. His tests include VCL, FireMonkey, Win32, Win64, […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Thomas Grubb from Words from a Delphi CodeSmith blog, did a fantastic job comparing performance from Delphi 2010 to XE6. His motivation around this benchmark was to validate Delphi Quality, Performance, and Stability (QPS) over the years, specially now where Embarcadero claims a lot of focus on these areas with Delphi XE6 release.

His tests include VCL, FireMonkey, Win32, Win64, Android, iOS, OSX and third party library.

The whole series is based in 12 blog posts as you can se below.

Again, congratulations Thomas for the fantastic job and time invested on that. I think everyone on the Delphi community will appreciate.

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/performance-benchmark-delphi-2010-delphi-xe6/feed/ 7
CopyReaderToClientDataSet after XE2 – Where are you? http://www.andreanolanusse.com/en/copyreadertoclientdataset-xe2/ http://www.andreanolanusse.com/en/copyreadertoclientdataset-xe2/#comments Sun, 23 Feb 2014 20:53:14 +0000 http://www.andreanolanusse.com/en/?p=958 CopyReaderToClientDataSet copies the contents of a TDBXReader into a TClientDataSet instance. It returns the same TClientDataSet instance that was passed to this method. CopyReaderToClientDataSet is part of the Data.DBXDBReaders.TDBXDataSetReader class until Delphi/C++Builder XE2, however in XE3 it changed a little bit, it became part of a new class called Data.DBXCDSReaders.TDBXClientDataSetReader. I got several e-mails from my blog readers that downloaded some of my […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
CopyReaderToClientDataSet copies the contents of a TDBXReader into a TClientDataSet instance. It returns the same TClientDataSet instance that was passed to this method.

CopyReaderToClientDataSet is part of the Data.DBXDBReaders.TDBXDataSetReader class until Delphi/C++Builder XE2, however in XE3 it changed a little bit, it became part of a new class called Data.DBXCDSReaders.TDBXClientDataSetReader.

I got several e-mails from my blog readers that downloaded some of my examples, when compiling with latest versions they got a error message saying the CopyReaderToClientDataSet method can’t be found.

The solution is simple, add Data.DBXCDSReaders.pas as part of the uses clause and replace all the TDBXDataSetReader by TDBXClientDataSetReader, which is the new home for CopyReaderToClientDataSet.

Enjoy!!!

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/copyreadertoclientdataset-xe2/feed/ 1
Delphi XE5 Update 2 – many bug fixes on FireMonkey for iOS, Android and compiler http://www.andreanolanusse.com/en/delphi-xe5-update-2-many-bug-fixes-firemonkey-ios-android-compiler/ http://www.andreanolanusse.com/en/delphi-xe5-update-2-many-bug-fixes-firemonkey-ios-android-compiler/#respond Sat, 28 Dec 2013 05:56:33 +0000 http://www.andreanolanusse.com/en/?p=953 Another update available for Delphi XE5 and C++Builder XE5, the Update 2 is has lots of bug fixes covering several areas, specially on FireMonkey for Android, iOS, Windows and Mac. The Update is available for registered users and you can find on the following links. Just a friendly remind that you need to Uninstall your […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Another update available for Delphi XE5 and C++Builder XE5, the Update 2 is has lots of bug fixes covering several areas, specially on FireMonkey for Android, iOS, Windows and Mac.

The Update is available for registered users and you can find on the following links. Just a friendly remind that you need to Uninstall your current Delphi XE5 in order to install XE5 Update 2.

Below the complete list of bugs fixed on this Update.

 

Reference No

Summary

Component/s

[Indy] Access Virolation occues on OnValidatePeerCertificate for IPPeerCommon bug[HTTPS,SSL] 3rd Party

120473

[iOS] SOAP fails in iOS when using SSL (“IOHandler value is not valid.”) Blocker

119873

TCameraComponent causes memory leak in Win32 Blocker

115697

TDump command crashes on DLL’s Command Line Tools

112826

TDump.exe shows strange output Command Line Tools

100328

TDump crashes on the x64 shell32.dll Command Line Tools

110887

TDump fails on some ‘foreign’ .dlls Command Line Tools
Delphi XE5 cannot build OSX applications from the command line Compiler
[FM Mac OSX 10.9] Compile error XMLDocument using SDK 10.9 Compiler, Compiler\C++

120686

[Mavericks 10.9] C++Builder XE4 does not support OS X 10.9 Compiler, Compiler\C++, Compiler\C++\BCC
Throwing a exception in virtual member function returning an AnsiString causes an AV and an abend under certain circumstances, in 32-bit C++ application Compiler, Compiler\C++, Compiler\C++\BCC, Compiler\C++\BCC\Back End

120476

[iOS ARM][Android] E2581 Backend error: invalid linkage type for global declaration Compiler, Compiler\Delphi
[dcc(ios/a)arm] Backend Error compiling constructor for generic classes Compiler, Compiler\Delphi

118897

method overload resolution fails when passing @ parameter to overloaded methods mixing Pointer and specific pointer parameters. Compiler, Compiler\Delphi
ShowMessage/Message Alerts not working in iOS 7 Simulator Compiler, Compiler\Delphi
[dccaarm][dcciosarm] Implicit finally block doesn’t execute if the exception is not catch in except block. Compiler, Compiler\Delphi
Crash by declaration error when declaring class function in record type Compiler, Compiler\Delphi
Internal Error URW1154 calling TValue.From() of System.Rtti Compiler, Compiler\Delphi

72147

Invalid section table entries on empty sections Compiler, Compiler\Delphi

119197

subtraction of sets changes its params Compiler, Compiler\Delphi, Compiler\Delphi\CodeGen
Integer computation error upon mixing Byte and Integer Compiler, Compiler\Delphi, Compiler\Delphi\CodeGen
When Currency is used in a generic record type you get an internal compiler error G1239 IN Zephyr and G1232 in XE4 Compiler, Compiler\Delphi, Compiler\Delphi\Generics

118815

Generic method inlining (part 2) Compiler, Compiler\Delphi, Compiler\Delphi\Generics

118866

Cannot perform FillChar on Currency variables – E2197 Constant object cannot be passed as var parameter Compiler, Compiler\Delphi, Compiler\Delphi\Messages

93738

Internal Error URW1136 Compiler, Compiler\Delphi, Compiler\Delphi\Messages

118929

Totally broken package compiler for an iOS device Compiler, Compiler\Delphi, Compiler\Delphi\Packages/Libs

118523

[dcc32] Command-line build fails for user account with non-ASCII characters Compiler, Compiler\Delphi, IDE\Build System
DataSnap : Memory leaks caused by TFDJSONDataSetsBase.FOwnsDataSet Data, Data\DataSnap
DataSnap: HTTP request may be broken when sending Delta Data, Data\DataSnap
[C++][DataSnap]Exception raised when trying to execute server method through proxy on OS X 10.9 Data, Data\DataSnap

116417

[ISAPI] DataSnap Server as an ISAPI DLL get a 48KB limitation when receiving POST data Data, Data\DataSnap
[OS X][DataSnap][FireDAC] Unable to find static library: DataSnapFireDAC.a Data, Data\DataSnap, Data\FireDAC
[DataSnap] TX509CertificateIndy.Verify is not operation as specification. Data, Data\DBX
Unable to load libsqlib.dylib Data, Data\DBX
DBX memory leak when running queries on NEXTGEN platforms Data, Data\DBX
FireDAC FDConnection does not autocommit Data, Data\FireDAC
FDExplorer resizing causes lost display of description column message Data, Data\FireDAC
Building a Mobile Application that contains a TFDPhysIBDriverLink component raises an error Data, Data\FireDAC
[SQLite] It can’t encipher by the specified encrypt parameter, so it can’t setup except aes-256 Data, Data\FireDAC
If XML containing MBCS is saved by SaveToStream, It is not copied correctly.. Data, Data\FireDAC
If XML containing MBCS is copied to TFDMemtable, Exception class EDOMParseError occurs Data, Data\FireDAC
FireDAC memory leak when running queries on NEXTGEN platforms Data, Data\FireDAC

119995

“Not editing” error reported with LiveBindings when calling ApplyUpdates on TAdapterBindSource Data, Data\LiveBindings

118633

[iOS device/Android] With TSoapConnection, TClientDataset.ApplyUpdates raises “Exception in safecall method” in iOS device and Android Data, Data\Midas

118633

[iOS device/Android] gdb reports wrong file after step into Debugger
Debugging not working with a FireMonkey Mobile app on Nexus 7 2013 Debugger
[Delphi] Access Violation when Inspecting or Adding a Watch with a function where an array is passed in as a var or const Debugger
Function call evaluation on C++ OSX apps is broken when using Mavericks Debugger, Debugger\Evaluator

120506

[OSX 10.9] Mavericks Modules Debug Window doesn’t show framework dylibs anymore Debugger, Debugger\Views

119777

ReqMulti.pas has been removed from the product File Delivery, Internet
[FMX/Android] TEdit causes SIGSEG if SetFocus method is called inside Forms’s OnCreate event. FireMonkey
[iOS] Sharing popup size is calculated wrong FireMonkey

120259

Bugs in creating forms with TForm.CreateNew() – i.e. without a designer. FireMonkey
Orientation switch breaks app or bars user after device activated again (after sleep) FireMonkey

119176

[iOS7 iPad Simulator] App crash in iOS 7 iPad Simulator FireMonkey

118770

Bad text rendering on Android FireMonkey
Poor application performance on Nexus 10 FireMonkey
[iOS] TMemo – sometimes when using LongTap to bring up the context menu on iOS, the cursor and context menu is moved up with one line FireMonkey

118554

[iOS Device] iOS App crashes on iOS 6.1.3 (iPad) when Showing Forms – but not on Simulator FireMonkey
TabletMasterDetail app takes over 10 seconds to load on Nexus 10 FireMonkey

120566

When adding a TBindNavigator, an Access Violation occurs FireMonkey

118799

2D Empty app does not start on Samsung Galaxy Tab 3 FireMonkey, FireMonkey\3D Components

120517

TMemo.ScrollLayout could cause access violation FireMonkey, FireMonkey\Components

120827

[iOS7] With TMemo, unintentional letter appears when entering with Japanese keyboard. FireMonkey, FireMonkey\Components
Date Picker mobile code snippet TCalendarEdit – decrements the date when you don’t change the date in the picker FireMonkey, FireMonkey\Components
Using German ß (00DF; LATIN SMALL LETTER SHARP S) in TListBoxGroupHeader raises EArgumentOutOfRangeException FireMonkey, FireMonkey\Components
On HTC one X(4.1.1) cannot be typed a set of numbers if the keyboard has the vktPhonePad type FireMonkey, FireMonkey\Components

120515

TMemo.GoToTextEnd crashes at program startup and doesn’t move the horizontal scrollbar FireMonkey, FireMonkey\Components

120517

TMemo.ScrollLayout could cause access violation FireMonkey, FireMonkey\Components

119442

Mobile Code Snippets – Web Browser needs to be updated. Web Browser Top Margin should be 0 FireMonkey, FireMonkey\Components
Problem changing the KeyboardType among different TEdit FireMonkey, FireMonkey\Components

120136

[Android 4.3] TListView component scrolling performance is very slow (Samsung GALAXY Note 3) FireMonkey, FireMonkey\Components
Listview scrolling performance slow on Samsung Galaxy Note 3 FireMonkey, FireMonkey\Components
Custom TabIcon support missing for iOS 7 FireMonkey, FireMonkey\Components

119442

[iOS7 device] Web Browser positioned incorrectly in iOS7 FireMonkey, FireMonkey\Components

120007

[Android, iOS] Viewport3D does not fully display on a mobile form with TabControl FireMonkey, FireMonkey\Components

118859

[iOS] TMedia Volume cannot be changed in iOS FireMonkey, FireMonkey\Components
TWebBrowser misaligned when Align set to alClient FireMonkey, FireMonkey\Components

119891

[Android] Edit.SetFocus in Form.OnShow() will cause app crash when entering text FireMonkey, FireMonkey\Components
TabControl does not fit the screen completely widthwise when it has exactly 6 TabItems FireMonkey, FireMonkey\Components

119821

[Android] Performance of Delphi Apps on Google Nexus 10(Android 4.3) FireMonkey, FireMonkey\Components

119539

[iOS] TMediaplayer pause (stop) on iOS is rewinding FireMonkey, FireMonkey\Components

119447

[Android] Location demo on some Android devices not working FireMonkey, FireMonkey\Components
Korean input problem with Tmemo on OS X FireMonkey, FireMonkey\Components

119192

[Android] Uppercase national characters are drawn bad on Android FireMonkey, FireMonkey\Components

119162

[Android] password is shown on virtual keyboard FireMonkey, FireMonkey\Components
TMemo very slow on Nexus 10 FireMonkey, FireMonkey\Components

119703

Stretched property of TText control does not work properly when TText is a child component for some other component, not a form FireMonkey, FireMonkey\Components

118859

[iOS] TMedia Volume cannot be changed in iOS FireMonkey, FireMonkey\Components

120023

[Android] TGestureManager crash on app close. FireMonkey, FireMonkey\Runtime
Throwing an exception and not catching it during any FMX component in an event have unexpected result FireMonkey, FireMonkey\Runtime

119450

[iOS7] vertical touch co-ordinate is several pixels lower than the actual touch position. FireMonkey, FireMonkey\Runtime

119444

[iOS7 device] Keyboard does not completely disappear when hidden in iOS7 FireMonkey, FireMonkey\Runtime
[NEXUS 10] SpeedButton – it takes too long until OnClick event is triggered FireMonkey, FireMonkey\Runtime

118910

Keyboard shift/ctrl+arrow keys not working for FireMonkey objects on a form FireMonkey, IDE, IDE\FireMonkey Designer
iOS 7 apps showing iOS 6 styled native controls (pickers/keyboard) on iOS Simulator FireMonkey, PAServer
FM C++ app with Mac OS X 10.9 SDK fails to compile IDE, IDE\Build System, IDE\Deployment, PAServer

120029

[Android] lower case of file path in deployedassets.txt IDE, IDE\Deployment
When starting RAD Studio XE5 (with android support installed) as the C++Builder personality it REMOVES the android SDK setting in the registry. IDE, IDE\General

118105

Android apps deployed to emulator will not function, display black screen IDE, Install

118830

Error detected (LME288), [ilink32 Error] Error: Unable to perform link Linker

116888

Strange linker crash Linker
Throw exception crash C++ Win64 app RTL, RTL\C++, RTL\C++\Exception Handling
Wrong behavior when executing code from a catch section on Mac OS RTL, RTL\C++, RTL\C++\Exception Handling
ARC Using Unsafe objects in records are not working properly RTL, RTL\Delphi
FM application crash at init in Android devices when the language is set to Norwegian (Norsk Bokmål) RTL, RTL\Delphi

118726

Application crash with raising exception class Segmentation fault (11) RTL, RTL\Delphi, RTL\Delphi\Other
SOAP: Double precision return values not correct for Android RTL, RTL\Delphi, SOAP

119872

SOAP AsDateTime implementation is wrong SOAP

119741

[Android] Segmentation fault consuming web service SOAP

76053

C++ templates are translated as “Vorlagen” Translation

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/delphi-xe5-update-2-many-bug-fixes-firemonkey-ios-android-compiler/feed/ 0
Delphi XE5 Update 1 – fixes for serious issues on ClientDataSet http://www.andreanolanusse.com/en/delphi-xe5-update-1-fixes-serious-issues-clientdataset/ http://www.andreanolanusse.com/en/delphi-xe5-update-1-fixes-serious-issues-clientdataset/#comments Tue, 29 Oct 2013 03:59:49 +0000 http://www.andreanolanusse.com/en/?p=949 The Update 1 for Delphi XE5 and C++Builder XE5 has been released. This update touch some areas like FireDAC, FireMonkey, Debugger, IDE and mainly ClientDataSet. Below a list of fixes related to ClientDataSet, which I consider critical errors and a blocker for anyone that was looking to migrate to XE5. Quality Central Reference No. Summary […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
The Update 1 for Delphi XE5 and C++Builder XE5 has been released.

This update touch some areas like FireDAC, FireMonkey, Debugger, IDE and mainly ClientDataSet. Below a list of fixes related to ClientDataSet, which I consider critical errors and a blocker for anyone that was looking to migrate to XE5.

Quality Central Reference No. Summary Component/s
118951 Numeric Filters on a TClientDataSet do not filter Data, Data\Midas
119028 Linker error: TXMLTransformProvider libraries missing Data, Data\Midas
119164 Attempting to use MIDAS (eg TClientDataset) in the simulator on iOS7 fails Data, Data\Midas
119432 TClientDataSet.Locate method fails to work properly with XE5 midas.dll Data, Data\Midas
  Application stops when driver is missing Data, Data\FireDAC
[Phys]-300 on connecting using Oracle / MSSQL / etc drivers using Arch SKU at design-time Data, Data\FireDAC

 

For a complete list of the specific problems fixed in this update, click here.

Download Links

You can download the update 1 installer or a new fresh ISO that includes Update 1:

That’s is, have fun.

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/delphi-xe5-update-1-fixes-serious-issues-clientdataset/feed/ 6
Delphi Developers’ plan for mobile, desktop and n-tier development http://www.andreanolanusse.com/en/delphi-developers-plan-for-mobile-and-desktop-development/ http://www.andreanolanusse.com/en/delphi-developers-plan-for-mobile-and-desktop-development/#comments Sat, 13 Jul 2013 21:27:05 +0000 http://www.andreanolanusse.com/en/?p=935 Early this year I did a developer survey through my blog. I got over 1500 answers and I safely can say 87% use Delphi as their primarily development tools, the other 13% split between C#, C/C++, PHP and other languages. Mobile Development On the mobile development arena I asked about their company plans for mobile […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Early this year I did a developer survey through my blog. I got over 1500 answers and I safely can say 87% use Delphi as their primarily development tools, the other 13% split between C#, C/C++, PHP and other languages.

Mobile Development

On the mobile development arena I asked about their company plans for mobile development in 2013, and the results are interesting:

  • On Android development, 45% will develop apps for Android, 16% maybe will do some development and 5% don’t have any plan in 2013.
  • 28% will develop apps for iOS, 24% maybe will do some development, which we can consider pretty high, and 11% don’t have any plan for iOS in 2013.
  • Windows Phone is not in a good position; only 13% will do development for Windows Phone. Looking for the Microsoft Tablet (Surface), this one is way behind.
  • BlackBerry is not the favorite platform and has only 3% of the developers considering to develop, 11% not sure yet, and 40% will not develop at all.

Survey Mobile 2013

Android is the first choice, most of Delphi Developers do business application and I see a natural choice on Android, the number of devices out there and the lower price point when compared with iPhone/iOS leads Android more in to the business application development. When we look international market iOS devices would cost at least 60% more then Android devices, different reality from iOS, where we can pay US$200 on an iPhone.

Desktop and N-Tier Development

When asked about desktop development I made three questions, which I believe it’s correlated, here the questions:

  • Is your company planning to develop new Desktop applications in 2013?
  • Is your company planning to migrate existing Desktop applications to the Web in 2013?
  • Which of the following architecture would you use for new applications?

The results showed a clear demand for desktop development, where 73% of the interviewees plans to develop new desktop applications, however when you cross that with the architectural questions, 70% would use N-Tier architecture and only 24% would consider Client/Server.

[one_half first]Survey 2013 - Architecture
[/one_half]
[one_half]Survey 2013 - Desktop
[/one_half]

There is also a significant number of companies (45%) considering to migrate existing desktop applications to the web, 34% not planning and 21% didn’t decide yet. That information leads to us think about the challenges to migrate legacy applications where you can see all kinds of situation. Talking with developers I see most of the time the following scenarios:

  • High cost to migrate legacy code, which can’t be financially justifiable
  • High demand for maintenance and new projects, that doesn’t allow the team to stop or dedicate time to the migration project
  • The current application is working, no reason to change
  • And many others

Survey 2013 - Migration

 

Years ago the software development world moved away rom the traditional Client/Server in to the distributed development. There are so many technologies and architectures for distributed systems out there (SOA, REST, SOAP, WebServices, etc.), which are supported for many languages and IDE’s, but bring the question “Which software vendor has the best implementation and support for distributed applications?”.

Looking forward to see your comments and what’s your choice to build distributed applications?

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/delphi-developers-plan-for-mobile-and-desktop-development/feed/ 5
What’s new in Delphi XE4? http://www.andreanolanusse.com/en/whats-new-in-delphi-xe4/ http://www.andreanolanusse.com/en/whats-new-in-delphi-xe4/#comments Mon, 22 Apr 2013 14:16:40 +0000 http://www.andreanolanusse.com/en/?p=918 This time you didn’t have to way a full year to see a new Delphi release, 8 months after XE3 release Delphi XE4 is out. iOS development is the major topic of course and bring the second version of FireMonkey to iOS, a lot of expectation on this topic specially after XE2. Also there is […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
This time you didn’t have to way a full year to see a new Delphi release, 8 months after XE3 release Delphi XE4 is out.

iOS development is the major topic of course and bring the second version of FireMonkey to iOS, a lot of expectation on this topic specially after XE2.

Also there is a bunch of new stuffs to talk about, like:

  • New Delphi compiler for mobile platform, which brings several changes in the language and set a future path to the Delphi language, obvious these changes will affect desktop development in the future and you need to start learning about that now.
  • The SQLite and InterBase support for iOS
  • ClientDataSet available on iOS
  • Several FireMonkey changes for iOS, componentes, new classes
  • Etc..

RAD Studio XE4 now includes only Delphi, C++Builder and HTML5Builder. Delphi Prism is no longer part of RAD Studio, the name is dead and from now you have to refer to Oxygene from RemObjects. You can check the official communication from RemObjects here, where Marc Hoffman provide more details about the future related to .NET development with Oxygene (old Prism) and their support to iOS and Android development.

Trial is already available here or if you prefer download the full Delphi and C++Builder ISO here.

The Delphi XE4 documentation has a extensive list of What’s new in Delphi and C++Builder XE4, below the table of content:

That’s it for now.

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/whats-new-in-delphi-xe4/feed/ 9
Delphi XE4 official announcement coming http://www.andreanolanusse.com/en/delphi-xe4-official-announcement-coming/ http://www.andreanolanusse.com/en/delphi-xe4-official-announcement-coming/#comments Wed, 17 Apr 2013 04:10:25 +0000 http://www.andreanolanusse.com/en/?p=916 In general you expect a new version of Delphi around August, this year is going to be different, Delphi XE4 is coming next week. I just heard that next week Embarcadero is going to announce Delphi XE4, which is part of RAD Studio XE4 and will include C++Builder XE4 and HTML5 Builder. An important change initiated last […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
In general you expect a new version of Delphi around August, this year is going to be different, Delphi XE4 is coming next week.

I just heard that next week Embarcadero is going to announce Delphi XE4, which is part of RAD Studio XE4 and will include C++Builder XE4 and HTML5 Builder.

An important change initiated last year related to Prism (Delphi for .NET) will affect RAD Studio this year, I think you won’t see Prism included in RAD Studio, of course REM Objects continue to develop their compiler and integration with Visual Studio, so you will have order directly from them.

What’s new in Delphi XE4?

Delphi XE4 will bring Embarcadero’s new ARM compiler and will allow Delphi developers to compile FireMonkey apps to iOS devices at this point. The project around this new compiler started years ago, I had the opportunity to talk about this project with many Delphi developers, so the new compiler is really new and a beginning that will allow to move Delphi language much easier to other platforms, as you already heard Embarcadero is already promising Android support and it suppose to come soon.

The iOS support is going to be better them what you saw in XE2 and you are expecting something way better. A very important point is the focus on iOS, trying to make everything you use for Windows available on iOS is not the way to go, so in XE4 you will see what is specific for iOS when developing for iOS and this is good.

Of course Embarcadero will promote FireDAC as a new feature in XE4, even it came recently on XE3 still a good point to talk about this, since FireDAC is way better them dbExpress. I blogged about that recently and you can read here.

I believe you will see InterBase for iOS on this release, even you already have SQLite on iOS devices I see a lot of space for InterBase on iOS, especially for developers that need protect their data on mobile devices.

Upgrade and pricing

Embarcadero will release all the SKUs and upgrade paths. Early this year they mention about to release iOS support as add-on, maybe you will be able to buy just this piece, let’s wait and see.

There is a webinar scheduled for next Wednesday April 24th and it will show this new release.

I will be back in the following days and will share my comments about this release.

I just published an article covering What’s new in Delphi XE4 after the official launch, you can find that here.

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/delphi-xe4-official-announcement-coming/feed/ 28
What does AnyDAC acquisition by Embarcadero mean for Delphi and C++Builder Developers? http://www.andreanolanusse.com/en/what-does-anydac-acquisition-by-embarcadero-mean-for-delphi-and-cbuilder-developers/ http://www.andreanolanusse.com/en/what-does-anydac-acquisition-by-embarcadero-mean-for-delphi-and-cbuilder-developers/#comments Fri, 08 Feb 2013 05:56:25 +0000 http://www.andreanolanusse.com/en/?p=906 Finally the day has come, Embarcadero acquired AnyDAC and there is a lot to talk about, early last year I invested a lot of time evaluating AnyDAC and know you know why 🙂 – I was very impressive with the amount of features,  AnyDAC is everything dbExpress tried to be and never reached. The reason […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Finally the day has come, Embarcadero acquired AnyDAC and there is a lot to talk about, early last year I invested a lot of time evaluating AnyDAC and know you know why 🙂 – I was very impressive with the amount of features,  AnyDAC is everything dbExpress tried to be and never reached.

The reason I say that it’s because AnyDAC really allows developers to target multiples database without the workarounds required by  dbExpress, like: Field Mapping when you persist the TFields. For long time AnyDAC allowed developers that use Delphi/C++Builder Professional edition to connect their application to Enterprise databases like Oracle, SQL Server, Sybase, Informix and others, something that was only possible through Enterprise and Architect edition, and much more.

Beyond that, there is a lot of specific database features supported by AnyDAC, which I consider very helpful in any database development, here some examples per database:

  • For all databases
    • Automatic Connection Recovery
    • Unified DB Events Support
    • Simplified architecture, it means no more Query + ClientDataSet + Provider just for a bi-directional cursor
    • Much better performance when compared with dbExpress
    • TADMemTable – in memory dataset, faster than TClientDataSet
    • Much easier to migrate BDE applications to AnyDAC than the traditional dbExpress architecture
  • Oracle
    • SELECT FOR UPDATE clause – no more workaround doing UPDATE just to lock the record
    • Query execution aborting – we always need that right?
    • ROWID columns for fast data editing and refreshing
    • RETURNING clause for fast data refreshing – no more select after the update to get a new value generated by trigger
    • and more…
  • Firebird
    • RETURNING clause for fast data refreshing
    • Trusted authentication
    • DB services – backup, restore, validate, security, etc
    • Query execution aborting
  • PostgreSQL
    • Yep, now you can connect natively with PostgreSQL
    • and more…
  • SQL Server
    • Batch commands with multiple result sets – Now you can use that and improve your app performance
    • Query execution aborting
    • and more…
  • MySQL
    • AUTO_INCREMENT columns and retrieving of last inserted value.
  • Drivers for several databases on Windows, Mac and iOS

This is a small list of interesting things on AnyDAC, you can find more here.

AnyDAC is a step forward and worth the effort to migrate from dbExpress to AnyDAC, there are lot of feature needed by Delphi and C++Builder developers, many of these features has been requested for a long time and you will have when using AnyDAC.

You may ask what is going to happen with dbExpress? BDE is dead, but still around :), dbExpress is not dead and I don’t think will die soon, but there is no reason to keep two database access technology since AnyDAC is way better than dbExpress.

AnyDAC trial is available for download here.

 

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/what-does-anydac-acquisition-by-embarcadero-mean-for-delphi-and-cbuilder-developers/feed/ 10
Survey 2013 – Help to define the content for my blog in 2013 http://www.andreanolanusse.com/en/survey-2013-help-to-define-the-content-for-my-blog-in-2013/ http://www.andreanolanusse.com/en/survey-2013-help-to-define-the-content-for-my-blog-in-2013/#comments Fri, 28 Dec 2012 07:05:55 +0000 http://www.andreanolanusse.com/en/?p=891 Dear blog readers, I prepared a short survey and I will appreciate if you can invest 5 minutes of your valuable time answering few questions. My goal with this survey is to learn more about your software development plans for 2013 and identify potential and useful topics to all of you. Also validate some content […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Dear blog readers,

I prepared a short survey and I will appreciate if you can invest 5 minutes of your valuable time answering few questions.

My goal with this survey is to learn more about your software development plans for 2013 and identify potential and useful topics to all of you. Also validate some content ideas I have for 2013.

The survey is pretty straight forward, take less than 5 minutes and is very important to help to define the blog content for 2013.

Thank you,
Andreano Lanusse

PS: You can also access the survey directly from this link http://bit.ly/peal2013en

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/survey-2013-help-to-define-the-content-for-my-blog-in-2013/feed/ 1
Shell Extension for Windows 32-bit and 64-bit with Delphi XE2 or XE3 http://www.andreanolanusse.com/en/shell-extension-for-windows-32-bit-and-64-bit-with-delphi-xe2/ http://www.andreanolanusse.com/en/shell-extension-for-windows-32-bit-and-64-bit-with-delphi-xe2/#comments Wed, 14 Nov 2012 23:37:55 +0000 http://www.andreanolanusse.com/en/?p=702 Compile Delphi code for 64-bit platform is possible now with Delphi XE2 and XE3, developers can go beyond Windows 32-bit and start creating Windows Shell Extension for Windows 64-bit. Shell Extensions are in-process COM objects which extends the abilities of Windows OS. In this post I’m going to add two new context menu items in […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Compile Delphi code for 64-bit platform is possible now with Delphi XE2 and XE3, developers can go beyond Windows 32-bit and start creating Windows Shell Extension for Windows 64-bit. Shell Extensions are in-process COM objects which extends the abilities of Windows OS. In this post I’m going to add two new context menu items in Windows Explorer. The menus will allow users to upload files to Microsoft Azure and Amazon S3. This post will go through how to create the extension, register and compile for 32-bit and 64-bit. I’m preparing another post, in which I will explain how to upload files to Amazon S3 and Microsoft Azure.

Creating the CloudUpload Shell Extension

In order to start creating a Shell Extension in Delphi, you first need to create an ActiveX Library project and after that create a new Automation Object. In the example I use for this post, the project name is CloudUpload and the Automation Object is called TCloudUploadContext. The TCloudUploadContext class must implement the interfaces IShellExtInit and IContextMenu in order to integrate the Context Menu in Windows Explorer.

    { IShellExtInit Methods }
    { Initialize the context menu if a files was selected}
    function IShellExtInit.Initialize = ShellExtInitialize;
    function ShellExtInitialize(pidlFolder: PItemIDList; lpdobj: IDataObject;
      hKeyProgID: HKEY): HResult; stdcall;

    { IContextMenu Methods }
    { Initializes the context menu and it decides which items appear in it,
      based on the flags you pass }
    function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast,
      uFlags: UINT): HResult; stdcall;

    { Execute the command, which will be the upload to Amazon or Azure}
    function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
    { Set help string on the Explorer status bar when the menu item is selected }
    function GetCommandString(idCmd: UINT_PTR; uFlags: UINT; pwReserved: PUINT;
      pszName: LPSTR; cchMax: UINT): HResult; stdcall;

The ShellExtInitialize defines if the Context Menu will appear or not in Windows Explorer. In this sample the context menu only shows up if one file has been selected, otherwise no Context Menu. In case only one file was selected the FFileName variable will receive the name of the file.

function TCloudUploadContextMenu.ShellExtInitialize(pidlFolder: PItemIDList;
  lpdobj: IDataObject; hKeyProgID: HKEY): HResult;
var
  DataFormat: TFormatEtc;
  StrgMedium: TStgMedium;
  Buffer: array [0 .. MAX_PATH] of Char;
begin
  Result := E_FAIL;

  { Check if an object was defined }
  if lpdobj = nil then
    Exit;

  { Prepare to get information about the object }
  DataFormat.cfFormat := CF_HDROP;
  DataFormat.ptd := nil;
  DataFormat.dwAspect := DVASPECT_CONTENT;
  DataFormat.lindex := -1;
  DataFormat.tymed := TYMED_HGLOBAL;

  if lpdobj.GetData(DataFormat, StrgMedium) <> S_OK then
    Exit;

  { The implementation now support only one file }
  if DragQueryFile(StrgMedium.hGlobal, $FFFFFFFF, nil, 0) = 1 then
  begin
    SetLength(FFileName, MAX_PATH);
    DragQueryFile(StrgMedium.hGlobal, 0, @Buffer, SizeOf(Buffer));
    FFileName := Buffer;
    Result := NOERROR;
  end
  else
  begin
    // Don't show the Menu if more then one file was selected
    FFileName := EmptyStr;
    Result := E_FAIL;
  end;

  { http://msdn.microsoft.com/en-us/library/ms693491(v=vs.85).aspx }
  ReleaseStgMedium(StrgMedium);

end;

After the context menu handler is initialized via the IShellExtInit interface, Windows uses the IContextMenu interface to call the other methods of our context menu handler. In this case it will call QueryContextMenu, GetCommandString and InvokeCommand.

The Context Menu options (Amazon S3, Microsoft Azure) will be created through the QueryContextMenu method.

function TCloudUploadContextMenu.QueryContextMenu(Menu: HMENU;
  indexMenu, idCmdFirst, idCmdLast, uFlags: UINT): HResult;
var
  CloudMenuItem: TMenuItemInfo;
  MenuCaption: String;
  SubMenu: HMENU;
  uId: UINT;
begin
  { only adding one menu CloudMenuItem, so generate the result code accordingly }
  Result := MakeResult(SEVERITY_SUCCESS, 0, 3);

  { store the menu CloudMenuItem index }
  FMenuItemIndex := indexMenu;

  { specify what the menu says, depending on where it was spawned }
  if (uFlags = CMF_NORMAL) then // from the desktop
    MenuCaption := 'Send file from Desktop to the Cloud'
  else if (uFlags and CMF_VERBSONLY) = CMF_VERBSONLY then // from a shortcut
    MenuCaption := 'Send file from Shourtcut to the Cloud'
  else if (uFlags and CMF_EXPLORE) = CMF_EXPLORE then // from explorer
    MenuCaption := 'Send file from Explorer to the Cloud'
  else
    { fail for any other value }
    Result := E_FAIL;

  if Result <> E_FAIL then
  begin

    SubMenu := CreatePopupMenu;

    uId := idCmdFirst;
    InsertMenu(SubMenu, AmazonIndex, MF_BYPOSITION, uId, TClouds[AmazonIndex]);

    Inc(uId);
    InsertMenu(SubMenu, AzureIndex, MF_BYPOSITION, uId, TClouds[AzureIndex]);

    FillChar(CloudMenuItem, SizeOf(TMenuItemInfo), #0);
    CloudMenuItem.cbSize := SizeOf(TMenuItemInfo);
    CloudMenuItem.fMask := MIIM_SUBMENU or MIIM_STRING or MIIM_ID;
    CloudMenuItem.fType := MFT_STRING;
    CloudMenuItem.wID := FMenuItemIndex;
    CloudMenuItem.hSubMenu := SubMenu;
    CloudMenuItem.dwTypeData := PWideChar(MenuCaption);
    CloudMenuItem.cch := Length(MenuCaption);

    InsertMenuItem(Menu, indexMenu, True, CloudMenuItem);
  end;
end;

When you are in the Windows Explorer and you pass the mouse over one of the Cloud menu items a short help message is displayed in the Windows Explorer status bar, it is defined on the implementation of the method GetCommandString, which returns a string to the Windows Explorer to display.

function TCloudUploadContextMenu.GetCommandString(idCmd: UINT_PTR; uFlags: UINT;

  pwReserved: PUINT; pszName: LPSTR; cchMax: UINT): HResult;
begin
  Result := E_INVALIDARG;

  { Set help string on the Explorer status bar when the menu item is selected }
  if (idCmd in [AmazonIndex, AzureIndex]) and (uFlags = GCS_HELPTEXT) then
  begin
    StrLCopy(PWideChar(pszName), PWideChar('Copy the selected file to ' +
      TClouds[idCmd]), cchMax);
    Result := NOERROR;
  end;

end;

As the user clicks in one of the Cloud menu items, the method InvokeCommand will be called and start the process to upload the selected file to the Cloud selected. At this point we already have the file name and based on the lpici parameters we can identify what menu item the user clicked.

function TCloudUploadContextMenu.InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult;
var
  Item: Word;
begin
  Result := E_FAIL;

  if HiWord(Integer(lpici.lpVerb)) <> 0 then
    Exit;

  { if the index matches the index for the menu, show the cloud options }
  Item := LoWord(Integer(lpici.lpVerb));

  if Item in [AmazonIndex, AzureIndex] then
  begin
    try
      Upload(lpici.HWND, Item, FFileName);
    except
      on E: Exception do
        MessageBox(lpici.hwnd, PWideChar(E.Message), 'Cloud Upload', MB_ICONERROR);

    end;
    Result := NOERROR;
  end;

end;

In order for the COM object to be created whenever the CloudUpload is loaded, it’s necessary to create an instance of a class factory that specifically creates an instance of the shell extension object, the factory instance will be created on the initialization section, based on the following code, which is a replacement for the default code created by Delphi.

initialization
  TCloudUploadObjectFactory.Create(ComServer, TCloudUploadContextMenu, CLASS_CloudUploadContextMenu, ciMultiInstance, tmApartment);
end.

Since the class factory will be responsible to register/unregister the DLL, the methods ApproveShellExtension and UpdateRegistry will be invoked, it will happen when you use the regsvr32.exe.

  { the new class factory }
  TCloudUploadObjectFactory = class(TAutoObjectFactory)
  protected
    procedure ApproveShellExtension(&Register: Boolean; const ClsID: string);
    function GetProgID: string; override;
  public
    procedure UpdateRegistry(Register: Boolean); override;
  end;

{ TCloudUploadObjectFactory }

{ Required to registration for Windows NT/2000 }
procedure TCloudUploadObjectFactory.ApproveShellExtension(&Register: Boolean;
  const ClsID: string);
Const
  WinNTRegKey =
    'SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved';
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;

  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;

    if not Reg.OpenKey(WinNTRegKey, True) then
      Exit;

    { register the extension appropriately }
    if &Register then
      Reg.WriteString(ClsID, Description)
    else
      Reg.DeleteValue(ClsID);
  finally
    Reg.Free;
  end;

end;

function TCloudUploadObjectFactory.GetProgID: string;
begin
  { ProgID not required for shell extensions }
  Result := '';
end;

procedure TCloudUploadObjectFactory.UpdateRegistry(Register: Boolean);
Const
  ContextKey = '*\shellex\ContextMenuHandlers\%s';
begin
  { perform normal registration }
  inherited UpdateRegistry(Register);

  { Registration required for Windows NT/2000 }
  ApproveShellExtension(Register, GUIDToString(ClassID));

  { if this server is being registered, register the required key/values
    to expose it to Explorer }
  if Register then
    CreateRegKey(Format(ContextKey, [ClassName]), '', GUIDToString(ClassID),
      HKEY_CLASSES_ROOT)
  else
    DeleteRegKey(Format(ContextKey, [ClassName]));

end;

Compile for 32-bit or 64-bit platform

At this point we just need to compile the extension, for this sample the Win APIs and RTL methods are the same for both platforms, we don’t need any specific code. You can define the target platform through the Project Manager, by default your project target 32-bit Windows, right click on Target Platforms to add 64-bit Windows.

Delphi Project Manager - Platform

You can’t register 32-bit dll in 64-bit operation system, and you can not register 64-bit dll in 32-bit operation system. If you are using your develop machine to test, compile for the platform compatible with your OS.

 

Registering the CloudUpload Shell Extension

First, you must Run as Administrator the application you are going to use to register the shell extensions even if you are the Administrator user.

32-bit shell extensions can be registered through the IDE, and command line (cmd) can be used to register 32-bit and 64-bit.

Here the cmd line to register and unregister:

– Run as Administrator the cmd;

– Register the extension using the following command line: regsvr32 <PATH WHERE IS LOCATED THE DLL>CloudUpload.dll

– To unregister the extension using the following command line: regsvr32 <PATH WHERE IS LOCATED THE DLL>CloudUpload.dll /u

After register the DLL you can open the Windows Explorer, select one file and right click, you will see the new menu “Send file from Explorer to the Cloud”. The following screenshot show the shell extension on my Windows 7 64-bit.

Shell Extension - Windows Explorer

You can download he source code in 2 different ways:

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/shell-extension-for-windows-32-bit-and-64-bit-with-delphi-xe2/feed/ 6
Delphi XE3 and C++Builder XE3 Hotfixes 1, 2 and 3 http://www.andreanolanusse.com/en/delphi-xe3-and-cbuilder-xe3-hotfixes-1-2-and-3/ http://www.andreanolanusse.com/en/delphi-xe3-and-cbuilder-xe3-hotfixes-1-2-and-3/#comments Thu, 27 Sep 2012 06:50:15 +0000 http://www.andreanolanusse.com/en/?p=870 Three new hotfixes are available for Delphi XE3 and C++Builder XE3. Hotfix 1 – addresses an issue with ShowMessage in a FireMonkey application on certain locales on Mac OS X – download Hotfix 2 – addresses issues with the GestureManager in a FireMonkey application – download Hotfix 3 – For Professional edition only, addresses an issue in […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Three new hotfixes are available for Delphi XE3 and C++Builder XE3.

  • Hotfix 1 – addresses an issue with ShowMessage in a FireMonkey application on certain locales on Mac OS X – download
  • Hotfix 2 – addresses issues with the GestureManager in a FireMonkey application – download
  • Hotfix 3 – For Professional edition only, addresses an issue in using SQLite driver on the Professional edition – download

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/delphi-xe3-and-cbuilder-xe3-hotfixes-1-2-and-3/feed/ 2
NO Rave Reports in Delphi XE3 and C++Builder XE3 http://www.andreanolanusse.com/en/no-rave-reports-in-delphi-xe3-and-cbuilder-xe3/ http://www.andreanolanusse.com/en/no-rave-reports-in-delphi-xe3-and-cbuilder-xe3/#comments Sun, 16 Sep 2012 06:14:01 +0000 http://www.andreanolanusse.com/en/?p=865 In case Rave Reports is the report solution for your Delphi or C++Builder applications, you will find out that Rave Reports is no longer there. Delphi and C++Builder developers has been complain for a while about Nevrona support, this is not different now. At this point Nevrona didn’t released Rave Reports for XE3 and there […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
In case Rave Reports is the report solution for your Delphi or C++Builder applications, you will find out that Rave Reports is no longer there. Delphi and C++Builder developers has been complain for a while about Nevrona support, this is not different now. At this point Nevrona didn’t released Rave Reports for XE3 and there is no news on their website.

FastReport has been present in Delphi and C++Builder since XE2 and it’s part of XE3, of course you are thinking about the painful migration process, time and resource necessarily to make the migration. The time and resource is something that only you will be able to determine, the migration of your reports can be done through FastReport. FastReport provide a tool that convert reports created with Rave, QuickReport and ReportBuilder to FastReport. I tried this convertor last year and I was able to migrate a simple report from Rave to FastReport, give a shoot and see how complex reports can be converted using this tool.

In case you have problems to convert your Rave reports, visit FastReports forum. If you already converted reports through the Fast Report convertor, please share your experience on the comment session, it will help others.

Also, you always has the possibility to choose other report solution, for example: Report Builder (commercial), FortesReport (free and open source) and others

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/no-rave-reports-in-delphi-xe3-and-cbuilder-xe3/feed/ 9
Delphi Third Party Alliance and Delphi XE3 EULA reverted http://www.andreanolanusse.com/en/delphi-third-party-alliance-facebook-group/ http://www.andreanolanusse.com/en/delphi-third-party-alliance-facebook-group/#comments Mon, 03 Sep 2012 04:36:04 +0000 http://www.andreanolanusse.com/en/?p=861 Delphi Third Party Alliance I just got an invitation to join a Facebook group called “Delphi Third Party Alliance”, based on the group description the goal is “promote a healthy Delphi Third Party ecosystem and user community”. I like this idea, there are some many components out there and this group can be a good […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Delphi Third Party Alliance

I just got an invitation to join a Facebook group called “Delphi Third Party Alliance”, based on the group description the goal is “promote a healthy Delphi Third Party ecosystem and user community”. I like this idea, there are some many components out there and this group can be a good way to share what is available with the Delphi Community.

The group is administrated by several third party vendors, it’s an open group and I think anyone can join, check the link http://www.facebook.com/groups/DelphiThirdPartyAlliance/

Third parties are joining forces.

Delphi XE3 EULA reverted

Embarcadero just notify their Technology Partners about the final EULA for XE3, they reverted the decision that would affect new users for develop Client/Server applications with Delphi Pro.

See below the communication sent by Embarcadero to their Technology Partners, also the new EULA details.

We now have a final license agreement. There should be nothing in the final EULA – when it is truly finalized in the RTM version – that should cause any problems for partners or our customers. The license (EULA) is basically similar to the XE2 file. The EULA (which is included with every shipping product) will become “final” when the we sign off the release to manufacturing build. We have included portions of the final EULA below. Note that any Professional edition restrictions still included are only related only to the use of “dbExpress” technology and do not restrict the use of technolgy partner or other 3rd party client/server or multi-tier technologies by Professional edition customers.


ADDITIONAL LICENSE TERMS APPLICABLE TO STARTER EDITION

In the event Licensee has obtained a Starter Edition license the following terms hereby apply. Licensee may use the Product to develop software (i) for which Licensee does not charge directly or indirectly a fee or receive other consideration including but not limited a license fee, a service fee, a development fee, a consulting fee, a subscription fee, a support fee, a hosting fee or the like and (ii) for which Licensee only charges fees (including but not limited a license fee, a service fee, a development fee, a consulting fee, a subscription fee, a support fee, a hosting fee or the like) that cumulatively, on an annual basis, do not exceed USD$1000. In the event any (for profit or non-profit) company elects to license the software then (i) the total company revenues may not exceed USD$1000 and (ii) the total number of Starter Edition licenses deployed may not exceed 5.

ADDITIONAL LICENSE TERMS APPLICABLE TO SOFTWARE LICENSED FOR EDUCATIONAL USE

In the event Licensee has obtained an educational license the following terms apply. Licensee may exercise Licensee’s rights under this Agreement to use the Product and to create Works solely for Licensee’s own personal use in providing or receiving instruction within the limited scope of guided computer programming and/or software training courses in which Licensee are a direct and personal participant, either as student or instructor (“Courses”). Licensee may only reproduce, distribute and use Works, in source or object code form, to other participants of the Courses and then only for educational or training purposes. Licensee may not use the Products or Works created with the products for any commercial, business, governmental or institutional purpose of any kind, except to the extent Licensee are an instructor teaching a Course. All rights not specifically granted to Licensee herein are retained by Licensor.

ADDITIONAL LICENSE TERMS APPLICABLE TO RAD STUDIO, DELPHI AND C++BUILDER,
PROFESSIONAL AND PROFESSIONAL ACADEMIC EDITIONS

In the event Licensee has obtained a RAD Studio, Delphi or C++Builder Professional, or Professional Academic product license then the following terms apply.

Subject to the terms and conditions of this Agreement, Licensor grants to Licensee as the licensed user of the Product the limited right to use that portion of the Product identified as “dbExpress”, in executable form only, to access a local database installed on the same machine as the Work. Licensee may not use that portion of the Product identified as “dbExpress” in association with a database located on a different machine other than the machine on which the Works are installed.

CLIENT/SERVER PACK

If licensee has purchased a Client/Server Pack, the Licensee of RAD Studio, Delphi, or C++Builder XE3 Professional Edition (“Product”) may deploy that portion of the Product identified as “dbExpress” and dbExpress enterprise database drivers, in executable form only, to enable client server database access. Embarcadero may deliver the Product identified as “Enterprise,” however Licensee is licensed to use only the “Professional” edition features plus “dbExpress” and the Enterprise dbExpress database drivers in a client/server configuration. Licensee may evaluate the n-Tier DataSnap functionality included in the Enterprise Product delivered, but may not deploy or redistribute DataSnap.

 

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/delphi-third-party-alliance-facebook-group/feed/ 3
Controversial changes in the EULA for Delphi XE3 and C++Builder XE3 http://www.andreanolanusse.com/en/controversial-changes-in-the-eula-for-delphi-xe3-and-cbuilder-xe3/ http://www.andreanolanusse.com/en/controversial-changes-in-the-eula-for-delphi-xe3-and-cbuilder-xe3/#comments Wed, 29 Aug 2012 08:16:09 +0000 http://www.andreanolanusse.com/en/?p=857 As everybody knows Delphi XE3 will be released soon, some previews have been already published and there are some controversial topics around XEe, mostly because of leaks from people that clearly violated the NDA and this is shameful. The biggest controversy is the new license agreement (EULA) that leaked this week, where new users can […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
As everybody knows Delphi XE3 will be released soon, some previews have been already published and there are some controversial topics around XEe, mostly because of leaks from people that clearly violated the NDA and this is shameful.

The biggest controversy is the new license agreement (EULA) that leaked this week, where new users can only use the Delphi Professional Edition to access local database, either with the Delphi components or third parties, to develop applications Client/Server applications new users will have to use Enterprise edition or higher, or by the Client/Server Addon for Professional Edition. If you own a license from Delphi 1 to Delphi XE2 you will not be affected by this new restriction.

Here what the EULA said:

. the use of data access technologies for client/server
connectivity will no longer be allowed in the Professional edition.
This includes both Embarcadero and 3rd party solutions. Professional
users may only, legally, access local databases with their applications.

Users who want to use client/server database access can purchase a
Client/Server Add-On Pack for their Professional edition or purchase
an Enterprise, Ultimate or Architect edition product.

This restriction if for new licenses only. Users upgrading to XE3
will be “grandfathered” in that they will be able to continue to use
3rd party data access technologies for client/server database access
in version XE3 ..

 

Embarcadero haven’t official released the product and there are some open questions about the definition of new users. Here an example, let’s say you own a Delphi 2006 Professional today and want to upgrade to XE3 Professional, in this case you ARE NOT elegible for upgrade because you DON’T own one of the last 3 Delphi version, so you will have to buy a new license (“new user”). Based on this example and the new EULA, here come the question are you considered a “new user” or “upgraded user”? This is just one of many situations I can think right now and will beed to be clarified.

Besides all of this, the third party vendors (Embarcadero Technology Partners) certainly will be affected by this new restriction, we have today several third party providing database access technology to access Oracle, SQL Server, DB2, etc., and mostly used by developers that own Delphi Professional licenses.

The controversy is gigantic, Embarcadero’s forum has more them 300 replies in a single thread, several other blogs about the topic with lot’s of comments.

At least I can see some positive thing on all of this, Embarcadero now knows what many Delphi developers are thinking about this change and can start measuring the impact before release XE3 or make changes before the official announcement.

What are your thoughts on that?

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/controversial-changes-in-the-eula-for-delphi-xe3-and-cbuilder-xe3/feed/ 17
Delphi XE3, C++Builder XE3, Prism XE3 and HTML5 Builder is coming!!! http://www.andreanolanusse.com/en/delphi-xe3-cbuilder-xe3-prism-xe3-and-html5-builder-is-coming/ http://www.andreanolanusse.com/en/delphi-xe3-cbuilder-xe3-prism-xe3-and-html5-builder-is-coming/#comments Wed, 15 Aug 2012 08:02:41 +0000 http://www.andreanolanusse.com/en/?p=854 Embarcadero just announced RAD Studio XE3 World Tour, which will show the new versions of Delphi, C++Builder, Prism and the  “new” HTML5 Builder. This new version will bring some new features related with the new Windows 8 UI, which Microsoft called Metro and will call something else as they release Windows 8, FireMonkey and others stuffs […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Embarcadero just announced RAD Studio XE3 World Tour, which will show the new versions of Delphi, C++Builder, Prism and the  “new” HTML5 Builder.

This new version will bring some new features related with the new Windows 8 UI, which Microsoft called Metro and will call something else as they release Windows 8, FireMonkey and others stuffs that will be announced later.

I will be posting my thoughts about this new version as soon Embarcadero release that. This is going to be my first independent and imparcial review about a new version since I left Embarcadero, stay tuned.

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/delphi-xe3-cbuilder-xe3-prism-xe3-and-html5-builder-is-coming/feed/ 5
Caching data on DataSnap Server http://www.andreanolanusse.com/en/caching-data-on-datasnap-server/ http://www.andreanolanusse.com/en/caching-data-on-datasnap-server/#comments Wed, 01 Aug 2012 15:41:56 +0000 http://www.andreanolanusse.com/en/?p=499 DataSnap memory management is very powerful and a key DataSnap feature to implement cache solution. Imagine the scenario where the client application requests the same data thousands of times every day. You will have to touch the database every time. Let’s assume this data doesn’t change very often, like list of countries, states or cities. […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
DataSnap memory management is very powerful and a key DataSnap feature to implement cache solution. Imagine the scenario where the client application requests the same data thousands of times every day. You will have to touch the database every time. Let’s assume this data doesn’t change very often, like list of countries, states or cities.

When caching is implemented for this scenario, the first request to get the data from the database keeps it in memory. On the second and following requests the server will get the data from memory and return to the client. In other words, you just touch the database one time.

The combination between DataSnap memory management, DBXReader and ClientDataSet are what you need to implement a caching solution.

The DataSnap memory management is defined on the DSServerClass component using the LifeCycle property, which you can define as:

  • Server → One class instance is used per server, all clients get the same class instance from the server (Singleton)
  • Session → One class instance is used per DataSnap Session, each client get your own instance from the server (Statefull).
  • Invocation → One class instance is used per invocation method (Stateless), here you can decide when create and destroy the class.

Looking the LifeCycle property, you see that you can implement a cache solution per client (Session) or per server (Server) just by changing this property.

Let’s see how we can implement a caching solution using the scenario where I need to cache the list of states; this data is in the table STATE in this case.

My Server Class is a DSServerModule (class name TDMDataSet5) and contains 2 private and 1 public methods, which are:

private
   function GetRecords(Fields, Table: String): TDBXReader;
   function GetData(Cds : TClientDataSet; Fields, Table: String) : TDBXReader;
public
   function GetState: TDBXReader;

GetRecords will execute the query against the database and return the records as DBXReader, this method doesn’t implement any logic to check if the cache is already filled.

function TDMDataSet5.GetRecords(Fields, Table: String): TDBXReader;
var
    cmd: TDBXCommand;
begin

    cmd := DMServerContainer.GetConnection.DBXConnection.CreateCommand;
    try
      cmd.Text := 'Select ' + Fields + ' from ' + Table;
      Result := cmd.ExecuteQuery;
    except
      raise;
    end;
end;

Since DBXReader is unidirectional we can’t keep the data in memory, the solution is to copy and maintain the data in a ClientDataSet.

GetData is an internal method responsible to create and maintain the data in a cache, and return the data as DBXReader.

Looking at the implementation below, the method will get the data from the database (GetRecords) only if the ClientDataSet is not active, in other words we never had the data in the cache and it will be executed only one time. After the IF statement, the TDBXDataSetReader class will copy the data from ClientDataSet to DBXReader and return that.

function TDMDataSet5.GetData(Cds: TClientDataSet; Fields, Table: String): TDBXReader;
var
    Reader : TDBXReader;
begin
    if not Cds.Active then // Not active means, never move the data to ClientDataSet – no cache
      begin
      Reader := GetRecords(Fields, Table);
      TDBXDataSetReader.CopyReaderToClientDataSet( Reader, Cds );
      Reader.Free;
      Cds.Open;
    end;

    Result := TDBXDataSetReader.Create(Cds, False (* InstanceOwner *) );
end;

You may ask why I’m copying the data from ClientDataSet to DBXReader and not return the ClientDataSet directly. Two reasons:

  • I can’t marshal/unmarshal ClientDataSet as a JSON object
  • DataSnap converts DBXReader into JSON when the server methods are invocated through REST interfaces.

An important point here, the DSServerModule TDMDataSet5 will manage the cache. If I define the LifeCycle for this class as server it means only one cache instance for all clients “global cache”, defining it as Session means that I’m creating a cache for each client connected to the server.

On the client side using a native client as example we will get a DBXReader, it is up to your application to decide what to do with the data, but if you need to connect to this data with data-aware components, you just need to copy the DBXReader data into ClientDataSet, the TDBXDataSetReader.CopyReaderToClientDataSet method is the solution for that.

   TDBXDataSetReader.CopyReaderToClientDataSet(Reader, CDSCity);

If your data related with the State table change you have to implement a server method to refresh the data. Also using LifeCycle as Server the cache will be destroyed at the moment you stop the server, but if you use LifeCycle as Session the cache will be destroyed when the client disconnect to the server.

Using this technique you garanty the cache on the server side independent of the client implementation, also I would like to remember this solution works for DataSnap Servers, if you are using DataSnap REST interface you won’t have cache because every server request works as invocation lifecycle.

This is one realistic example to explain how to implement cache on DataSnap Server using data from database as example, also you learned how to move data from/to ClientDataSet to/from DBXReader.

You can download the source code sample here, look at the unit DataSetDM5.pas (Server) and FormDataSet5 (client).

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/caching-data-on-datasnap-server/feed/ 6
TDBXJsonTools copy/convert data between TDataSet – TJSONObject – DBXReader http://www.andreanolanusse.com/en/tdbxjsontools-copyconvert-data-between-tdataset-tjsonobject-dbxreader/ http://www.andreanolanusse.com/en/tdbxjsontools-copyconvert-data-between-tdataset-tjsonobject-dbxreader/#comments Wed, 01 Aug 2012 09:30:20 +0000 http://www.andreanolanusse.com/en/?p=818 You can copy data from DBXReader to ClientDataSet and vice-versa using dbxExpress framework, you probably already read some of my blog posts where I explain how it works in desktop applications, however in mobile platforms we don’t have ClientDataSet and in case you want something similar you always, what can you do? DataSnap Mobile Connectors […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
You can copy data from DBXReader to ClientDataSet and vice-versa using dbxExpress framework, you probably already read some of my blog posts where I explain how it works in desktop applications, however in mobile platforms we don’t have ClientDataSet and in case you want something similar you always, what can you do?

DataSnap Mobile Connectors has a class called TDBXJsonTools, this class allows developers to copy/convert data between DBXReader, TJSONObject, DBXReader and other types, you can do that in any mobile platform supported by the connectors, like: Java/Android, Java/BlackBerry, Objective-C, C#/Windows Phone and FreePascal.

In a native desktop application you would use TDBXDataSetReader.CopyReaderToClientDataSet(Reader, ClientDataSet) to copy the DBXReader to a ClientDataSet, in the mobile apps you will use TDBXJsonTools.CreateTDataSetFromJSON(DBXReader.asJSONObject).

Meanwhile, this is not only about copy/convert data, it gives you several ways to interact and transport data using different types and take advantage of the native types in each platform. For example, when using DataSet in FireMonkey on iOS it will use TDataSet class from FreePascal/Delphi RTL, when using with Java, TDataSet will be extension of TDBXReader and so on.

DBXReader is unidirectional and navigation is limited, when using FireMonkey on iOS developers can copy the DBXReader data to a DataSet, which is bi-directional, it will enable the navigation and use of other DataSet features.

The following code represents the TDBXJsonTools interface for FreePascal.

  TDBXJsonTools = class
  public
    class procedure jsonToDBX(obj: TJSONValue; var value: TDBXValue; dbxTypeName: String);
    class procedure JSONToValueType(json: TJSONArray; var vt: TDBXValueType);
    class function DBXParametersToJSONObject(dbxParameters: TDSParams) : TJSONObject;
    class function DBXReaderToJSONObject(dbxReader: TDBXReader): TJSONObject;
    class function CreateTDataSetFromJSON(value: TJSONObject): TDataset;
    class function TDataSetToJSONObject(value: TDataset): TJSONObject;
    class function GetTFieldTypeByTDBXDataTypes(DBXDataTypes: TDBXDataTypes) : TFieldType;
    class function GetTDBXDataTypesByTFieldType(FieldType: TFieldType) : TDBXDataTypes;
    class function CreateTStreamFromJSONArray(value: TJSONArray): TStream;
    class function StreamToJSONArray(value: TStream): TJSONArray;
    class function JSONToTableType(value: TJSONValue; dbxTypeName: String): TObject;
    class function SerializeTableType(Objetc: TObject): TJSONObject;

  end;

My recommendation is to continue using DBXReader as the primarily source of data, and when necessary take advantage of the TDBXJsonTools class.

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/tdbxjsontools-copyconvert-data-between-tdataset-tjsonobject-dbxreader/feed/ 1
PocketStudio source code available http://www.andreanolanusse.com/en/pocketstudio-source-code-available/ http://www.andreanolanusse.com/en/pocketstudio-source-code-available/#comments Tue, 31 Jul 2012 17:55:47 +0000 http://www.andreanolanusse.com/en/?p=849 You may remember PocketStudio, an IDE for Palm OS development where you could use Pascal language. If you are interested to get your hands on the source code (requires XE2 for compilation), you can order  direct from here http://www.winsoft.sk/psorder.htm. Even Palm OS is a dead platform, you can see a small demand for the legace Palm […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
You may remember PocketStudio, an IDE for Palm OS development where you could use Pascal language.

If you are interested to get your hands on the source code (requires XE2 for compilation), you can order  direct from here http://www.winsoft.sk/psorder.htm. Even Palm OS is a dead platform, you can see a small demand for the legace Palm devices.

Enjoy!!!

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/pocketstudio-source-code-available/feed/ 1
Agile the next chapter http://www.andreanolanusse.com/en/agile-the-next-chapter/ http://www.andreanolanusse.com/en/agile-the-next-chapter/#comments Mon, 30 Jul 2012 07:45:09 +0000 http://www.andreanolanusse.com/en/?p=846 It has been two months since my last blog post and lot of stuff going on in the meantime. I want to start saying thanks to everyone for all the message via comments here on my blog and e-mails sent direct to em, it’s such a good felling when we have our work recognized and rewarding to know […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
It has been two months since my last blog post and lot of stuff going on in the meantime. I want to start saying thanks to everyone for all the message via comments here on my blog and e-mails sent direct to em, it’s such a good felling when we have our work recognized and rewarding to know that I could help many developers around the world, once again thanks everyone.

Since then I have been super busy on my new job at Rally Software. Rally is the leader in Agile ALM and one of the major supporters of the agile movement. Rally’s ALM solution is fully based on Agile methodology, web-based, provide integration with many IDE’s, requirement management systems, source control management and much more.

Beyond the software development topics already covered here in my blog, agile methodologies will become part of my favorite topics, where I will discuss agiles values, the importance of teamwork, leadership applied to the agile and non-agile world, and other related subjects.

For those of you that has been following me for awhile, probably remember the Borland ALM times where we not only discuss about software development, but also about ALM Tools,  methodologies and processes, mostly of the discussions centric on waterfall model, which today is heavy, expensive and exceeded model in most cases.

Now on my new world I will bring the agile perspective and when possible compare with other models, clarifying the respective advantages and disadvantages, benefits, challenges, etc. .. Also, be able to share the Rally’s agile experience will be something unique, agile is  rooted in the culture of the company and this is a very important element when a organization starts the transformation to agile. Knowing this I will be sharing here on my blog several articles to make your team an agile team, show how Rally can help on this process and discuss SCRUM and Kanban frameworks.

See you on my next blog post and don’t forget to follow me on Twitter @andreanolanusse

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/agile-the-next-chapter/feed/ 4
Bye Bye Embarcadero!!! http://www.andreanolanusse.com/en/bye-bye-embarcadero/ http://www.andreanolanusse.com/en/bye-bye-embarcadero/#comments Tue, 01 May 2012 21:01:16 +0000 http://www.andreanolanusse.com/en/?p=839 Dear developers, My Borland history began in Brazil on December of 1995, had so many chapters (Borland/Inprise/CodeGear/Embarcadero), a new and important chapter started in December of 2006 when I moved to the United States and today this chapter comes to an end. Today is my last day at Embarcadero Technologies. I would like to thank […]

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
Dear developers,

My Borland history began in Brazil on December of 1995, had so many chapters (Borland/Inprise/CodeGear/Embarcadero), a new and important chapter started in December of 2006 when I moved to the United States and today this chapter comes to an end. Today is my last day at Embarcadero Technologies.

I would like to thank all of you around the world for the great time we shared together during all of this years, for all the conversations face-to-face, online, by email or phone. I have been your advocate during all of this years was something unique and enjoyable, something I will always take with me.

The 17 years of Delphi was only possible because of the support of this energetic community, keep sending your feedbacks to Embarcadero, specially now with FireMonkey, which has a long way to go.

This blog will continue and software development will continue to be the predominant topic here. My videos on YouTube will continue and I expected to publish other videos as well. Finally you can continue or start following me on Twitter @andreanolanusse

I will be around and you can contact me here or via e-mail andreano AT gmail DOT com

Now is time to start writing the next chapter and look for new opportunities, that I expect to be challenging and fun.

Sincerely,

Andreano Lanusse

Andreano Lanusse | Technology and Software Development Follow me on Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/en/bye-bye-embarcadero/feed/ 37