Dave Carabetta Blog Banner


July 10, 2008

CynergyTV: Flex, Silverlight And Why I've Disappeared


So why have I been so quiet for pretty much the last year outside of some token posts? Well, our re-launched CynergyTV experience holds the reason, and I'm glad I can finally talk about it.

So Dave, you mean you've spent the last year re-building CynergyTV? Nope, not quite. That was done by an extremely talented team here at Cynergy that worked extremely hard to not only refresh the user experience but deliver the content in professional audio/video quality supported by lots of hardware and software upgrades in our data center. Incidentally, when I say team, I mean it in the truest sense of the word -- our president, Carson Hager, recognizing that we could and should present our accomplishments better and allowing guys to stop being billable in order to get this done; our Marketing group spending hours in the recording studio choreographing the audio/video; our User Experience group iterating through lots of potential look and feel options until it was nailed; our Rich Interface team implementing the user experience in Adobe Flex; and finally, our Enterprise Services and Network Support teams building out the services tier to support the streaming video content (not a trivial task as I've come to learn), notifying the appropriate people when the Let's Talk form is submitted, and then setting up the appropriate infrastructure to host it all in our data center. If that sounds like a lot of work, that's because it was -- and it was well worth the investment.

So back to my opening question as to why I've been so quiet. Well, if you head over to CynergyTV (after reading this post, of course), you'll see that one of the showcases is for an application we built called Quickcomm Enterprise, a telecom expense management (TEM) tool for one of our clients, Quickcomm. It is this application that has basically been most of the last year of my life. As the Technical Lead on the project (which is a combination senior application architect and project manager here at Cynergy), I have spent over 1,600 hours working with my team here at Cynergy and the team at Quickcomm to deliver the most disruptive TEM solution on the market and I'm extraordinarily proud and privileged to have worked with both teams.

Since the completion of that project a short while back, I have since made the transition for being a Technical Lead to Business Development -- yes, the dreaded "sales" guy. I was ready for a new challenge beyond coding and the growth opportunities here at Cynergy made this transition both seamless and a no-brainer. So now I get to put on my sales hat: If you're interested in speaking with us about an idea you have or have an existing application you want re-invented to provide a better user experience, drop us a line and we're happy to speak with you further. And of course, if you have any feedback at all about the re-launched CynergyTV, feel free to leave a comment and I'll make sure it reaches the right people immediately.

Lastly, if you're a developer who wants to work with a phenomenally talented team that continually delivers cutting edge applications, we'd love to speak with you about career opportunities at Cynergy. It's a great time to be building RIAs and we'd love for you to be a part of it!



January 31, 2007

Want To See Adobe Flex At Its Best?


This blog is becoming awfully barren as of late, and, despite my best efforts to stay active, it has been close to impossible to post entries due to the fact that there are only 24 hours in a day. However, I'm incredibly proud to finally show off what keeps me and my co-workers at Cynergy so busy.

Today we launched Cynergy TV, an interactive Flex-based channel where we will be publishing all sorts of showcases, flex tips, tricks, etc., that we hope will benefit the Adobe Flex community. As an employee at Cynergy, I'm incredibly excited to see where we take this, and I definitely plan on contributing as we move forward with the initiative.

So what's this about "Adobe Flex at its best?" Well, "episode 1" showcases some of our most engaging applications. I've noticed several flexcoders and blog posts from people who don't think Adobe Flex is verstaile-enough to be taken seriously or is limiting in its design. I simply disagree, and I hope that these showcases will provide some inspiration for you to create some truly interactive solutions. Our showcases really exhibit Adobe Flex at its best. From ColdFusion to Java to .NET, we've created high-impact solutions that integrate with all sorts of back-end systems.

Are you a developer who has worked with Flex or AJAX on some level and is interested in joining the industry leader in Rich Internet Applications? Shoot us an e-mail with your resume. We really want to hear from you. As it says all over our corporate web site, "Let's Talk." ;)



October 2, 2006

My Shiny New Job With Cynergy Systems...And The Value Of CFUNITED


It is with incredible pride and a renewed energy that I'm happy to announce that I have officially accepted a position with Cynergy Systems starting later this month! In my new role, I will be a consultant working on Flex 2 applications integrating with Java backends. I have been on "Cloud Nine" since late Friday when I received the offer, and my brain is about ten miles ahead of my fingers as I type this out, so if I'm all over the map with this post, please hang with me!

Cynergy has quickly established itself as a leader in the Rich Internet Application (RIA) revolution, and I couldn't sit on the sidelines and watch while they had all the fun. Their collective talent and passion absolutely blew me away, and there was no second-guessing once I accepted the offer. You can see some examples of their expertise over on their blogs and the flexcoders mailing list (hint: search for "Cynergy" or "Dave Wolf" or "Andrew Trice" for some sample posts). In short: these guys know their stuff, and I'm hoping to uphold that level of expertise.

You may have noticed in the opening paragraph that I noted that I will be working with Java. Those of you who know me (or have read my other posts) know that I am a longtime ColdFusion developer (I just hit my ten year mark recently). This change means that I will be stepping away from ColdFusion for a little bit while I diversify my skill set with Java and Flex 2. I'm a bit sad, a bit nervous, but, most of all, I'm incredibly excited to be broadening my base and getting into areas of work that are new and challenging. Diversifying my skill set is something that I've been wanting to do for years, but just never found the time to do outside of reading books and playing around with personal projects. And while I firmly believe that ColdFusion will gain more and more traction down the road as more companies recognize its beautiful integration with Flex 2, the reality is that the lion's share of current Flex RIA work is using a Java backend. Further, it has been suggested they are open to eventually bring in more Flex/ColdFusion work down the road at Cynergy, so don't think I'm leaving the CF world forever. I look at it as a hiatus while I go cut my teeth with Java. Also, this site along with some other personal projects will continue to use ColdFusion as its backend as well.

OK, so I mentioned something in the title about the value of CFUNITED. Well, if not for the friends that I made down at the conference over the last two years, this opportunity likely would not have come to fruition. See, two years ago, I was fortunate to meet Adam Wayne Lehman (who is now a ColdFusion specialist for the North American Sales Team at Adobe). We have kept in touch since then, and, at this past conference in June, he introduced me to a good friend and then-co-worker of his, Cliff Meyers. We had a great time at the conference, and then caught up a few weeks ago. Cliff went to work for Cynergy just after CFUNITED and raved about them. At the same time, I was hitting a ceiling at my current job and decided to throw my candidacy out there to see what would happen. Fast forward to last Friday when the official offer was extended, and here we are! While I agree with Sean that there are more to conferences than just the networking, I have to say that there's no way that this opportunity would have come to pass as quickly as it did without CFUNITED. So if you're ever on the fence as to the value of this conference (or other conferences in your field), I'm happy to be a case study in their benefits! It has changed my life and I'm incredibly excited at the opportunities that lie ahead.

I'll be starting there towards the end of this month while I properly transition out of my current job. It may or may not be quiet on here until then!



September 20, 2006

Ten Years Using ColdFusion, And I'm Still Learning!


Sometime over the last couple of weeks, I officially passed the "10 year" mark using ColdFusion. It's not like it's my birthday, so the exact date escapes me, but I remember that it was about a month or so into my sophomore year at George Washington University that I stumbled upon this relatively new scripting language that made building dynamic web sites easy. The rest, as they say, is history. OK, enough nostalgia.

Just over a week ago, Rupesh Kumar, an engineer on the ColdFusion development team in India, posted a great tip for handling J2EE sessions with cookies disabled. Since my company's site requires cookies to be enabled to work (it's part of the service agreement since we're a subscription-based data provider), I haven't had to really worry about appending the session token to URLs. That being said, Rupesh's tip for seamlessly handling J2EE sessions in either situation is a nice little gem, and one I plan to start employing as I move forward. And the best part about it? The solution is a function that is already built into the ColdFusion language!

The URLSessionFormat() function is smart enough to determine whether or not cookies are enabled in the client's browser, and then append the session token (in the proper format) to the URL that is passed as its argument. Here's an example:

<form action="#urlSessionFormat('form_action.cfm')#">

Here's the output with cookies enabled:

<form action="form_action.cfm">

And here's the same exact code snippet with cookies disabled (tested using the awesome Web Developer Extension for Firefox):

<form action="form_action.cfm;jsessionid=d4305073c05055263551?CFID=502&CFTOKEN=519f9941914049aa-CC1F9E84-BC5D-EFFF-EAB28BC4162757E3&jsessionid=d4305073c05055263551">

How cool is that? Most importantly, notice that the jsessionid value is properly appended to the URL using a semi-colon. A lot of developers simply append the jsessionid as if it were just another URL parameter ("&jessionid=xxxxx"), but, as Rupesh points out in his post (and as it came up on a cf-talk thread recently), you must use the ";jessionid=xxxxx" format after the file name for the web server to properly process the request. Simply using the URLSessionFormat() function takes care of that for you.

It's amazing... Ten years in and I'm still learning new tricks all the time!



September 14, 2006

Adobe Co-Publishing Agreement With O'Reilly Excludes ColdFusion


Via Marco Casario's blog, I noted that Adobe has signed an agreement with O'Reilly Media "to co-publish and co-brand books and online learning resources for developers creating applications with technologies such as Adobe Flex, ActionScript, and Adobe Flash and Flash Video." -- but not ColdFusion. Sigh.

