I'm Joining Booz Allen Hamilton

Posted By : todd sharp Posted At : June 13, 2011 4:29 PM Posted In: Personal

29

I'm thrilled to announce that I have accepted a position as an Associate at Booz Allen Hamilton on what is quite possibly one of the most talented ColdFusion/Flex teams in the entire world. I'll be working directly with some of the most brilliant minds in ColdFusion: Joe Rinehart, Brian Kotek, Marc Esher, Scott Stroz, Nic Tunney and Michael Seid. I have known all of these guys (except Michael) for more than four years now and each one of them ispassionate, knowledgeable, and extremely bright guys and who are unquestionable leaders in the ColdFusion community. I'm truly humbled to be joining these guys and thankful to Booz Allen for giving me this opportunity.

This has been a difficult decision for me after having been at AT&T for the last 15 years. I'm thankful for all of the experiences and people I've worked with during that time but as I've grown my development skills over the past seven years I realized that I couldn't be truly happy in anything but a full time developer position at this point in my career.

I will be paid to do what I absolutely love to do, with people I love being around and learning from. I can't possibly imagine how it gets any better then that.

Instant User Demographics With RapLeaf

Posted By : todd sharp Posted At : June 3, 2011 9:04 AM Posted In: Technology

12

I've known about RapLeaf for quite some time. The company provides a metric shit ton of data about, well, us. That's right, it knows a whole hell of a lot about us and it's surprisingly accurate in what it knows. They might explain somewhere on their site just exactly how they do it, but let's be honest: we put a whole hell of a lot of information about ourselves online nowadays and the rest of the information is pretty much for sale to the highest bidder due to the choices we make and companies we choose to interact with.

Recently I was pinged by RapLeaf to let me know about a new service they are getting ready to roll out called Instant Data. The concept is pretty simple - you upload a list of email addresses and it spits out a cool summary of detailed information about your users. As a developer I was impressed with how it actually is instant. After you upload the list it will actually show you charts which update in real time as it processes the information.

Here is the output of a list of about 18,000 emails that I uploaded. In total it took maybe 7-10 seconds to finish the entire report.

The service also offers a detailed download which provides a number of different metrics, but as you can imagine there is a catch. If RapLeaf has a certain piece of information about a user (like home value, marital status, etc) via their email address the detailed report simply shows 'Data Available'. Their FAQ states:

"In addition, if you have a paid subscription to our paid "Premium" package, you will be able to use InstantData to get Premium information -- presence of children, income, marital status, homeowner status, home market value, home property type, and length of residence."

The email I received from RapLeaf stated "feedback suggests that we're going to change the world of consumer data with this product" which is a bold claim indeed. I'm not quite sure I agree that the service is that game changing, but it definitely provides valuable market research to online content providers looking to understand more about the people who use their products and services.

As a final note I wanted to mention that RapLeaf used to provide quite a bit of social data about a user via their API but it seems they've shifted their focus away from that arena. It's too bad too because as the social media industry continues to explode I'm sure the ability to tie all your social identities together via that API would have provided for some interesting mashup opportunities.

SlideSix OS Update - Flex/AIR Source Checked In

Posted By : todd sharp Posted At : May 21, 2011 9:56 AM Posted In: AIR, Flex, SlideSix OS

10

I've finally checked the SlideSix Flex and AIR source code into GitHub. You can take a look at the following four projects if you are interested:

The Dedicated Room project is the web based viewer that is used to live broadcast presentations from the AIR based Presenter. The others should be self explanatory; the Slide Manager is the Flex application used to upload and manage profile, groups and events and the Viewer is, well, the Viewer :).

The main project is up to date with some features being added in the past few weeks like support for Conferences/Events as well as minor things like 'featuring' users, groups, events and slideshows. There has also been some work to integrate Disqus into the front end for comments with an option for users to provide their own account for moderating comments or use the default, unmoderated account.

