Flotsam and Jetsam #54

clock January 28, 2012 10:06 by author Nick |
  • I like FireMonkey.  Actually, I confess that I don’t know much at all about FireMonkey, but I like that it exists.  I don’t use it, but I like that it is there, broadening the appeal of Delphi and generally advancing the cause of the tool we all love so well.  So I was pleased to see that the nascent market for third-party FireMonkey controls continues to grow.  The latest offering is from Jason Southwell’s Arcana with the cleverly named “ApeSuite”.  ApeSuite is in beta, but you can get in early at a special price.  Jason has been updating the library pretty regularly. I’m glad to see people getting a good start on what will hopefully be a thriving marketplace, and I tip my cap to Jason for jumping in.
  • Alex Ciobanu – formerly of the Delphi RTL/VCL team – has made a few changes to his outstanding open source offerings.  First, his DeHL project has been discontinued.  I’m sorry to hear that – there are some really interesting things in there.   But second, he has done a brilliant job with a new project that is, to a certain degree,  a replacement, Delphi Collections.    He says it is “on hold” but it appears that he is actively working on moving it forward.  Alex is a really, really good programmer, so I keep a close eye on what he is up to.  His contributions to the Delphi community are very large, and I’m very appreciative of what he does.  Lots to learn there.
  • How to Get Your Comments Deleted:  This is my blog, and what ends up on on it is up to me.  I’ve noticed that some of you have been trying really hard, though, to get your comments deleted with a modicum of success – and I’ve been helping to make sure that you succeed in this endeavor when appropriate.  I thought that you all might want to know for sure how to get your comments deleted.  The best way is to be a jerk and write a content free but insulting comment that adds no value whatsoever.  Do that, and you’ll get your comment deleted.  Hope that helps.
  • Eric Grange pointed out that there has been a marked uptick in activity on open source projects involving Pascal.  It’s nice to see numbers attached to something that I’ve kind of felt to be the case.  The addition of generics and anonymous methods to Delphi really opened the language up to some really cool and really powerful frameworks, and things like Alex’s code above, the Spring Framework, Delphi Mocks, and all kinds of other frameworks.  It’s a really good time to be a Delphi developer.  (And Ohloh is a pretty interesting site – worth poking around.)
  • What and how things are named in our code is a really important part of being a good developer. That’s why I thought this post was interesting – “Interface naming: prefix 'Can-' vs suffix '-Able'”    We tend to create interface names with –able (ISerializable, IDisposable, IEatable, whatever….) and maybe that isn’t always the best convention?


Flotsam and Jetsam #53

clock January 18, 2012 09:20 by author Nick |


Flotsam and Jetsam #52

clock December 31, 2011 16:59 by author Nick |
  • Many of you have headed over to the Delphi UserVoice page and voted on your favorite new feature for Delphi and RAD Studio. (Feel free to go over and vote for this one or this oneWinking smile) I’m still an Admin there, and have been, well, doing a bit of administering.  One thing I’ve been doing is marking as “Declined” a lot of “Laundry List”  and the “Too Quick” requests.  A Laundry List request is one that has multiple requests in it on a general topic.  I’m closing these because they can’t ever really be “finished”.  It might be that three of the four requests get done, but it can’t be marked “Finished” because of that last item.  Instead, one should enter a single item for each request.  “Too Quick” requests are requests without any content, and that can’t possibly ever be completed (or could be marked completed anytime) – things like “Better support for <some feature>”.  What the heck is that supposed to mean?  Anyway – you may have a few more votes as a result, so feel free to go over and cast them again, or enter better formed requests.
  • Has anyone besides me noticed that Embarcadero has done a pretty large buy with Google AdSense? I’ve got Delphi ads popping up while I’m watching YouTube videos and even reading political articles. I also get a Delphi ad on many of the pages I see over at StackOverflow.    I like it myself – I’m always happy to see advertising tailored to my specific wants and interests. Plus, I’m glad to see that the marketing folks are In any event, Google has figured out that I’m a big Delphi fan.
  • DevExpress has updated their VCL subscription to support Delphi XE2, including 64-bit Delphi.  The post even included kind words about Embarcadero from Julian Bucknall about XE2, so you know that something has to be going really well with Delphi XE2. Winking smile
  • I love a man who writes about Dependency Injection.  Brings a tear to my eye. I’m getting to the point where I think that Dependency Injection is the only way to code – that if you are calling Create and otherwise insisting on a particular implementation of an interface then you are just writing back code. 


