Latest Posts


Ready for Tiburon: TMS Software

Bruno Fierens and the guys at TMS Software have their Delphi component packages ready for Tiburon.

They have a really impressive collection of components all ready for the latest release — They have grids, HTML components, date planners, Toolbars, graphic property selectors, menus, tabsets, and more. 

We really appreciate their continued support, and recommend that all Delphi developers give their component sets a really good look.


posted @ Sun, 07 Sep 2008 05:06:43 +0000 by Nick Hodges


Ready for Tiburon: Castalia

Jacob Thurman has let me know that is very nice IDE plugin, Castalia, is ready for Tiburon.

castalia_splash

"Castalia transforms the Delphi programming environment into an amazing development platform. Castalia lives on the bleeding edge of IDE technology, giving you cutting edge tools to write better code faster, understand code more accurately, and improve code you’ve already written."


posted @ Sun, 07 Sep 2008 04:57:05 +0000 by Nick Hodges


My Trip to Australia

I’m sitting in the Sydney airport waiting for my plane to Tokyo, and I thought that I’d say a few things about my trip to Australia.

  • First, a big, huge thank you to the Embarcadero Team here in Australia:  Malcolm, James, Elissa, Gilah, Michael, and the rest. You all treated my like a rock star and took very, very good care of me.  I’m very grateful. I  hope that I was able to impart enthusiasm that such treatment deserves.  You guys are awesome.
  • I gave three presentations in Melbourne, Sydney, and Brisbane.  All three were very well attended — thanks to everyone who came and asked great questions,  I hope you saw the cool things and real value that we are delivering in Delphi and C++Builder 2009.  I can tell you that it is really fun to demo.  Generics and Anonymous methods are fun features that demo really well, and the Database team has made DataSnap so powerful and easy to use that it practically demos itself.  All in all, we were delighted with the turn out and the response.  It was fun to put some faces to names and to see some folks I saw last time around as well.
  • I really like Coopers Pale Ale.
  • I attended an Australian Rules Football game — a huge thanks to Tim Jarvis for that — and it was quite fun. I even have picked up on the rules enough to actually know what was going on when I watched a game in the hotel bar.  I think I’m going to start following it, and so I’m now officially a St. Kilda fan!
  • Today I had some free time, and so I went to Paddy’s Market here in Sydney — what fun!  I was able to get some really nice gifts for my family at remarkably good prices, and in general, it was a fun day.  I was going to try to do a Sydney bridge climb, but sadly the weather was a bit miserable.  Maybe next time! 

All in all, my time in Australia was just like my last two visits — busy, fun, and well worth the trip.

Now, on to Japan!


posted @ Sun, 07 Sep 2008 04:02:01 +0000 by Nick Hodges


Google Chrome - cool new web browser

Google just released a new web browser called "Chrome". I have downloaded, installed and now using it to type in words of this post. It is ellegant and intriguing. Chrome features new architecture where each browsing tab has its own OS process, which effectively creates a sandboxed environment for every session. I like the way you can dock and undock tabs with smaller and transparent display of a tab being moved. The ideas behind the new browser are very nicely explained in the form of a comic book. Another interesting aspect of Chrome is highly optimized execution environment for JavaScript programs embedded in web pages. The new JavaScript engine is called V8 and uses dynamic native code generation for faster execution times, what is discussed on the Chromium Blog and in the design docs. Google Chrome is open source under a permissive BSD license. That is really cool. 5 minute interview with some of the Chrome creators is on youtube.


posted @ Thu, 04 Sep 2008 20:30:16 +0000 by Pawel Glowacki


My Delphi 2009 Top 5

What do you like the most in the new Delphi 2009? There is an interesting thread on forum.barnsten.com. Here is my personal Top 5

  1. Full Unicode support throughout the product - from the new UnicodeString type in the compiler, throughout RTL, VCL and the whole IDE
  2. New Language Features in Delphi language - generics and anonymous methods
  3. New DataSnap architecture, based on DBX, for lightweight, client/server applications
  4. Improvements in the VCL including new Ribbon controls. A bunch of brand new VCL components, like TButtonedEdit, TBalloonHint, TCategoryPanelGroup, and improvements to existing ones, like new "Alignment" property in TEdit (finally!), support for images in TButton and many others
  5. Improvements in the IDE: new Class Explorer, new Resource Manager, Named Build Configurations and Option Sets, more flexible Project Manager.

If you want to see new Delphi 2009 features live, make sure to register for "Take a First look at Delphi 2009 and C++ Builder 2009 - Database Development - Beyond the IDE" workshops:


posted @ Thu, 04 Sep 2008 18:00:05 +0000 by Pawel Glowacki


Multicast Events - the finale

