Tuesday, October 12, 2010

No Commercial Version of RAVE for Delphi XE

Where I work our product is very tied to Nevrona's Rave Reports.    We are based around the NDR file format and concept.    Since the release of XE our emails to Nevrona and being ignored we still don't have an XE version of RAVE Reports.

XE is a compelling upgrade for us and as such we have decided to try to upgrade RAVE  to XE.      We do have the commercial 8.0 release.

I don't know about Embarcadero's agreement is with Nevrona but I don't think it's in the best interest of either party to keep bundling RAVE to with Embarcadero.    From Embarcadero's point of view they are shipping a product that points to a company that all but appears dead.     From Nevrona's Point of view they may be able make revenue on a product from those that need to upgrade Delphi versions.   Maybe returning a revenue stream that they have lost because most users just use the free version. I know they can't be making much money now.  

I actually would like to see RAVE become open source.   I know my team would be at the very least committing changes to keep it updated to the latest compilers.

As for our long term roadmap, I don't have a clue.... Research begins now... Looking for Reporting solution that can temporary file that can then be printed, exported to Excel, specified pages of the report can be converted to an image.   (We use TIFF but I can convert from about any format)

Sunday, September 12, 2010

CodeRage - Audio/Recording Equipment

I was just accepted to do two CodeRage Sessions, I am excited about both of them.
  • Building Robust Applications with Customized Exception Management
  • Continuous Integration with DUnit and FinalBuilder
I hope everyone gets a chance to attend some of the sessions, the exact dates and times of my sessions are not known yet. The conference is scheduled for October 4-8, 2010.

What I used in the past and will still
use to monitor broadcast audio
Right after I graduated from high school, I attended university as a theater major. That lasted about 2 years before dropping out to become a full time Delphi programmer. :-) But my love for Theater is still in my life. I volunteer at our local theater, building sets, running shows, and many other things.  As such, I developed an appreciation for quality sound.

One of the things I observed in my past recordings was my audio quality was not what I wanted it to be.     I also don't have a huge budget to turn my office office into a studio, but I did make some investments to try to improve the quality of the sound.  About $280 later this this is what i have:
The New setup

I have now done some test recordings, and I really pleased with the quality of my voice.  If I were only doing an audio podcast I would have a near perfect setup. But with a good microphone comes some problems, related to the acoustics of the room,  I now can hear the keyboard, mouse, the squeaky chair, the fan on the computer, and a slight echo.  I also can hear the kids if they are talking in the room next door.  To get the audio in my office where I would want it would be another $400-$700 not something I am going to spend any time soon.

So some tricks I have learned:   A laptop keyboard is much quieter than my desktop keyboard so I most likely will be presenting on it instead of my desktop.   Strategic placement of hung blankets helps with the Echo of room which reduces other noises.    I suspect some WD-40 on the chair will help with the squeak or I will just switch chairs.     If I am recording noise reduction will remove most of the noise from the computer fan.  This but it won't help with the live presentations, so I might pull out the longer cables I have. to isolate the computer, as I still need it even if I am not typing 100% of the time on it.

Overall I hope that future live and recorded sessions of mine will have better audio for everyone.    Even if I am the only one that may notice the difference in the end .

Tuesday, August 31, 2010

Rad Studio XE - DelphiLive

At DelphiLive last week it was fairly obvious that Embarcadero was close to shipping RAD Studio.   When there I took a few photos, and Jim wanted to play with the Camera so he took more :-)   I have recordings of the keynote session that I will be posting in the next day or two on the VDUG site.

Well RAD Studio XE was released yesterday, and I am really impressed as SA/Maint Customer I received the keys and the download the same day.    I was able to get the full product installed today.   In past releases I have had to wait a few weeks to get the product, so this is very welcome change.

I had an Windows XP Machine and I bit shocked by the menu bloat, and I did not even install InterBase or Installaware.    But it does highlight some of the new editions the the RAD Studio Line.   For Delphi and C++ Developers they get to look forward to Automated QA, and CodeSite.        For Delphi, C++ Builder, and Delphi Prism developers  they get Subversion Integration, FinalBuilder.   Rave Reports is still the product, since we depend on it I am happy as it appears that Nevrona is all but a dead company.      Delphi Prism now integrates into both Visual Studio 2010 but also MonoDevelop.   There is even an install for Delphi Prism to install with  MonoDevelop on a MAC.    To round out the Menu RadPHP (Formerly Delphi for PHP) is now included in the RAD Studio XE  product line.