Flotsam and Jetsam #51

clock December 12, 2011 09:51 by author Nick |
  • If you missed CodeRage 6, or you didn’t get to every session that you wanted to see (hear?), it is now all online.  That link also points to the latest offers and ways to find out more about XE2.  I love XE2, and think it’s the best Delphi ever.  And I say that not even using the FireMonkey/cross-platform stuff – so it’s even better than I think.  Winking smile
  • I was digging around in my boxes in the basement – we’ve moved a ton, and so I’ve got stuff scattered all over – and came across a CD labeled “Website”.  I opened it up, and lo and behold, there was a copy of one of my very first web sites, built with NetObjects Fusion.  It was fun to poke around and see some of my really old content.  (As a point of reference, the homepage has “This site was last updated on  Tuesday, December 18, 2001” at the bottom.  Remember when we used to do that?) Actually, I think some of the stuff will end up on my current site.  Winking smile  Not all the links work, but if you’ve been around a while, you might remember some of it.  Most of it was hand-maintained, but you can see where I tried to integrate in some early Delphi-based CGI stuff.   I actually still like the colors and the template.  Winking smile
  • The Generics.Default.pas unit is an interesting one – you may never have cause to use it directly, but it contains a lot of interesting stuff in support of the classes in Generics.Collections.pas.   It’s worth poking around in.  I was doing just that, and came across some interesting code – a function called (and I quote) BobJenkinsHash.  It is used rather extensively throughout the unit, and appears to be a general purpose hashing code.  Who is Bob Jenkins, you may ask?  Well, apparently he’s a guy that wrote a very powerful and useful hash function, and Embarcadero has utilized it as part of their generics library.  And here’s the interesting part – they created it using a set of GOTO(!!) statements whose use , well  -- I seriously can’t believe I’m actually saying this – actually kind of make sense.  The C code depends on the “fall through” nature of C’s switch statement, and the GOTO calls actually mimic that rather nicely.  I’m open to suggestions on how it might have been written better.  Winking smile (Again – I can’t believe I just said that, but there it is.)  And to redeem myself, I’ll chastise the author for not defining his interfaces in their own unit.  (Sorry, Barry – I had to do something to restore my street cred for actually liking the way the GOTO’s worked…..) Anyway, interesting little find in the bowels of the Delphi RTL.
  • I’ve added a new category, Three Sentence Movie Reviews.   I watch a lot of movies, and have all these aspirations of writing up movie reviews when I watch, but I never do because it takes too long.  So I thought I’d simply limit myself to three sentences in reviewing the film, and that way I might actually get the review done.  I might have to get a bit creative – sort of like keeping tweets to under 140 characters.  Should be fun.  If you read this blog via DelphiFeeds, you won’t see it as I’ll not be putting the Delphi category tag on them. Just another reason to subscribe to my real feedWinking smile


Flotsam and Jetsam #50

clock November 23, 2011 12:32 by author Nick |


Flotsam and Jetsam #49

