The ColdFusion/CFML Discussion: We’re Finally Getting Somewhere

I’m sure by now you’ve seen Joe Rinehart’s “Dear John” video to ColdFusion, and Mike Henke has a funny and I think (as I’ll explain in detail below) very pertinent response video.

I won’t rehash everything that’s been said there as well as in the various discussion outlets the past few days, but I did want to comment on the situation by saying this: after years of tiptoeing around I think we’re finally getting somewhere.

For me, I saw the writing on the wall for Adobe ColdFusion about 5 years ago, and I was already planning to jump ship at that point for numerous reasons. Many of my reasons were technical ones (and sadly haven’t changed in ColdFusion in 5 years), but another major reason was due to my firm belief in using free software whenever possible. All that combined with me doing a lot of open source work for a closed, proprietary platform led to cognitive dissonance I could no longer ignore.

Then in 2008 OpenBD was announced as a GPLv3-licensed fork of BlueDragon. This came at exactly the right moment for me because it meant I could keep using CFML but run it on a completely free software stack.

The release of OpenBD also addressed one of the other major issues I had with ColdFusion: After seeing how free software projects are run, the level of interaction between users and developers, the ability for community members to contribute and have a direct impact on the future of the project … none of that was true with ColdFusion. I simply couldn’t keeping using and supporting something that didn’t work this way.

I quickly switched over to OpenBD and haven’t looked back. We have a couple of ColdFusion 8 servers running some apps that don’t need much attention, but we moved the majority of our applications to OpenBD (99% without issue, despite anything you’ve heard about switching engines being difficult). As our legacy (and I do mean legacy — some of these apps are 10+ years old) ColdFusion apps need updates they’re moved to OpenBD, and all of our new development is done on OpenBD. We deploy our projects as WARs to Tomcat and life as a CFML developer has never been better.

I give you that background simply to point out that in my world, Adobe ColdFusion hasn’t had anything to do with my CFML development for a many years now, and I haven’t missed a thing. In fact I’ve gained a great deal, not just a faster engine with really compelling features Adobe CF still doesn’t have, but I’ve also been able to contribute directly to OpenBD in concrete ways with patches to the engine and building the admin console, not to mention the fantastic discussions on the OpenBD mailing list that lead directly to new features in the engine that are implemented in days, not years.

When I saw Joe’s video I realized I was watching it with the perspective of a disinterested bystander. He made some valid points, though as far as the installer goes “who cares” was my reaction since I think we’d all do very well to stop treating CF as if it’s an application server and treat it as what it is, which is a Java web application.

But honestly 99% of Joe’s complaints with CFML as a language are addressed in OpenBD and Railo. My reaction in a lot of cases was “they haven’t fixed that in CF yet?” but again, since I haven’t used the product for years now, it doesn’t impact me.

The major point I think Joe makes (and the one that Mike’s video makes at the end) that is tremendously pertinent to this discussion is the constant battle between “more stuff” — meaning new marquee features that demo well but don’t work for crap in the real world, or features no one cares about — vs. more, less marketing-friendly features like improved language syntax, removing the dead weight (which is hugely important), and other improvements the actual users of the product (i.e. the developers) want.

I’m glad this came up in this way because it gets to what I think is the heart of the matter: ColdFusion is a commercial product. How do you keep people buying commercial products year after year? By adding more “features.” We developers may think of better language syntax as a feature, but we’re not typically the ones with the checkbook, and == instead of eq doesn’t demo well to the suits with the money.

This is why ColdFusion is in the state it’s in, and is a great illustration of why when there’s a profit motive behind a software product of this type, you wind up with “features” that are bright and shiny and demo well to the people who don’t know any better, and you continue release after release after release to not get much in the way of the actual improvements developers need in order to keep using ColdFusion.

To be blunt, for a commercial product that’s been around for years ColdFusion should be much, much better than it is. The fact that it isn’t speaks volumes.

There’s a reason there are no other commercial products along the lines of ColdFusion in the world: because the market can’t support them. Allaire/Macromedia/Adobe got in early with enough customers to keep this going for a while longer, but there is a definite sense that they’re de-emphasizing CF as a product (I’ll stop short of saying they’re putting it out to pasture).