In my previous two posts I presented a technique using the new generics language feature of Delphi 2009 to create a typesafe multicast event. In the previous post, I showed how you can create a TMulticastEvent<T> instance and assign it to an event handler for an existing event on a TComponent derived type. Using the existing FreeNotification mechanism, you didn’t need to worry about explicitly freeing the multicast event object. What if one of the components in the sink event handlers in the multicast event list was freed? The good thing is that the FreeNotification mechanism works both ways. We can leverage this functionality again to handle cleanup from the other direction.

In order to implement the complete cleanup for the TComponentMulticastEvent<T>, we need to know when an event handler was added and when one was removed. To do this I added these two virtual methods to the base TMulticastEvent class (the base non-generic version). There are also helper functions, RemoveInstanceReferences() and IndexOfInstance() that can be used in descendants to remove all event handlers that refer to a specific object instance and check if a specific instance is being referenced within the list.

  TMulticastEvent = class
    ...
  strict protected
    procedure EventAdded(const AMethod: TMethod); virtual;
    procedure EventRemoved(const AMethod: TMethod); virtual;
  protected
    procedure RemoveInstanceReferences(const Instance: TObject);
    function IndexOfInstance(const Instance: TObject): Integer;
    ...
  end;

They’re not marked abstract because the immediate descendant, TMulticastEvent<T> doesn’t need to and should not be forced to override them. They just do nothing in the base class. In the corresponding Add and Remove methods on TMulticastEvent, these virtual methods are then called with event just added or just removed. Now we override the EventAdded and EventRemoved methods in the TComponentMulticastEvent<T> class:

  TComponentMulticastEvent<T> = class(TMulticastEvent<T>)
    ...
  private
    FSink: TNotificationSink;
  strict protected
    procedure EventAdded(const AMethod: TMethod); override;
    procedure EventRemoved(const AMethod: TMethod); override;
    ...
  end;

We also need to hold a reference to the internal notification sink class in order to use its FreeNotification mechanism. Here’s the implementation of these methods:

procedure TComponentMulticastEvent<T>.EventAdded(const AMethod: TMethod);
begin
  inherited;
  if TObject(AMethod.Data) is TComponent then
    FSink.FreeNotification(TComponent(AMethod.Data));
end;

procedure TComponentMulticastEvent<T>.EventRemoved(const AMethod: TMethod);
begin
  inherited;
  if (TObject(AMethod.Data) is TComponent) and (IndexOfInstance(TObject(AMethod.Data)) < 0) then
    FSink.RemoveFreeNotification(TComponent(AMethod.Data));
end;

And then the Notification on the private TNotificationSink class:

procedure TComponentMulticastEvent<T>.TNotificationSink.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited;
  if Operation = opRemove then
    if AComponent = FOwnerComp then
      Free
    else
      FEvent.RemoveInstanceReferences(AComponent);
end;

In the EventRemoved method we call IndexOfInstance() to ensure that there aren’t multiple references to the same instance in the list before we remove the free notification hook. This is because FreeNotification will add the instance to its internal list only once.

So there you go, a multicast event that also performs full auto-cleanup for both the source and the sink instances. If the source instance goes away, the multicast event instance is automatically cleaned up. Likewise, if one of the sink event handlers’ instances go away, it will automatically be removed from the list so there are no stale references. Of course, I’ll remind the reader that with this implementation, it only works for TComponent derived instances. For non-TComponent derived instances, you can still use a descendant of TMulticastEvent<T> in a manner similar to TComponentMulticastEvent<T> mixed with, for instance, a technique described here.


posted @ Thu, 04 Sep 2008 00:29:18 +0000 by Allen Bauer


Random Thoughts on the Passing Scene #81

  • Redmond News: Embarcadero Advances Borland Tools  "It seems like Borland’s products might enjoy a bright future under the Embarcadero banner."  Boy, did he ever get that right.
  • I’m in Melbourne, Australia right now, and I want to get this out of the way:  The water in my tub drained out clockwise this morning.
  • Sorry to you Kiwis, not trip to New Zealand this time, but next time I come over, I’ll lobby for it!
  • Delphi: a secret weapon for Windows developers — Nice comments from Tim Anderson.

posted @ Tue, 02 Sep 2008 22:11:39 +0000 by Nick Hodges


Are there storm “clouds” on the horizon?

The move towards putting all things application on the nebulous cloud is an exciting prospect, but are we ready as an industry, as architects, as developers, and as business people, for the next leap?  Those questions are of-course important but maybe the biggest issue facing the cloud is the underlying infrastructure that supports everything about it, the Internet.

Great examples of applications that are what I call version 1.0 of the cloud paradigm are basically SaaS (Software as a Service) and include Salesforce.com, Google’s suite of products, Amazon suite of services, and many others.  This may lead to the question of what is version 2.0?  One of the promises, from my perspective, is that the “cloud” becomes a smorgasbord of available functionality.  Say a company needs ‘x’ functionality and the cloud has 30 versions of ‘x’ functionality available, so the company can select a provider that best fits its requirements.  An example of this may be a company needs some type of persistence functionality for their application and they decide to use Amazon’s SimpleDB for this functionality.