clock November 9, 2011 13:46 by author Nick |
  • Hallvard Vassbotn has been sighted in the wild! Hallvard is an amazing developer and a great writer, and I’m delighted at the prospect of him starting to blog again, especially given his propensity to stretch Delphi language and RTL features to the limit.  Given all the new things that have happened in these areas since Hallvard’s last blog  post, one can only hope for really interesting stuff.
  • Fun to see people taking up the Dependency Inject mantle – here’s an article by Yanniel Alvarez Alfonso on a simple example of DI using DelphiDean Hill has a very good article about Software Flexibility that discusses how Dependency Injection can make your software more flexible and adaptable.   If my efforts have sparked an interest in Dependency Injection, I couldn’t be happier.  I’ll say it again:  If you aren’t using even the most basic form of Dependency Injection, then you are doing it wrong.
  • ninite.com is a really cool site that provides a valuable and helpful service.  It allows you to create a single install for a pretty broad and selectable collection of popular software.  This is particularly useful when setting up a new machine.  There’s always a million of these things that you want to install – Skype, Chrome, Firefox, your favorite IM client, media players, various utilities, etc. --  and Ninite.com allows you to select all of these and get a single installer for them all.  It does all the “smart” things that you want it to like get the 64-bit version if possible, ensures you have the latest versions -- and best of all -- it clicks all the “Next” buttons so you don’t have to.  Sweet.
  • I tweeted this notion this week -- “Crazy Idea of the Day: Every class that raises an exception unique to itself should have it's own exception type to raise. “ – and I thought that I’d expand a bit on it here.  One of my pet peeves is unclear error messages.  Somewhat of a corollary to that is the irritated feeling you get when an exception is raised, but you can’t tell right away where it came from. Thus was born the notion above – that if your class is raising an exception unique to itself (i.e., not something “normal” like EConvertError or EFileNotFoundException or something like that….) it should be raising an exception type defined specifically for the class itself.  This way, you can put a very descriptive error message in the exception, and the developer or user seeing the exception can know exactly where it came from. In addition, it allows anyone using  your class to easily trap exceptions specific to your classes.  I’ve been doing this for years, but have never seen anyone in the Delphi community really discuss it.
  • Every once and a while, I like to remind folks that they can go to the Delphi UserVoice page and vote for their favorite new features in Delphi.  This is totally unofficial, but it is interesting.  I’m still an admin there, so it’s always fun to mark items done as they get shipped. (I confess that it is also fun to close and/or reject requests that are……. not well thought out…?)  Currently, this item – “Better GUI separation and abstraction” -- is the top voted thing on the whole site, and I’m wondering if that really is indeed what the Delphi community wants the most.  In any event, you can certainly go there and vote and perhaps influence the future of the product. 


Flotsam and Jetsam #48

clock October 29, 2011 19:51 by author Nick |


Flotsam and Jetsam #47

clock October 18, 2011 12:52 by author Nick |


Flotsam and Jetsam #46

clock October 5, 2011 22:58 by author Nick |
  • I will be speaking this year at CodeRage 6.  I’m giving two talks, one on Dependency Injection, and one on Unit Testing.  Please attend.  I think my talks in particular will be really good.  But maybe not as good as all the other stuff you can learn there
  • Are you aware of the fact that FireMonkey, RAD Studio, and Delphi all have spanking new pages on Facebook?  I wasn’t.  And they do.
  • Holy crap!  Allen Bauer is alive!
  • I’ve been trying to write some more example applications for the Delphi Spring Framework, and so I was researching the Factory Pattern to see if I could find a good illustration to build an example for (TFoo and TBar can only take you so far….) and I ran across a nice article on MSDN that describes it nicely.  It actually has a nice example of a “Computer Factory”, and I’ll likely riff of that to create a “real world” example of a physical object.  But the part that caught my notice, and caused me to write this entry was a quote at the beginning:  “When was the last time someone asked the designers of the Empire State building to add ten new floors at the bottom, put a pool on the top, and have all of this done before Monday morning?” And the answer, of course, is “never”.  Winking smile  Anyway, it just was another data point in my ongoing contention that software developers are not engineers. 
  • This is a pretty amazing and thorough tutorial on LiveBindings.  Live Bindings is one of those cool features that I need to learn about and that appears to be cool now, with the potential to get a lot cooler in the future.