Based on discussions with other developers as well as my own recent experience, this “de-emphasis” is the story more and more people are hearing from Gartner these days. ColdFusion hasn’t fallen into the “Migrate” bucket of their “Invest/Maintain/Migrate” spectrum, but it’s getting there, and Gartner flat-out said on a call I was on just last week that they do not recommend starting new development on ColdFusion if you know it’s a strategic product you’re going to be maintaining long-term.

The bigger problem here is the increasing frustration of CFML developers. Once the community starts bleeding developers, impressing the suits or anything Gartner shows on a chart or graph won’t matter. If the suits can’t find anyone who knows the technology, and they’re hearing from analysts it’s not the way to go, they’ll move to something else. All the shiny new features in the world won’t fix that.

How this relates to the free software engines is also interesting, because the other engines have the albatross of Adobe CF compatibility around their necks. In many, many cases on the OpenBD side we look at how something works in Adobe CF and the only reaction a logical person could possibly have is “WTF,” and in other cases we have ideas for changes that would mean vast improvements in speed or functionality, but we’re saddled with remaining compatible with Adobe CF. It’s a continually frustrating fine line, and given the state of ColdFusion it’s one I’m personally seeing as less important to continue to walk.

I didn’t wind up where I thought I was going to when I started writing this, but my main point as I state in the title of this post is this: we’re finally getting somewhere with the discussions. For far too many years there’s been nothing but infighting, people forming camps, alliances, cliques, etc. and getting behind one engine or another, all to our collective detriment. Ultimately that’s counterproductive and wastes the incredibly limited resources we have as a community.

We also need to stop beating around the bush. I’m as guilty of this as anyone simply because of the vitriol I’ve had thrown my way over the years, particularly immediately after I quit as an Adobe Community Professional and joined the OpenBD Steering Committee. You start asking yourself if it’s worth the hassle to say anything.

But if I can’t state my opinion on things as truthfully and hopefully respectfully (without watering things down to the point of being meaningless) without getting a purely emotional reaction from people who choose to stick their heads in the sand, that’s their problem, not mine. Just because I don’t share your opinion doesn’t mean I’m spreading FUD, or being nasty, or anything along those lines. We all need to realize that unless we can have these sorts of discussions without screaming at each other irrationally we aren’t going to make any progress.

Regardless of our engine of choice we can all benefit from improvements to the CFML language and the underlying and supporting technologies, and I’ll say flat-out here that I don’t see any of those sorts of innovations — the kinds of innovations we as developers need — coming from Adobe. They by definition have completely different motivations and to keep CF going they need to make decisions for what from my perspective are all the wrong reasons. You don’t wind up with something that’s good for developers that way.

Look around the development world. There is not a single product remaining in the world in the same basic category as ColdFusion that you have to buy. Prior to the free software engines coming along, unless you count .NET (which is a completely different, possibly more subtle argument), CFML was the only pay-to-play language out there. (And please don’t say “Websphere” or anything along those lines — that’s not the same type of product at all. Adobe convinced us for years that CF is an app server. It’s not, and they’ve been trying to fool people into thinking it is for far too long.)

I’ve been in the CFML world now for a very long time. I’ve been hearing the “but CF pays for itself!” arguments for 15 years now. I even believed those arguments at one point and you know what? It doesn’t matter. We lost. That ship has sailed. We would do ourselves and our community a huge favor by not pretending those tired old arguments are still worth the breath it takes to utter them.

People don’t pay for this stuff anymore, nor should they. There are far, far too many excellent free software solutions in the world — many of which are rolled right into Adobe ColdFusion, by the way — for us to keep thinking we have some sort of lock on productivity or amazing features or whatever the hell other arguments we used to use to try and convince the naysayers. If we’re still talking that same old crap, it’s quite clear we’re only trying to convince ourselves at this point.

That’s not to say it’s all doom and gloom. I wouldn’t still be here if I didn’t think CFML was a great technology. I wouldn’t be writing this blog post, or be spending time on the Open CFML Foundation, OpenBD, Open CF Summit, and all the other CFML-related things I do if I didn’t think the language was worth perpetuating (OK, saving).

The bottom line is this: painful as all of this may be to hear for some people, we’re finally — after years and years of ignoring our problems — getting somewhere. Regardless of the outcome of all these discussions and any casualties that may occur along the way, that’s only a good thing.

