Download Firefox -  a safer, easier to use web browser. Return to iribbit.net - Leap into the online experience! Return to iribbit.net - Leap into the online experience! iribbit.net - Leap into the online experience!

Project News :.

The latest project to launch was the site for Gorilla Offroad Company. Aside from their main site, a social media strategy was develop to launch the company into various industry specific automobile enthusist discussion board communities as well as popular social media fronts like Facebook, Pinterest, and Twitter.


Valid XHTML 1.0 Transitional

Valid CSS!

Section 508 Compliant

powered by: Macromedia ColdFusion MX

made with: Macromedia Dreamweaver MX

What is RSS

XML - often denotes RSS Feed information.

Macromedia - ColdFusion Programming
white horizontal rule

ColdFusion News :.

To bring a little life to my site, I've pulled a couple What is RSS Feeds into this page. You can currently choose between the technology related news stories from the following news sources:



You are currently viewing and RSS Feed from coldfusionbloggers.org.



Defining Post-Route-Change Scroll Behavior Using $location in AngularJS
Ben Nadel demonstrates how the $route, $routeParams, and $location service can work together to drive complex behaviors in an AngularJS application....
(Mon, 26 Jan 2015 10:00:15 GMT)
[view article in new window]

Schedule is now available for ITB 2015!

Are you ready?

We are so excited to announce our finalized schedule and speaker lineup for Into The Box 2015 with 14 great sessions from speakers around the world. We are truly blessed to be able to host some of the smartest and coolest speakers from around the world this May at ITB in Minneapolis. We will have a wide-range of topics that will surely entice any web application developer in need of more knowledge and sharpening their skills. So head over to our sessions page to check out this great lineup and register for Into The Box!


(Mon, 26 Jan 2015 08:00:13 GMT)
[view article in new window]

Gunicorn dyno death spiral on Heroku -- Part II
After a lot of investigation, we’ve figured out there is an issue with NewRelic, Postgres and Gunicorn. I summarized the issue here: https://discussion.heroku.com/t/gunicorn-dyno-death-spiral/136/13 After discussing this with Graham Dumpleton over Twitter there is an issue with libpq. Below is a … Continue reading
(Mon, 26 Jan 2015 02:00:26 GMT)
[view article in new window]

Gunicorn dyno death spiral on Heroku
FYI — Gunicorn dyno death spiral on Heroku — Part II is now available —– We recently released our app XXXX on Heroku using Gunicorn however we quickly found in even the most modest of production load (as little as 10 users) … Continue reading
(Mon, 26 Jan 2015 02:00:26 GMT)
[view article in new window]

Interview with me on Cars Yeah Podcast
Cars Yeah interviewed Brian Ghidinelli on business, cars and lessons learned.
(Mon, 26 Jan 2015 02:00:22 GMT)
[view article in new window]

Towards a More Ergonomic Development Setup
I just turned 45. Forty. Frickin'. Five. For the past six months or so (probably right on schedule) I've been experiencing neck, shoulder, wrist, forearm, and elbow pain. It comes and goes but on the bad days it's bad enough to keep me awake at night, so I decided rather than continue to ignore it and keep working directly on a laptop as I have for years now, I better heed my body's warnings (as well as my girlfriend's prompting) so I can keep programming for another 45 years. (Joking. If I'm still blogging about nerd stuff when I'm 90 please put me out of my and everyone else's misery.)