There are a few other new items bundled with RAD Studio XE that don't create menu items (Thank you for not doing that!)
And I would not be surprised if I missed something else that is bundled.       Of course my next questions and potential blog posts are what is under the covers.

Monday, August 23, 2010

DelphiLive - I am here!

I am now at DelphiLive,  I ran into the guys at RemObjects.   Today waiting for the conference to get underway we took a little trip to Cupertino to visit Apple and had lunch.   Marc nearly sold me on an iPad his with 3G support was used quite a bit as we navigated the streets.     One of the things we talked about was RemObjects TV, which really looks good.  BTW I found out that some of the VDUG videos don't work on iPad and that Jim re-encodes the Camtasia results to make it work on iPad.   They guys at RemObjects are all carrying Flip Ultra HD Video Cameras, and I suspect we will get all sorts of good material from it.    I am carrying a Kodak Zi8 and Digtal Rebel T1i so I have a couple of options to gather and share what is going on here.

Looking forward to the keynote tomorrow!

Thursday, June 3, 2010

Personal Outlook #2

Virtual Meetings
I enjoy attending virtual events, it's a good way to learn and share information.   It's one of the reason's I started the Virtual Delphi Users Group.   I am always on the watch for good virtual events.  I have multiple computers every place I code.   With a virtual event I typically start it on a secondary computer and stay coding.   If I hear something interesting I look at the second machine to see the details.   On occasion something really good is covered and I never get back to coding.

For the next VDUG meeting we had advertised covering Delphi Prism 2011.    I just found this event "Extreme Cross-platform .NET with Delphi 2011""  presented by David I.  Which is the week before the VDUG Meeting, and was going to cover nearly the same material.   Not wanting to just show the same thing, I am going to change the topic a bit.   So, I think everyone should attend the event with David I.  

As for the VDUG Meeting, I am now working on refining a deeper dive into the Delphi Prism Language Features.      With some of the things we have learned trying to keep some of our code cross-compiling with Delphi Win32.    When I get the material prepared I will announce the new meeting on the VDUG Site.

Another virtual event I found today that looks interesting is a 3 hour Virtual Conference with Kent Beck on Continuous Deployment.    Since I have enjoyed many of his books.   Most of the time virtual conferences by the media companies are so product specific that if you don't use the product it's a waste of time.   But this looks interesting and I think I can apply the topic to our situation.  Specifically we currently use FinalBuilder Server to monitor our SVN repository for changes, which when detected they are automatically built and deployed to our test environment.

Stackoverflow Code-Golf
On stackoverflow.com there is a tag called Code-Golf that contains challenges to the write the smallest program possible meeting the requirements of the challenge.   I took note of this question and answered it in Delphi.     It shows that you can do cryptic things in Delphi, just like you can in other languages.   I think it's a good example of why you should use descriptive variable names and types.      The answer was the ugliest code I have ever written.

Saturday, April 24, 2010

Virtual Delphi Users Group

On April 20th, 2010 SLCDUG conducted an experiment on a virtual meeting.     The results were much better than expected.   This concept worked!  I have work to do to improve the overall experience.  We had several minor problems, but overall we can improve.

One thing I realized needed to improve was it needed  to have a central place were we could announce meetings and store recordings.   The SLCDUG site is just a blogger account and would not support files of the size the recordings.

So I setup a new domain and website just for the "Virtual Delphi Users Group"