If you’re thinking about “leaving” CFML as Joe did I can’t say I blame you. There are a lot of great tools out there and it’s in your best interest as a developer to try them. Adding more tools to your toolbox only makes you more aware of the broader scope of the technology world which is a great way to expand your skills and your mind, not to mention make yourself more marketable.

I love Groovy and Grails, and still use Grails from time to time. I’d be lying if I said I hadn’t thought about switching to Grails full time. There’s a lot of great technologies out there and a lot of very compelling reasons to jump ship. Some days sticking with CFML seems downright irrational in the face of all the arguments to the contrary.

But, something keeps us in the CFML world. Any one of us is more than capable of learning another technology, but we stick around for some reason, and for me that reason is even after all I’ve seen in the technology world, CFML is still after all these years a great technology for web development, and it still stands up pretty respectably against anything that’s come along in the interim.

Could it use improvement? Sure. What couldn’t? And that’s kind of my point.

Rather than dumping CFML for another technology, I’d hope people would get fired up and start asking how they can help improve CFML. If you have ideas about what you’d like to see in CFML the free software engines would love to hear them, and you’ll be surprised at how quickly many of these ideas would happen. If you’re happy with Adobe CF, great. Keep using it. But if Adobe CF isn’t giving you what you need, you don’t need to wait for Adobe to make things happen.

There’s no technical reason why anything that’s done in any other technology (within reason of course) couldn’t be done with CFML. All we need are the voices to guide CFML’s future and the will to make it happen.

ColdFusion Developer Position in Roseville, CA with Telecommute Option

Beginner Coldfusion Developer
Job Type: Full Time
Location: Roseville, CA with telecommuting available
Skills: ColdFusion (8.0)

WebEvents Global is seeking beginner ColdFusion developers to develop and maintain event management web sites, intelligent customer-focused websites, and automated marketing. Successful candidates will have 2-4 years of ColdFusion experience including 1 year of CF8, be excellent problem solvers, fast coders, and have superb and verifiable references.

WebEvents Global is a web-based event management software company headquartered in Roseville, California. We offer custom event management solutions from registration, campaign marketing, scheduling tools, sales automation tools, content management tools, and beyond.

Applicants MUST Have:

  • 2-4+ years of ColdFusion experience preferably with 1+ year of CF8
  • 1-3+ years experience in SQL Server 
  • Demonstrated and successful project completion 
  • Experience with web services is preferable 
  • Exposure to frameworks like Fusebox  
  • 100% fluency in English 
  • Should possess excellent communication skills.

Additional consideration will be given to candidates who have:

  • Experience with the event industry
  • Experience with AJAX or jQuery 
  • ActionScript experience 
  • Thorough understanding of version control is necessary

On location or remote work is negotiable.

Benefits:

  • Length (Permanent At-Will)
  • Pay is negotiable based on experience 
  • Medical 
  • Dental 
  • Vision 
  • 401k plan
  • 2-weeks PTO/year + 1 mandatory week off between Christmas – New Year 
  • Paid company holidays

Please send your resume along with salary requirements to jobs@webeventsglobal.com

CFML and Oracle Stored Procedures: Experimentation and Solutions

I love a challenge. Most of the time when someone tells me something can’t be done, I have to prove it to myself even if these attempts are frequently exercises in futility. And even if said something actually cannot be done, I always feel like I learn a ton during the process.

Such was the case when I was working with a coworker recently on getting data back from some Oracle stored procedures into either Open BlueDragon or Railo. Before I proceed, let me state very clearly that I hardly ever touch Oracle so if I’m off-base on any of this I’m happy for an Oracle expert to educate me. In my defense, I will say I did quite a bit of searching on this topic, and more hours of experimentation than I care to admit, so I wasn’t just screaming “Oracle sucks!” and not actually trying to intelligently and logically get things to work. Also bear in mind that in this situation we didn’t write the storedprocs and we do not have the ability to alter them. (Necessity is the mother of invention and all that.)

Back to the task at hand. The storedprocs in question return Oracle REF CURSORs, which is basically Oracle’s way of thumbing their ever-expanding nose at the world by doing things differently than everyone else simply because they want to. (Oracle fans, if there’s a legitimate explanation for this utter nonsense I’m all ears, because I certainly couldn’t find one.)