As a long-time ColdFusion developer, this announcement is one more point of frustration with the fact that ColdFusion seems to miss out on the larger audience exposure that its siblings seem to be enjoying. While this announcement seems to be in the context of promoting "Web 2.0" technologies (a Tim O'Reilly-coined term that I absolutely loathe, by the way), this seems like the type of agreement where letting ColdFusion ride the coattails of the Adobe Flex 2 marketing strategy could be a win-win for both sides.

Why? Well, you can't do a whole lot with Adobe Flex 2 if you don't have a server-side technology to do things like database querying, authorization/authentication, etc. It's a presentation layer technology (the "View" in the Model-View-Controller pattern for those wishing to be buzzword-compliant), and Adobe has been preaching for months now that the single easiest way to integrate Adobe Flex 2 with your back-end (the "Model") is via ColdFusion (in this case, the "Controller"). So why not add ColdFusion MX into this agreement and subsequently provide resources for showing just how smoothely integrated the two technologies are. You'd have the expertise of the Adobe ColdFusion team providing high-quality examples while the O'Reilly team provides the author/publishing/conference resources to expose this seamless integration to the masses. In return, O'Reilly gets an extremely passionate ColdFusion development community to support their efforts.

You almost literally can't find a competent developer who hasn't heard of or used an O'Reilly-published book -- they're everywhere and are usually excellent resources. While I know that they decided a while back not to publish a ColdFusion MX 7 book due to sluggish sales of the 6.1 version, there could have been alternative resources published with this agreement that might have focused even a small part of the spotlight on the power and ease of developing with ColdFusion (i.e., O'Reilly-backed articles, samples, etc.).

Adobe currently seems to have their marketing engine squarely focused on Adobe Flex 2 and ActionScript 3, as well they should. I just hope that the same zeal with which they're pursuing the growing rich internet application development community is equalled or surpassed with next year's ColdFusion 8, aka Scorpio, release.



September 6, 2006

What's Your Ideal Source Control Setup?


Recently, I've been wrestling with the task of migrating our current source control solution from Microsoft® Visual SourceSafe® over to Subversion. Now, I know there are many of you who are cringing at the mere mention of using VSS. However, until recently, it has been an extremely stable solution for our source control needs. And hey, at least we have a source control solution, right?!

Our needs are changing though, and our team is clearly outgrowing the feature set that SourceSafe provides. From directory-level branching to better binary file compression and storage to concurrent editing, Subversion clearly fulfills our needs...and it's free to boot. I keep my personal files in a Subversion repository at home, so I'm familiar with it when working on one machine. However, now I need to set it up for a couple of our departments (we got some non-IT departments into version control!) and I'm trying to figure out the best way to do it. The requirements are fairly straightforward:

  • All access will be internal. In fact, no public access will be granted to anybody. However, not all users will have an account on the repository's server.
  • Must be able to fully migrate the existing VSS repository to Subversion.
  • Must be able to support roughly 15-20 users concurrently accessing the repository. There may be more user than that overall, but that's the targeted number of actual concurrent use.
  • Must be able to lock down certain projects such that users must authenticate themselves when trying to access the files.

OK, now that the requirements have been stated, I need your help figuring out the best approach.

First and foremost, where to physically put the repository. We have a shiny new development box (running Red Hat Linux 4.0) for our team with tons and tons of free space. I was thinking about creating a partition there dedicated to housing the repository. At the same time, I'm hesitant to put the repository on the same box as where most of the development is going to be taking place (we all have our own JRun/ColdFusion instances on this box, so we're separate, but sharing the same overall resources). I just don't trust all the banging that the box will be taking to house our core file repository, even though we'll be taking proper backups on a nightly basis. Should I phsyically separate the repository from the dev box?

With regard to the network protocol, from my research, it seems like the best setup is to install Apache on the server and manage the file access and user autentication using the mod_dav_svn module. However, this feels like overkill to an extent. I have the excellent book Pragmatic Version Control using Subversion 2nd Ed. by Mike Mason (and published by Dave Thomas and Andy Hunt of Pragmatic Programmer fame), so I'm aware of the pros and cons of each of the protocol options (svnsserve, svnserve+ssh, and Apache). However, I'm looking for other real-world opinions on each, based on the stated requirements.

With regard to migrating the existing VSS repository, this is a biggie. The problem I have with a lot of the current presentations about using Subversion is that they all assume that you're starting with a clean slate. However, we have literally years worth of comments, tags, labels, etc., that are an absolute "must keep." To that end, I have been monitoring the open source project Vss2Svn with the hopes of using their solution for migrating our repository. However, it doesn't look quite ready for prime time just yet. Has anybody succesfully used it by chance? I also found a solution from Polarion called Subversion Pro that looks to be free for at least the migration aspects of the product. Has anybody used this one?

Lastly, are there any tips on the best way to set up authorization/authentication? Anything else I'm overlooking? We're currently using the amazing FogBugz project management system from Fog Creek software (it integrates with virtually all source code management systems, which is great), so we don't need things like Trac.

Thanks for any insights.



September 5, 2006

For Tech Job Seekers and Employers, Joel Spolsky's New Site Is A Great Idea


I've mentioned before that I'm a big fan of Joel Spolsky. He just "gets" how to run a technology company and treat his Fog Creek employees. Well, he has just set up a new Jobs site that essentially aims to take the annoying marketing and recruiting out of job hunting, while providing high-quality tech listings. Are you tired of vague job listings that ask if you want to work for a "well established, leading online company," but get no more information than that until you talk with a recruiter? Well, apparently, so is Joel (and me too, for that matter).

He's not aiming for it to supplant the gi-normous job boards like Monster or HotJobs. Rather, his goal is to keep it as a niche site where you can get the real job details for a given position without any hassle. Unique features include:

  • For candidates, the site is entirely free, including not having to register for anything.
  • Listings expire after 3 weeks. As he notes, most candidates don't apply for jobs that have been posted for longer than that.
  • All job posts must disclose the company at which the position is located. No "Company Confidential" listings are allowed. Since there are no recruiters involved, you can do all the research you want for a position without being hassled.
  • For a small $350 fee, an employer can post listings on the site. In comparison to the 15%-20% of base salary that recruiting fees that many recruiters charge employers for placing a candidate, this is chump change.
  • He offers his standard 90-day money back guarantee. If you don't find anybody to fill the position, hire the wrong candidate, if they quit just after starting, etc., you get your $350 back unquestioned. (Charities and non-profits can get in touch with their customer support reps about reduced fees.)
  • The job posting form contains checkboxes for answering each of the 12 questions of the Joel Test, which is his measure of the quality of a software team. This is a non-marketing way to really gauge the type of team you might be joining.

Since this is an experiment on his part, you'll note that there is no search functionality or saved profiles or anything beyond the basic listings. (This might expand if the site proves to be successful.) However, from Google to Six Apart to BEA to MySQL, there are a number of big-name company jobs currently listed, along with a lot of other smaller companies who I have seen are doing some great work.

I'm not sure how the site will hold up, if only because recruiters will always find a way to post seemingly legitimate job listings, and there doesn't seem to be a screening process for who is posting the job. That being said, I love the idea of side-stepping recruiters with no tech background who are seemingly the gatekeepers to a lot of great jobs.

Here's Joel's official announcement.



September 1, 2006

The End of JRun?


Has Adobe JRun finally gone up to software heaven (if you believe in that sort of stuff) to party with Generator and Spectra? Well, there's no definitive statement from Adobe, but this very quietly posted TechNote about the JRun 4.5 Beta status sure makes it sound that way. This sentence in particular is ominous:

Next steps for JRun and where it fits in the product calendar continue to be under discussion at the Product Manager level and such evaluation will be communicated to customers as soon as it becomes available.

I've felt for a few years now that JRun should have been end-of-life'd (is that even English?) as a standalone product. Frankly, it never has been terribly well supported (community-wise), and there was even one time where I called in a web connector bug and the engineer who literally wrote the code didn't understand what her code was doing!

I don't think it should be adandoned entirely though. Rather, I feel that any fixes and/or enhancements should be in the context of making complementary server products such as Adobe ColdFusion MX, Adobe LiveCycle, and Adobe Flex Data Services operate better.

If this is the end of the road for JRun, so long, and thanks. It's been a good (and sometimes frustrating) experience!



August 31, 2006

Two Important Bugs in the Adobe ColdFusion MX 7.0.2 Release


It's been a while since my last post, and one major reason for this is because I have been utterly tearing my hair out trying to figure out why a simple migration from a ColdFusion MX 6.1 instance to a ColdFusion MX 7.0.2 instance simply wasn't working correctly. Hours and hours of time have been spent trying to figure out why client variables weren't be stored correctly when updating their values. During the debugging process, I came across two pretty important bugs in the 7.0.2 release. One probably isn't so bad because it seems to only happen with the internal JRun web server (which nobody should use in production anyway), and ColdFusion is at least consistent with how it handles it. However, the second bug is an important one to consider.

Double JSESSIONID Values Being Set

If you're using the Enterprise version of ColdFusion MX, you have the option of using the J2EE session variable mechanism rather than the built-in ColdFusion session variable mechanism. If you're not familiar with the difference, read this page in the LiveDocs to understand each option. I'll still be here when you get back -- don't worry.

Now that we're all back, the JSESSIONID is critical to ColdFusion being able to "look up" your stored session structure on each page request. And since I need to be able to replicate sessions in a cluster, which only J2EE session variables support, this is a must-use feature for me. However, when using the internal JRun web server (which you should only use for development), when you request your site's root (i.e., http://www.mysite.com/, ColdFusion wrongly sets two JSESSIONID values, which can cause it to "lose" your session scope on subsequent requests. Here is an example HTTP header that is set on an initial page request to a site root:

http://beast:8200/

GET / HTTP/1.1
Host: beast:8200
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 30
Connection: keep-alive

HTTP/1.x 200 OK
Set-Cookie: CFID=102;expires=Thu, 14-Aug-2036 13:20:27 GMT;path=/
Set-Cookie: CFTOKEN=66021081eab5f673-3609FCE3-CF52-FC2B-25E974A728406FC5;expires=Thu, 14-Aug-2036 13:20:27 GMT;path=/
Set-Cookie: JSESSIONID=583033e973025152237c;path=/
Set-Cookie: JSESSIONID=58306b4060d425456d5c;path=/
Date: Tue, 22 Aug 2006 13:20:27 GMT
Content-Language: en-US
Content-Type: text/html; charset=UTF-8
Connection: close
Server: JRun Web Server

See the bug? There is a double Set-Cookie directive that sets not one, but two JSESSIONID values, effectively creating two sessions on your server for every one. This has a nasty side-effect in that more server resources are taken up per user because they technically have two sessions for every one, even though only one is actually used after the initial request. Interestingly, if I were to manually add the index.cfm page to the URL request, i.e., http://www.mysite.com/index.cfm, only one JSESSIONID value is set. So the bug occurs when requesting your site's root document without explicitly typing the desired CFM template. (And yes, if you note the Date value, you'll see just how long I've been trying to figure these bugs out!) Lastly, I should note that when I did a test in my MX 6.1 instance, the same bug exists there. So this isn't exclusive to CFMX 7.

Old DataDirect Drivers Ship with MX 7.0.2, Breaking Client Variable Updates

In my opinion, this bug (and yes, it's a bug) is the much bigger one of the two because this is one that will find its way out to a production environment if you're not aware of it, and has nothing to do with the web server being used. A long story short, Adobe ships the DataDirect 3.3 driver set in the 7.0.2 bits (released on 6/28 of this year), even though the 3.5 driver set was released as a TechNote last October. So much for the point releases being cumulative updates!

You might be wondering why this is such a big deal to me. Well, there are two reasons. First, we use Oracle 10g Release 2, which only the DataDirect 3.5 driver set supports. Second, it turns out that client variable records (in the CDATA and CGLOBAL tables) were not being updated, which meant that once you logged in to our web site (where a few client variables are set) and then clicked to a subsequent page, it would appear as if you had never logged in. The initial insert of the record was working fine (which you can see in the HTTP header sample I pasted above -- it's the CFID/CFTOKEN value), but any updates to the record would silently fail (I say "silently" because ColdFusion handles this for you under the hood, and it doesn't log anything when problems occur). I was going absolutely nuts trying to figure out why it wouldn't update, and the Spy feature of the JDBC drivers (described at the bottom of the aforementioned TechNote) simply wasn't working. After thinking and thinking and thinking, it belatedly occurred to me that the Spy features were only baked in to the 3.5 driver set. So, on a hunch, I ran the CF script below between my MX 6.1 instance (which was working perfectly fine) and the MX 7.0.2 instance to check the driver versions. (Note: The output is written to your log file, so your screen will be blank.)

<cfset drivernames = "macromedia.jdbc.oracle.OracleDriver, macromedia.jdbc.db2.DB2Driver, macromedia.jdbc.informix.InformixDriver, macromedia.jdbc.sequelink.SequeLinkDriver, macromedia.jdbc.sqlserver.SQLServerDriver, macromedia.jdbc.sybase.SybaseDriver" />
<!--- replace all spaces --->
<cfset drivernames = replace(drivernames," ","","all") />
<cfloop index="drivername" list="#drivernames#">
   <cfobject action="create" class="#drivername#" name="driver" type="java" />
   <cfset args = arrayNew(1) />
   <cfset driver.main(args) />
</cfloop>

The MX 6.1 results:

[Macromedia][Oracle JDBC Driver]Driver Version: 3.50.13 (016217.009407.012821)
[Macromedia][DB2 JDBC Driver]Driver Version: 3.50.12 (016217.009407.017715)
[Macromedia][Informix JDBC Driver]Driver Version: 3.50.12 (016217.009407.003505)
[DataDirect][SequeLink JDBC Driver]Driver Version: 5.4.0038
[Macromedia][SQLServer JDBC Driver]Driver Version: 3.50.13 (016217.009407.011311)
[Macromedia][Sybase JDBC Driver]Driver Version: 3.50.12 (016217.009407.007110)

and the MX 7.0.2 results:

[Macromedia][Oracle JDBC Driver]Driver Version: 3.3.48 (008852.005015.004259)
[Macromedia][DB2 JDBC Driver]Driver Version: 3.3.48 (008852.005015.007851)
[Macromedia][Informix JDBC Driver]Driver Version: 3.3.48 (008852.005015.002208)
[DataDirect][SequeLink JDBC Driver]Driver Version: 5.4.0038
[Macromedia][SQLServer JDBC Driver]Driver Version: 3.3.48 (008852.005015.006337)
[Macromedia][Sybase JDBC Driver]Driver Version: 3.3.48 (008852.005015.003526)

After seeing this, I swapped out the old 3.3.48 driver set with the 3.5.13 driver set and everything has been working without issue since.

If anybody on the Adobe ColdFusion team happens to read this, the installer bits need to be updated with the 3.5 driver set. If it passed your regression tests such that it was officially released as a TechNote, then all subsequent "cumulative" updaters and downloadable installers should contain the updated drivers. Further, the fact that the 3.3 drivers ship with MX 7.0.2 means that your System Requirements page is wrong because the 3.3 drivers do not work with Oracle 10g Release 2. Also, please don't call something "cumulative" if it is, in fact, not cumulative. Since I was under the impression that the Updaters were cumulative, it obviously wasn't my first thought to check the JDBC driver version for a regression. Now I need to go back and look at the web connector versions and other items to make sure that those were properly baked in to the latest release. Lastly, If you're not going to update the drivers, then you have to clearly state this in the Release Notes, as there was no mention of this whatsoever.

Anyway, I hope my two weeks of pure frustration helps somebody solve any related setup issues they might be having. Incidentally, my set is ColdFusion MX 7.0.2 on Red Hat Enterprise Linux 4.0 (SELinux turned off) using the internal JRun web server. The above bugs appear in my environment and I do not have a means of testing others. If you'd like to try and confirm these issues in other environments, go ahead and comment back here what you find.

Once last shout out to Jochem van Dieten for sticking with me on my forum thread on this subject. It was very much appreciated.



August 11, 2006

Adobe Product Notification RSS Feeds


I thought I had blogged this before, but I guess not. Did you know that Adobe has RSS Product Notification feeds for every product that they offer? Stay up-to-date on the latest news, including TechNote, hotfix and security patch notifications for your product(s) of choice.

Check it out!



July 31, 2006

A New Week, A New ColdFusion 8 Wishlist


OK, so at Damon's request, I'm going to submit my ColdFusion 8, aka Scorpio, wishlist for feedback. Contrary to Jared's sentiments, I think this is the best time for the ColdFusion community to air its multitude of bug/enhancement/feature requests. Sure, some (lots, even) of the suggestions might be off-base and out of ColdFusion'sy intended scope, but I believe it's more important that we have people passionate enough to think and contribute their thoughts rather than be chastised for their efforts. And you know what? You never know what seemingly crazy idea could evolve into something useful. Also, as ColdFusion matures, it not only competes with other technologies, but it competes with its own previous version (much like Windows XP adoption has been slower than anticipated due to existing satisfaction with Windows 2000). Therefore, it's increasingly important to hit more "home runs" with each new major release.

I've broken my list down into three major areas: Enterprise (Platform-level), Developer-level, and Language-level. Further, not every wish below are ones that I'd personally like to see, but I believe they're all worth discussing at some level. Lastly, they are in no particular order. I know it's a really long list, but a major release shouldn't just be about fixes; it needs to innovate and that's what I think certain items below allow the user to do. Hence the long, detailed list with lot of explanatory text for each point.

Enterprise (Platform-level)

  • Serializable CFCs: Come on, it's time to leap that last technical hurdle (I think it was either WebSphere or WebLogic that was the obstacle to getting this in CF 7) and make my cluster life easier. I'm sick of my workaround for a basic enterprise feature.
  • Allow logging to be done to one location rather than forcing to cfusion/logs: This one's important to me as a developer who works in a clustered environment. Being forced to write to the cfusion/logs directory is annoying because I then have to guess which server just served a request by looking at the timestamps. As you add more instances to the cluster, the more of a hassle this becomes.
  • Better integration with Word and Excel file formats: Regardless of how you feel about Microsoft, their format is the de facto standard in virtually all enterprise organizations. Writing Word and Excel documents (including charts, etc.) would be immensely helpful. We use a product called e.Spreadsheet by Actuate for our XLS reporting needs, and it's a pure Java solution that supports all but 2 extremely obscure Excels features. It has matrices, charting, pivot tables, in addition to formulas. So this is definitely technically possible to accomplish and could be a very compelling feature for an enterprise.
  • Better management of whitespace: I've never understood why ColdFusion stinks with whitespace suppression. On the one hand I recognize the argument that it can be tricky to determine what is and is not intended whitespace, but other languages don't have this problem, so clearly this must be solvable. We use (sort of) Empirix's e-Test Suite for our functional and load testing needs. However, cleaning up whitespace technically causes regression test failures. Now, I'm not saying this should be solved because one product has problems with it, but I just don't see any need to keep whitespace around in the generate HTML source.
  • Upgrade Web Services Engine to Axis2: Of all the wishlists I've seen, I have to say I'm a bit surprised I didn't see more in the way of web services enhancements. Axis2 supports REST, which I personally prefer to SOAP, as it's unbelievably easier to work with. Also, it has better support for true web services security, which is a solution I desperately need. Appending a user name and password to the WSDL URL doesn't cut it. Introduce formal features for both of those and I'm a much happier person.
  • LiveCycle Integration: I'm still getting a feel for what exactly LiveCycle does and doesn't do, but I would wager that most organizations have some sort of document flow process that could stand to be better managed. LiveCycle, from what I can tell, does this. I'd love to be able to integrate an enterprise-level document flow system into my company's practices, and the ease with which CF could potentially offer that is intriguing. I'm still thinking through this one a bit though.
  • Better search capabilities for clustered environments: OK, I know that Tom Jordahl and others worked their tails off on upgrading the Verity engine for the CF 7 release, and the new features look incredible. But I can't use them because I'm in a clustered environment and there are no provisions for properly managing the collections across the servers (I think it's licensing or something). I like searching. I need searching. I can't use what's currently there, and I'd prefer to stay away from a database-centric solution or pay $100,000+ for a modest solution.
  • Essentially, Fusion Reactor or SeeFusion: This one I know is being worked on because Adobe's been pretty open about it, but it really needs to be a home run. Lack of metrics and insight into CF instances are the bane of many developers' lives. I hope that Adobe follows Integral's lead by providing incredibly helpful visual indications and graphs so that I can get a feel for what's going on by literally glancing at my monitor.
  • Plug-in based architecture to turn off Verity, Flash Forms, etc. OK, let's face it -- lots of deployments don't use certain "add-ons" to ColdFusion, such as Verity, Flash Forms, and Reporting. Whether it be the inadequacy of the existing feature set or the reliance on a previously-existing infrastructure, the aforementioned features are loaded on each and every re-boot of the server instance, taking up valuable resources. I'd like the ability to turn on and off (via the CF Administrator or Admin API) pieces of the CF runtime. The floodgates were opened when Event Gateways were allowed to be turned on and off, so it should be technically possible to achieve. I'd like to see this extended to the other plug-gable features so that I can reduce the memory footprint. I think hosting providers in particular would use this feature.
  • Full admin API hooks to everything CF Administrator offers: The CF Admin API that shipped with CF 7 was great, but I'd like to see a one-for-one match in the offered features. This would be immensely convenient for vendors who want to package up an application but provide their own interface to the configuration settings.
  • Role-based CF Administrator: I think this one is long overdue. Your security is only as strong as its weakest link. If one were to get the password to a CF Administrator, there's way too much that can be done by default. A basic roles-based login enhancement so that certain areas (i.e., datasources) can be locked down while other less-hurtful settings (i.e., debugging settings) can be accessed by anybody would be incredibly useful.
  • Enhance the report engine: It's too easy to point out the various bugs that people have reported with regard to the Reporting engine in CF 7. It was a first attempt, and it was to be expected that there would be problems. However, the "intro period" is over. I'd like to see a robust reporting engine implemented that will allow me to include complex charts and graphs and page breaks.
  • 64-bit and JDK 1.5 support: Damon already posted in one of my previous entries that Scorpio has JDK 1.5 support, but it's not out yet so I'm listing it! ;) As for 64-bit support, I'd like to see a pure 64-bit kit available so that I can take advantage of the larger per-instance memory spaces that 64-bit platforms allow.
  • .NET Runtime: This one is sure to draw the ire of many, and still others will make the point that "New Atlanta does this with BlueDragon already, so why waste our time." Here's the thing though. It has been reported recently that .NET has surpassed Java as the development platform of choice. I personally don't think that's accurate at all, but there's no denying that .NET has made significant inroads. Why not offer the ability to deploy on both of the major enterprise platforms? It can only increase ColdFusion's exposure while opening up new sales channels for the product.

Developer-level

  • CFDoc: This is my second biggest enhancement request for CFCs (serializing them being my biggest). Documentation is so critical to any project. But this documentation doesn't always have to be a Word document with use cases and "business-speak." Just as important is the API documentation, and let's face it, the hint attribute just doesn't cut it. I'd like to see a proper Javadoc/ASDoc implementation for ColdFusion so that I'm not confined to just a phrase or two. If you provide a more robust solution for documentation, I'd wager you'll see more robust developer documentation.
  • IDE overhaul: This one's a biggie and is likely a whole separate development cycle, but I had to throw this one in here. Mark Drew has done a phenomenal job of taking over the CFEclipse effort. But the reality is that his efforts and the efforts of many others who have contributed to the project all come in their spare time. That is neither fair to them nor to the CF development community who are essentially at their mercy when it comes to bug fixes (and yes, there are bugs). It's been over a year since the last official, stable release. ColdFusion needs a professional IDE. I have been working with Flex 2 lately, and it's downright appalling to see the level of professional polish on the Flex Builder IDE versus the CFEclipse IDE. That's not to be taken as a shot at Mark et al. Rather, it's just a recognition that I am immensely more productive in the Flex Builder IDE than I am in the CFEclipse IDE. Flex is about 2 years old and ColdFusion is 11 years old, and Flex development productivity blows away ColdFusion development productivity. That's a shame and I hope that Adobe finds the resources to dedicate a team of developers who can polish up CFEclipse by providing me more than RDS support, for which I have zero need. Things like CFC introspection and recognition that I didn't properly var scope a variable are much more useful.

Language-level

  • Concept of null: First and foremost, I'm not necessarily talking about being able to type null itself. I recognize that the underlying engine would need a serious overhaul to be able to support it. However, I need to be able to declare a cfargument as a type of numeric, yet still have the option of not passing a value in without having to default to 0. In a lot of the work that I do, zero has a very real meaning and it can't be used as a conditional check to see if a numeric value is valid. Further, I shouldn't have to switch the datatype and use a string instead because that's not the correct self-documentation of what that argument is.
  • Re-do Flash Forms: One thing that I noticed at CFUNITED was how even the Adobe employees were making fun of Flex 1.5 because of how hard it was to do things relative to Flex 2. Flash Forms, in their current incarnation, just don't cut it. It's a "cute" feature without any real-world possibility of implementing. I vote that it be entirely overhauled and that the Flex 2 engine is embedded. Then you can wheel and deal with some incredible user interfaces while providing the ease of use that we have come to know with ColdFusion. For backwards compatibility, if it can't just be upgraded without touching anything, I would suggest that there be a toggle switch between 1.5 and 2 to maintain backwards compatibility (i.e., a version attribute) so that existing implementations won't break.
  • Spry integration: Spry isn't quite ready for production just yet (nor is it presented that way), but it's a compelling alternative to Flash-based interfaces. The current ability to create an accordion interface is just a small part of its potential as not only an interactive data bus but a viable UI alternative to both "conventional" HTML and Flash.
  • Interfaces: Yep, I'm saying it. I'd like to see interfaces. Does ColdFusion need them? Nope. Did ColdFusion need CFCs? Nope. I both built and saw some pretty complex applications pre-MX, and I could have continued to develop in that paradigm if I wanted to. But CFCs became compelling because they allowed to me to do my work in a more efficient, cleaner way. In my opinion, interfaces offer me this potential as well, as they allow a system architect to "stub" a domain model and leave it to the developers to implement the details. Now, don't misunderstand, I'm not meaning to suggest that introducing interfaces will be as significant as introducing CFCs. And I'm sorry, I just don't buy the argument that somehow introducing interfaces makes ColdFusion harder to develop with. First off, it's optional and second, it's truly gives you the power to "develop to an interface, not an implementation." Perhaps a new file type of .cfi could be introduced to allow an application architect to specify the method signatures, while also introducing an attribute to cfcomponent called implements, which allows users to specify multiple .cfi classes.
  • Deprecate cfscript: Don't remove it, just formally acknowledge that the engineers are not going to be doing anything more with it. I was a big cfscript fan for a long time, but I was sick of having to have a hybrid codebase of script-based logic wrapped by tag-based features such as cflock or some such because they can't (natively) be called within a cfscript block.
  • Add stream-based file read/write functions to support large files: The "read the whole file into memory before being able to do anything with it" is antiquated. I don't know what the old underlying C options were (the language that pre-CFMX was written in), but Java offers some robust options for reading and writing large files by streaming. This is a must-have, and I think the increased traffic recently on the mailing lists is indicative of this.
  • IMAP support: Let me see... there's POP, FTP, HTTP, SMS, and XMPP support, but no IMAP support? Come on, let's get this done.
  • Add a function to distinguish between createObject() and createCFC(): FUD or not, shared hosts are a pain with this. My host (HostMySite) is not, but there are many who lock down createObject and cfobject from being used (thereby preventing CFC usage) because it provides access to the underlying Java API, which could theoretically allow malicious activities and/or suck up system resources. I'm not sure how much I buy that (it's possible to do it in other ways too that aren't locked down), but the ability to distinguish between calling Java objects vs. non-Java objects at the tag-level would be valuable and helpful.
  • For the CF tags that generate markup, support the ability to validate generated markup using a specified doctype: A long-time pet peeve of mine. If I'm going to spend the time to make my markup compliant to a certain validation level, don't hamstring me by outputting non-compliant code. Add an attribute to each affected tag called markup that takes values like "xhmtl" or "html4" (i.e., cfchart markup="xhtml").
  • Ability to throw objects rather than strings: I've come across this particular obstacle recently and I often find myself wishing that I could throw an object using cfthrow rather than just a string. This would allow communication between the calling and target code to be a bit smoother rather than having to write workarounds for getting the appropriate information back.
  • Add a trace() function that allows you to dump an object during execution: This one's straight out of the ModelGlue framework, but there's a super handy function in there called trace() that allows you to dump out any object during page execution and have it displayed in the debugging info at the bottom of the page. This allows you to see the evolution of a variable throughout the whole page rather than having to do a cfdump/cfabort in broken steps.
  • Take the most popular cflib UDFs and make them native: This is just a convenience. I would think that Ray and Rob have stats on the "most downloaded UDFs" or "most popular UDFs." Just make our lives easier and make the top 20 or so native.
  • Syndication: I know that there are those who are calling for a RSS tag, and quite frankly, I don't think the end-user cares if the feed is RSS or Atom as long as they get the right content. However, an interesting blog entry I read recently got me thinking that maybe Atom is the better selection. That being said, some sort of RSS/Atom feature needs to be added to account for the major browsers offering the consumption of these feeds natively.
  • Full i18n features to please Paul Hastings, and the non-English speaking world: This is so crucial in today's world that I'll just point to Paul's recent posting to outline what needs to be fixed.
  • CFImage: Eleven years in and ColdFusion doesn't have anything built-in to it to really work with images on any sort of useful level. I know that some will point out that Java can do this natively, but the point of ColdFusion is to "Make Hard Stuff Easy," and I don't think developers should be forced to use the Java API just to get some basic functionality.

I'm sure there are some features that I've left out, but, quite frankly, they don't come to mind, so how important can they really be!

Go ahead, fire back!



July 26, 2006

Array vs. ArrayCollection in Flex 2 (with a ColdFusion Slant)


I've been spending a bit of personal time digging into Flex 2 development. One thing I've noticed up front is that there's an important distinction between using an Array and an ArrayCollection when coding your applications. This is an important point for ColdFusion developers because, in CF, we only have an Array datatype while most other languages (Java, C#, etc.) have an explicit ArrayCollection class. Further, since Flex is simply a front-end development language, you're likely to be doing lots of talking to a back-end technology to return data sets and the like.

So what's the difference? Well, the LiveDocs entry for the ArrayCollection class sums it up pretty well, so here it is:

The ArrayCollection class is a wrapper class that exposes an Array as a collection that can be accessed and manipulated using the methods and properties of the ICollectionView or IList interfaces. Operations on a ArrayCollection instance modify the data source; for example, if you use the removeItemAt() method on an ArrayCollection, you remove the item from the underlying Array.

The first sentence in that explanation is the key: The ArrayCollection class is simply a wrapper around the Array class. So if they're both Arrays at some level, why is this important? Well, with a standard Array, what you have available to you are the basic methods and properties that you'd expect in any language: push() (for adding an element to the end), pop() (for removing the last element), length (the number of indices), etc. However, the ArrayCollection class provides a suite of immensely convenient "extra" methods that can act on the Array.

For example, say I have an array with the values in the color spectrum:

var spectrumColors:Array = ["red","orange","yellow","green","blue","indigo","violet"];

(Quick side note to ColdFusion developers: Arrays in ActionScript are zero-based. So, to directly access the element "red", you'd use spectrumColors[0] rather than spectrumColors[1] like you would in ColdFusion.)

However, Stephen Hawking releases a new theory that there's no such thing as "green," and mandates that it should be removed from the color spectrum. How would you do it using the Array class? Honestly, it's not worth getting into the code because it's a waste of keystrokes. However, there's a really easy way to do this: Use the ArrayCollection class. The ArrayCollection class extends the ListCollectionView class. Without getting into the boring details, the ListCollectionView class has a bunch of extremely handy methods for manipulating its elements, namely the addItemAt(), removeItemAt(), and getItemAt() methods. Going back to our example, if the spectrumColors variable is datatyped as being an ArrayCollection, accomodating Mr. Hawking becomes immensely easier:

var spectrumColors:ArrayCollection = ["red","orange","yellow","green","blue","indigo","violet"];

spectrumColors.removeItemAt(spectrumColors.getItemIndex("green"));

All the code above does is create the spectrumColors variable of type ArrayCollection, and then removes the item from the array based on the returned index value that matches the value "green." See? Easy. No need to manually loop over the array to find an index or verbose constructs like that.

OK, so I promised a ColdFusion slant in the post title. Now that you have an understanding of Array vs. ArrayCollection, let's see how this fits in to ColdFusion and Flex.

Flex is all about providing a rich user interface for our users. However, the key phrase in that sentence is "user interface." Flex does not provide any native database connectivity, so you need a back-end technology to do the "heavy lifting" and return the results to Flex for display. The ColdFusion team did a phenomenal job of making Flex/ColdFusion integration as seamless as possible in the 7.0.2 release. However, there are certain nuances that we need to keep in mind when working between these two technologies. One such nuance is the fact that it's one thing to query for data and return it as-is to the calling environment (ColdFusion), but it's another to be able to use advanced concepts such as run-time sorting and filtering for display (Flex). To that end, certain Flex 2 framework components use what are known as data providers to not only display the result set, but to further allow the user to manipulate the results to their liking. To that end, the Flex engineers cleverly implemented these framework components such that you could either use the raw datatype returned or you could use a collection instead, which allows for more advanced access to the data set. Hopefully my above explanation regarding the difference between an Array and and ArrayCollection sufficiently shows the difference between a datatype and its Collection wrapper class. You could use a basic Array (the raw datatype) to display a result set, if that's all you want to do. But to provide more advanced interaction, these raw datatype classes don't provide the necessary advanced access or event broadcasts necessary. So you're going to need to convert the datatype that comes back from your back-end (i.e., ColdFusion) into the appropriate collection type so that it can then be used for display, thereby offering some of the more advanced features that the Flex framework provides.

While there are many controls that use data providers, I'm going to use the DataGrid in my example because that seems to be the most common way of displaying tabular data in Flex. If I want to display a datagrid consisting of some basic company information: company name, address, etc., below is the ActionScript code needed to take the returned results into the appropriate collection datatype. Assume that a ColdFusion query is being returned.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" initialize="myService.send()">

<mx:Script>
<![CDATA[
   import mx.collections.ArrayCollection;
   import mx.rpc.events.ResultEvent;
   
   [Bindable]
   private var companyInfo:ArrayCollection;
   
   private function resultHandler(event:ResultEvent):void {
    companyInfo = event.result as ArrayCollection;
   }
]]>
</mx:Script>

<mx:HTTPService id="myService" url="url/to/cfc?WSDL" result="resultHandler(event);" />

<mx:DataGrid dataProvider="{companyInfo}" />

</mx:Application>

As you can see the above code simply takes the query returned from ColdFusion ("event.result") and "coerces" it (or casts it) to an ArrayCollection using the as keyword. The framework takes care of everything else for you. Then I simply assign the companyInfo variable as the data provider for the DataGrid. If I now wanted to add more advanced functionality, such as filtering or editing, to the result set, I already have the results in the appropriate format. I just need to write a function that acts as the filter or "listens" for the updated data. The Adobe LiveDocs resource provides a great example of providing this sort of functionality.

Hopefully this provides a basic understanding of the difference between datatypes and their associated Collection classes, and when each one should be used.



July 5, 2006

Joe Rinehart on TheServerSide.com


I was just perusing through my aggregated blogs and saw that Joe Rinehart has posted an entry on TheServerSide.com entitled IoC, AOP, and Rails-like productivity...in ColdFusion?. In the entry, he notes that "hot" areas of J2EE development such as Spring and Aspect-Oriented Programming (AOP) are available in ColdFusion and, coupled with established frameworks like Model-Glue, can make the lives of J2EE developers much easier. Further, he notes that since ColdFusion is just a J2EE application itself, existing infrastructure can be leveraged, effectively minimizing or outright eliminating the need to switch to alternative technologies such as Ruby on Rails.

I am specifically pointing out this entry because it's great to see ColdFusion being promoted on major J2EE-developer sites (as it should be). This sort of "grassroots" marketing is far more effective than glossy magazine ads that most people will likely skip over when reading their trade magazine. Plus, with Joe's YouTube videos, current and prospective developers can see a real-world application of these concepts rather than just hearing and/or reading that concepts like Inversion of Control (IoC) and AOP are merely possible.



June 23, 2006

A MacBook Pro Review From A Windows Perspective


So I wrote a few posts about my dilemma regarding switching to a Mac for my personal laptop after spending (literally) my whole life on a Windows-based PC, and people were interested in hearing how it worked out, so here goes...

The Ordering Experience

Simple. Standard. The ordering process was very familiar if you've ever been to and/or ordered from Dell's web site. Choose your desired model, click a few radio buttons to configure your personal specs for the machine, and off you go.

I will say that if Apple really wants to gain market share, they have to provide better financing options than they currently do. Essentially, you either pay by credit card or a P.O. if it's for work. That's lame. Where I believe Dell really has a leg up is that they provide a leasing option whereby you pay off the balance of a secured loan over a multi-year period at a fixed percentage rate. When I was paying off my old Dell, it was great to know that $78.56 was being deducted from my account every month and that, over the agreed-upon time period, the balance of the loan was paid off. Now I have yet another credit card to juggle. Oh yeah, and if you choose to finance through Apple rather than using an existing personal credit card, you literally have to open a new credit card account. The worst part about it is that you don't know what the interest rate is until after you've opened the account! So even if you decide that you don't want to use the account because the interest rate is too high, the account is already opened and reflected in your credit report.

The above being said, I was still elated with my purchase (made on a Tuesday), and received an early birthday gift when it arrived that same week on Friday.

The Machine

Gorgeous. Sleek. Thin. Screaming Fast. Hot. Yeah, the common gripe is indeed true....these things get hot. Although I guess that's what happens when you take a high-powered processor and stuff it in a metal case that's only 1 inch thick. So I was definitely prepared for it. As the guys at the Apple Store told me when I was looking at the machines and comparing the 15 inch with the 17 inch model (I got the 15 inch), they're intentionally not calling them "laptops." Rather, the Apple company line has been to call them "portables" so that people don't put them on their lap and burn themselves.

The Software

This is probably my favorite part about the machine. A lot is made of the high cost of purchasing a Mac versus a PC. However, what I think gets lost in the debate is that Apple provides a ton of useful software out of the box. If you were to add up the cost of the individual software components, it's likely around $1,000 USD. Seriously. I'm not talking about the common PC trial-ware for AOL or EarthLink or any of the hundreds of other titles that most people uninstall as soon as they power up their new PC. I'm talking about a music recording application called GarageBand (which I now use to record my guitar songs....I'm not very good by the way), iTunes, iPhoto (a powerful photo editing and organization application), HD video editing software, multiple chat applications, iWeb (for creating web sites), and, of course, a solid web browser.

Mac Eye For The Windows Guy

OK, a cheesy section title, but that's the best I could do this late at night while trying to convey the fact that using a Mac is a different mindset as compared to using a PC. On a PC, you're likely have multiple partitions on your drive to separate your data from your applications in the event of a system crash (corrupt registry, etc.). Well, with a Mac, you don't have to worry about that. There's no such thing as a registry, and everything is treated as a file, so if you want to delete a program, just drag the program to the Trash and it's gone. No Start -> Control Panel -> Add/Remove Programs -> Do a Dance To Make Sure All Registry Keys Are Deleted, Which Likely Won't Happen. But I'm still having trouble adjusting to the fact that closing a window does not close the application itself. You still have to separately quit out of the application itself (in most cases). I'm not sure how I feel about that. For the most part, if I'm shutting the application window, then I'm likely done with it. So close altogether please.

Installing software is still tripping me up from time to time as well. Most Mac applications come as a DMG file, which is roughly equivalent to a ZIP file. When you double-click the DMG file, it doesn't actually install the application in most cases, as you would expect from double-clicking an EXE file in Windows. All it does it mount the file archive so that you can then run the installer application. This took me a few attempts to figure out. I would "install" Firefox and then re-boot my machine only to see that it disappeared! The other problem I have is that sometimes applications don't tell me where they're being installed and I can't choose the location. I installed the TiVo Desktop Software about 8 times (seriously) before I realized it was in my System Preferences folder. I was clueless.

Lastly, I went ahead and plunked down the amazingly cheap $39.99 for Parallels Software's Desktop For Mac application and installed Windows into it. Even in a virtual OS, Windows now runs about twice as fast as my old Dell ever did. Not that it's the Dell machine's fault, mind you, but it's still incredibe to see the speed difference. I'm going to be using this machine to do some Flex 2 development, and it's nice to see I won't be hindered by performance.

The "Intel" Problem

The big thing that I'm finding out about this machine is that most people still haven't updated their applications to support the Intel-based Mac yet (Adobe, I'm looking in your direction). So a lot of programs need to run in an emulation mode using something called "Rosetta" to translate the PowerPC-based instruction set to the Intel platform. It's supposed to slow down the application, and I suppose it does, but, honestly, these machines are so fast as it is that it's barely noticeable. I will say that running ColdFusion is a royal pain in the behind. See, Macs come with the Java 5 SDK as its default Java Virtual Machine. Unfortunately, ColdFusion doesn't run on this JVM yet. So, thanks to Google and Simeon Bateman's blog, I was able to track down a shell script that allows me to set the JDK to Java 1.4.2 so that ColdFusion is happy and will start. So I have ColdFusion out of the way. Now I have to track down an Oracle installation for this machine, as this is what my company uses and it'd be good to have it set up locally.

The Negative

So with all the gushing and positive comments, you'd think everything is great. Well, it is and it isn't. You see, my computer technically works, but it's also what Apple considers to be DOA (Dead On Arrival). The second memory bank (where I was trying to install some more RAM because it was cheaper than getting it from Apple) is dead. So I call up the AppleCare number because that's what I just paid good money for. Within 10 seconds, the tech support guy tells me he's a "software guy" and that hardware's out of his realm. His suggestion....bring it to a Mac Genius at one of their retail stores. I was a bit annoyed, but I was willing to give it a shot. I made an appointment with a "Genius," and, sure enough, he confirmed what I already knew. So you'd think that they would replace the laptop there on the spot because it's a retail store and they carry those kinds of things. Well, not so much. It turns out that because I upgraded a couple items at the time of my purchase (from 512 MB to 1 GB RAM and frm the 5400 RPM to the 7200 RPM hard drive), that's technically considered a "custom built machine" and they'll have to have it specially built for me in China. Oh yeah, and that'll take two weeks. I mean, what the heck's the point of the retail stores if they can't replace my machine right there? So, needless to say, I'm blogging this entry right now on a soon-to-be-returned machine. However, since it does function without issue with the 1 GB RAM module that came with the machine, they're letting me keep this through the CFUNITED conference next week, which is the main reason why I bought it when I did. I do have to say that their support staff was very accomodating to my situation, and they're allowing a "grace period" for me to return the machine for a new one rather than repairing this machine. As they put it, who wants a new computer that immediately has to be repaired?

A Couple Pointers

In closing, since this is the longest post in my short blogging history, I wanted to pass along two great little tips I've learned in my short experience with the computer.

  1. Empty Trash vs. Secure Empty Trash: I saw this one whie waiting on line in the Apple Store. When you empty your Trash Bin, you're not really deleting the files from your system. Sure, they don't appear in your folders, but all you've done is tell the OS that the space the deleted file once occupied is eligible to be overwritten when space is needed. If you want to erase all remnants of a file from your system and immediately free up the space, choose the Finder->Secure Empty Trash menu option. This is particularly important for personal data files.
  2. Get the iStat Pro Dashboard Widget: The Mac Genius I spoke to pointed out the iStat Pro dashboard widget, which gives you a high-level overview of all the major system components, such as battery life, temperature, memory usage, broadband speed, and more. The temperature and fan feature isn't working on the Intel-based Macs yet, but support for it is imminent, and this free widget is certainly a useful utility.

Overall

Yeah, I have to send the computer back, but overall I'm ecstatic with the purchase. I really am. There are some things I need to learn to better use the machine (shortcuts, etc.), but I hope to pick the brains of some Mac users at CFUNITED next week to get a better grasp of the OS. I'm already more productive with this machine than I have been in a long time for my personal work. If you're on the fence, do it. You still have Windows via Parallels as a safety net, and it's such a complete system that has everything I need to be productive. The product reviews I read before buying the MacBook Pro were all from previous Mac users, so I was a bit skeptical. Well, I see why Mac users are loyal. Apple's on to something with this line, and if they can sort out the aforementioned financing problems (and ship fully functioning hardware), they have a great shot at converting large numbers of Windows users.



June 22, 2006

Adobe Developer Week Breeze Presentation Links


Via Ted Patrick's blog, I saw that Adobe has released the URLs to all the recorded Breeze presentations from Adobe Developer Week. I attended several of them and will try to post up a quick review of each when I get some time to breathe (along with the 85 other topics I've been wanting to post about but haven't had time to). However, I will say right now that most of the presentations were excellent and I'm absolutely in love with Breeze as a conferencing platform.

Enjoy.



June 15, 2006

Leak? June 28th Release For Adobe Flex 2


Scott Langeberg just posted on the flexcoders list that he learned in a Breeze webinar that Adobe Flex 2 is slated to be released on June 28th! Here is the contents of the post, which includes the long-awaited pricing breakdown:

According to Sydney Sloan (Marketing - Adobe) in a Breeze webinar @ 11AM (c):

Official release date:

June 28, 2006

Pricing as follows:

Flex 2 SDK - FREE Flex Builder 2 - $499, $749 w/charting FDS - $6,000 (100 concurrent users), $20,000 (enterprise)

Interestingly: FDS Express - FREE (one app per cpu).

Charting components - $299

I want to stress that the above information came from one non-Adobe employee, and may not be entirely accurate, if at all.

That disclaimer aside, AWESOME!!! That positions the release to be on Day 1 of the CFUNITED conference, which also means that Mystic (aka, ColdFusion 7.0.2) will be released that day as well (it was noted in a Developer Week presentation that the CF bits would be released simultaneously). The release date does seem to make sense, as Adobe will be giving the keynote address at the conference that day, which makes it the perfect platform to make a major announcement such as this (among other channels, of course). Further, it follows the "first half of 2006" official line on release dates to this point, yet maximizes the time they have to get it out the door.

I have to say, the pricing is extremely aggressive, and I think is a further testament to how much Adobe has riding on this release. If you haven't been checking out the online presentations this week surrounding Flex during Adobe Developer Week, then you're missing out on a ton of great information.

P.E. -- (Post Entry) I hope Sydney Sloan doesn't get in too much trouble!!



June 7, 2006

Do You Even Use ColdFusion's Debugging Info?


So I've been heads down on a project that really should have been scheduled for a one month development period even though they only gave me 7 days (sound familiar?). In my development environment, I have all the debugging features turned on with the exception of the "Report Execution Times" option (as I've noted before, if you're doing heavy CFC-based work, do yourself a favor and shut that option off or you may go nuts).

During one of my late night coding adventures, something occurred to me: I think I've looked at the actual debugging information (the stuff below all your markup, not log-related stuff) exactly twice. Seriously. And believe me, it's not because I'm a flawless coder...my exeception.log file is gi-normous! But the reality is that it's immensely more helpful to me to use a combination of cfdump and cflog along with the standard cfoutput/cfabort tags to really get at the information I need to diagnose a problem. Coupled with CF 7's new "result" attribute for enhanced query information (where you can get at execution times, bind variable values, etc.), I really don't know what the utility of ColdFusion's built-in debugging output is. Listing all the query execution times at once is about all I can think of at the moment.

Frameworks are becoming more and more popular in the ColdFusion community, which is great. But using those frameworks usually means that the form and url scopes are unified, which makes their individual listing in the debug output pretty much useless. If I really need to see the individual scopes, I can set up a code snippet shortcut to output the following:

<cfdump var="#url#" label="URL Scope" />
<cfdump var="#form#" label="Form Scope" />
<cfabort showerror="Here." />

It seems like all I really get anymore from turning on debugging is the increased overhead incurred by enabling the debugging service. And who needs that? So that got me thinking even more. What would I like to see? What would you like to see? Personally, I'm still not sure. I've made no secret that I'm a big Model-Glue fan. Maybe something akin to Model-Glue's debugging output where it shows all the events that were executing along the way in the order in which they were executed? Obviously, for non-event based frameworks, that's pointless, but I guess what I'm saying is that it's about as close to run-time debugging as I need. I'm pretty stumped though otherwise.

What do you think? Do you find yourself using the native debugging output in your development? Or do you use the cfdump / cflog / cfoutput / cfabort tags like I do? More importantly, how can the built-in debugging be improved? Adobe's actively working on Scorpio (aka ColdFusion 8), so this is the time to get your wishes in.




MacBook Pro, Table Two!!


OK, after much deliberation (and intentionally waiting in the hopes that Intel would release the Merom chips early enough to warrant holding off for the Core 2 Duo), I got my (financial) act together and bought my first Mac! It's on its way from Shanghai, China, as I write this.

Holy cow was it scary. Seriously. You have to understand, I don't own a home, car, or other "big ticket" item where dropping a couple thousand dollars is a drop in the bucket. (Incidentally, for those who don't know, I live in New York City, hence the lack of owning those things...I'm not homeless!) Sure, I bought a Dell about 5 years ago out of college, but I was a bit more reckless with money then, so I tended to rationalize things in terms of "this costs 3 nights of drinking." Plus, it was the Internet boom, when everybody in our line of work thought they were going to be millionaires in no time. But there are a few reasons why I was "scared."

First, as much as Apple has become en vogue again, I have to be practical and keep in mind that I will rely heavily on this machine for work. This isn't a vanity purchase by any stretch. So it's important for me to be productive as soon as I receive the machine. Enter the new Apple store on 5th Avenue here in Manhattan (which is the most beautiful piece of architecture I've ever seen for a retail store) and Parallels Desktop for Mac.

Why the Apple store? Well, on Monday after work, I decided to walk up to the store and check out the difference between the 15.4" and 17" MacBook Pro. I spent one solid hour using each machine to get a feel for each. Never once was I told by any of the employees that I was hogging the machine (there were about 10 of each on display, so it's not I had the only one, but still...). Further, when I finally got all my questions in order, I peppered two employees who not only never sighed or gave any indication that I was a pain, but they got incredibly excited that I was looking to switch and spent another half an hour walking me through the OS and pointing out keys things a developer would need to know. I was blown away. I was very up front that I wasn't going to be purchasing from them at that moment and they couldn't have cared less. There were hundreds of other customers they could have easily gone on to them, but they didn't. Great stuff.

As for Parallels, well, they're my life boat. With their Desktop for Mac product, I can still fall back to Windows when I need to. Since Flex Builder 2 doesn't exist for the Mac (yet), I know I'll need to be in there for some things, and it's great to know that one machine can handle both of my needs.

OK, so what did I get? I went with the 15.4" MacBook Pro with 1 GB of RAM and the 100 GB hard drive at 7200 RPM. I also ordered an additional 1 GB of RAM from NewEgg, who is selling it for literally almost half of what Apple wanted for the same amount ($160 USD vs. $300 USD). I chose the 15.4" over the 17" because the 17", while sleek and beautiful was a bit too much machine for me. I was telling somebody yesterday that using the 17" MacBook Pro reminded of a line from the movie Starsky and Hutch towards the end when Ben Stiller is telling Owen Wilson that his mom never "thought he could handle the V8. It was too much car for him." Well, that's how I felt about the 17" model. It was monstrous and noticeably heavier (about 1.5 pounds). If you're looking for a desktop replacement, it's a no-brainer, but not if you truly need a portable machine.

Before closing the entry out, I do want to give a huge shout-out to Adam Wayne Lehman. I met Adam last year at the CFUNITED conference and we've kept in sporadic touch over the last year. Out of nowhere, Adam offered to sponsor my purchase so that I could receive 10% off the price. Apple has this cool program where if you work for the federal government, you can sponsor up to 6 friends and/or family to buy products from the Federal Employee store. This unsolicited gesture saved me almost $500 USD off the total price! This is yet another reason why I can't recommend the CFUNITED conference enough if you're a ColdFusion developer. Thanks again Adam!



May 23, 2006

Free Online UML Course From The Ground Up


Using the Unified Modeling Language (aka UML) is an area where I know lots of developers are interested in but don't really know how to get started. It's a very dense area and it's extremely easy to get in lost in the various types of diagrams available in the language. I've searched around for tutorials myself, but the hits I usually get are the "first in a series" that never seem to have a second or third entry!

Well today I was using my UML modeler of choice, Poseidon for UML by Gentleware, and decided to go to their site to see if they had an update for their current edition (they did). On reaching the homepage, I was extremely excited to see that they have partnered with Synergy Learning to provide an incredibly comprehensive online course entitled Introduction to Object-Oriented Modeling and UML.

I went ahead and clicked into the course to see if it was the usual high-level stuff and was blown away by how detailed the course is. Again, there's no registration and no cost for the course. Not only do they cover virtually every area of UML and approaching UML, but they offer the course as PDFs, PodCasts, videos, and downloadable source code. Here are the high-level areas covered:

  • Overview (how to approach Object-Oriented Modeling, intro to the Poseidon for UML IDE)
  • Structural Elements (modeling object, classes, instances, etc.)
  • Behavior (modeling class interactions)
  • Inheritance (modeling base and sub classes)
  • Advanced OO Concepts (modeling relationships, packages, etc.)
  • Best Practices (naming conventions, commenting, etc.)

If you're a complete novice to UML, this looks to be your one-stop shop. Even for intermediate and advanced UML users, there looks to be something to learn. Gentleware even offers a free Community Edition of Poseidon for non-commercial use if you're just curious about learning. I've used UML to do class diagrams, use cases and light class interactions, but there's so much I don't know about the language. I will say that if properly built in to your development practices, UML can really be a life saver. It helps me better visualize my domain and the relationships between my classes.

In case you're wondering, I wasn't able to find anything with regard to whether or not this is a short-term offering. Have a look!



May 19, 2006

ColdFusion Needs A Roadmap


I've thought about this off and on for some time, but a recent post by Steven Erat got me thinking again: ColdFusion really needs a roadmap.

I've been actively using ColdFusion since early 1997 (side note: I almost had a coronary as I just thought about that). In all that time, though, there has never (publicly) been any sort of development roadmap for the product. All we've been able to do is cross our fingers and hope that Allaire/Macromedia/Adobe finds it in their heart to add or support a particular feature. Sure, Ben has made the CFUG rounds before each ColdFusion release to generate some buzz and gather feedback, but that's not really what I'm looking for.

As a developer who also has a significant hand in my company's IT procurement processes, there are certain things I need to know about any product before I'll move ahead with them. Our larger purchases are not "spur of the moment." (In this context, "larger purchases" means anything over a couple thousand dollars.) However, the lack of a roadmap really makes it hard for me to properly plan our infrastructure and development timelines. Don't misunderstand, I'm not looking for Adobe to announce every new/enhanced/fixed feature of the product in advance of its release. As a developer, I certainly know that planned features are always constrained by time and resources and are subject to falling out (see replicating session-based CFCs in CFMX 7 as an example ;). However, here are a few concrete areas where the lack of a roadmap in a hindrance:

  • 64-bit support
  • Java 1.5 support
  • Support for the latest Sun 1.4 JDK (1.4.2_11 is currently the latest JDK release, but 1.4.2_09 is the latest officially supported by Adobe)
  • Tentative Scorpio (aka ColdFusion 8) product cycle

Why do I need answers on the above? For starters, we're imminently purchasing a couple of new servers for our web site. In working with my sys admin, he's asking basic questions that I simply need to know the answers to in order to formulate an accurate spec. He's asking why we wouldn't go with 64-bit servers. The only answer I can give right now is that it's because Adobe doesn't seem to have plans to get ColdFusion working on 64-bit platforms (yes, I know it'll run in 32-bit compatibility mode, but that's not the same), so why spend the extra money? Do I necessarily believe Adobe hase no internal plans for this support? Not at all. However, in the absence of any other publicly available information, that's the only conclusion I can draw at this point. It could come tomorrow, it could come next year for all I know.

Regarding the Scorpio product cycle, it would be nice to have some sort of feel for the timeline. Is an alpha/beta imminent? Since Mystic is apparently going to be ColdFusion MX 7.02, does that push out the Scorpio cycle? With the new servers we're buying, I am also planning to upgrade our site to CFMX 7. However, if Scorpio is on its way in the short-term, maybe I'll hold off and take advantage of its new features. There's nothing on my company's web site that's screaming for a specific CFMX 7 feature. However, with Scorpio's rumored new resource monitoring features, that's something I could use and maybe I'll hold off on a purchase of FusionReactor or SeeFusion.

There's been frequent mention in the blogosphere lately about how Adobe and Microsoft are seemingly on their way for a competitive showdown. I don't know if I necessarily believe that. However, if it's true, one area that I believe Microsoft has a significant leg up is with their roadmaps. Sure, you can insert the latest Vista delay joke here, but the reality is that I know where their products are going. From Vista to Visual Studio to SQL Server, I know when I can roughly expect service packs, upgrades, etc. I can't say that about any product at Adobe other than Flex 2. I hope that Adobe learns from the (in my opinion) success of the Flex 2 public beta. Since I knew that some time in June is the expected release, I have been able to schedule development cycles with it accordingly. I just wish I could do the same with ColdFusion...



May 9, 2006

New Adobe Security Bulletin and Writing Clean Code Examples


Adobe has just released a Security Bulletin for Dreamweaver users (both 8 and MX) who use that IDE to generate server-side code (i.e., ColdFusion, PHP, ASP.NET, etc.). The code generated by DW could expose you to SQL injection attacks. I personally don't use DW (I'm a CFEclipse fan), but I know from the mailing lists that there are many who do, so be sure to check this bulletin out.

After reading through the referenced TechNote describing the workaround, it looks to be geared more toward CFML queries that don't use the cfqueryparam tag. To that end, I have to say that I'm a bit disappointed with the proposed workaround for the INSERT statements. Not only does the code use poor syntax that is discouraged in the community, it can be more concise. Rather than using this:

<cfquery datasource="cafetownsend">
INSERT INTO COMMENTS (FIRST_NAME, LAST_NAME, TELEPHONE)
VALUES
<cfif IsDefined("FORM.textfield1") AND #FORM.textfield1# NEQ "">
<cfqueryparam value="#FORM.textfield1#" cfsqltype="cf_sql_clob" maxlength="50">
<cfelse> ''
</cfif>
,
<cfif IsDefined("FORM.textfield2") AND #FORM.textfield2# NEQ "">
<cfqueryparam value="#FORM.textfield2#" cfsqltype="cf_sql_clob" maxlength="50">
<cfelse> ''
</cfif>
,
<cfif IsDefined("FORM.textfield3") AND #FORM.textfield3# NEQ "">
<cfqueryparam value="#FORM.textfield3#" cfsqltype="cf_sql_clob" maxlength="20">
<cfelse> ''
</cfif>
)
</cfquery>

This is preferred:

<cfquery datasource="cafetownsend">
INSERT INTO
   comments
(
   first_name,
   last_name,
   telephone
)
VALUES
(
<cfif structKeyExists(form, "textfield1")>
   <cfqueryparam value="#form.textfield1#" cfsqltype="cf_sql_varchar" maxlength="50" null="#yesNoFormat(not len(trim(form.textfield1)))#" />
</cfif>,
<cfif structKeyExists(form, "textfield2")>
   <cfqueryparam value="#form.textfield2#" cfsqltype="cf_sql_varchar" maxlength="50" null="#yesNoFormat(not len(trim(form.textfield2)))#" />
</cfif>,
<cfif structKeyExists(form, "textfield3")>
   <cfqueryparam value="#form.textfield3#" cfsqltype="cf_sql_varchar" maxlength="50" null="#yesNoFormat(not len(trim(form.textfield3)))#" />
</cfif>
)
</cfquery>

I realize that the overall point was to stress the use of cfqueryparam, but I strongly believe that any and all code samples published by Adobe should be sure to use best practices. I'm not talking about whether or not to put each field on its own line or whether or not to use XML-format syntax with your CFML...That's your choice. Rather, I'm talking about:

  • The lack of use of the null attribute in the cfqueryparam tag, which is expressly designed to mitigate the need for the if/else in the original code sample.
  • The use of cf_sql_clob as the datatype for a field that is clearly a varchar (clobs are huge and less performant). Be sure to choose the correct datatypes!
  • The use of pound signs are not needed within the cfif tag
  • The use of isDefined() rather than the more proper structKeyExists(), which is also more performant.

Technically speaking, I could throw in a fifth point where you should use len(trim(form.textfield1)) rather than using the EQ expression comparison, but that approach is as old as CFML and I know many prefer EQ and IS for readability reasons.

With CFML (and almost any language for that matter), it's easy to write poor code, both from a performance and readability standpoint. But that doesn't mean it should be used in published code samples. Writing clean code samples is paramount to communicating best practices, and I look to Adobe to help lead the way with this effort.



April 18, 2006

Yet A Couple More ColdFusion Misconceptions Being Propagated


Vince Bonfanti, the CEO of New Atlanta (who makes a competing ColdFusion engine to Adobe's), posted on his blog and the CF-Talk mailing list yesterday a "significant" milestone: BEA was now shipping a version of their WebLogic server with BlueDragon pre-installed. This is awesome for Vince and his team and, contrary to some snipes on the mailing list, I think it's great for them and for CFML as a programming language.

However, here's what bugs me. Both BEA's formal press release and a subsequent article by eWeek entitled BEA Supports ColdFusion Apps are so poorly written that they blatantly propagate two flatly wrong perceptions: that ColdFusion is a "legacy" language and that ColdFusion has not run on it before. Let's review each...

The BEA Announcement

The second sentence of the press release says that

"BlueDragon is designed to help enable customers to modernize and extend legacy ColdFusion Markup Language (CFML) applications to run on BEA WebLogic Server, which can thereby allow companies to reuse existing technology to help meet evolving business needs."

Further the whole third paragraph, which is essentially a quote from BEA's executive vice president of products says

"Several of our customers are still using CFML to run their businesses. Today's BlueDragon announcement is further proof of BEA's commitment to helping customers improve application performance and leverage their existing IT assets in service-oriented environments," said Wai Wong, executive vice president of products, BEA Systems. "It's also another example of how the company is continuing to invest in WebLogic Server and find new ways to help customers get to a modern app server without a lot of pain."

Since when has ColdFusion been "legacy"? And since when does running a ColdFusion application mean that you must be living in the dark ages? And where's any mention of the fact that Macromedia/Adobe's version has been running on WebLogic since the initial release of ColdFusion MX in 2003? (I think New Atlanta's flavor has also run on WebLogic for a while, but I'm not quite sure.) With all due respect to Mr. Wong and whoever else was involved in crafting this announcement, this was a horribly written, mis-leading press release. Further, if I'm working in Adobe's PR department, I'm firing off an e-mail to BEA with a fact sheet noting that ColdFusion has been running on WebLogic for about 3 years now!

The eWeek Article

This wasn't as bad as the press release, but was still mis-leading. Let's start with the very first sentence:

BEA Systems is offering ColdFusion users the ability to run their ColdFusion applications on the BEA WebLogic Server without requiring a rewrite.

Really? This hasn't been previously possible? ColdFusion is Java, so as long as it had been running on a J2EE spec-compliant server, there has never been a need for a re-write! Coming from ColdFusion 5 (which ran in its own proprietary C++ engine)? Well, I'd hope that one would take the time to refactor code to take advantage of ColdFusion MX's new features. Further not "requiring a rewrite" says nothing of the fact that you'll definitely need to spend some time getting your JVM settings hashed out so that your application runs on the new platform. Time and time again people post that "they just migrated from ColdFusion 5 and now their server is spiking." Different architecture, different resource requirements. That's the way it is with any language.

Again in this article they use Mr. Wong's quote noting that "customers are still using CFML to run their businesses," as if to suggest those customers must be some sort of dinosaur and refuse to modernize, and that WebLogic somehow mitigates that. The one thing I will say the author got right was his mentioning of Adobe's support for the product since 2003.

Look, as I said, I'm happy for Vince and the New Atlanta team. Overall, I think it's great for CFML as a language that it continues to achieve greater exposure. What eludes me is why there continues to be a raft of misconceptions that continue to plague CFML and its adoption: It's too slow; It's not a real programming language; It's too expensive; It's not really Java. Macromedia-now-Adobe has noted in its past few earnings releases that ColdFusion sales have been growing exponentially. New Atlanta, while privately held, has noted the same on their side. However, this doesn't seem to make it to the "front page." All the casual reader can take from either the press release and/or the eWeek article is that ColdFusion is some legacy language that, by moving to WebLogic, can easily be ported over to a more modern language. Where the continued disconnect is between what the facts are and what is published I don't know. Maybe somebody else can shed some light on this for me.



April 5, 2006

Run Windows Natively...On A Mac!


I've been searching high and low for a new laptop for the past couple of months and, while I was extremely tempted by the new MacBook Pro, I avoided it due to price and compatibility with software I need to use (as well as some extremely negative feedback about its performance). Well, just when I thought I had settled on a sweet new dual core from Dell, along comes this announcement that Apple has released "Boot Camp" into public beta which allows you to natively run Windows XP on a Mac.

All you need to do is hold down the "option" key on startup and a screen is presented that allows you to choose which OS to boot. Available now on Intel-based Macs (meaning just the MacBook Pro for now) via a patch to current OS X installations and natively built in to their next major OS, code named Leopard, this release has the potential to draw in literally millions of new Mac users.

As I said, I've been intrigued by Macs for the last couple of years, but have never pulled the trigger on a purchase because there are still some programs that I use (and prefer to keep using) that only run on Windows. While I know I could run virtualization software to run Windows on a Mac, it wasn't all that appealing. However, Boot Camp gives me pause. However, there are still some gotchas that might keep me in the Windows-only camp for now. Here are some potential show-stoppers:

  • You need a Windows installation CD that has Service Pack 2 on it. You cannot install a basic Windows XP CD and then upgrade it later. Most Windows CD do not have SP2 integrated because you can easily go to the Windows Update site to get it.
  • If your hard drive is larger than 32GB (which most are today), then you can only format your Windows partition using NTFS. In a Windows-only setup, that's what you want. However, Macs can only read from a NTFS partition, whereas it can both read and write FAT volumes (the older partition type). Therefore, you almost have to run Windows XP using a less-than-deal partition type
  • Any songs purchased through iTunes must be authorized for both Windows and Macs, which I think means you need to buy them twice.
  • Apple in no way supports Windows installations, so any problems are your own to solve.

As this is a public beta, hopefully some of these issues are ironed out over time. In the meantime, it's back to tearing my hair out over what to buy!



April 3, 2006

Congrats to Charlie Arehart


I just finished reading Charlie Arehart's announcement that he has resigned from New Atlanta as of March 31st.

A lot of people may only know Charlie as the (former) CTO and Chief Evangelist of New Atlanta, but they might not realize that he was a major community evangelist for Allaire/Macromedia ColdFusion before joining New Atlanta. It was definitely a bit of a "coup" at the time. I was personally a big fan of his "Hidden Gems" articles in CFDJ, which covered hidden features in each new version of ColdFusion. When I used to live down in Washington, D.C., and when he worked at Figleaf, I saw him speak a few times at the CFUG they host. He's a great speaker who is genuinely passionate about ColdFusion.

He took a pretty good beating from the Macromedia community when he "jumped ship" to New Atlanta, and that was unfortunate. I've never personally met him, but I do know that his "return" to the Adobe side of the ColdFusion world is only a good thing. He notes that he is currently mulling a few options for his next endeavor, but that he will definitely be active in both the New Atlanta and Adobe communities and working with ColdFusion, Flex, AJAX, and .NET. Watch his new site for news on what he'll be doing.

As I say in the title, Congratulations Charlie, and it'll be great to have you (somewhat) back in the Adobe community as an "average Joe" contributor. You've been missed!



March 17, 2006

Adobe Nabs Key Executive From Sun


As reported by eWeek, Adobe has lured John Loiacono, executive vice president of software at Sun, away, and will be assuming the role of senior vice president of creative solutions on March 24th. It notes that "...he will have responsibility for the development, delivery and marketing of Adobe's entire creative software portfolio, including brands like Adobe Creative Suite, Macromedia Studio, Adobe Photoshop, Adobe Illustrator, Macromedia Flash Professional and Macromedia Dreamweaver..." This is no small appointment (and win) for Adobe, as it puts an industry veteran in charge of its flagship products.

After reading the opening sentence of the article, my immediate reaction was luke warm, as I envisioned an "old school" type of mind assuming the lead on a rather dynamic product line. However, after reading a bit further, it notes that "[U]nder Loiacono's stewardship, Sun's flagship Solaris operating system was made available at no cost and then released as the OpenSolaris open-source project." This, to me, suggests he is an executive who has embraced the modern software development paradigm and is willing to make calculated, high-risk moves in order to promote his software. Open-sourcing Solaris was a major shift in policy for Sun, and hopefully his vision will translate well in his new position. I am not suggesting that Adobe open source their products, mind you. I'm just suggesting that his seemingly aggressive past decision-making may be a good fit for Adobe, which has been criticized for possessing a "stiff" corporate culture (pre-acquisition).

Time will tell...



More Entries


© Dave Carabetta, 2005-2010. This blog licensed under the Creative Commons License. Some rights reserved. This is a personal weblog. The opinions expressed here represent my own and not those of my employer. Blog software provided by Raymond Camden.