Flotsam and Jetsam #45

clock September 29, 2011 14:04 by author Nick |
  • One of the cooler – but unsung – features of Delphi XE2 is the fact that it includes an ODBC Driver for dbExpress.  Do folks realize this basically means that Delphi can now use all its cool Delphi goodness with just about any database backend?  Everyone has an ODBC driver, and so now you can connect anywhere you want with dbExpress and Delphi.  Like I said, a pretty good little feature.
  • I have just checked in a number of sample applications that illustrate how to use various features of the Delphi Spring Framework.  It is far from complete, and I will be adding more demos, writing articles about each demo, and trying to comment the code.  In addition, I’ll be working on fleshing out the documentation and the wiki that are part of the Google project as well as continuing my blog series.  This is really proving to be a lot of fun for me, and I’m glad to be able to make a contribution to the community. 
  • I asked this on Twitter and got a few responses and a little info.  Does anyone out there know what is up with the DUnit project?  It looks like Mark Edington of Embarcadero is a committer and has made some changes in the past few months, but it seems to me that given the new capabilities of Delphi (Generics, anonymous methods, attributes, etc), this project is screaming out for someone to take it to the next level.  Anyone interested?  How do we make that happen? This needs to happen.
  • More from the “You learn something new every day” category:  you can tag a unit with “experimental” and the compiler will issue a warning.   Example: unit Spring.Configuration experimental; will issue the warning [DCC Warning] Spring.Core.dpk(80): W1007 Unit 'Spring.Configuration' is experimental Haven’t seen that one before, I must confess.
  • Roman Kassebaum is at it again.  He’s updated the Orpheus project on SourceForge to work with Delphi XE2 and XE2/64-bit. Very cool. And while he was at it, he’s updated the PowerPDF project as well.  Thanks Roman.


Flotsam and Jetsam #44