Now, I find myself personally using Delphi Feeds most of the time so I want the VDUG Feed listed there, if you want to see it then vote for my submission(UPDATE: It's listed!)

The replay of the first meeting:   Component Development / Tips & Tricks has been posted on the the new site.

If your interested in sponsoring this group in any way let me know: rlove at peakbiz dot com

Wednesday, April 14, 2010

Virtual Delphi Users Group Meeting

I will be presenting at a Virtual Delphi Users Group Meeting Next Week.

Everyone is invited and it's free of charge.   It's not going to be a marketing show like a typical Webinar, it just plan free training on Delphi.

Date: Tuesday April 20, 2010
Time: 6:00 PM MDT (UTC - 6 hours)

   Delphi Tips & Tricks - Phil Gilmore
   Delphi Component Development - Robert Love

Pre-Registration is required: https://www1.gotomeeting.com/register/512344336

I have more material on Component Development than time will allow, as such I will poll those attending the meeting to decide on the direction to take.

This will be the first of hopefully several, it really depends on participation levels, i.e. don't want to prepare and have nobody show up :-)

Tuesday, April 6, 2010

Personal Outlook #1

Sunday, April 4, 2010

Virtual User Group Options

The SLCDUG (Salt Lake City Delphi Users Group) is going to do some of it's meetings on-line.  

I started researching many options of what technlogy to use, with the following factors playing into my decision:

  1. Cost, since we don't collect dues the cost needs to be small enough that I can personally handle it if there is not a sponsor willing to pick up the tab.   
  2. Options are available to make this more like a local users group meeting than pre-scripted webinar presentation. 
  3. We have attendance in the past year at anywhere from 4 people to 50 people.    Because our virtual meetings will be available to everyone on the Internet, we need a solution that supports at least 100 people.

I was surprised to find that there is not a ton of un-biased reviews.   For example the most compressive review of GoToWebinar was done by a Cisco employee the company that produces Webex.    With that in mind I knew I could not depend on others research.   So I setup multiple computers in my home all signed up for the trial offers of the following companies and this is what I found in my comparision.

Price: $99/Month
Max Attendees: 100 @ $99 * 500 @ $399  *  1000 @ $499
OS Supported: Windows, MAC
Trial Length: 30 Days

  • Interface was easy to use.
  • Control windows are not broadcast
  • Ability to view only one application instead of the entire desktop.
  • Support for VOIP and Telephone conferencing for presenters and/or Attendees
  • May unmute either option quickly via software.
  • Up to 25 People could be unmuted.
  • Good registration and Tracking of who attended.
  • Was able to show a small video clip without slow down.
  • Ability to share or hide Attendees List
  • Easy to schedule future meetings
  • Ability to make someone else the presenter without reconnecting
  • No support for Web Cams
  • No Support Linux
  • Can not be run from a virtual machine
Price:  Contact Sales (Scared here as 25 users is $49/Month but I have sent an email request)
Max Attendees: 500 (Meeting Center Product) 3000 (Event Center Product)
OS Supported: Windows, MAC, Solaris, Unix, Linux, 3G Enabled Smart phones (IPhone, Blackberry, Nokia, etc)
Trial Length: 14 Days (Meeting Center) unable to trial Event Center

  • Control windows are not broadcast
  • Optional support to allow attendees to chat with each other.
  • Ability to Share or Hide Attendee List
  • Ability to make someone else the presenter without reconnecting
  • Easy way to schedule future meetings
Cons: (Based on Meeting Center)

  • No way to register for a meeting.
  • No way to see reports on who attended after meeting.
  • Interface seemed to get in the way more than I wanted.
  • Had Problems starting a 2nd Meeting after first trial meeting.
  • Users Joining meeting were prompted to join 14 day trial (Our attendees are not their customers!)
Price:  $22.50/Month  ($4.50 per user per month min 5 Users)
Initially this was confusing but figured it out.  Each Organizer need a license, attendees don't so the minimum license count will work for our situation)
Max attendees: 250 (Can get up to 1250 if you pay $16 per User)
OS Supported: Windows, any Java supported OS (Java Version does not support VOIP)
Trial Length: 30 Days (It's all of Microsoft on-line services, not just LiveMeeting)

  • Price is very good.
  • Ability to Show or Hide Attendee List
  • Ability to allow Users to Create own Personal Recording
  • Optional Pre Registration 
  • Embarcadero Uses it for CodeRage so people are familiar with it.
  • Organizers are required to use a Sign In Application, that reconfigures Outlook.
  • Most Difficult (As an Organizer) to get setup initially
  • Web Version does not support VOIP / Clients must Download Live Meeting to get VOIP
  • Only supports External Phone Conferencing Providers, not provided by Default.
  • If I allow all attendees to have MIC access, I can't control the Mute.   They can unmute themselves at will.  You can mute everyone but yourself but they can turn around and unmute immediately.
Price: $75/Month (DimDim Webinar Version) (There is a Free version for 20 or less attendees)
Max Attendees: 1000
OS Supported: Windows, Mac, and Modern Browser that supports Flash.
Trial Length: 30 Days

  • Optional Public Group Chat
  • Poor Support for Question and Answers, Private Chat was the only option.
  • Registration Support
  • Phone or VIOP Support
  • Price for smaller meetings
  • Cool count down timer and Registration Widget to embed on site later
  • Open API for setup of Meetings. (although: Lacked in Meeting API controls)
  • Will host Recordings
  • Shared Browsing Feature
  • Speed of switching content views.
  • Only can share whole desktop.  Annoying Red box around screen.
  • No built in Polling
  • Registration Required Field are not changable (I don't care about phone number but DimDim makes it required)
  • Several Support Forums, with no clear direction where to go.  They were confusing at best.
  • Recording will not record everything, currently does not support white board or shared browsing

Common Problems regardless of option:
  • Unable to Broadcast PC Audio without setting up, Sound Mix and disabling your Mic or using a second PC/Mixer Board.   
Right now I am leaning to LiveMeeting because of price, but my favorite is GotoWebinar, its features are far more robust and would go along way in making the session seem more like a local user group meeting.

I am interested in feedback on those that have experience in using these technologies or other options I did not review.

Update:  Added DimDim to the list of products reviewed

Sunday, February 14, 2010

Happy 15th Birthday Delphi - My Delphi Story

On February 14, 1995 the first version of Delphi was released.  Little did I know how much this would affect my life.  

I had learned to program using Apple II Basic in grade school.    In high school, I was able to enroll in the AP computer science program.   At that time it was taught using Turbo Pascal 3.3.   I don't really remember when I purchased my first compiler, but I do know that it was TP 5.5.   During high school I started writing shareware programs using TP 5.5 for the VBBS System.   I earned enough money to support my newly formed programming habit.   I purchased many of the libraries offered by TurboPower.

I graduated from High School in 1992, I enrolled in college with a major in Theater :-)    Little did I realize that little habit of mine was going to change the course of my life.  While in college I started working as a tech support specialist for Prodigy after a short period I was promoted helping manage the LAN with both desktop and server support.  We were running in an OS/2 environment and took my first look at C to help manage many of the things we needed to do.   I was successful but I realized I did not like the language, as much as I did with Pascal.   During this time, I was fairly active reader of the Compuserve Forums for both Borland and TurboPower allowing me to learn of a new product.   I purchase Delphi the moment it came out, I also started attending the Salt Lake City Delphi users group.    At one of the meetings I met,  my soon to be future boss, who was looking for a programmer.   The company was very small operating out of a home that was converted into an office.  I did the programming for an application that manged the bookings for timeshare properties.  It was also far enough away from my school that I had to drop out of college.

Wanting to continually improve my programming skills I attended Software and Development West in San Fransisco.   There I found the Borland booth, and I ran into the Interbase marketing manager.   I told him about the work we had done with the Interbase API to make things faster and avoid the BDE.     I told him how we had developed UDFs for InterBase using Delphi.   I remember him saying:  I did not think you could do that, do you want to come speak about what you have done at our conference.    A week or two later I contacted him and said yes to the offer to speak at the conference.     I was going to be surprised, I was still a very green programmer and I had never had attended a Borland Conference before.    I don't remember much about the conference materials.  I do however remember the way I felt during the session I presented.  I had written a couple of very large white papers on the subject, so I felt prepared.   I also felt very young and scared. When it came time for the question and answers section of  my sessions, I was blown away many of the questions were WAY over my head.    I don't really know how I scored with the attendees of that session but I do know it took a few years to be accepted to speak at any future conferences.

The big benefit was I had the conference on my resume, I started looking for a new job one that would allow me to expanding my programming abilities and pay more.     I had 5 different job offers,  I took a job with a local consulting company which more than doubled my current pay.   It was an awesome job because the Delphi market was huge.   I worked for so many different clients in the next two years I lost count.   I specialized in going into new locations that was experiencing bugs in there code and helping them debug there code and resolve what appeared to be random access violation errors.    During this time I took over as the President of the Salt Lake City Delphi users group, which I still do to this day.

In 1998 my life was changing even more, I had found the love of my life and was married.  At the same time I could see the market for Delphi opportunities was starting to dry up, so I took something more stable, or so I thought.   I then took two jobs in a row where I was laid off as business directions changed.    After the second lay off I decided the consulting business was just as stable and paid more.     I had a three clients, the State of UtahBorland, and a small embedded software developer.  The Borland contract, was awesome I was working with some of the people I had admired over the years.   However at one point in 2005 all three clients were asking for my services at least full time at the same time.  Instead of refusing work,  I tried to keep it up, but after about 4 months I crashed and burned.   It took months to fully recover, I was forced to quit all but one of the contracts.  The one contract I kept was with the State of Utah, they offered me a full time job, which I accepted and still work there to this day.

In July of 2008 I finally enrolled in school again to finish that degree that. Schools no longer teach pascal, so I have been using JavaScript, and Java.  But after many assignments Delphi it is still my development product of choice.

Just imagine the number of people that have been supported by income generated from working with Delphi.  Delphi  has supported my family from the beginning and hopefully well into the future.

To the point... I want to wish a happy 15th Birthday to Delphi.    I want to thank all of the people behind the product for the dramatic way they have affected my life!

Secondary point of the story:
In 15 years I have personally been responsible for purchases of more than 100 different licenses of Delphi.   If I had not been able to afford Turbo Pascal, I would have been forced to go another direction.  My entry level investment in 1990's in Turbo Pascal resulted in way over 100k of Delphi revenue stream.      It's time to find away back into the entry level market.

Thursday, January 28, 2010

An Object Binding Prototype

I have been really looking for good ways to keep the different layers of our application bound together. As such I have been looking at others code, searching out libraries, and building prototypes.

One such prototype I have built, is fairly simple. While, I am not sold on using this as a method for binding, I think its worth sharing. It requires Delphi 2010, and uses the enhanced

First off the TObjectBinder code can be downloaded from SVN Repository in my RTTIWork Branch.

Say you have class such as this one:
TPerson = class(TObject)
  FirstName : String;
  LastName : String;

To use this code all you need to tie this object to your user interface is this:

  // Create Binding with Class you want as the source of the binding
  Binding := TObjectBinder.Create(TPerson);
  // Binding() Parameters
  // First: Property or Field of Class passed to the Constructor
  // Second: Object you want as the destination of the binding.
  // Third:  Property or Field of the Destination you want to bind too
  // Fourth: If the binding is readonly(Optional: Default False)
  // Fifth: ITypeMapping Interface (Optional: Default NIL) more on this later.
  // Then there are two key methods you can use after that.
  // Load() takes the contents of the Person and populates
  //        Edit1 and Edit2 Controls
  Binding.Load(Person); // Where Person is an instance of TPerson
  // This takes the contents of Edit1 and Edit2 and Saves it back to the person.

What does this offer, allows you create a list of bindings of any property of any object
to any other property of any object. It reduces code like this...

  Edit1.Text := Person.FirstName;
  Edit2.Text := Person.LastName;
  Person.FirstName := Edit1.Text;
  Person.LastName := Edit1.Text;

I have buttons that need to be enabled only when the data changes, so I also implemented
Button1.Enabled := Binding.IsChanged(Person);

Since mappings may need to change data types, I created the following interface
to allow you to specify conversion methods and supply them.

  ITypeMapping = interface
     function SourceToDest(Source : TValue) : TValue;
     function DestToSource(Source : TValue) : TValue;
     function Compare(Source : TValue; Dest : TValue) : Integer;

Granted, if this was more than a prototype I would have built all of the common conversions
and automatically detected which one to use.

To take this further, I have a need to dynamically create a form that can edit an unknown object. Similar to what you can do with an Object Inspector, so this might work well to bind
to those dynamically create controls. Time to build another prototype :-)

Special thanks to Cobus Kruger for this great post and another option on doing the same thing.  In that solution, I did not like having to name my controls to have to match my model.   But the basic idea is very similar, and shows off yet another way to use the RTTI and potentially solve the same problem.