Keep an eye on the group for more info and as always if you are willing and able to contribute please let me know.

My Take On What Makes An Expert ColdFusion Developer

Posted By : todd sharp Posted At : May 17, 2011 9:58 AM Posted In: ColdFusion

9

Ray Camden blogged this morning What's An Expert ColdFusion Developer. It's a good post that folks should read because he makes some good points about some skills and qualities make up an upper tier CF dev.

I certainly don't mean to steal Ray's thunder if he planned a followup, but his post got me thinking about those who might not yet be an expert and how they might get to that point. Ray cited some major points that he'd use to consider a developer an 'expert' which I'll summarize as follows. I'm over simplifying things here and adding my interpretation in parenthesis:

  1. Know how/where to find answers when you're stuck (problem solving)
  2. Have an understanding of the ColdFusion Application Server (performance tuning)
  3. Recognize code that can be made better (best practices)

I like that he addresses problem solving first off. I've said it before in conversations on Twitter and in person, but I truly believe that good/great developers are true problem solvers. They are absolute bulldogs when it comes to finding an answer and perhaps even lose sleep when it comes to figuring out a solution to a challenge their code has presented them. This is a quality that I would value almost higher then any other quality if I were hiring a developer because it shows tenacity and passion for the work that they're doing. Passion can not be underestimated and I'd hire a PHP developer with good problem solving skills over a mid-level 9-5 CF'er any day. Great developers don't have a switch that turns off at the end of the day. This passion usually manifests itself as a desire to consume blogs and Twitter feeds related to the language/tool/framework that they prefer to work with as well as a healthy respect for the languages/tools/frameworks that they do not choose to work with. We all have preferences but to turn a blind eye to the competition is ignorant. No business survives by ignoring what the 'other guy' is doing so why should a developer assume that nothing good is happening outside of their own realm?

I don't have much to say about performance tuning other then I agree with Ray's assessment. You should know that ColdFusion runs on Java. You should know basic ColdFusion admin settings and how they affect an application in production. An expert take an app that initializes in 60+ seconds and make it start up in less then 2 seconds with about 5 minutes worth of simple tuning. Beyond that, as Ray said, you should know about the tools at your disposal and know who to call (and possibly hire) should things get above your head.

I like Ray's third quality as much as I like the first one. To me this is about gut feeling. It's a quality, like passion and tenacity that can not be taught but can be fostered. You should be able to immediately 'sense' when code is not 'right' and be able to refactor as needed. At the same time you should know when it's "OK" to move past a block of code that isn't the prettiest instead of wasting time and interrupting your mental flow to solve a problem. But an expert will always come back to that code and refactor it to make it 'right'.

In addition to the points above I'd also add that Expert level devs can read a block of code and understand the flow and what is going on regardless of the language. They may not be able to write code in that language but let's be honest, as long as we're not talking about BrainF*ck (Google it), code is code.

Experts are, to a certain extent, born with the abilities that make them experts. They've just taken the necessary time and displayed enough passion to take advantage of those abilities. It's also true that a person who displays the qualities mentioned above but who has yet to rise within their field can some times present solutions to problems that even shock the experts within their field. Consider a few of the 'happy accidents' that have changed the world (via):

The discovery of penicillin, for example, was the result of Alexander Fleming noting the formation of mold on the side of petri dish left uncleaned overnight. Vulcanized Rubber was discovered in 1839 when Charles Goodyear accidentally dropped a lump of the polymer substance he was experimenting with onto his wife's cook stove. More recently, 3M's post-it was also the result of an accident in the lab. Breakthroughs aren't always about invention, but the intervention required, by the aspiring innovator, to notice something new, unexpected, and intriguing.

If you love developing and have the passion and gut feel that it takes to become an expert then you will become an expert. If you're punching a clock and expecting others to hand you solutions then you're in the wrong field.

ColdFusion Builder 2 To Have 'Express Edition'

Posted By : todd sharp Posted At : April 27, 2011 9:37 AM Posted In: CF Builder, ColdFusion