Again, I love the concept around the cloud, but I do have concerns around the stability of the underlying infrastructure, which is the Internet.  How many reports have we read in the last couple of years that the infrastructure of the internet is becoming more fragile as it continues to exponentially increase in size?  How many times does your internet go out and what happens when it does?  Will the current ISP rumblings with talk of throttling, regulating, taxing, and limiting access to the Internet and the information that one can get to going to, cause significant ripples where getting to the internet may mean something completely different to 2 or more people accessing it from the same location.

I have waved the magic wand and all of the above issues are overstated.  The internet infrastructure is fine and can handle exponential growth for the foreseeable future, and the large communications companies find they don’t have to throttle or reduce or charge extreme premiums on internet connections, all is right with the world.  Then other areas of concern around cloud computing start to pop up and they include disaster recovery and how is it affected, and how do you plan for other services not being available and rethinking responsibility of availability?  How do you offer off-line support when things go wrong?   What is the responsibility of the organizations offering services to your company if things change, go wrong, or other issues arise as they always do?

Another question that has been bothering me around the cloud is what happens if the cloud goes out?  I’ve watched and written about natural disasters and disaster recovery from those issues, but lets take a much smaller issue; what happens in your area when the power goes out for 5 hours?  Many companies send people home, factories close down, work comes to a stop.  When I think logically about cloud computing, I think that the cloud should protect me in some of the above examples, but what about the concept of mashups that help create mongrel applications from available services in the cloud and one or more services fails?  Does that mean that you as a user of a service may also be responsible for replication or services depending on the application?

Don’t get me wrong, these things can be overcome (I use this same optimism when asked a question that starts with “Can your product do” something, I response with “we build compilers.  We can do anything with enough time and money!”) with thought and perseverance, hopefully someday in the future, the ideas and concepts of building truly widespread, distributed, multiple functional applications in the cloud will be great.  But the fact still remains that moving to the cloud distributes the responsibility to 3rd parties that may not have you or your company’s best interest in mind and that needs to be accounted for, and if not, it won’t be just storm clouds, it will be chaos in the making.

Am I Wrong or Right? 

Let me know, I love feedback,

Mike

More to come…


posted @ Tue, 02 Sep 2008 18:53:59 +0000 by Michael Rozlog


Delphi Tour 2009 - Brasil

Delphi Tour 2009 

Comunidade,

É com grande alegria que escrevo este post. está chegando o Delphi Tour 2009 no Brasil, eu(Andreano Lanusse) e David I  estaremos apresentando as novidades do Delphi 2009 e C++ Builder 2009.

A agenda e o procedimento para inscrição já estão disponíveis, acesse: http://latam.codegear.com/br/delphitour/

Faça já sua inscrição, o evento é gratuito e as vagas são limitadas.


posted @ Fri, 29 Aug 2008 10:16:56 +0000 by Andreano Lanusse


Recording speaker audio (what you hear, or "Stereo Mix") under Vista

Ever since I put Vista on a Dell Latitude D810, I’ve had issues recording speaker audio on that machine. I didn’t think much of it, since I used to use another XP machine as my main machine anyway, but it recently came to a head when I got rid of my XP machine and needed to actually record webinars on a Dell Precision M6300 with Vista on it, and I once again was painfully reminded that it doesn’t work.

First I thought it was Camtasia’s fault, but not at all. It’s Dell that is disabling the functionality in their Vista drivers.

After hours of searching for a solution, I gave up and just used a cable ($5) between the head phone and microphone jacks. Worked great, except for the fact that you can’t monitor what you’re recording (unless you feed it through a head phone splitter or mixer).

Several nights later I was determined to find a solution for Vista, because I grew to hate the ridiculous cable, and after hours and hours of digging through web sites that made McAfee go insane :p I found the solution!

Install the XP driver on the Vista box in XP compatibility mode. Works like a charm!

Simply save the XP audio driver (in my case Dell’s XP driver for Sigmatel) on the desktop, right click on the file and go to the Compatibility tab and select XP Service Pack 2 for instance. Then install the driver. In my case the installer would fail on Vista, but it works just fine in XP compatibility mode.

After the driver is installed you may have to go in and actually show the disabled devices and enable Stereo Mix under the Recording tab in Sound properties.

If this helped you, please feel free to leave a comment saying so. :)


posted @ Fri, 29 Aug 2008 05:11:00 +0000 by Anders Ohlsson



Server Response from: dnrh2.codegear.com

 
© Copyright 2008 Embarcadero Technologies, Inc. All Rights Reserved. Contact Us  |   Site Map  |   Legal Notices  |   Privacy Policy  |   Report Software Piracy