Almost all CodeRage 7 C++ replays are available on the CodeRage 7 C++ web site.
We're working on the remaining ones. ;)
Enjoy!
Friday, December 21, 2012
Monday, December 17, 2012
MVP Nuggets #3
Alan Fletcher did a write-up on "Cross-platform development the FireMonkey way"
Zarko Gajic wrote several articles, including:
"Have a Delphi Function Return Multiple Results / Values"
"Intercepting Keyboard Input with Delphi - Implementing a Keyboard Hook"
Juan Antonio Castillo wrote an article on "7-zip and Delphi" - Spanish - English (Google)
Vladislav Bajenov wrote an article "Working with IMAP in Synapse" - Russian - English (Google)
Brian Long compiled a list of resources and links from the Developer Direct webinars
He also summarized a lot of "Embarcadero's C++ stories"
Enjoy!
Zarko Gajic wrote several articles, including:
"Have a Delphi Function Return Multiple Results / Values"
"Intercepting Keyboard Input with Delphi - Implementing a Keyboard Hook"
Juan Antonio Castillo wrote an article on "7-zip and Delphi" - Spanish - English (Google)
Vladislav Bajenov wrote an article "Working with IMAP in Synapse" - Russian - English (Google)
Brian Long compiled a list of resources and links from the Developer Direct webinars
He also summarized a lot of "Embarcadero's C++ stories"
Enjoy!
Tuesday, December 11, 2012
Submitting a C++Builder XE3 application to the Mac AppStore
Yesterday, I filled a hole in the schedule with an impromptu session on visualization of mathematical functions. At the end I also showed how to submit the application to the Mac AppStore.
At the end I ran into an error saying "Invalid Binary" and I filled in the details for my contact information that it asked me for.
However, this didn't solve the entire problem.
You also need to turn off Dynamic RTL and Run Time Packages. Unless you code sign them manually on the Mac side.
Finally, in order to bypass an issue with the Incremental Linker for Mac, you will need to turn off the Incremental Linker.
Doing these three things in addition gave me a successful submission to the AppStore.
:)
At the end I ran into an error saying "Invalid Binary" and I filled in the details for my contact information that it asked me for.
However, this didn't solve the entire problem.
You also need to turn off Dynamic RTL and Run Time Packages. Unless you code sign them manually on the Mac side.
Finally, in order to bypass an issue with the Incremental Linker for Mac, you will need to turn off the Incremental Linker.
Doing these three things in addition gave me a successful submission to the AppStore.
:)
C++Builder R&D sessions at CodeRage 7 tomorrow
Don't miss these R&D sessions tomorrow (Wednesday) at CodeRage 7:
9am PST - Migrating C++Builder Code to 64-bit
This session will cover differences between the Embacadero Win32 and Win64 C++ compilers, comparing keywords, macros, extensions and standards conformance of bcc32 and bcc64. The focus will be on strategies to port existing C++ Projects (ActiveX, WebBroker, SOAP, etc) and writing new code in a way that works for both Platforms.
Bruneau Babet - Embarcadero
12pm PST - C++Builder 64-bit Windows Compiler: Supporting the Delphi Extensions Including RTTI
The C++ language standard provides a naming convention to identify language extensions using the double underbar (__) in front of any extensions. This session will discuss the language and runtime extensions added to the new C++Builder 64-bit Windows compiler to support Delphi language, types, components and enhanced RTTI.
Eli Boling - Embarcadero
1pm PST - Using the C++ Standard and Boost Libraries in your 32-bit & 64-bit Applications
The C++ Standard library is a set of classes and functions that are part of the ISO standard for C++. The Boost C++ libraries include a collection of portable C++ source libraries created by Boost community members (http://www.boost.org), some of which are now included as part of the C++ Standard library. In this session you will learn how you can use the C++ Standard and Boost libraries in your C++ applications for Windows and Mac OS X.
Lee Cantey - Embarcadero
Enjoy!
9am PST - Migrating C++Builder Code to 64-bit
This session will cover differences between the Embacadero Win32 and Win64 C++ compilers, comparing keywords, macros, extensions and standards conformance of bcc32 and bcc64. The focus will be on strategies to port existing C++ Projects (ActiveX, WebBroker, SOAP, etc) and writing new code in a way that works for both Platforms.
Bruneau Babet - Embarcadero
12pm PST - C++Builder 64-bit Windows Compiler: Supporting the Delphi Extensions Including RTTI
The C++ language standard provides a naming convention to identify language extensions using the double underbar (__) in front of any extensions. This session will discuss the language and runtime extensions added to the new C++Builder 64-bit Windows compiler to support Delphi language, types, components and enhanced RTTI.
Eli Boling - Embarcadero
1pm PST - Using the C++ Standard and Boost Libraries in your 32-bit & 64-bit Applications
The C++ Standard library is a set of classes and functions that are part of the ISO standard for C++. The Boost C++ libraries include a collection of portable C++ source libraries created by Boost community members (http://www.boost.org), some of which are now included as part of the C++ Standard library. In this session you will learn how you can use the C++ Standard and Boost libraries in your C++ applications for Windows and Mac OS X.
Lee Cantey - Embarcadero
Enjoy!
C++Builder XE3 64-bit and Update 1 for Delphi, C++Builder and RAD Studio XE3 released!
Yesterday we released the 64-bit compiler for C++Builder XE3.
At the same time, we also released Update 1 for Delphi, C++Builder and RAD Studio XE3. More details in Tim's post here.
Specific links: Delphi XE3 Update 1 C++Builder XE3 Update 1 RAD Studio XE3 Update 1
Fix List for Update 1
Enjoy!
At the same time, we also released Update 1 for Delphi, C++Builder and RAD Studio XE3. More details in Tim's post here.
Specific links: Delphi XE3 Update 1 C++Builder XE3 Update 1 RAD Studio XE3 Update 1
Fix List for Update 1
Enjoy!
Friday, December 7, 2012
MVP Nuggets #2
Primoz Gabrijelcic led a workshop on Visual LiveBindings last week
Danny Wind wrotes an article "Why I Like FireMonkey"
Salvador Jover wrote a recap of the XE3 Tour that Danysoft hosted - Spanish - English (Google Translate)
I'd like to celebrate Salvador Jover in particular - he re-blogs and re-tweets just about anything that is Delphi related in the blogosphere! Thank you so much Salvador!
Zarko Gajic wrote about "Understanding Owner Drawing in Delphi"
He also wrote about "Understanding and Processing Keyboard events in Delphi"
He also wrote about "Understanding and Using Windows Callback Functions in Delphi"
Enjoy!
Danny Wind wrotes an article "Why I Like FireMonkey"
Salvador Jover wrote a recap of the XE3 Tour that Danysoft hosted - Spanish - English (Google Translate)
I'd like to celebrate Salvador Jover in particular - he re-blogs and re-tweets just about anything that is Delphi related in the blogosphere! Thank you so much Salvador!
Zarko Gajic wrote about "Understanding Owner Drawing in Delphi"
He also wrote about "Understanding and Processing Keyboard events in Delphi"
He also wrote about "Understanding and Using Windows Callback Functions in Delphi"
Enjoy!
Wednesday, December 5, 2012
Components vs Children in FireMonkey
You have probably iterated through the Components array many many times as a Delphi developer.
Consider this simple application:
It's probably no surprise that listing the Components of the form like this...
...gives you the following output, which is very similar to the Structure View in the IDE, except that it doesn't show the relationships between the components.
Listing the children, and the children of all children (recursively) is simply done by using this procedure:
The above code will give us a tree output with indentation to show us the children, grandchildren, etc, like this:
The list of children is much longer than you would possibly except at first. We see for instance that in FireMonkey a TButton consists of a TLayout, a TSubImage and a TText. The TSubImage and the TText in turn have 4 animations each to handle hover-in/hover-out and pressing/releasing. Likewise the TMemo holds scrollbars, a popup context menu, and much more.
The entire output from ListChildren follows below:
Enjoy!
Consider this simple application:
It's probably no surprise that listing the Components of the form like this...
procedure TForm2.Button1Click(Sender: TObject);
var
i: Integer;
begin
Memo2.Lines.Clear;
for i := 0 to ComponentCount-1 do
Memo1.Lines.Add(Components[i].ClassName+' (Name = "'+Components[i].Name+'")')
end;
...gives you the following output, which is very similar to the Structure View in the IDE, except that it doesn't show the relationships between the components.
Listing the children, and the children of all children (recursively) is simply done by using this procedure:
procedure TForm2.ListChildren(Obj : TFMXObject; Level : Integer);
var
i: Integer;
begin
for i := 0 to Obj.ChildrenCount-1 do begin
Memo2.Lines.Add(StringOfChar(' ',2*Level)+
Obj.Children[i].ClassName+
' (Name = "'+
Obj.Children[i].Name+
'")');
ListChildren(Obj.Children[i],Level+1);
end;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Memo2.Lines.Clear;
ListChildren(Self,0);
end;
The above code will give us a tree output with indentation to show us the children, grandchildren, etc, like this:
The list of children is much longer than you would possibly except at first. We see for instance that in FireMonkey a TButton consists of a TLayout, a TSubImage and a TText. The TSubImage and the TText in turn have 4 animations each to handle hover-in/hover-out and pressing/releasing. Likewise the TMemo holds scrollbars, a popup context menu, and much more.
The entire output from ListChildren follows below:
TSubImage (Name = "")
TButton (Name = "Button1")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TText (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TMemo (Name = "Memo1")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TLayout (Name = "")
TSmallScrollBar (Name = "")
TSmallScrollBar (Name = "")
TScrollBar (Name = "")
TScrollBar (Name = "")
TBrushObject (Name = "")
TBrushObject (Name = "")
TFontObject (Name = "")
TScrollContent (Name = "")
TPopupMenu (Name = "")
TPopupMenuContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TEdit (Name = "Edit2")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TLayout (Name = "")
TLayout (Name = "")
TBrushObject (Name = "")
TBrushObject (Name = "")
TFontObject (Name = "")
TPopupMenu (Name = "")
TPopupMenuContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TContentEdit (Name = "")
TClearEditButton (Name = "ClearEditButton1")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TButton (Name = "Button2")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TText (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TViewport3D (Name = "Viewport3D1")
TDummy (Name = "")
TDummy (Name = "")
TCamera (Name = "")
TSphere (Name = "Sphere1")
TCube (Name = "Cube1")
TTextureMaterialSource (Name = "TextureMaterialSource1")
Enjoy!
Friday, November 30, 2012
MVP Nuggets #1
In "MVP Nuggets" I will be highlighting things that some of our MVPs have done in the last week or so.
Luciano Pimento wrote a tips and tricks article about improving performance and maintenance of your client/server applications.
Marcos Antonio Moreira did a Delphi multi-platform lecture at a university. He also did a University TV interview ahead of his talk. He blogs about it here.
Pedro Bento published an article "Introduction to Generics in Delphi" in Active Delphi (print magazine). His blog post.
Zarko Gajic wrote an article on "Creating, Parsing and Manipulating XML Documents with Delphi"
Juan Antonio Castillo wrote an article "Creating stylish applications in Delphi"
Alexander Bozhko celebrates the 3 year anniversary of DelphiFeeds.RU
Vladislav Bajenov writes about how to work with email attachements in Delphi
Nick Hodges writes about "Why You Should Choose Delphi"
Thanks to all active MVPs, and I look forward to highlighting more next time!
Luciano Pimento wrote a tips and tricks article about improving performance and maintenance of your client/server applications.
Marcos Antonio Moreira did a Delphi multi-platform lecture at a university. He also did a University TV interview ahead of his talk. He blogs about it here.
Pedro Bento published an article "Introduction to Generics in Delphi" in Active Delphi (print magazine). His blog post.
Zarko Gajic wrote an article on "Creating, Parsing and Manipulating XML Documents with Delphi"
Juan Antonio Castillo wrote an article "Creating stylish applications in Delphi"
Alexander Bozhko celebrates the 3 year anniversary of DelphiFeeds.RU
Vladislav Bajenov writes about how to work with email attachements in Delphi
Nick Hodges writes about "Why You Should Choose Delphi"
Thanks to all active MVPs, and I look forward to highlighting more next time!
CodeRage 7 for C++ takes place December 10-12. Don't miss it.
CodeRage 7 for C++ takes place December 10-12. Don't miss it. It will be 3 days totally dedicated to C++!
Don't miss the special session with Bjarne Stroustrup. Much more details in David I's blog post here.
Register for CodeRage 7 for C++ now.
David I posted a great blog post on Embarcadero's continued commitment to C, C99 and C++ here.
Enjoy!
Don't miss the special session with Bjarne Stroustrup. Much more details in David I's blog post here.
Register for CodeRage 7 for C++ now.
David I posted a great blog post on Embarcadero's continued commitment to C, C99 and C++ here.
Enjoy!
EKON16 and Mobile Studio
This post is a little late. My apologies. :)
I had the great honor of keynoting at EKON16 in Dusseldorf earlier in November. I presented RAD Studio XE3 and our RAD Studio road map.
I also did a well attended session "What's Cooking in the Labs". I gave a sneak preview of Mobile Studio for about 45 minutes and showed where we're going with it. I showed the seamless integration of writing your code, designing your UI, debugging and deploying your app. I showed our use of some native controls, like the the date picker for selecting dates and even custom pickers (TComboBox in Delphi). I showed our native use of the notification dialog for ShowMessage instead of a custom window as before.
Mobile Studio is going to be very cool.
Thanks to the EKON16 crew in Germany!
I had the great honor of keynoting at EKON16 in Dusseldorf earlier in November. I presented RAD Studio XE3 and our RAD Studio road map.
I also did a well attended session "What's Cooking in the Labs". I gave a sneak preview of Mobile Studio for about 45 minutes and showed where we're going with it. I showed the seamless integration of writing your code, designing your UI, debugging and deploying your app. I showed our use of some native controls, like the the date picker for selecting dates and even custom pickers (TComboBox in Delphi). I showed our native use of the notification dialog for ShowMessage instead of a custom window as before.
Mobile Studio is going to be very cool.
Thanks to the EKON16 crew in Germany!
Wednesday, October 31, 2012
CodeRage is next week! Register NOW!
CodeRage is less than a week away. If you haven't registered yet, why not just do it right now?
Register for CodeRage
Learn more about CodeRage
If you’re a software developer, this is your kind of conference. It’s technical. It’s flexible. It’s free!
CodeRage serves up real-world technical sessions designed to provide you with information you can put to work immediately in your projects, in your environment.
CodeRage brings you top industry speakers and technologists presenting on a wide variety of topics, all geared toward maximizing your productivity. Session and presenter highlights include:
• Delphi Product Address - John Thomas
• What's New in the Delphi Language - Bob Swart
• IDE Productivity Tips & Techniques - Brian Long
• New Features of FireMonkey FM2 - Darren Kosinski
• Building Scalable, Multi-tier Systems with DataSnap XE3 - PaweÅ‚ GÅ‚owacki
• Discover LiveBindings Advanced Features - Jim Tierney
...and so much more!
Attend the live online sessions and interact with session leaders and your peers. Can’t make a session? No problem, return at your convenience and watch a video replay on-demand.
See you there!
Register for CodeRage
Learn more about CodeRage
If you’re a software developer, this is your kind of conference. It’s technical. It’s flexible. It’s free!
CodeRage serves up real-world technical sessions designed to provide you with information you can put to work immediately in your projects, in your environment.
CodeRage brings you top industry speakers and technologists presenting on a wide variety of topics, all geared toward maximizing your productivity. Session and presenter highlights include:
• Delphi Product Address - John Thomas
• What's New in the Delphi Language - Bob Swart
• IDE Productivity Tips & Techniques - Brian Long
• New Features of FireMonkey FM2 - Darren Kosinski
• Building Scalable, Multi-tier Systems with DataSnap XE3 - PaweÅ‚ GÅ‚owacki
• Discover LiveBindings Advanced Features - Jim Tierney
...and so much more!
Attend the live online sessions and interact with session leaders and your peers. Can’t make a session? No problem, return at your convenience and watch a video replay on-demand.
See you there!
Tuesday, October 30, 2012
BVS Solitaire Collection for Mac
BVS Solitaire Collection for Mac is written in Delphi XE3 using FireMonkey, and was approved a couple of weeks ago. It is available in the Mac App Store at https://itunes.apple.com/app/bvs-solitaire-collection/id560152267?mt=12
Enjoy!
Enjoy!
Thanks DAPUG and Jens Fudge!
I had the pleasure of speaking at a 2-day DAPUG workshop in Denmark on October 23-24. The work shop was a full house and sold out. I enjoyed the interactive crowd very much.
Very special thanks go out to Jens Fudge (MVP) and his family. They were awesome hosts for a couple of days after the workshop.
Very special thanks go out to Jens Fudge (MVP) and his family. They were awesome hosts for a couple of days after the workshop.
Thursday, October 4, 2012
Product or License Validation Error
If you ever see the error "Product or License Validation Error" pop up, the first thing you should do is Google the exact error message. If you do so, you will find the first hit to be exactly what you want - Starting RAD Studio 2010/XE/XE2/XE3 results in Product or License Validation Error.
Wednesday, October 3, 2012
Lots of R&D blogs on RAD Studio XE3
Darren Kosinski has blogged about FireMonkey 2 Under The Hood Changes: Properties and FireMonkey 2 Under The Hood Changes: PlatformServices
Eugene Kryukov has blogged about Bitmap Styles in FireMonkey 2.0, DirectX 10 in FireMonkey 2.0 and Styles Performance in XE3
Jim Tierney has blogged about XE3 Visual LiveBindings: Link controls to component properties and XE3 Visual LiveBindings: Actions
José León has blogged about HTML5 Builder – Client Pages
Masahiro Arai has blogged about Are you ready for Windows 8? Here is Live Tiles for your Apps
Sergey Roschin has blogged about TAction in XE3 (Google Translate link)
Stephen Blas has blogged about RAD Studio XE3 and SQLite
Yaroslav Brovin has blogged about Scrolling images by hand, using FMX 2.0, Part 1 (Google Translate link)
All perfect homework fodder to chew on in preparation for CodeRage 7! :)
Eugene Kryukov has blogged about Bitmap Styles in FireMonkey 2.0, DirectX 10 in FireMonkey 2.0 and Styles Performance in XE3
Jim Tierney has blogged about XE3 Visual LiveBindings: Link controls to component properties and XE3 Visual LiveBindings: Actions
José León has blogged about HTML5 Builder – Client Pages
Masahiro Arai has blogged about Are you ready for Windows 8? Here is Live Tiles for your Apps
Sergey Roschin has blogged about TAction in XE3 (Google Translate link)
Stephen Blas has blogged about RAD Studio XE3 and SQLite
Yaroslav Brovin has blogged about Scrolling images by hand, using FMX 2.0, Part 1 (Google Translate link)
All perfect homework fodder to chew on in preparation for CodeRage 7! :)
Sunday, September 30, 2012
Thursday, September 27, 2012
Introduction to DataSnap: Article and Video in Spanish
Luis Felipe Gonzalez Torres, Embarcadero MVP, has published an article and video in Spanish - DataSnap: Introducción y ejemplo simple. Documento en Español y Video
The Google Translate version in English
Thanks Luis Felipe!
The Google Translate version in English
Thanks Luis Felipe!
Friday, September 21, 2012
Thanks Nirav Kaku, Embarcadero MVP!
Nirav is on FIRE!
Check these blogs out:
How I used Delphi’s RTTI Context with Custom Attributes using Datasnap + REST
Why you should use Delphi’s Unit Testing – DUNIT
Lot's of JSON, REST, JavaScript - Check out INDUG's blog for more of Nirav's posts!
Nirav also did a great presentation today on Web application development using Delphi, Datasnap, JavaScript, JSON and UniGUI (extJS).
Thanks Nirav!
Looking forward to CodeRage 7!!!
Check these blogs out:
How I used Delphi’s RTTI Context with Custom Attributes using Datasnap + REST
Why you should use Delphi’s Unit Testing – DUNIT
Lot's of JSON, REST, JavaScript - Check out INDUG's blog for more of Nirav's posts!
Nirav also did a great presentation today on Web application development using Delphi, Datasnap, JavaScript, JSON and UniGUI (extJS).
Thanks Nirav!
Looking forward to CodeRage 7!!!
Thursday, September 20, 2012
RAD Studio Mobile Roadmap Published
For those of you chomping at the bit for information about our mobile plans for RAD Studio - here is the RAD Studio Mobile Roadmap as published today!
Enjoy!
Enjoy!
10,000 Developers Flock to Embarcadero RAD Studio XE3 World Tour
"We develop desktop, web and mobile software solutions for many different businesses that run on XP, Vista, Windows 7, Windows 8 and OS X," said Andrew Tierney, CEO CastleSoft. "We found that the new RAD Studio XE3 gives you an edge over your competition. We can quickly produce cross-platform Windows 8 style applications using its rich framework."
"I have worked with Delphi for the last 17 years, since Delphi 1," said Guinther Pauli, Software Engineer. "Without a doubt, Delphi XE3 is one of the best versions of Delphi of all time."
"With RAD Studio XE3 we can create and test all kinds of applications," said Adriano Santos, Operations Director, Get It! Technology. "RAD Studio XE3 is the tool that was needed to boost my sales, streamline the development process and raise the technical level of my startup."
Full article
"I have worked with Delphi for the last 17 years, since Delphi 1," said Guinther Pauli, Software Engineer. "Without a doubt, Delphi XE3 is one of the best versions of Delphi of all time."
"With RAD Studio XE3 we can create and test all kinds of applications," said Adriano Santos, Operations Director, Get It! Technology. "RAD Studio XE3 is the tool that was needed to boost my sales, streamline the development process and raise the technical level of my startup."
Full article
Wednesday, September 19, 2012
Thank you Primoz Gabrijelcic!
Primoz Gabrijelcic, Embarcadero MVP in Slovenia, did an awesome job on the RAD Studio XE3 Launch in Ljubljana yesterday!
Thanks Primoz!
Thanks Primoz!
Brazil: Official FaceBook page and YouTube channel
We have a new Facebook page and a new YouTube channel for our community members in Brazil as follows.
Embarcadero Delphi Brasil Facebook page: Find out what's new with Embarcadero such as promotions, events, technical articles and videos.
Embarcadero do Brasil YouTube channel: Watch videos in Portuguese: product demos, tutorials and events such as webinars.
Enjoy!
Embarcadero Delphi Brasil Facebook page: Find out what's new with Embarcadero such as promotions, events, technical articles and videos.
Embarcadero do Brasil YouTube channel: Watch videos in Portuguese: product demos, tutorials and events such as webinars.
Enjoy!
Thanks Juan Antonio Castillo!
Juan Antonio Castillo, Embarcadero MVP in Guatemala, did a great job presenting the RAD Studio XE3 Product Address today in a webinar. He gave people a quick intro to RAD Studio XE3, Windows 8, Metropolis, FireMonkey, Visual LiveBindings and more.
Thanks Juan!
Thanks Juan!
Monday, September 17, 2012
Sunday, September 16, 2012
EKON 16 November 5-7 in Düsseldorf, Germany
[caption id="attachment_39320" align="alignnone" width="300" caption=" "][/caption]
I'll be at EKON 16 doing the keynote and two more sessions.
Hope to see you there!
I'll be at EKON 16 doing the keynote and two more sessions.
Hope to see you there!
New MVP members
Please join me in welcoming the following nine new members of the Embarcadero MVP Program:
Bruno Fierens, Belgium
Francois Piette, Belgium
Kelyn Pena, Dominican Republic
Jim McKeeth, USA
Nirav Kaku, India
Martin Strohal, Germany
Mike Sutton, United Kingdom
Xavier Martinez, Spain
Zarko Gajic, Croatia
Thanks for your support guys! Looking forward to many awesome blogs, articles, etc. :)
Bruno Fierens, Belgium
Francois Piette, Belgium
Kelyn Pena, Dominican Republic
Jim McKeeth, USA
Nirav Kaku, India
Martin Strohal, Germany
Mike Sutton, United Kingdom
Xavier Martinez, Spain
Zarko Gajic, Croatia
Thanks for your support guys! Looking forward to many awesome blogs, articles, etc. :)
RAD Studio XE3 World Tour in Full Force
Hopefully you've come to an event near you, or you're planning on coming to an event near you, to see what's new in RAD Studio XE3.
We're about half-way through the list of cities, but there are plenty left. :)
You can catch a glimpse of the excitement from Pawel's blog - Prague and Bratislava, as well as Stephen's blog - Oslo.
David I will be in London, Amsterdam, Warsaw and Heidelberg this coming week!
Don't miss the most exciting RAD Launch ever!
And don't forget - order XE3 in the next 12 days and you get the Bonus Pack - $250 worth of cool add-ons for free!
We're about half-way through the list of cities, but there are plenty left. :)
You can catch a glimpse of the excitement from Pawel's blog - Prague and Bratislava, as well as Stephen's blog - Oslo.
David I will be in London, Amsterdam, Warsaw and Heidelberg this coming week!
Don't miss the most exciting RAD Launch ever!
And don't forget - order XE3 in the next 12 days and you get the Bonus Pack - $250 worth of cool add-ons for free!
Record Helpers and Function Discovery
Rodrigo Ruz has written a whole bunch of great XE3 articles recently. He has a three part series on Winapi.Functiondiscovery and an article on Record Helpers for Simple Types here:
Winapi.Functiondiscovery Part 1
Winapi.Functiondiscovery Part 2
Winapi.Functiondiscovery Part 3
Record Helpers for Simple Types
Enjoy!
Winapi.Functiondiscovery Part 1
Winapi.Functiondiscovery Part 2
Winapi.Functiondiscovery Part 3
Record Helpers for Simple Types
Enjoy!
Thursday, September 13, 2012
Embarcadero Affiliate Program - Make Money on Referrals!
Yes, you read that correctly. If you sign up as an Embarcadero Affiliate, use our banners and make sales happen, you will earn money!
What are you waiting for? Sign up now!
Enjoy!
What are you waiting for? Sign up now!
Enjoy!
Monday, September 3, 2012
RAD Studio XE3: Laguna Hills, CA and Santa Monica, CA
If you're anywhere near Laguna Hills, CA or Santa Monica, CA, please consider coming to the RAD Studio XE3 Launch events!
The Laguna Hills event is 7pm-9pm on September 4th, and the Santa Monica event is 7pm-9pm on September 6th.
Please pre-register here for Orange County (Laguna Hills)
Please pre-register here for Los Angeles (Santa Monica)
See you there! :)
The Laguna Hills event is 7pm-9pm on September 4th, and the Santa Monica event is 7pm-9pm on September 6th.
Please pre-register here for Orange County (Laguna Hills)
Please pre-register here for Los Angeles (Santa Monica)
See you there! :)
Thanks Australia and India!!!
Many thanks to our Australian and Indian crews for making my APAC Tour fun and rewarding!
Damien Bootsma and myself launched RAD Studio XE3 in Sydney, Melbourne and Brisbane. Anil Mahadev and myself launched it in Bangalore and Mumbai.
Thanks to everyone who came to the event. Lots of great conversations and interest!
Get involved!
If you're a Delphi Developer in Australia you should join ADUG - Australian Delphi Users Group - your local Delphi user group in Australia.
If you're a Delphi Developer in India you should join INDUG - India Delphi User Group - your local user group in India.
Thanks again to Australia and India!
Damien Bootsma and myself launched RAD Studio XE3 in Sydney, Melbourne and Brisbane. Anil Mahadev and myself launched it in Bangalore and Mumbai.
Thanks to everyone who came to the event. Lots of great conversations and interest!
Get involved!
If you're a Delphi Developer in Australia you should join ADUG - Australian Delphi Users Group - your local Delphi user group in Australia.
If you're a Delphi Developer in India you should join INDUG - India Delphi User Group - your local user group in India.
Thanks again to Australia and India!
Tuesday, August 21, 2012
The Embarcadero MVP Program
You may have heard of this program under the working name of "Embarcadero Evangelist Program". The official name will be "The Embarcadero MVP Program". It's a program tailored to recognizing our awesome advocates in our great community.
An official landing page with links to everyone's pages etc, as well as official logos, and other materials are in the works, but I wanted to take this opportunity to preview the program if you will, just like we're starting off the XE3 World Tour as preview events.
It brings me great pleasure to announce this program, and to give you the list of the current MVPs. Some of them have already blogged and/or tweeted. More people are in the queue for sure, and I'm hereby asking anyone that wants to, to send me name and contact information for anyone that you believe should be an MVP. An MVP is someone who is a well known advocate in the community, and does great stuff for everyone's benefit.
Without further ado, here is the current list of MVPs ordered by country:
AUSTRALIA:
Glenn Stephens
Lachlan Gemmell
BELGIUM:
Filip Lagrou
BRAZIL:
Adriano Santos
Alan Glei
Caique Rodrigues
Carlos Agnes
Daniel Wildt
Guinther Pauli
Luciano Pimenta
Marcelo Nogueira
Marcelo Varela
Marcos Antonio Moreira
Marcos Gomes
Newton Michel de Oliveira
Pedro Bento
Ricardo Boaro
Rodrigo Carreiro
Samuel David
Victory Fernandes
CZECH REPUBLIC:
Radek Cervinka
DENMARK:
Jens Fudge
FRANCE:
Didier Cabale
Felix Colibri
GERMANY:
Daniel Magin
Daniel Wolf
Uwe Raabe
GUATEMALA:
Juan Castillo
ITALY:
Marco Cantu
MEXICO:
Eliseo Gonzalez
Marco Santin
NETHERLANDS:
Bob Swart
Danny Wind
NEW ZEALAND:
Alister Christie
PERU:
Jose Castillo
RUSSIA:
Alexander Alexeev
Alexander Bozhko
Andrey Terekhov
Vladislav Bajenov
SLOVENIA:
Primoz Gabrijelcic
SPAIN:
Germán Estévez Ruiz
Luis Alfonso Rey
Salvador Jover
SWEDEN:
Magnus Flysjö
UNITED KINGDOM:
Brian Long
UNITED STATES:
Alan Fletcher
Cary Jensen
Nick Hodges
Ray Konopka
Robert Love
Olaf Monien
VENEZUELA:
Luis Felipe González Torres
Thanks again to all these great folks, and everyone else for their support. As I said, please remember, this is not an exhaustive list by any means, but I think it's a great start for the program. More names will be added over time, and assets to recognize these great folks will be forthcoming.
Enjoy!
An official landing page with links to everyone's pages etc, as well as official logos, and other materials are in the works, but I wanted to take this opportunity to preview the program if you will, just like we're starting off the XE3 World Tour as preview events.
It brings me great pleasure to announce this program, and to give you the list of the current MVPs. Some of them have already blogged and/or tweeted. More people are in the queue for sure, and I'm hereby asking anyone that wants to, to send me name and contact information for anyone that you believe should be an MVP. An MVP is someone who is a well known advocate in the community, and does great stuff for everyone's benefit.
Without further ado, here is the current list of MVPs ordered by country:
AUSTRALIA:
Glenn Stephens
Lachlan Gemmell
BELGIUM:
Filip Lagrou
BRAZIL:
Adriano Santos
Alan Glei
Caique Rodrigues
Carlos Agnes
Daniel Wildt
Guinther Pauli
Luciano Pimenta
Marcelo Nogueira
Marcelo Varela
Marcos Antonio Moreira
Marcos Gomes
Newton Michel de Oliveira
Pedro Bento
Ricardo Boaro
Rodrigo Carreiro
Samuel David
Victory Fernandes
CZECH REPUBLIC:
Radek Cervinka
DENMARK:
Jens Fudge
FRANCE:
Didier Cabale
Felix Colibri
GERMANY:
Daniel Magin
Daniel Wolf
Uwe Raabe
GUATEMALA:
Juan Castillo
ITALY:
Marco Cantu
MEXICO:
Eliseo Gonzalez
Marco Santin
NETHERLANDS:
Bob Swart
Danny Wind
NEW ZEALAND:
Alister Christie
PERU:
Jose Castillo
RUSSIA:
Alexander Alexeev
Alexander Bozhko
Andrey Terekhov
Vladislav Bajenov
SLOVENIA:
Primoz Gabrijelcic
SPAIN:
Germán Estévez Ruiz
Luis Alfonso Rey
Salvador Jover
SWEDEN:
Magnus Flysjö
UNITED KINGDOM:
Brian Long
UNITED STATES:
Alan Fletcher
Cary Jensen
Nick Hodges
Ray Konopka
Robert Love
Olaf Monien
VENEZUELA:
Luis Felipe González Torres
Thanks again to all these great folks, and everyone else for their support. As I said, please remember, this is not an exhaustive list by any means, but I think it's a great start for the program. More names will be added over time, and assets to recognize these great folks will be forthcoming.
Enjoy!
Monday, August 20, 2012
XE3 and Beyond
JT just blogged "XE3 and beyond" where he goes into detail about our upcoming Mobile Tool Chain.
A must read, folks!
Enjoy!
A must read, folks!
Enjoy!
Wednesday, August 15, 2012
RAD Studio XE3 World Tour - Get a look under the surface
Come see what’s new in RAD Studio XE3 at a free World Tour event near you!
Exciting new versions are coming soon. Be among the first to see what's new in RAD Studio XE3 – including Delphi, C++Builder, Prism, InterBase and the new HTML5 Builder at one of these live launch tour events.
Get ready to develop apps for Windows 8. Learn how to give your existing VCL and FireMonkey apps a new Windows 8 look and functionality. See what's new in FM2, the next generation FireMonkey application platform. And get a first look at the newest member of the RAD Studio family – HTML5 Builder!
Yours truly will be in Sydney, Melbourne, Brisbane, Bangalore and Mumbai as follows:
Sydney - August 22, 2012 at 8:30am-12:30pm
Melbourne - August 23, 2012 at 8:30am-12:30pm
Brisbane - August 24, 2012 at 8:30am-12:30pm
Bangalore - August 27, 2012 at 4:00pm-9:00pm
Mumbai - August 29, 2012 at 4:00pm-9:00pm
See you soon!
Friday, August 10, 2012
Wednesday, August 1, 2012
FireMonkey eBook coming!
Graeme Chandler has spilled some beans! He's coming out with a FireMonkey eBook at the end of August according to this comment on my blog!
Friday, July 27, 2012
Thursday, July 26, 2012
Book: Delphi XE2 Foundations by Chris Rolliston
I've been super busy lately, and just caught up on some newsgroup postings, and found this gem!
Delphi XE2 Foundations
If I were you, I'd buy this book purely based on the 5-star ratings!
Enjoy!
Delphi XE2 Foundations
If I were you, I'd buy this book purely based on the 5-star ratings!
Enjoy!
Monday, July 23, 2012
Webinar: VCL to FireMonkey migration
Register for my VCL to FireMonkey migration webinar and get a free copy of Mida Converter!
The webinar takes place three different times on July 25th. See above link for details.
Enjoy!
The webinar takes place three different times on July 25th. See above link for details.
Enjoy!
Wednesday, June 13, 2012
Replay for "Creating iOS Apps Using Delphi XE2" is up
The replay
In other news, the app update I submitted during this webinar (Anders' Analog Clock) was approved last night and is available in the AppStore now.
Enjoy!
In other news, the app update I submitted during this webinar (Anders' Analog Clock) was approved last night and is available in the AppStore now.
Enjoy!
Monday, June 4, 2012
Webinar: Creating iOS Apps Using Delphi XE2
Join me for my webinar "Creating iOS Apps Using Delphi XE2" on Wednesday June 6th at 6am, 11am and 5pm PDT.
PS: MathViz 1.1 for iOS is now free in the AppStore. Enjoy!
PS: MathViz 1.1 for iOS is now free in the AppStore. Enjoy!
Thursday, May 24, 2012
Reflection for Mac
Just bought this brilliant piece of software - http://www.reflectionapp.com/
Now I can demo iPhone/iPad apps on the Mac without cables.
It works over AirPlay with no software needed on the iPhone/iPad.
Works with iPhone 4S and iPad 2+.
I've already made sure that Camtasia can screen record the iPad screen on the Mac as well. Looking forward to using this in upcoming webinars!
Now I can demo iPhone/iPad apps on the Mac without cables.
It works over AirPlay with no software needed on the iPhone/iPad.
Works with iPhone 4S and iPad 2+.
I've already made sure that Camtasia can screen record the iPad screen on the Mac as well. Looking forward to using this in upcoming webinars!
Monday, May 21, 2012
Friday, May 18, 2012
HotFix 1 is live!
MSI Installer for HotFix 1
ISO for HotFix 1
This hotfix address a lot of things, including the arm7 issue for iOS.
Enjoy!
ISO for HotFix 1
This hotfix address a lot of things, including the arm7 issue for iOS.
Enjoy!
Tuesday, May 15, 2012
MathViz for iOS updated and free for two days!
MathViz 1.1 update has been approved. I added gesture support and a reset button.
Pardon me while I play around and get a feel for how pricing campaigns work... ;)
MathViz 1.1 is free for two days. I believe I exhausted the potential for new customers (without doing any marketing) so the party right now is up to just a couple of pizzas (if I do Papa Murphy's Take'n'Bake)... ;)
Please feel free to download MathViz in the next couple of days while it's free. Please consider reviewing it as well.
BTW, MathViz will be permanently free at some point, and the source code will be freed at some point as well.
Thanks for playing! Enjoy!
Pardon me while I play around and get a feel for how pricing campaigns work... ;)
MathViz 1.1 is free for two days. I believe I exhausted the potential for new customers (without doing any marketing) so the party right now is up to just a couple of pizzas (if I do Papa Murphy's Take'n'Bake)... ;)
Please feel free to download MathViz in the next couple of days while it's free. Please consider reviewing it as well.
BTW, MathViz will be permanently free at some point, and the source code will be freed at some point as well.
Thanks for playing! Enjoy!
Tuesday, May 8, 2012
Playing sound on iOS? Anyone have a working Delphi XE2 FireMonkey sample?
I wish I had time for everything... I've tried this one a couple of times, but have run into issues with parsing framework this and that... ;)
So, here it is... Anyone got a simple example that plays a single sound effect and/or plays a background track?
From files that you deploy with the app (resources).
Background track from existing music library on device would be a sweet bonus.
I'll make sure you get credit if I use it in upcoming blogs, webinars, etc.
Thanks!
So, here it is... Anyone got a simple example that plays a single sound effect and/or plays a background track?
From files that you deploy with the app (resources).
Background track from existing music library on device would be a sweet bonus.
I'll make sure you get credit if I use it in upcoming blogs, webinars, etc.
Thanks!
Monday, May 7, 2012
3 more iOS components added - Pinch/Zoom/Rotate gesture recognizers plus a custom switch
I've uploaded three more components to CodeCentral. There are now 13 components and 8 demos in my submission.
The three components added:
PinchGestureRecognizer - zoom/pinch
RotationGestureRecognizer - rotation
Switch - custom labels for TSwitch - ON/OFF or YES/NO (or any 1-4 letter words you want)
Enjoy!
The three components added:
PinchGestureRecognizer - zoom/pinch
RotationGestureRecognizer - rotation
Switch - custom labels for TSwitch - ON/OFF or YES/NO (or any 1-4 letter words you want)
Enjoy!
Modifying FMX_Platform_iOS.pas to support surface mainWindow and add device orientation support
Here are the steps that I use in order to surface a couple of things that some of my custom iOS components and apps need.
These modifications are not supported by anyone. Except maybe me. You apply them entirely at your own risk.
Modify FMX_Platform_iOS.pas on your MAC as below. It's typically located in the /Developer/Embarcadero/fmi directory.
CAUTION: Save a copy of FMX_Platform_iOS.pas FIRST!
CAUTION: Any update of XE2 will delete your changes, so keep this file around if you have to redo the changes.
...
unit FMX_Platform_iOS;
...
interface
...
// TUIViewController and TUIWindow declarations moved from implementation to interface section
type
{ TUIViewController }
TUIViewController = objcclass(UIViewController)
private
public
function shouldAutorotateToInterfaceOrientation(AinterfaceOrientation: UIInterfaceOrientation): Boolean; override;
procedure didReceiveMemoryWarning; override;
procedure didAnimateFirstHalfOfRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation); override;
procedure didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation); override;
end;
{ TUIWindow }
TUIWindow = objcclass(UIWindow)
protected
public
Text: UITextField;
mainView: UIView;
mainController: TUIViewController;
end;
// mainWindow moved from implementation to interface section
// currentOrientation added to give current device orientation
// supportsPortrait etc added. You simply change these in your app code to False if not needed
var
mainWindow: TUIWindow;
currentOrientation : UIInterfaceOrientation;
supportsPortrait : Boolean = True;
supportsPortraitUpsideDown : Boolean = True;
supportsLandscapeRight : Boolean = True;
supportsLandscapeLeft : Boolean = True;
implementation
...
function TUIViewController.shouldAutorotateToInterfaceOrientation(
AinterfaceOrientation: UIInterfaceOrientation): Boolean;
begin
Result := ((AinterfaceOrientation = UIInterfaceOrientationLandscapeRight) and supportsLandscapeRight) or
((AinterfaceOrientation = UIInterfaceOrientationLandscapeLeft) and supportsLandscapeLeft) or
((AinterfaceOrientation = UIInterfaceOrientationPortrait) and supportsPortrait) or
((AinterfaceOrientation = UIInterfaceOrientationPortraitUpsideDown) and supportsPortraitUpsideDown);
if Result then
currentOrientation := AinterfaceOrientation;
end;
...
Enjoy!
These modifications are not supported by anyone. Except maybe me. You apply them entirely at your own risk.
Modify FMX_Platform_iOS.pas on your MAC as below. It's typically located in the /Developer/Embarcadero/fmi directory.
CAUTION: Save a copy of FMX_Platform_iOS.pas FIRST!
CAUTION: Any update of XE2 will delete your changes, so keep this file around if you have to redo the changes.
...
unit FMX_Platform_iOS;
...
interface
...
// TUIViewController and TUIWindow declarations moved from implementation to interface section
type
{ TUIViewController }
TUIViewController = objcclass(UIViewController)
private
public
function shouldAutorotateToInterfaceOrientation(AinterfaceOrientation: UIInterfaceOrientation): Boolean; override;
procedure didReceiveMemoryWarning; override;
procedure didAnimateFirstHalfOfRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation); override;
procedure didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation); override;
end;
{ TUIWindow }
TUIWindow = objcclass(UIWindow)
protected
public
Text: UITextField;
mainView: UIView;
mainController: TUIViewController;
end;
// mainWindow moved from implementation to interface section
// currentOrientation added to give current device orientation
// supportsPortrait etc added. You simply change these in your app code to False if not needed
var
mainWindow: TUIWindow;
currentOrientation : UIInterfaceOrientation;
supportsPortrait : Boolean = True;
supportsPortraitUpsideDown : Boolean = True;
supportsLandscapeRight : Boolean = True;
supportsLandscapeLeft : Boolean = True;
implementation
...
function TUIViewController.shouldAutorotateToInterfaceOrientation(
AinterfaceOrientation: UIInterfaceOrientation): Boolean;
begin
Result := ((AinterfaceOrientation = UIInterfaceOrientationLandscapeRight) and supportsLandscapeRight) or
((AinterfaceOrientation = UIInterfaceOrientationLandscapeLeft) and supportsLandscapeLeft) or
((AinterfaceOrientation = UIInterfaceOrientationPortrait) and supportsPortrait) or
((AinterfaceOrientation = UIInterfaceOrientationPortraitUpsideDown) and supportsPortraitUpsideDown);
if Result then
currentOrientation := AinterfaceOrientation;
end;
...
Enjoy!
Saturday, May 5, 2012
iOS Formula Keyboard
Just a teaser. I'll probably add this as an InAppPurchase for MathViz when I make MathViz free. ;)
Thanks to those who bought MathViz already! 25 copies sold for $0.99 each in 4 days! Enough for a couple of six packs for the office. ;)
PS: Source code for this one coming too. Mainly custom style work in this one.
Thanks to those who bought MathViz already! 25 copies sold for $0.99 each in 4 days! Enough for a couple of six packs for the office. ;)
PS: Source code for this one coming too. Mainly custom style work in this one.
Friday, May 4, 2012
May the Force be with you! (and MyEDN for iOS)
Happy Star Wars Day!
MyEDN was originally submitted to the AppStore for review on April 9th.
My first mistake was not including, setting up and populating a test account for Apple to test MyEDN. DOH!
That cost me about a week, because the review process is clocking at about 6-7 days it seems.
They sent me a request to update the review notes with a test account and test instructions, and finally submit the new meta data. Unfortunately the reviewer had put MyEDN in the wrong state, and it took me a while to figure out that the only way to get it back into Waiting for Review was to submit a new binary (actually the same one).
About a week later it was rejected with some unspecific pointers about the UI. This was the login screen at this point:
I asked for clarification, and got another couple of messages back from the reviewer that weren't specific enough for me to figure out what exactly they wanted instead.
I decided to use the Appeal option, and while waiting for that process I ripped the UI apart and recreated it from the ground up. I added info screens throughout as well as more functionality.
Yesterday I got a call back from a very nice person of the App Review Board, and it became clear that the issue wasn't UI at all. I had a link to www.embarcadero.com in my description of MyEDN. This is considered disallowed marketing, even though my phrasing was specifically "PS: An EDN account is required to use this app. If you don't have one, you can create one here..." - in retrospect a link to members.embarcadero.com would probably have worked better, but I opted to remove the link completely. I don't foresee anyone that isn't already an EDN member downloading MyEDN anyway. Finally, Apple had also found a crash bug, which is now addressed.
By this time I already had the new UI ready to go. My plan was to make it an update, but since MyEDN still wasn't approved I simply uploaded it as a new binary and it's now pending review in this form:
I'm much happier with this look and feel, and my hope is that the Force is with MyEDN this time. If the review cycle stays on it's current 6-7 day schedule MyEDN should go into review by the end of next week, and hopefully I've knocked out all issues and it will be approved so that you guys can have at it. I can't stand the fact that Cleggy teases me on a daily basis that EDN Mobile has been in Google Play for weeks and that he's updated it multiple times in the last couple of days. I told him that in his case no review was required, and that his UI is still nowhere near mine. Apple is holding MyEDN to a much higher standard than that! So there, Cleggy... ;)
Enjoy!
PS: All this experience with App Review feedback, Appeal etc will be awesome fodder for upcoming webinars as well, so that all of you can create awesome iOS apps.
MyEDN was originally submitted to the AppStore for review on April 9th.
My first mistake was not including, setting up and populating a test account for Apple to test MyEDN. DOH!
That cost me about a week, because the review process is clocking at about 6-7 days it seems.
They sent me a request to update the review notes with a test account and test instructions, and finally submit the new meta data. Unfortunately the reviewer had put MyEDN in the wrong state, and it took me a while to figure out that the only way to get it back into Waiting for Review was to submit a new binary (actually the same one).
About a week later it was rejected with some unspecific pointers about the UI. This was the login screen at this point:
I asked for clarification, and got another couple of messages back from the reviewer that weren't specific enough for me to figure out what exactly they wanted instead.
I decided to use the Appeal option, and while waiting for that process I ripped the UI apart and recreated it from the ground up. I added info screens throughout as well as more functionality.
Yesterday I got a call back from a very nice person of the App Review Board, and it became clear that the issue wasn't UI at all. I had a link to www.embarcadero.com in my description of MyEDN. This is considered disallowed marketing, even though my phrasing was specifically "PS: An EDN account is required to use this app. If you don't have one, you can create one here..." - in retrospect a link to members.embarcadero.com would probably have worked better, but I opted to remove the link completely. I don't foresee anyone that isn't already an EDN member downloading MyEDN anyway. Finally, Apple had also found a crash bug, which is now addressed.
By this time I already had the new UI ready to go. My plan was to make it an update, but since MyEDN still wasn't approved I simply uploaded it as a new binary and it's now pending review in this form:
I'm much happier with this look and feel, and my hope is that the Force is with MyEDN this time. If the review cycle stays on it's current 6-7 day schedule MyEDN should go into review by the end of next week, and hopefully I've knocked out all issues and it will be approved so that you guys can have at it. I can't stand the fact that Cleggy teases me on a daily basis that EDN Mobile has been in Google Play for weeks and that he's updated it multiple times in the last couple of days. I told him that in his case no review was required, and that his UI is still nowhere near mine. Apple is holding MyEDN to a much higher standard than that! So there, Cleggy... ;)
Enjoy!
PS: All this experience with App Review feedback, Appeal etc will be awesome fodder for upcoming webinars as well, so that all of you can create awesome iOS apps.
Tuesday, May 1, 2012
MathViz 1.0 for iOS approved and in the AppStore now!!!
MathViz 1.0 AppStore link
Before you ask why it's $0.99 and not free - I wanted to see if I could get a FireMonkey paid app approved, and I'm very happy to say that I could. And anyone can, of course!
I will leave it at $0.99 for the next couple of weeks, and anyone that wants to "donate" to a lunch, dinner, party or whatever it turns out to be, can do so in the next couple of weeks. After that it will become free for all.
The link above is live, but it will take up to 24 hours for MathViz to be searchable in the AppStores world wide.
Your purchases of MathViz will go to a couple of things - Apple, the IRS and finally some kind of FireMonkey party of some kind - total volume of paid sales and actual payouts from Apple will determine what will happen.
Now that MathViz is available I will use it for blog fodder, webinar fodder, and I will of course publish the source code.
Thanks everyone in advance for playing and giving feedback!
MathViz 1.0 is powered by TExpressionParser - a flexible and fast expression parser for logical and mathematical functions by Egbert van Nes, with contributions by John Bultena and Ralf Junker. Thanks for Egbert van Nes' explicit permission to use it in a paid app. :)
Before you ask why it's $0.99 and not free - I wanted to see if I could get a FireMonkey paid app approved, and I'm very happy to say that I could. And anyone can, of course!
I will leave it at $0.99 for the next couple of weeks, and anyone that wants to "donate" to a lunch, dinner, party or whatever it turns out to be, can do so in the next couple of weeks. After that it will become free for all.
The link above is live, but it will take up to 24 hours for MathViz to be searchable in the AppStores world wide.
Your purchases of MathViz will go to a couple of things - Apple, the IRS and finally some kind of FireMonkey party of some kind - total volume of paid sales and actual payouts from Apple will determine what will happen.
Now that MathViz is available I will use it for blog fodder, webinar fodder, and I will of course publish the source code.
Thanks everyone in advance for playing and giving feedback!
MathViz 1.0 is powered by TExpressionParser - a flexible and fast expression parser for logical and mathematical functions by Egbert van Nes, with contributions by John Bultena and Ralf Junker. Thanks for Egbert van Nes' explicit permission to use it in a paid app. :)
Tuesday, April 24, 2012
Sunday, April 15, 2012
Delphi Developer Days and Free Evening Events this week
I'm headed to Delphi Developer Days to do the Embarcadero keynote as well as a free evening event in each city - Washington DC (BWI area) and Chiacgo. Don't miss free food, drink and potentially valuable discounts at these events!
See you there!
See you there!
Friday, April 13, 2012
Math parsing function/component anyone?
I'm looking for a reasonably light-weight, simple and fast math function parser. It should not be a DLL. I need it to work on Windows, MacOSX and iOS. I would use it in a demo I want to build.
It must be able to parse and evaluate functions of (at least) two variables, for instance f(x,y) = sin(x^2+y^2)/(x^2+y^2).
I would use it like this (pseudo code):
Thanks!
It must be able to parse and evaluate functions of (at least) two variables, for instance f(x,y) = sin(x^2+y^2)/(x^2+y^2).
I would use it like this (pseudo code):
FuncTree := BuildEvalTree('f(x,y) = sin(x^2+y^2)/(x^2+y^2)'); // Or whatever it needs
for x := x_min to x_max do
for y := y_min to y_max do
z[x,y] := Evaluate(FuncTree,[x,y]); // Or whatever it needs...
Thanks!
Thursday, April 12, 2012
Solution: armv7 validation errors when submitting FireMonkey iOS apps to the AppStore
EDIT: This post is now outdated. HotFix 1 addresses this issue, and these steps are no longer needed!
I was trying to record the process of submitting an app last Friday. My EDN app was ready for the AppStore. I ran into this:
iPhone/iPod Touch: application executable is missing a required architecture.
At least one of the following architecture(s) must be present: armv7
This happens on the validation step of submitting an app to the AppStore. The reason is that the validation step for AppStore submissions has changed. Support for *only* armv6 is no longer allowed. You have to support armv7, either by itself or have dual support (armv6 and armv7). This is a recent change, since I was able to submit my previous Analog Clock app in late October last year.
I've spent much of the last week trying to solve this problem. I did a bunch of research, but there was no single magic bullet anywhere. I finally cracked it. And here is the solution. I apologize in advance if some steps are missing. I tried to capture every single step I had to take.
STEP 1: Rebuilding iPhoneAll for armv7
Phil Hess has an excellent page that explains this process - http://web.me.com/macpgmr/ObjP/Xcode4/iOS_5_Parsing_Status.html
You don't actually need to parse anything for this purpose. You can jump directly to Phil's Step 4 and build iPhoneAll for armv6/armv7 as follows:
./compile-arm.sh iPhoneAll.pas
Then Phil's Step 5 from the link above (this moves the compiled targets in place):
mv iPhoneAll.o /usr/local/lib/fpc/2.6.0/units/arm-darwin/cocoaint/
mv iPhoneAll.ppu /usr/local/lib/fpc/2.6.0/units/arm-darwin/cocoaint/
mv AnonClassDefinitionsUikit.o /usr/local/lib/fpc/2.6.0/units/arm-darwin/cocoaint/
mv AnonClassDefinitionsUikit.ppu /usr/local/lib/fpc/2.6.0/units/arm-darwin/cocoaint/
STEP 2: Rebuilding the FPC RTL for armv7
We'll use the following link as a base line - http://wiki.freepascal.org/iPhone/iPod_development#Building_an_ARM_Cross-compiler
We need to modify the steps for iOS5.0 as follows:
Jump into Super User mode:
sudo bash
export IPHONEPLATFORMBASEDIR=/Developer/Platforms/iPhoneOS.platform/Developer
make clean
make FPC=/usr/local/lib/fpc/2.6.0/ppc386 CPU_TARGET=arm CROSSOPT="-FD${IPHONEPLATFORMBASEDIR}/usr/bin -XR${IPHONEPLATFORMBASEDIR}/SDKs/iPhoneOS5.0.sdk/ -ap -Cparmv7 -Cfvfpv3" all
sudo make FPC=`pwd`/compiler/ppcrossarm OPT="-ap" CPU_TARGET=arm CROSSOPT="-FD${IPHONEPLATFORMBASEDIR}/usr/bin -XR${IPHONEPLATFORMBASEDIR}/SDKs/iPhoneOS5.0.sdk/ -ap" install CROSSINSTALL=1
sudo ln -sf ../lib/fpc/2.5.1/ppcrossarm /usr/local/bin/ppcarm
STEP 3. Modify the Run Script for project under Build Phases for your Target in Xcode
Replace the -Cfvfpv2 flag with both of these flags -Cparmv7 -Cfvfpv3. A typical excerpt from the Run Script will now say:
/usr/local/lib/fpc/2.6.0/ppcrossarm -gw -g -godwarfsets -Xg -O1 -Cparmv7 -Cfvfpv3 -MDelphi -B -o$BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH -Fu/usr/local/lib/fpc/2.6.0/units/arm-darwin/fmi -Fu/Developer/Embarcadero/fmi -Fu/Developer/Embarcadero/fmi/coretext -Fu/Developer/Embarcadero/fmi/fpclib -XR$SDKROOT -FD$PLATFORM_DEVELOPER_BIN_DIR "$PROJECT_DIR/../$PROJECT.pas"
Drop armv6 from Architectures under Build Settings for your Project if it's set.
Good luck!
I was trying to record the process of submitting an app last Friday. My EDN app was ready for the AppStore. I ran into this:
iPhone/iPod Touch: application executable is missing a required architecture.
At least one of the following architecture(s) must be present: armv7
This happens on the validation step of submitting an app to the AppStore. The reason is that the validation step for AppStore submissions has changed. Support for *only* armv6 is no longer allowed. You have to support armv7, either by itself or have dual support (armv6 and armv7). This is a recent change, since I was able to submit my previous Analog Clock app in late October last year.
I've spent much of the last week trying to solve this problem. I did a bunch of research, but there was no single magic bullet anywhere. I finally cracked it. And here is the solution. I apologize in advance if some steps are missing. I tried to capture every single step I had to take.
STEP 1: Rebuilding iPhoneAll for armv7
Phil Hess has an excellent page that explains this process - http://web.me.com/macpgmr/ObjP/Xcode4/iOS_5_Parsing_Status.html
You don't actually need to parse anything for this purpose. You can jump directly to Phil's Step 4 and build iPhoneAll for armv6/armv7 as follows:
./compile-arm.sh iPhoneAll.pas
Then Phil's Step 5 from the link above (this moves the compiled targets in place):
mv iPhoneAll.o /usr/local/lib/fpc/2.6.0/units/arm-darwin/cocoaint/
mv iPhoneAll.ppu /usr/local/lib/fpc/2.6.0/units/arm-darwin/cocoaint/
mv AnonClassDefinitionsUikit.o /usr/local/lib/fpc/2.6.0/units/arm-darwin/cocoaint/
mv AnonClassDefinitionsUikit.ppu /usr/local/lib/fpc/2.6.0/units/arm-darwin/cocoaint/
STEP 2: Rebuilding the FPC RTL for armv7
We'll use the following link as a base line - http://wiki.freepascal.org/iPhone/iPod_development#Building_an_ARM_Cross-compiler
We need to modify the steps for iOS5.0 as follows:
Jump into Super User mode:
sudo bash
export IPHONEPLATFORMBASEDIR=/Developer/Platforms/iPhoneOS.platform/Developer
make clean
make FPC=/usr/local/lib/fpc/2.6.0/ppc386 CPU_TARGET=arm CROSSOPT="-FD${IPHONEPLATFORMBASEDIR}/usr/bin -XR${IPHONEPLATFORMBASEDIR}/SDKs/iPhoneOS5.0.sdk/ -ap -Cparmv7 -Cfvfpv3" all
sudo make FPC=`pwd`/compiler/ppcrossarm OPT="-ap" CPU_TARGET=arm CROSSOPT="-FD${IPHONEPLATFORMBASEDIR}/usr/bin -XR${IPHONEPLATFORMBASEDIR}/SDKs/iPhoneOS5.0.sdk/ -ap" install CROSSINSTALL=1
sudo ln -sf ../lib/fpc/2.5.1/ppcrossarm /usr/local/bin/ppcarm
STEP 3. Modify the Run Script for project under Build Phases for your Target in Xcode
Replace the -Cfvfpv2 flag with both of these flags -Cparmv7 -Cfvfpv3. A typical excerpt from the Run Script will now say:
/usr/local/lib/fpc/2.6.0/ppcrossarm -gw -g -godwarfsets -Xg -O1 -Cparmv7 -Cfvfpv3 -MDelphi -B -o$BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH -Fu/usr/local/lib/fpc/2.6.0/units/arm-darwin/fmi -Fu/Developer/Embarcadero/fmi -Fu/Developer/Embarcadero/fmi/coretext -Fu/Developer/Embarcadero/fmi/fpclib -XR$SDKROOT -FD$PLATFORM_DEVELOPER_BIN_DIR "$PROJECT_DIR/../$PROJECT.pas"
Drop armv6 from Architectures under Build Settings for your Project if it's set.
Good luck!
Thursday, March 29, 2012
Who would pay $0.99 for my iOS app?
I've been hacking away at my EDN iOS app. Here are a few screen shots of what it looks like in development. I have a few things I need to polish and then I will submit it to the AppStore.
Technical details:
* Communicates with the EDN MemberShip Services DataSnap REST Server
* You can log in, view your details, edit your details and post changed details back
* You can get all your registered products and serial numbers
* You can choose to persist username/password or not
* Works on all iOS devices and all device rotations!
Maybe it's worth more than $0.99? Especially if you get the full source code... ;)
This is what my app looks like when you launch it:
[caption id="attachment_39242" align="alignnone" width="200" caption="Just need a password..."][/caption]
This is what it looks like when you fail to login:
[caption id="attachment_39241" align="alignnone" width="200" caption="Access denied!"][/caption]
This is what my user details look like:
[caption id="attachment_39243" align="alignnone" width="200" caption="My user details"][/caption]
Technical details:
* Communicates with the EDN MemberShip Services DataSnap REST Server
* You can log in, view your details, edit your details and post changed details back
* You can get all your registered products and serial numbers
* You can choose to persist username/password or not
* Works on all iOS devices and all device rotations!
Maybe it's worth more than $0.99? Especially if you get the full source code... ;)
This is what my app looks like when you launch it:
[caption id="attachment_39242" align="alignnone" width="200" caption="Just need a password..."][/caption]
This is what it looks like when you fail to login:
[caption id="attachment_39241" align="alignnone" width="200" caption="Access denied!"][/caption]
This is what my user details look like:
[caption id="attachment_39243" align="alignnone" width="200" caption="My user details"][/caption]
Wednesday, March 21, 2012
Friday, March 16, 2012
FireMonkey and iOS 5.1
I finally upgraded to Lion and Xcode 4.3. Also iOS 5.1 on my iPhone 4.
I can happily confirm that FireMonkey apps work great on iOS 5.1 devices.
I already had Snow Leopard and Xcode 4.2 before. All it took was upgrading to Lion and then getting Xcode 4.3. That's it. I did not have to reinstall FPC or FMI at all.
I can happily confirm that FireMonkey apps work great on iOS 5.1 devices.
I already had Snow Leopard and Xcode 4.2 before. All it took was upgrading to Lion and then getting Xcode 4.3. That's it. I did not have to reinstall FPC or FMI at all.
Thursday, March 15, 2012
This, ladies and gentlemen, is a working iOS DataSnap client for EDN services!
In the coming weeks, I will be blogging about how to create your own iOS client to access any DataSnap server.
Did someone say we don't have TDataSet on iOS? Yeah, that might have been me. So wrong! We do!
In fact, here's a (condensed) code snippet from this app:
Proxy := CreateProxy;
DS := Proxy.GetRegistrations(Session);
FreeProxy(Proxy);
while not DS.EOF do begin
Memo1.Lines.Add(DS.FieldByName('TITLE').AsString+' '+DS.FieldByName('REGISTRATIONS').AsString);
DS.Next;
end;
Once the app is finished, my goal is to upload it to the AppStore and record the whole process so that I can publish the video as a tutorial on AppStore submission for FireMonkey apps as well. All it takes is time... ;)
Wednesday, March 14, 2012
Visualizing wave interference using C++Builder XE2 and FireMonkey
Here's one more C++Builder XE2 article and demo project:
My EDN article "Visualizing wave interference using FireMonkey and C++Builder XE2"
Enjoy!
My EDN article "Visualizing wave interference using FireMonkey and C++Builder XE2"
Enjoy!
Creating custom FireMonkey meshes in C++Builder XE2
While I'm far from a C++ wiz, I've ported my MathViz project to C++Builder XE2.
Here's my EDN article, "Visualizing mathematical functions by generating custom meshes using FireMonkey and C++".
Enjoy!
Here's my EDN article, "Visualizing mathematical functions by generating custom meshes using FireMonkey and C++".
Enjoy!
Monday, March 12, 2012
Friday, March 9, 2012
iOS Camera/Photo demo - PREVIEW - AS-IS
I'm only posting this because a lot of folks have been asking for it.
This demo is provided as-is with no guarantees of working on any device whatsoever.
http://cc.embarcadero.com/item/28774
You have been warned. It's by no means complete. Not even tested since 10/11/2011 - not tested on iOS 5.0 or 5.1. Last I tested it was on 4.3 I think.
I'll replace it when I get time to finish it. Feel free to send me back a 10x better version.
BTW - you *have* to hack FMX_Platform_iOS.pas and know what you're doing to use this demo. You have to surface mainwindow and whatever else Xcode tells you is missing. You can do so by moving the declarations from the implementation section to the interface section. All warranties may very well be void by doing so, so back the file up before breaking it.
Disclaimer done... ;)
Enjoy!
This demo is provided as-is with no guarantees of working on any device whatsoever.
http://cc.embarcadero.com/item/28774
You have been warned. It's by no means complete. Not even tested since 10/11/2011 - not tested on iOS 5.0 or 5.1. Last I tested it was on 4.3 I think.
I'll replace it when I get time to finish it. Feel free to send me back a 10x better version.
BTW - you *have* to hack FMX_Platform_iOS.pas and know what you're doing to use this demo. You have to surface mainwindow and whatever else Xcode tells you is missing. You can do so by moving the declarations from the implementation section to the interface section. All warranties may very well be void by doing so, so back the file up before breaking it.
Disclaimer done... ;)
Enjoy!
Tuesday, February 28, 2012
Monday, February 20, 2012
Camera.Target fix
There's a missing call to MatrixChanged(Self) in TCamera.SetTarget. Without this second line, setting the Target does nothing.
procedure TCamera.SetTarget(const Value: TControl3D);
begin
FTarget := Value;
MatrixChanged(Self);
end;
This fix is required for my upcoming Kepler System demo.
procedure TCamera.SetTarget(const Value: TControl3D);
begin
FTarget := Value;
MatrixChanged(Self);
end;
This fix is required for my upcoming Kepler System demo.
Monday, February 13, 2012
Thursday, February 2, 2012
Wednesday, February 1, 2012
Teaser...
Monday, January 30, 2012
Friday, January 27, 2012
Tuesday, January 24, 2012
iOS Address Book fun
Getting data out of the iOS address book is a lot harder than I thought... Must make component... ;)
Here's a Q&D routine I managed to eek out today. It simply prints all contacts and all their numbers to the log console.
Enjoy!
Here's a Q&D routine I managed to eek out today. It simply prints all contacts and all their numbers to the log console.
Enjoy!
uses
iPhoneAll, AddressBook, CFArray, CFBase;
procedure DumpAddressBook;
var
addressBook : ABAddressBookRef;
allPeople : CFArrayRef;
nPeople : CFIndex;
ref : ABRecordRef;
i, j : Integer;
firstName : CFStringRef;
lastName : CFStringRef;
phoneNumber : CFStringRef;
l, v : CFStringRef;
S : NSString;
begin
addressBook := ABAddressBookCreate;
allPeople := ABAddressBookCopyArrayOfAllPeople(addressBook);
nPeople := ABAddressBookGetPersonCount(addressBook);
for i:=0 to nPeople-1 do begin
ref := CFArrayGetValueAtIndex(allPeople,i);
firstName := ABRecordCopyValue(ref,kABPersonFirstNameProperty);
lastName := ABRecordCopyValue(ref,kABPersonLastNameProperty);
if firstName <> nil then
if lastName <> nil then
S := NSString.stringWithFormat(NSSTR(PChar('%@, %@')),lastName,firstName)
else
S := NSString.stringWithFormat(NSSTR(PChar('%@')),firstName)
else
if lastName <> nil then
S := NSString.stringWithFormat(NSSTR(PChar('%@')),lastName);
NSLog(S);
phoneNumber := ABRecordCopyValue(ref, kABPersonPhoneProperty);
for j:=0 to ABMultiValueGetCount(phoneNumber)-1 do begin
l := ABMultiValueCopyLabelAtIndex(phoneNumber,j);
v := ABMultiValueCopyValueAtIndex(phoneNumber,j);
S := NSString.stringWithFormat(NSSTR(PChar('%@: %@')),l,v);
NSLog(S);
CFRelease(l);
CFRelease(v);
end;
if phoneNumber <> nil then
CFRelease(phoneNumber);
if firstName <> nil then
CFRelease(firstName);
if lastName <> nil then
CFRelease(lastName);
end;
end;
Handling Swipe Gestures in FireMonkey for iOS
I've added a component to handle left, right, up and down swipe gestures to my set of iOS components.
Here's the full set!
NOTE: This component requires that you edit the FMX_Platform_iOS.pas file on the Xcode side to surface mainWindow and a few other things.
Once installed, this component is extremely easy to use. Simply hook up the OnSwipe events that you'd like to handle and you're done!
Enjoy!
Here's the full set!
NOTE: This component requires that you edit the FMX_Platform_iOS.pas file on the Xcode side to surface mainWindow and a few other things.
Once installed, this component is extremely easy to use. Simply hook up the OnSwipe events that you'd like to handle and you're done!
type
TSwipeEvent = procedure of object;
TiOSSwipeGestureRecognizer = class(TFmxObject)
private
FOnSwipeRight : TSwipeEvent;
FOnSwipeLeft : TSwipeEvent;
FOnSwipeUp : TSwipeEvent;
FOnSwipeDown : TSwipeEvent;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property OnSwipeRight: TSwipeEvent read FOnSwipeRight write FOnSwipeRight;
property OnSwipeLeft: TSwipeEvent read FOnSwipeLeft write FOnSwipeLeft;
property OnSwipeUp: TSwipeEvent read FOnSwipeUp write FOnSwipeUp;
property OnSwipeDown: TSwipeEvent read FOnSwipeDown write FOnSwipeDown;
end;
Enjoy!
Friday, January 6, 2012
Job Opening at Embarcadero! Come join me!
We're looking for an Architect to join the RAD Studio Team.
Embarcadero Technologies is seeking an Architect to join the leadership staff of FireMonkey, Embarcadero’s next generation business application platform. The FireMonkey platform helps you build spectacular applications that are faster, more visually stunning, and more connected – all with native performance on Windows, Mac, and iOS.
Embarcadero Technologies is seeking an Architect to join the leadership staff of FireMonkey, Embarcadero’s next generation business application platform. The FireMonkey platform helps you build spectacular applications that are faster, more visually stunning, and more connected – all with native performance on Windows, Mac, and iOS.
Subscribe to:
Posts (Atom)