Last week I blogged about my endeavor to collaboratively work on the questions at 4Clojure.com. This week, my progress on that particular endeavor might slow down a little bit, or perhaps already has. It’s not forgotten by any means, but I’m juggling a few projects and multi-tasking as fast as I can.
Earlier this week, I was focused on my MongoDB for Developers course, which is currently in week 6 of 7. Last week I had completely forgotten about it because I was focused on the 4Clojure work. I remembered it Sunday evening, and it turned into a long Sunday evening (assignments are due on Monday). This week I wanted to avoid that scenario from replaying itself, so between Monday night and Tuesday night, I wrapped up this week’s MongoDB assignments. Go me!
I’m currently in the process of a renewed effort to become proficient with Clojure. We’ve been using it at World Singles in production for a couple of years now, but there’s been enough CFML that I’ve not really needed to do much in the Clojure beyond very superficial updates. But the CFML is shrinking, the Clojure is growing (well, not really… the Clojure code is much more concise than the CFML code, but you know what I mean), and it’s time for me to fully embrace Clojure.
It’s not that I haven’t tried over the past couple of years. But making the leap from self-taught ColdFusion developer to Clojure and functional programming has been no small task. Functional programming is such a different paradigm that I’ve stumbled over many of the basic concepts. Recently, however, I took a Coursera course on Programming Languages. That’s when the light bulbs started coming on. I had read Clojure books. I had gone to conferences. But sitting down and actually writing out code for the assignments, that’s when it started to click. To be clear, the Coursera course wasn’t Clojure-based. It wasn’t meant to teach any particular language. Rather, it was meant to teach programming concepts. And specifically, functional programming concepts. I started to understand the difference between recursion and iteration. The notion of variable assignments, and in particular, re-assigning a value to a variable, started to make me uneasy. Conceptually, the pieces were falling into place.
Now I’m tasked with fleshing out some code at work that relies on Clojure. Some of it is still CFML written in FW/1, but the meat of it is using the Clojure-based Expectations testing framework. It’s been a challenge, but as with the Coursera course, jumping into the code has proved to be very beneficial. But I still need to hone the Clojure skills in order to work efficiently. Enter 4Clojure.
Instant jQuery 2.0 Table Manipulation How-to
A few months back I was contacted by a representative of Packt Publishing
asking me if I’d have any interest in writing a book on using jQuery
to perform HTML table manipulation. Apparently they had seen a previous blog entry that I had written on manipulating table row backgrounds using jQuery
and thought that the concept could be fleshed out into a book. Turns out they were right. Instant jQuery 2.0 Table Manipulation How-to
has made it to the final steps of publication as we speak.
It’s a long and unfortunate title, but that’s OK as I didn’t come up with it. The title isn’t mine. Everything inside is, and I hope that people find that to be more entertaining and more educational and just all around better than the title. Of course, that assumes that you’re going to buy the book. You do plan on buying the book, don’t you? If you don’t buy the book then all of that knowledge just sits there between the pages (or electrons, if you’re into the epub scene) and does nobody any good.
This is the blog post that’s been rolling around in the back of my head for months, but I haven’t really wanted to write. But as I see others write about it and hear others talk about it, I think that it’s time. Yes, it’s another post on the decline of ColdFusion, but I think from a different perspective. It’s more of an observation of the factors that have contributed to the decline of ColdFusion, almost all of which have been external. In short, the death of ColdFusion is not to be blamed on Adobe, the community, or even on ColdFusion itself. It’s simply a matter of evolution. The evolution of the Web.
I’ll preface this by saying that ColdFusion, along with Allaire, Macromedia, and Adobe, have all been very good to me over the past 15+ years. The platform has earned me a living, put a roof over my head and food on my table. The community has given me friendships that are still strong today, and I would expect will still be strong 20 years from now. I’m eternally grateful for what I have today, and it’s not an exaggeration to say that none of it would be here if it wasn’t for ColdFusion. There are no ulterior motives here. No animosity. Simply my observations.
I do think that ColdFusion is… well, dying. I don’t think there’s anything that can be done. It’s just… time. Others have talked about it recently. Why add to the noise? Because I don’t think a lot of the previous discussions have gone into the *why*s of the decline, and I think that’s important to understand.
Early last year, I blogged about TextMate, which I referred to as my “new IDE of choice”. Embarrassing choice of words really, since TextMate is anything but an IDE. That was primarily what drew me to it. It is a text editor with some extra features, and much more lightweight than a typical IDE. I was happily using TextMate for day-to-day work up until a number of months back when I switched over to ColdFusion Builder 2.
I’ll say up front that I’ve never really been a huge fan of Eclipse in general, which is the framework on which ColdFusion Builder is based. I think it’s a great framework, but it can be quite the resource hog. Yet I started using ColdFusion Builder because my boss used it, and seemed to really be a fan. I figured he knew something I didn’t (which is often the case), and that I just needed to start using it and getting used to it. I was sure that after a few weeks, I’d be over the hump and happily coding away.
It’s been pretty close to a year now, and I still don’t feel comfortable with Builder. It still feels like I’m trying to like it. But it still sucks up quite a bit of RAM, CSS editing is a chore (we have a few _very_ large CSS files that Aptana chokes on), and the keyboard shortcut for commenting a block of code is:
* not intended to be a factual statement
Additionally, some things that I had gotten used to with TextMate weren’t present in Builder. I was used to a closing bracket/curly brace/parentheses being auto-inserted, and me being able to type over that character. But in Builder I kept ending up with 2 closing elements. I eventually turned off the auto-close feature. Long story short… it just never really flowed for me. It never felt “right”.
When surrounded by your peers, you want to be able to speak intelligently about certain subjects that may arise. When your peers are computer geeks, you want to be able to speak intelligently about… well, beer of course.
There are a few different ways to install and configure Clojure. I was shown this way, which seems to be the easiest, most straightforward way of getting Clojure up and running. I’m pretty sure it’s the most straightforward way that I’ve seen of getting any language up and running. Stick with me and you’ll have written your first line of Clojure locally within 3 minutes. Five at the most.
We’re going to use Leiningen to get Clojure installed and running. Taken from the readme file:
Leiningen is for automating Clojure projects without setting your hair on fire.
Working on Clojure projects with tools designed for Java can be an exercise in frustration. With Leiningen, you just write Clojure.
Over the past few months, we’ve been making a pretty aggressive move towards using Clojure in our model at World Singles. We still have a CFML-based application in a ColdBox framework, but our model has seen a lot of CFML re-written as (fewer lines of) Clojure.
Before anybody asks, or leaps to conclusions, there will be no Helms-ian type blog posts where I bid adieu to the CFML community. Learning and using a new technology does not, and should not automatically equate to closing the door on any other. I’m not learning Clojure to replace CFML. I’m learning Clojure in addition to CFML. CFML will always be a tool in my toolbox. It just won’t be so lonely anymore.
Thanks to Steve Bryant for the inspiration.
Many, many moons ago (1995-ish), I was working for a small startup here in Phoenix doing data entry. The company had a few ventures going on. The cool one was building web sites (for those clients who were bleeding edge enough to know what web sites were), and the other one, which was a CD-based version of the yellow pages. I worked on the other one. Typing the yellow pages into a database.
I had inquired about crossing over to the cool side of the building, but was told that there was no time to train somebody new, and I didn’t know HTML. In fairness, they were somewhat overworked what with keeping up with all of the new cool technology, like the <font> tag.
I admit that there are certain nuances to programming that I’ve never fully been able to wrap my brain around. One in particular is the proper placement of the increment operator:
( for var i = 0; i < 10; i++ )
( for var i = 0; i < 10; ++i )
I was certainly aware that there’s a difference… but never fully comprehended what that difference was. And it never seemed to be a big deal, as placing the increment operator after the operand always seemed to work for me.
…until today, that is.