clock September 21, 2011 23:58 by author Nick |
  • If you haven’t figured it out, I’m all cuckoo for the Delphi Spring Framework.  Some folks were worried that the project was stagnating, though it hadn’t been that long since it had been changed.  Well, at least until yesterday, when a big set of changes were made with the idea of heading towards a 1.0 release.  There were quite a few fundamental changes, with some things formerly marked experimental moving to the “ready to go” stage, and a few new things (like the Logging units) being added and marked experimental.  And if you look really closely, you’ll even notice some small changes by yours truly.  There are some really cool things going on in this framework, and I highly recommend giving it a look.  I’ll be writing more articles here on the blog, and trying to update the documentation, FAQs, and other stuff as part of the project.  I also have some demo applications that I’ll be commenting and adding to the project.
  • I still see people trying to obfuscate their email address online. You know, doing things like “Email me at nick at nickhodges dot com” or something like that.  I personally have given up doing anything like this, figuring that spammers will eventually get any email address I have, and that it’s pointless to try to avoid it.  Spam Filters have gotten pretty good, and I only see a few spam messages a day.  And I’m not one of those guys that freaks out at the site of a single unsolicited email, preferring instead to take the 0.0023 seconds it takes to click the delete button.
  • Jacob Thurman is at it again – this time updating his very cool and powerful IDE enhancement Castalia to work with Delphi XE2.  I’ve always admired what Jacob does, and I think you should, too.  I mean, how can you not love a product that has a bullet point that says “Enhanced: Rewritten “Eliminate With” refactoring is more reliable”.  I mean, “Eliminate With”?  Is there a cooler refactoring anywhere?
  • From the “You learn something new every day” category:  I didn’t realize that Delphi doesn’t generate RTTI for enumerations that have assigned values (i.e.  type TMyEnum = (Five= 5, Six = 6);
  • One of the new features in Delphi XE2 is the ability to style your VCL apps.  The product ships with a bunch of styles, and provides a style designer that lets you build your own styles.  Well, it didn’t take long for Rodrigo to get to work and build a bunch of styles that you can use.  You can download his styles, and then put the *.VSF files in your style directory.  On my machine (I install to the default location) that directory is:  C:\Users\Public\Documents\RAD Studio\9.0\Styles\.  He’s put together a really nice looking set of styles. Thanks, Rodrigo!


Flotsam and Jetsam #43

clock September 12, 2011 17:15 by author Nick |
  • Is your currency the Euro?  Well, now you can buy your RAD Studio from the inestimable and indefatigable Dr. Bob.  Bob has expanded his reach of dedication to the product and the customer to the entire Eurozone.
  • You guys know that I don’t think that Simon Stuart is really human.  Instead, I think he is some kind of android, sent here from the future to code something (in Delphi) that we need to save the world, and he's just biding his time writing things for us in the Delphi community.   Simon has produced a prodigious amount of cool stuff for us Delphi developers, and is a tireless community member.   It doesn’t seem like too much to ask to help him release Lua4Delphi before Christmas.  I made a modest donation.
  • We homeschool our kids, and my wife came to me showing me the stuff for the starting school year.  It presented an interesting choice:  All things being equal, should our kids spend their time learning to write cursive, or to touch type?  I voted for touch typing.  It occurred to me that I can’t remember the last time I wrote anything more than a note on a ToDo list. I almost never write letters or anything involving using a pen or a pencil for extended periods.  And even when I do, I don’t write in cursive.  But I’ll tell you what – I type A LOT.  (I’m doing it right now!)  Anyway, I guess we’ll have to put cursive writing up there with reading the newspaper.  I mean who does that anymore?  Winking smile I realize that we could do both, but that would mean giving up something else, and I see the two as similar enough that we should choose between the two. 
  • The TIOBE Index is out for September, and Delphi comes in a #13 with three down arrows.  Interestingly, though, if you put "Delphi" and "Pascal" together, they are in the Top 10.
  • Embarrassed that I Didn’t Know it was There Class of the Week: TAggregatedObject – very cool little class


Flotsam and Jetsam #42

clock September 3, 2011 09:02 by author Nick |
  • Interesting Delphi XE2 Item of the Week:  TComponent now implements the Observer pattern. 
  • Very Cool Video of My Friends and Former Co-Workers of the Week: FireMonkey Developers Speak I have to say that:
  • I have fleshed out my Embarcadero Blog Content page that includes links to the two main series of articles that I wrote on my Embarcadero blog.  I still have some formatting to do, but the content should be all there.  I’m trying to grab all the content I can from my old Embarcadero blog, as they need to shut it down for legal reasons (as I understand….).  If you can think of anything I did there worth keeping (that might be be  hard, I know….. Smile) let me know.
  • "It is always painless to depend on interfaces."
  • Hey, I take my position as an Admin at the Delphi UserVoice page seriously, and I’ve been a bit busy.  The XE2 release has made things a little more fun there…
    • I just marked as "Completed" over 3800 votes on Delphi's UserVoice page. Not bad for a day's work.  And not bad by Embarcadero in delivering all that asked for functionality.
    • Now, with all those votes freed up, the most requested item is Better GUI separation and abstraction.  Is that really the thing that the community wants most?
    • I closed a bunch of “laundry list” items that would be impossible to close.  They were things like “Make the IDE Better” with a list of seven things they wanted to see.  How could you ever really close that as “Done”?  I encouraged the posters to create new requests for each individual request instead.
    • I’d recommend all you fine people go there and enter your requests as well as peruse the list and cast your votes.
  • I’ve been trying to build things with my son, and  being a boy, he likes weapons and destruction.  We started with a trebuchet.  I think it will likely be a while before we work our way up to this, but hey, we can dream. 


Flotsam and Jetsam #41

clock August 6, 2011 11:11 by author Nick |


Flotsam and Jetsam #40

clock July 27, 2011 16:50 by author Nick |