The slides and code for my second presentation at cf.Objective() 2013 are now online:
Updated with the correct PDF link - sorry about that!
The slides and code for my second presentation at cf.Objective() 2013 are now online:
Updated with the correct PDF link - sorry about that!
→ No CommentsTags: coldfusion · mongodb · orm
The slides and code for my first presentation at cf.Objective() 2013 are now online - Polyglot Lessons to Improve Your CFML:
The other presentations will be posted after I've given them and the code will appear in that Github repository.
→ No CommentsTags: clojure · coldfusion · groovy · javascript · programming · scala
A while back I blogged about how we instrumented our Clojure code to show up in New Relic traces and we also did some stuff in CFML to get better data out of New Relic. Just now Joe Swenson asked on Twitter how to get CFML page names to show up in New Relic so I figured I'd blog a quick note about that.
You should already be starting up your servlet container with the -javaagent: option if you're using New Relic for monitoring your web app (and indeed New Relic has documentation about adding the Java agent to ColdFusion). That means you'll have the New Relic JAR on your classpath and so you can instantiate the New Relic agent API class in your CFML code. We do this at application startup:
application.NewRelic = createObject( "java", "com.newrelic.api.agent.NewRelic" );
Then at the start of each request, we do something like this:
if ( structKeyExists( application, "NewRelic" ) ) {
application.NewRelic.setTransactionName( "CFML", CGI.SCRIPT_NAME );
}
The first argument is a 'category' name and is currently ignored by the New Relic API (and you can pass null if you want). The second argument is how you want this web transaction reported in the New Relic traces. We actually just use a fake path to represent groups of requests since we have a lot of internal instrumentation (in Clojure) and that gives us better data about where time is being spent in the code.
→ 1 CommentTags: coldfusion
A month ago I posted that java.jdbc 0.3.0 alpha 1 was available for testing and since then I've made a few more alpha releases as the API and code settles down so I figured it was time to blog about the recent changes.
→ No CommentsTags: clojure
Other than noting back in January that all three(!) of my talk proposals were accepted, I haven't blogged about them since, so the only information about them is on the cf.Objective() web site. The session overviews give a fair sense of what you should get out of each presentation and roughly what they'll cover.
→ 1 CommentTags: cfobjective · clojure · coldfusion · groovy · javascript · mongodb · scala
I've been asked this several times recently so I figured it was worth a blog post. First of, why would anyone want older versions of the framework? Well, if they're running on Adobe ColdFusion 9.0.0 or earlier, they can't use the 2.x release stream: they're stuck on 1.x. Also, if they're currently using an old version and don't want a major upgrade, they might want a minor upgrade for a bug fix.
Okay, so why haven't I blogged about this before? Truth be told, I thought it was "obvious" how to find specific legacy releases on any Github project. Apparently, it is not obvious for everyone so it is worth blogging about. Every properly managed project on Github tags every official release so that all past releases can be found on the 'tags' page. You can see FW/1's 'tags' page where you can find every release since 1.0. Unfortunately, my choice of naming for tags has not always been consistent and I forgot the 'v' prefix for a while around the release of 2.0. Oops. Unfortunately the typical naming convention for prereleases tends to sort them above their gold release versions - see Clojure's core.logic library's tags for a more striking example. At least Github provides an easy mechanism for provided tagged archive releases.
It's probably worth pointing out that downloading FW/1 directly from the FW/1 RIAForge project page will give you the latest stable release which is currently 2.1.1. That's because it downloads a ZIP file of the "master" branch from the Github site. All development is performed on the "develop" branch. The only time the RIAForge site will slip you something different is when a new release is in the Release Candidate stage and I update the RIAForge page to download a ZIP file of the "develop" branch - and I update the page to clearly state that! - and this is to increase adoption of the new release and help flush out any remaining bugs that haven't been caught during the alpha and beta testing phases.
→ 1 CommentTags: coldfusion · fw1 · oss
I saw that Nolan Erck had blogged his cf.Objective() schedule so I thought I'd do the same. The decisions are not generally as hard for me as for Nolan: when I'm not speaking or attending a general session, I'm going to be focused on JavaScript since that's where I'm weak and that's where I'll learn the most. Mostly focused on JavaScript, that is.
→ No CommentsTags: cfobjective · coldfusion
Exposing Clojure function calls in New Relic web transaction traces requires adding Java-style annotations: @Trace. Here we show how to transform your existing Clojure code to a form that has annotated methods which show up in New Relic!
→ 3 CommentsTags: clojure
A question was recently asked on the Clojure Users group on LinkedIn about reasons to migrate to Clojure for enterprise applications in a Java shop. It's a fairly typical question from people in the Java world when they hear the buzz about Clojure, and of course asking the question on a Clojure group garnered a lot of positive responses about why Clojure is a good choice. I didn't feel anyone had really addressed a core aspect of the original question which was, essentially, "Why should I, as a Java web developer, using JPA, JSF etc, choose Clojure instead for an enterprise application?". The key considerations here are "enterprise application" and "Java web devloper, using JPA, JSF etc". Clojure is rightly praised for big data projects, simplified concurrency due to immutable data, and the conciseness of its solutions. The general advice when introducing Clojure to an organization is to take a grass roots approach: use it for some tooling first, or a small low-risk (but perhaps high-profile) project and show how well it works in a Java-dominated world. Then you get more and more developers trying it out and gradually the organization adopts it for more and more projects. It's good advice, and it's often how Clojure has crept into Java shops so far (as opposed to those fast-moving small shops that already have a tendency toward polyglot development).
I didn't feel anyone had really talked about how radical Clojure seems to a conservative "enterprise" company that's already bought into the Java way of doing things from top-to-bottom (as indicated by the original poster's references to JPA and JSF). I've had a couple of people ask me to turn my (fairly length) response on the group into a blog post, so here it is...
→ 3 CommentsTags: clojure
0.3.0 represents a major overhaul of the clojure.java.jdbc API. Read on to find out what has changed!
→ 4 CommentsTags: clojure