If your first thought is, “But this just works on Adobe ColdFusion!” you are in fact correct. This is because Adobe CF ships with DataDirect drivers that handle getting an Oracle REF CURSOR into a format that can be used by CF. Because REF CURSORs ain’t your plain old Java ResultSets like the entire rest of the known database universe uses, my assumption is that there’s some translation that goes on either in the driver, or on the CF side, or both, to make this work. But in other CFML engines if you’re using the plain old JDBC drivers–yes, even Oracle’s own JDBC drivers–this doesn’t “just work.”

Let’s assume it’s entirely in the driver. I could either purchase the DataDirect drivers (expensive, and silly to have to do this for this one seemingly small thing), or I could use the ones that ship with CF. Well, a little birdie told me (ahem) that if you try to use the ones that ship with CF anywhere but with CF you’ll get a licensing error when trying to run queries. So that solution’s out.

You might also think you could simply call the storedproc from within a normal CFQUERY tag as opposed to using CFSTOREDPROC and an out parameter. Good thought, but even if you get the syntax figured out, since the storedprocs in question are looking for an out parameter to be passed into the storedproc (figure that one out), there’s no real way to get the data returned from the storedproc into a variable within the SQL statement that you can actually access. I spent a lot of time on this and got the storedproc itself executing fine, but getting at the data was where I spent the bulk of my experimentation time, and I finally gave up.

So where does that leave us? Long and short of it is that without using the DataDirect drivers (even if that would in fact work), there is no way that I could come up with that would allow calling an Oracle storedproc that returns a REF CURSOR from OpenBD or Railo that would work.

At that point do we throw up our hands in despair and state that it simply isn’t possible? Certainly not! We expand our thought process, put all options on the table, and forge ahead because we must not let technology, particularly of the Oracle variety, defeat us!

Since I was at the point where there was no way to have OpenBD or Railo deal with what the Oracle storedproc was returning (and believe me I’m happy to be proven wrong here), I decided the most expedient route would be to write the database access piece in Java and have CFML call that Java object. Once I’m in Java I can work with the Oracle and JDBC datatypes directly and have more control over what I will return to the CFML engine once I get the REF CURSOR back from Oracle.
The question then becomes if it’s better to convert the REF CURSOR into a native CFML query object on the Java side, or to return something like a standard Java ResultSet to CFML and use the ResultSet directly. There are numerous other options as well, particularly once we’re dealing with this in Java and have the freedom to do pretty much whatever we want.

I won’t go into the gory details, but in one of my early attempts I ran into a problem where I couldn’t access the ResultSet because by the time the Oracle delegate class was delegated to the Tomcat delegate class, I had to hack around a bit and get the underlying delegate on the Oracle side just to display the data. Neat problem to solve, but not exactly the most straight-forward solution.

I then decided to try creating a query object native to the CFML engine from the Java ResultSet. This worked well, and is certainly a valid approach, particularly if you know you’re going to deploy to a specific CFML engine. If you want to build something that will work on any CFML engine things get more complicated because your Java methods have to return a specific datatype, so you can’t have a single method in your Java class that will return the various underlying CFML query object types to the respective engines.

But as a wise man once said, all problems in computer science can be solved by another level of indirection (except, of course, the problem of too many levels of indirection). So I created the Java class to talk to Oracle and return the REF CURSOR, and then wrapped that puppy in a CFC that has conditional logic to return a CFML query object native to the engine on which it’s running (i.e. either OpenBD or Railo). Works great!

The only outstanding issue at this point that makes me a hair uncomfortable is that in order for all this to work, I can’t explicitly close my callable statements, ResultSets, and datasource connections on the Java side. If I close those items in Java and then return the ResultSet to the CFML engine, then I can’t actually iterate over the ResultSet since it’s closed.

I could of course close the ResultSet from CFML (I wouldn’t have access to the callable statement or the database connection directly), but I’m not nearly as concerned about the ResultSet as I am about the database connection. At least I’m using the Tomcat datasource connection pooling so that should mitigate this concern a bit. In theory Tomcat and the JVM will handle closing this stuff when it’s no longer in use, but I need to do a bit of load testing to be sure it’s going to work well under load.
There’s also some attributes in the Tomcat <Resource> XML definition that you can leverage to alleviate potential problems. Specificaly the maxActive, maxIdle, removeAbandoned, and removeAbandonedTimeout attributes can help keep things cleaned up since I’m in situation where I can’t clean things up manually.