16

This one is sure to be a game changer. Here's more info:

When you start ColdFusion Builder, you are prompted to enter the product serial number. When you enter a valid product serial number, activation happens in the background the first time the software detects an Internet connection.

If you do not enter the product serial number when you start ColdFusion Builder, you can use the trial version of the full-featured ColdFusion Builder 2.0 for 60 days. After the trial expires, you need to purchase a license to continue using all the features. If not, ColdFusion Builder switches to a feature-limited Express Edition.

With the Express Edition, you can continue to use ColdFusion Builder with basic features such as editor, code assist, and syntax highlighting. But the key features such as code assist for extensions, code insight, extension callbacks, connection to remote server, quick fix, debugging remote projects, refactoring, ColdFusion search, code formatting, FTP support, log viewer, local file browser, code hyperlinks, and hover help are not available in the Express Edition of ColdFusion Builder. You can convert the Express Edition to a full-featured version by purchasing the license and specifying the product serial number.

You're going to miss out on some seriously powerful features if you don't purchase a license, but this essentially means there will be a free lightweight IDE for ColdFusion. This is truly amazing news!

SlideSix OS - Where Do We Go From Here?

Posted By : todd sharp Posted At : April 19, 2011 7:26 AM Posted In: SlideSix OS

5

So now that I've gone and open sourced SlideSix I thought I'd start by laying out some of the primary needs for the project. If you're interested in playing along at home you can pull a copy down from GitHub and install it.