I already made the move to a standing desk, specifically a GeekDesk, a few years ago. At the same time I bought a Herman Miller Embody chair, which I subsequently never used, because standing desk. (I'm reeeeal smart sometimes.) Seriously though both these changes made a huge, huge difference. I no longer have back issues, I have much more energy, and I feel much more alert and engaged when I work while standing. And that Herman Miller chair is absolutely the best chair I've ever owned. It's fantastic on the rare occasion I actually sit in it.

The desk and chair are only one piece of the ergonomic puzzle, however, and the years of twisted wrists on a laptop for way too many hours a day finally started to catch up with me, so this is day one of putting the laptop in a docking station, using an external 24" monitor on a monitor stand, and using an ergonomic keyboard and mouse.

So far, so good! My wrists and arms felt better nearly immediately, and with the monitor much higher my head and neck are now looking straight out instead of me being hunched over and leaning in to see my laptop screen. It feels weird, but it's good weird and I have a feeling after a week or so when I'm totally used to it, and my aches and pains have subsided, I'll feel much better than I have in a long time.

I have two new monitors on the way and a dual-monitor stand, but for now I'm using a Lenovo Easy Reach monitor stand with a ThinkPad Ultra Dock for my ThinkPad T540p. With my GeekDesk down to a height of 40" everything is looking and feeling great.

The biggest change in the setup for me is the new keyboard and mouse, and for that I went with the Microsoft Sculpt Ergonomic Desktop. Yes, the keyboard is a little weird and I think it'll take a few days for me to get back up to my full typing speed, partially because the keyboard is a lot different than what I'm used to, and partially because I (like most people, I assume) don't type 100% correctly. Who knew getting used to doing Bs with my left hand instead of my right would be such a challenge?

I've tried a lot of ergonomic keyboards over the years. I almost went with one I had and tolerated (I'll stop short of saying I liked it) a few years ago, namely the Logitech Wave Mk550, but then I remembered my two major annoyances about that setup. First, when you're used to a laptop keyboard moving to full-stroke keys feels like a TON more work, and my hands felt it. Second is the numeric keypad on the right-hand side of the keyboard. (Seriously, does anyone use those things?) Not only does that make the keyboard feel off-center to me, but it means you're reaching pretty far to get to the mouse (one of the things I LOVE about using a laptop, particularly a ThinkPad, is I don't have to move my hands to move the pointer around), and that gets annoying and hard on the elbow after a while.

The Microsoft Sculpt keyboard addresses both of these annoyances. It has very, very nice laptop-style keys that feel great under my fingers, and the numeric keypad is a completely separate piece of hardware that is currently residing in my closet where it will likely stay for eternity. This makes the mouse much closer so it's less annoying and hard on the forearm and elbow to grab the mouse. I'm still getting used to the keyboard layout but thus far I really like the feel of this keyboard.

The mouse itself is also designed to be ergonomic so it's a little bit funky; it's more of a tall ball than the flat oval-shaped mouse you may be used to. Combined with a mouse pad with a gel wrist pad it puts the hand and wrist in a much more natural, comfortable position, and there's even a nice notch for the thumb. Lefties beware, however: I don't see how you could use this mouse if you're not right-handed since the thumb notch would be on the wrong side.

Changing up all my equipment is a bit jarring but I'll get used to it quickly enough and my body will thank me for it. I'll be curious to see how I'm typing and feeling at the end of the first week with all this, and how things will change again when I get the dual monitor setup going. I'm also debating whether or not I'll need a keyboard tray mounted under the desk since I can adjust the height of the desk itself. Time will tell on that.

If anyone has any ergonomic tips as I move into my new setup I'd love to hear them!

(Mon, 26 Jan 2015 02:00:21 GMT)
[view article in new window]

2014 Personal Annual Report

$ grep 2014 data.csv | d3.js > http://jehiah.cz/one-four


(Mon, 26 Jan 2015 02:00:20 GMT)
[view article in new window]

Cfmljure Release 0.1.0

I started cfmljure back in 2010, a few months after I started to learn Clojure, as a way to run Clojure code inside a CFML application. That early version worked – we’ve been using it in at World Singles since mid-2011 to integrate Clojure into our large ColdBox application, and updated versions of cfmljure have been in very heavy production usage since May 2012. Those early versions were pretty clunky to setup though, since you needed to mess with the classpath of your CFML engine (or at least the container on which you ran it – Tomcat, in our case) and you needed to copy all your third-party library dependencies into the WEB-INF/lib folder (and restart your container if you changed your dependencies).

When Clojure 1.6 came out (March 2014), it introduced a new API for embedding Clojure inside other JVM applications. I’d been relying on an unsupported API so I wanted to move to the new API as soon as possible. I ran into problems with classpath handling so I put it on the back burner for a while. One of the things that bothered me about the earlier cfmljure was that you had to do so much configuration and manual copying of libraries. Leiningen handles all this for you in Clojure and I wanted things to be that slick for cfmljure. I experimented with some CFML code that executed Leiningen to retrieve the classpath and I had some success, but not enough to create a reliable version that could be used in our app at work.

This past week, I decided to have another run at it, using a different approach to manipulating the classpath in my running CFML application:

// extend the classloader - not at all sketchy, honest!
var threadProxy = createObject( "java", "java.lang.Thread" );
var appCL = threadProxy.currentThread().getContextClassLoader();
var urlCLProxy = createObject( "java", "java.net.URLClassLoader" );
var addURL = urlCLProxy.getClass().getDeclaredMethod( "addURL", __classes( "URL", 1, "java.net" ) );
addUrl.setAccessible( true ); // hack to make it callable
for ( var newURL in urls.toArray() ) {
    addURL.invoke( appCL, [ newURL ] );
}

I gleaned the principle of this from time spent on Google and StackOverflow and several snippets of Java code that did this same thing. It uses Java Reflection to get a handle on URLClassLoader.addURL() and change its access to public so that it can be called by code that doesn’t extend the URLClassLoader class. This got me past the previous blocking point and I was able to complete the rewrite of that earlier version of cfmljure to use the new Clojure 1.6 API and also leverage Leiningen to avoid that configuration and manual copying.

I present: cfmljure Release 0.1.0! An easy-to-use way to embed a Clojure project into your CFML application (running on Railo).

The documentation is in the cfmljure README on Github but the basic flow is as follows:

  • Create a Clojure project with Leiningen: lein new myproject
  • Create an instance of cfmljure pointing at that project folder: var clj = new cfmljure("/path/to/myproject");
  • Install Clojure namespaces into a struct (or a scope): clj.install("clojure.core,myproject.core",this);
  • Call Clojure code: this.clojure.core.println("Hello World!");

That’s about as simple as it gets!


(Mon, 26 Jan 2015 02:00:17 GMT)
[view article in new window]

FW/1 & Clojure Sitting in Tree

Anyone following my tech trajectory will know that, after starting to learn Clojure in 2010, I’ve moved increasingly away from CFML and toward Clojure. In 2014, my team decided that Clojure would be our official primary language and all new development would happen there instead of in CFML. We still have a lot of CFML code in production – about 90kloc – but we consider it “legacy code” at this point. Most of that CFML code is a large ColdBox app that we built about five years ago (technically it’s three ColdBox apps but they share a lot of code). Our application Model has been slowly moving to Clojure so that we can reuse that code in new applications we’re building in Clojure. We’ve also been building new apps with FW/1 (and reusing both our CFML code and our Clojure code). We still like CFML as a templating language for views and our controllers – in our FW/1 apps at least – are often mostly just “glue” code that lets us call into our Clojure model code.

I’ve talked in passing on the FW/1 mailing list about the possibility of deeper integration with Clojure and I recently published cfmljure 0.1.0 – which I’ll be blogging about shortly – and so the topic came up again on the mailing list about this integration. I’d been thinking about how to write controllers in Clojure so that you could have a FW/1 app that used CFML for the views – where it excels as a templating language – and Clojure for the controllers and the model, leveraging the expressive power and immutable safety for all your business logic.

Over the last few days, I created a fork of FW/1 3.0 that included cfmljure and built a proof of concept of Clojure controllers. You can take a look at the FW/1 example with Clojure controllers on the clojure branch of the FW/1 repo. I created the project using Leiningen (Clojure’s build tool) and then added Application.cfc, index.cfm, and the views/ tree. Then I wrote the controllers/main.clj file (in src/hello) and the controllers_test.clj test file (in test/hello). Unit testing is built in, so you can run lein test to see the results. Then I refactored the Clojure code (creating the separate greet.clj file) and added a “service” in Clojure just for fun. The FW/1 app uses framework.ioclj – a extended version of DI/1 that uses cfmljure – to auto-discover the Clojure code (and the CFML code – you can mix’n’match) and wraps the Clojure controllers in framework.cljcontroller (to adapt to Clojure’s pure function calling convention, and to handle some FW/1-specific functionality). The CFML views are run as usual (and if you look in views/main/default.cfm you’ll see a call to the Clojure “service” via the bean factory: getBeanFactory().getBean("greeterService").greetings("Earthling!")).

I’m rather excited about this because it means we’ll have a way, at work, to further migrate our model code from CFML to Clojure, while maintaining “legacy” CFML code alongside, right there in the same FW/1 application!

This won’t be part of FW/1 3.0. Instead it will stay on the clojure branch until release 3.0 is out (develop will be merged to master for that), but it will be part of FW/1 3.5 which will be the next release. That way it can get some field testing in production as well as some polish and some documentation love. Stay tuned!

p.s. Right now cfmljure only runs on Railo. The CFML code itself could be made portable enough to run on ColdFusion but the real problem is interop with Java/Clojure: ColdFusion thinks 42 is a string and so you need to do a lot of string-to-number conversions to interact with Clojure through cfmljure. I haven’t used ColdFusion for over five years – just Railo – so I don’t have much incentive, but if you feel inclined to send a Pull Request with changes to make cfmljure ColdFusion-compatible…


(Mon, 26 Jan 2015 02:00:17 GMT)
[view article in new window]

FW/1 3.0 RC 1 Available

FW/1 3.0 has been in beta testing since August 2014 and lots of people are already running in production so I figured it was time to push out the first Release Candidate build.

The main focus of RC 1 has been bug fixes. Only a small number of functional enhancements have been added (notably getEnvVar() to retrieve the value of a system environment variable which can be useful during environment control processing). Some deprecated features have been removed:

  • getRC() and getRCValue() have been removed, along with the configuration flag that had been enabling them. They were a hasty addition at the end of the 2.5 cycle and they were a mistake – if you’re using them, you’re doing something wrong!
  • org.corfield.framework is no longer supported – use framework.one instead. It was always a questionable choice of file path for the framework and I’ve been tempted to change it several times. The 3.0 cycle deprecated it and moved the framework CFC to the /framework folder, where DI/1 has lived since the 2.5 cycle. This is probably a breaking change unless you’ve been using prerelease builds of 3.0 and have already eliminated the deprecation warnings!

In addition, AOP/1 is no longer bundled with FW/1. It’s not ready for primetime yet so I didn’t want to include it in the 3.0 release. It got a lot of work between Alpha 1 and Beta 1 but additional bugs and some hard problems came up in testing. It’s still available on the aop1 branch if you want to experiment with it (and help find and fix more bugs in it!).

As part of the preparation for RC 1, all of the documentation has been reviewed and updated and DI/1’s documentation is now part of the main documentation site. Big thanks go to Nando Breiter for bringing that across from the old wiki in the standalone DI/1 repo. Code contributors to RC 1 include: John Berquist, Ryan Guill, Cameron Childress. Thank you!

At this point, only bug fixes will be considered before FW/1 3.0 goes “gold” and given the long period of testing so far on Beta 1, that final release shouldn’t be too far away.

Oh, and if you go to FW/1’s page on RIAForge, you’ll see that 3.0 RC 1 is the default download now, instead of 2.5.


(Mon, 26 Jan 2015 02:00:17 GMT)
[view article in new window]


© The connection to the COLDFUSIONBLOGGERS's RSS feed has timed out - please try again later. We are sorry for any inconvenience this may have caused.