As far as the database connection pooling goes, thus far we’ve seen problems on Windows with Tomcat 6.0.26. It works for a while but then starts throwing database connection pooling errors and all the connections time out. Drop this all on Red Hat Enterprise Linux with Tomcat 7, and things are rock solid. Go figure.

I’m happy to share the Java and CFC code if anyone’s interested, and I’m really curious to hear how others have solved this issue because I’m still not convinced what I came up with is the best solution, even though it’s certainly working well. So far, anyway (knock on wood).

CFML Developer Position – Smithsonian Institution

Contact Loren Scherbak (contact info below) if interested.

========================================
Job Link on USAJOBS: http://cot.ag/h7MFf1

The Archives of American Art at the Smithsonian Institution is offering a rare, Federal Grade 11 programming position. We are a Coldfusion 9 shop with a lot of creative opportunities to work with XML. We only have one dedicated programmer position, but this position gets to work with a great team comprising a web/usability specialist, a metadata specialist, and a database administrator. The Archives is in the forefront of the archival community in using library catalog data (MARC) and Encoded Archival Description (EAD XML) to describe fully digitized collections on our website.

I can talk with anyone at great length about our work, but I want to get this announcement out to as many people as possible as we have a very short window for the job opening. The application is due by Dec. 3rd.

Loren Scherbak
Archives of American Art
Smithsonian Institution
202-633-7968
scherbakl@si.edu

20+ CFML Developer Positions Available – Irvine, CA, Culver City, CA, or Plano, TX

Please contact Brandon Fujii (contact info at the end of this post) for more information.

==============================

We have over 20+ openings for ColdFusion Developers. They can sit in Irvine, Culver City and Plano.

Cold Fusion Developers-Irvine, CA, Culver City, CA or Plano, TX

COLDFUSION DEVELOPER POSITION OVERVIEW:

The Developer’s main goal is to implement the application as specified within the planned timeframe. The Developer is also expected to help specify the features of physical design, estimate time and effort to complete each feature, build or supervise implementation of features, prepare product for deployment, and provide technology subject-matter expertise to the team.

PRIMARY RESPONSIBILITIES

  • Work with account managers to facilitate consensus in client meetings while projecting confidence, significant industry knowledge and basic facilitation skills
  • Collaborate with Tech Lead, System Architect and Business Analyst to integrate different perspectives into technical documentation
  • Demonstrate best-practice knowledge and apply skills to deliver an effective solution specific to client needs
  • Translate business and technical requirements into extensible, scalable and maintainable applications
  • Design and Implement an efficient solution that meets the functional requirements and is extensible and easily maintained
  • Extend existing or develop new code base using proven best-practice patterns and coding standards
  • Understand functional and technical specifications
  • Thoroughly unit test code for all contingencies outlined in the requirements documentation
  • Check code and communicate task status in a timely manner
  • Lead team of developers to develop unique solutions that utilize appropriate, leading-edge knowledge to help client realize business objectives

QUALIFICATIONS

  • Bachelor’s Degree in Engineering, Computer Science or related field
  • 5+ years as a ColdFusion Developer; coding, designing and optimizing high-traffic, mission-critical applications
  • Cold Fusion applications in a code-managed, multi-tier object-oriented ColdFusion development environment with process-release management in place
  • 3+ years creating object-oriented ColdFusion MX applications
  • 5+ years working with Microsoft SQL Server 200X as a developer
  • Web Services, XML, JavaScript and Adobe PDF products
  • Excellent PC skills; MS Office, including Word, Excel, Outlook

This is an urgent position and we are looking to interview candidates quickly. I am actively recruiting on this critical opportunity, so if you are interested in being considered as a candidate and the opportunity to interview for this opening, please contact me as soon as possible. I look forward to hearing from you soon.

Regards,

Brandon Fujii
IT Recruiter
Kforce Technology Staffing
949 223-1417 Direct
949 660-1815 Fax

Accessing a Network Drive from Apache and Tomcat on Windows Server

A few quick tips if you find yourself having to access a network drive from Apache and Tomcat on a Windows Server. This is all pretty much old hat but since I still get questions about this fairly regularly and was just setting up some things on some servers this weekend, I figured I’d write this up.