Getting the app up and running fully can take some time with setting up event gateways, installing Open Office (if you don't have it already) and whatnot, but once you get the hang of it and get the first steps out of the way you should be all set. Since the application uses the built in ORM functionality of ColdFusion 9 you don't have to worry about any database creation -- just run the app once the settings are in place and CF will take care of all of that for you (assuming you've created a DSN and configured SlideSix properly). If you have problems installing please post to the group and we'll get everything figured out.

The 'plumbing' of the app is pretty complete at this point. The model and services are all in place and the Flex bits have been properly wired up so everything should 'just work'. You can register users (which initiates a verification email) and login. Once logged in you can hit the slide manager and upload presentations, create and edit groups and edit your profile. The default user (admin/admin) is flagged as an admin and you should notice a few links for the beginnings of a proper admin system where you can search/browse and make simple edits. This all may sound kinda obvious since SlideSix already exists, but it's been a lot of work to get back to this point since the entire model and services have just about been completely rewritten. Oh - I should also mention that if you've configured a SOLR collection presentations will be indexed, updated and deleted (if necessary) within the collection as appropriate, but there is no front end interface for search at this point.

There are a few features that I'd like to consider adding, but at this point I'd really like to focus on getting the layout and design a little more polished. The primary needs (I think) are getting new design up and running including a few logos - one for the SlideSix 'project' and one for the relaunch. I've often struggled with layout for the application as well, so anyone with ideas for the home page, group pages, user profile pages, slideshow view pages and slideshow/user/group list pages would be more then appreciated. I haven't obtained the new domain name yet, but anyone interested in helping with the design can contact me offline and I'll share my ideas privately until I can obtain the domain.

What else? Since SlideSix is now 'our' project I'd love to hear people's ideas on what they'd like to see supported. Let me know your ideas below or in the Google Group. Do you plan on using the app/code somewhere?

Oh I almost forgot. The project has now also been added to RIAForge which mainly points over to a lot of the content on GitHub but it's always good to cross promote.

SlideSix Is Now Open Source

Posted By : todd sharp Posted At : April 18, 2011 2:23 PM Posted In: SlideSix OS

16

I'm happy to announce that the source code for SlideSix is now Open Source and available on GitHub.

Please note that this source code is for the rewritten version of SlideSix and will not fully resemble the current live version of SlideSix.com. Essentially the SlideSix project will live on as an 'engine' or 'project' in this form, with a new and focused relaunch of the actual site (most likely under a new domain) coming in the future.

I've started a wiki as well as a Google Group for those interested in contributing to the project. Feel free to join the group as I'm sure there will be some good discussions on the future of the project.

The source code for the Flex and AIR bits have not yet made there way onto GitHub but they'll be coming along shortly. The SlideSix engine source linked above contain working compiled copies of the slide viewer and slide manager.

One final note - I have not yet put a license in the project but do plan on doing so ASAP. In the meanwhile consider it GPL unless someone convinces me otherwise.

So I've Been Thinking About Shutting Down SlideSix...

Posted By : todd sharp Posted At : April 13, 2011 2:11 PM Posted In: AIR, Flex, ColdFusion, SlideSix

22

I've come to a crossroads with SlideSix. The service has never fully taken off as a legitimate competitor to SlideShare (among numerous other similar services) and the reasons for that are numerous and outside the scope of this posting. The issue that I'm facing is the fact that my server is running out of disk space (less then half a gig free out of 30gb). It's been getting close for a while and every few months I take some temporary steps to clear some space, but I can't continue postponing the inevitable. A lot of you have reached out to me via Twitter or other channels expressing your support and for that I am truly grateful.

I've been strongly considering shutting the service down all together, but I feel a strong commitment to my most loyal users. Thinking about those users has led me to realize just who those users are: the ColdFusion and Adobe developer/designer community. I'd like to keep providing a service to those users and at the same time I'd like to reward them for their loyalty so here is what I'm thinking of doing.

  • Finish the complete rewrite of the service that I began last year (which utilizes CF 9 ORM).
  • Relaunch the service as being geared towards developers and designers and the development/design community at large
  • Utilize s3 for storage
  • Abandon the premise of recording video along with each slide
  • Focus on live streaming of presentations (thoughts/opinions are welcome on the value of this feature -- IE: should it even exist or should it be abandoned as well?)
    • Scheduling live streams
    • Group associations
    • Possible conference support?
  • End-Of-Life SlideSix
    • 60 day period where users can sign up for new service and import previous presentations if desired
  • Fully Open Source the entire codebase
    • ColdFusion code
    • Flex code
    • AIR code
Here's where I need help to pull this off.
  • Site layout/design/rebranding (my design skills are surpassed by my 3yr old and a box of crayolas)
  • Donated s3 account for hosting images
  • Donated hosting for version control repository for the new OS codebase (possibly use RIAForge)
  • Participation!
    • Contribute to the code if you are willing/able
    • Use the new service!
    • Perfect for extending the reach of User Group presentations Conferences
    • Spread the word about it!
  • Any other help/kindness you're willing to provide!!
If you are willing, able and ready to help out please let me know (either directly or by commentingto this post). I'm not trying to get rich or profit off of this. Of course the plan was monetization from the start, but it's clearly not an option at this point so my next best step is to reach out to the community and try to give back for all that I've received from you all in the past.

Wiring Up A 32 Bit ODBC DSN With 64 Bit CF 9

Posted By : todd sharp Posted At : April 7, 2011 8:06 PM Posted In: ColdFusion

16

Quite a long title, but there's simply no easy way to simply describe what I'm about to cover in this post. To give a bit of back story - the project I'm getting started on requires that I hook CF to a FoxPro Database. This comes with all kinds of headaches as there is no (free) JDBC drivers out in the wild that I could find so I had to go the good ole ODBC Socket route.

The first step was to get a hold of the proper drivers for FoxPro. At the time of this blog post I found them here - who knows who long that link will stay alive in Microsoft land - but I digress. The trick here, as you'd soon find if you scamper off to create a new ODBC DSN on 64 bit Windows is that you'll have to use the 32 bit ODBC Admin interface. I found mine in the following location:

C:\Windows\SysWOW64\odbcad32.exe

Within the 32 bit ODBC Admin you can create a new DSN and point it at the appropriate FoxPro DB. The next step is to head to the CF administrator and wire up a CF DSN to the ODBC DSN. Create a new datasource and select 'ODBC Socket' as the type. On the following screen you may notice that the ODBC DSN you just created in Windows is not shown in the drop down. Here's where it gets a bit dirty. Inspect the <select> element in your favorite console (I used Chrome dev tools) and add the dsn as an option yourself making sure to use the same name from the Windows admin (add it as both the value and the text for the option). Now enter your username and password and save. Your datasource should verify and you're free to use it from <cfquery> as you would any other CF DSN.

Yeah, it's dirty and cheap and it might have some ugly consequences, but it works and is the only way I could find to hook up a 64 bit install of CF to a FoxPro DB. Feel free to comment if you know of a better way.

Side Note: Lest anyone think I have anything against paid software I should mention that this particular project is for the church where my brother is a pastor so the funds are limited and a $500 driver was a bit out of budget for the particular project.

Networked In-Memory Databases With ColdFusion

Posted By : todd sharp Posted At : January 28, 2011 11:31 AM Posted In: ColdFusion

12

Yesterday I posted about creating an in-memory database with ColdFusion and Apache Derby. It was a pretty cool proof of concept, but in practice it is a bit limited because it was using the Apache Derby Embedded database which limits you to a single JVM connection at a time (meaning not even a GUI interface can connect once CF grabs ahold of it). In simple applications this might not be an issue, but I wanted to see if I could get things working with the Network Server version of Derby.

Turns out it's just as easy, and in fact it can get a whole lot easier to work with by creating a ColdFusion DSN for the in-memory database. Having a proper DSN will let us use <cfquery> and <cfqueryparam> and work with the in-memory DB as we would any standard file system DB. The first step is to set up a DSN. Choose a name for the DSN and select 'other' as your driver type. On the next screen you'll simply craft the connection string and enter the proper class names as shown below:

You'll notice that ColdFusion will be unable to verify the DSN when you save it. That's because the Derby database isn't running yet.

You can easily start the database from the command line (see the Derby docs for the NetworkServiceControl), but wouldn't it be much easier to handle it programatically via code? Of course it would! Here's how you'd do that (imagine this code residing in onApplicationStart):

<cfscript>
ip = [127,0,0,1];
ba = javaCast('byte[]', ip);

inetAddress = createObject('java', 'java.net.Inet4Address').getByAddress(ba);

nsc = createObject('java', 'org.apache.derby.drda.NetworkServerControl').init(inetAddress, '1527');

writeDump(nsc);

try{
    writeDump(nsc.ping());    
}
catch(Any e){
    //ping unsuccessful - start the server
    nsc.start(javacast('null', ''));    
}

writeDump(nsc.getCurrentProperties());

//uncomment to shutdown
//nsc.shutdown();
</cfscript>

And now you can do things like this:

<cftry>
    <cfquery name="create" datasource="memory_network_server">
    CREATE TABLE testTable (
     testID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
     test VARCHAR(50)
    )
    </cfquery>
<cfcatch type="any">
    <!--- table exists --->
</cfcatch>
</cftry>

<cfquery name="insert" datasource="memory_network_server">
insert into testTable (test)
values(<cfqueryparam value="foo" cfsqltype="cf_sql_varchar" />)
</cfquery>

<cfquery name="select" datasource="memory_network_server">
select *
from testTable
</cfquery>

<cfdump var="#select#">

I haven't tested it yet, but in theory any other application in a cluster should be able to create a DSN pointing at the server that launches the database and interact with it just as you would a standard database. You should theoretically also be able to connect up with an IDE or GUI query management tool to make management and table creation even easier (that's my next test).

I should mention that in-memory databases will only work with ColdFusion 9.0.1 because the version of Apache Derby that supports in-memory databases didn't ship with ColdFusion until that updater. I may take a look at using JavaLoader to make things work with older versions of CF at some point in the future.