In my situation we’re running an application on three VMs behind a load balancer, and users can upload files from the application. Since I didn’t want to set up a process behind the scenes that copied uploaded files between all three servers (though it would have given me a chance to take another run at using Unison), we have an uploads directory living on a SAN. This way no matter which VM the user is on, the uploads all go to and are served from a single file system.

On Windows Server, by default services run under the Local System Account, which doesn’t have access to network resources. So if you install Apache and Tomcat as services and expect to be able to point them to a UNC path for some of your content, that won’t work out of the box. You need to be running Apache and Tomcat under an account that has network access. In most environments in which I’ve worked this type of account is typically called a “service account,” because you’ll end up getting a domain account just like your typical Active Directory user account, but of course it won’t be associated with a human being.

Once you have that account in place, you go into your services panel, right click on the service, click on “Properties,” and then click the “Log On” tab. You’ll see by default the Local System Account radio button will be checked. Click the radio button next to “This Account,” enter your service account information, click “OK,” and then restart the service. At this point your service will be running under the service account and will have access to network resources. Note that you’ll have to do this for each service that needs access to the network drive, which in my case meant doing this for both Apache and Tomcat.

That takes care of the web server and things at the Tomcat level in terms of basic access, but you’ll likely be configuring an alias of some sort to point to the network drive. In my case I wanted /uploads to point to serversharenameuploads, which meant setting up an alias in Apache, a Context in Tomcat, and a mapping in OpenBD. This is where a lot of people get confused, so I’ll go through each of these settings one by one.

The necessity for a web server alias is probably pretty obvious. If you’re serving an image directly from your web server, e.g. http://server/uploads/image.gif, if /uploads doesn’t exist under your virtual host’s docroot, then Apache will throw a 404.

Allowing Apache to access the network drive involves (depending on how you have Apache configured) using a Directory directive to give Apache permission to access the directory, and then an Alias directive so Apache knows where to go when someone requests something under /uploads. So the following goes in your virtual host configuration file:


<Directory "serversharenameuploads">
  Order allow,deny
  Allow from all
</Directory>

Alias /uploads "serversharenameuploads"

You may have other stuff in your Directory directive as well but that’s the basics of what will allow Apache to see /uploads as the appropriate location on your SAN.

The next layer down will be your CFML engine. Remember that if in your CFML code you want to read or write files to /uploads, even though Apache knows what that is now, your CFML engine will not. I’m emphasizing that point because it’s such a common source of confusion for people. If things are happening in your CFML code, it won’t be interacting with Apache at all, so it won’t know about the Alias you set up in Apache. Simple enough to solve with a mapping; just go into your CFML engine’s admin console and create a mapping that points /uploads to serversharenameuploads and that handles things at the CFML level.

Lastly comes Tomcat. Depending on how you’re serving files, you may be proxying from Apache to Tomcat, so if Tomcat needs to know where /uploads lives, since it’s not in the webapp’s base directory Tomcat will throw a 404 unless you tell it where /uploads is located.

Tomcat doesn’t have Aliases in the same way Apache does, but what you can do in Tomcat is configure multiple Contexts under a single host. So in Tomcat’s server.xml (or in a separate host config file if you prefer), you simply add a Context that points /uploads to the network location:


<Host name="myapp">
  <Context path="" docBase="C:/location/of/my/app" />
  <Context path="/uploads" docBase="serversharenameuploads" />
</Host>

So now you have things set up in such a way that Apache, your CFML engine, and Tomcat all know where /uploads really lives.

Another point of confusion for people on Windows is the concept of “mapped drive” letters. A lot of people think that if you map serversharename to a drive letter of let’s say D:, than in your code you can then access the uploads directory we’ve been using as our example via D:uploads.

The simplest way to explain why this doesn’t work is to point out that mapped drive letters are associated with a Windows user account. They don’t exist at the operating system level. While you may remote into the server using your credentials, map to a network location, and assign that to drive letter D:, another user logging in won’t see that mapping, and services running on the server under various user accounts definitely won’t know anything about mapped drives.

This is why in all the examples above you see the full UNC path to the network resource being used. You have to use the UNC path in order to get this all to work correctly because that’s the only way services running under a service account will be able to address the network resource.

Hope this helps eliminate some of the persistent confusion I see around this issue.

Get Your Hands Dirty at BFusion/BFlex

BFusion/BFlex is coming up on September 11 and 12, 2010 in lovely Bloomington, IN. You need to be there, and here’s why.

  • $30 for one day or $45 for both days is one of the best deals you’ll find in the conference world. (No, I’m not missing a zero at the end of those prices!)
  • BFusion/BFlex is all hands on, all the time. This isn’t a passive event by any stretch. You come armed with your laptop and you get to learn from the best people in the business.
  • Multiple all-day classes in both CFML and Flex are available. On the CFML side you can learn Mach-II from the great minds behind it (namely Peter Farrell and Kurt Wiersma), you can learn CFML from scratch from the great Adobe instructor Matt Boles, if you’re a programmer already but want to learn CFML you have none other than Simon Free at your disposal, and if you’re an open source junkie like me or just want to learn more about the free CFML engines, I’m giving an all-day in-depth class on that.
  • Great for all skill levels, from pure beginner up to advanced developers. There’s literally something here for everyone so you don’t have an excuse not to come. Just check the BFusion and BFlex schedules and tell me you don’t see something interesting!
  • It’s a nice intimate environment where you can corner speakers or other attendees and get whatever help you need.
  • Indiana University is a great venue with great facilities. Power and Internet for all!
  • Bloomington is a great town with tons to do.

I’ve been invovled with BFlex/BFusion since the first year and it’s one of my favorite conferences. I’m particularly excited this year to be able to help people delve into the open source CFML engines, so I hope to see lots of you there.

Great training, great price, great location, and great people. What are you waiting for? GO REGISTER NOW!

Senior CF Job in Washington, DC

Job details below–contact ckotova@sidonline.com for additional information.

—————————————————-

Computer Programmer IV

Systems Integration & Development Inc., an IT solutions provider located in Rockville, Maryland is currently seeking a Computer Programmer IV to perform programming services. The successful candidate will have experience with developing web-based applications using ColdFusion, Javascript, and SQL, and Oracle databases. This is a full-time position located in Washington DC. US CITIZENSHIP IS REQUIRED. Roles and responsibilities include:

  • Performs programming services, converts specifications (precise descriptions) about business or scientific problems into a sequence of detailed instructions to solve problems by electronic data processing (EDP) equipment, i.e. digital computers; draws program flow charts to describe the processing of data, and develops the precise steps and processing logic which, when entered into the computer in coded language (COBOL, FORTRAN, or other programming language) to cause the manipulation of data to achieve desired results.
  • Tests and corrects programs, prepares instructions for operators who control the computer during runs, modifies programs to increase operating efficiency or to respond to changes in work processes, and maintains records to document program development and revisions.
  • Applies expertise in programming procedures to complex programs; recommends the redesign of programs, investigates and analyzes feasibility and program requirements, and develops programming specifications.
  • Plans the full range of programming actions to produce several interrelated but different products from numerous and diverse data elements, which are usually from different sources; solves difficult programming problems, and uses knowledge of pertinent system software, computer equipment, work processes, regulations, and management practices.
  • Develops, modifies, and maintains complex programs; designs and implements the interrelations of files and records within programs which will effectively fit into the overall design of the project; works with problems or concepts and develops programs for the solution to major scientific computational problems requiring the analysis and development of logical or mathematical descriptions of functions to be programmed; develops occasional special programs, e.g. a critical path analysis program to assist in managing a special project.
  • Tests, documents, and writes operating instructions for all work, confers with other EDP personnel to secure information, investigate and resolve problems, and coordinates work efforts.
  • Performs such programming analyses as: investigating the feasibility of alternate program design approaches to determine the best balanced solution, e.g., one that will best satisfy immediate user needs, facilitate subsequent modification, and conserve resources.
  • Assists user personnel in defining problems or needs, determining work organization on typical maintenance projects and smaller scale, working on limited new projects, the necessary files and records, and their interrelation with the program or working on large or more complicated projects, and participating as a team member along with other EDP personnel and users, holding responsibility for a portion of the project.
  • Works independently under overall objectives and direction, apprising the supervisor about progress and unusual complications and modifying and adapting precedent solutions and proven approaches. May function as team leader or supervise a few lower level programmers or technicians on assigned work.

Experience:

  • Bachelor’s degree in Computer Science or a relevant computer-related field or 8 years equivalent experience.
  • At least 6 years of experience with the design, code, and maintenance of complex web-based applications using Adobe ColdFusion, JavaScript, and complex SQL queries.