The Dopefly Tech Blog

Join Nathan Strutz as he shoots the breeze on techie geeky web dev stuff.

November
      1
2345678
9101112131415
16171819202122
23242526272829
30      

I'm going to NCDevCon!

posted under category: Life Events on August 13, 2014 at 8:13 am by MrNate

Did I mention I moved to Charleston, South Carolina? The move has kind of been the focus of my life for quite a while now, and it feels good to be coming down form the stress of packing up my whole family and moving them all the way across the nation. It's kind of a long story, but if you see me, feel free to ask.

And where might you see me?

Well one of the benefits of living on the Eastern Seaboard, and especially being in the Carolinas, is that Raleigh, where NCDevCon happens, is only an afternoon drive away! Yeah, I'm driving, and hopefully it will even be with some co-workers here from the airplane company.

I've heard a lot of great things about it NCDevCon. Dan and the group up there have been doing an awesome job for years now. I'm super excited, and it's only about a month away. See you there!

(2 comments)

Dopefly is on ColdFusion 11

posted under category: Servers on July 25, 2014 at 7:18 am by MrNate

The title says it. Thanks to that wonderful human being Steven Benjamin, I've got a much newer CF to play with. We're a couple versions back at work, still, so it's really nice for me to get actually new technology one in a while. Thank you Steven!

Update: New hosting company, making this the third one in a week (1-old host, 2-host that was lame, 3-new, working host).

(3 comments)

Craigslist as free cloud storage for your physical stuff

posted under category: General on February 16, 2014 at 8:11 pm by MrNate

I'm moving. This year, The Boeing Company is relocating my family to Charleston, SC, along with an untold number of my IT compatriots in an effort to put like minded people in the same "centers of excellence."

Moving across the country has its challenges, even if all your expenses are paid. There are things I don't want to move, but I don't want to lose forever. These are things like couches, tables, yard tools, patio furniture and other non-unique things. It's stuff that's replaceable but I would hate to buy again.

I had this idea about how Craigslist can be like a storage shed that travels with me wherever I go. I can sell a couch in Phoenix, move to Charleston and buy a replacement couch for the same price. It may not look exactly the same, but the couch's value is identical and it probably matches the Charleston area more than its Phoenix counterpart. If I want to get a better couch, I just have to pay the difference - an upgrade fee.

Brilliant!

Then, I began to realize this works even without moving across the country, and can also combat my hoarding tendencies.

Let's say you own a crib. It's nice and you don't want to lose it in case you have more children, but it's large and you don't really want to store an item as useless as baby bed when you don't have any babies. Put it in cloud storage; put it on craigslist. If you never need it again, you keep the money. If not, you spend the same money 3 years later to buy another crib that is just as nice.

This works especially well with electronics. Say you have a 1 year old notebook computer, but you won't need it for the next year, so put it in your cloud storage locker (yes, craigslist). Next year when you need it again, pay the exact same amount of money for a 1 year old laptop. Your first one is now 2 years old, but your cloud storage locker includes free upgrades while your items are in storage, so this one is a year newer.

Sweet, thanks cloud storage!

Stop holding on to your possessions. Sell them into the cloud and buy them back when you want them!

(1 comment)

Yes, I will be at CF.Objective() 2013

posted under category: Life Events on May 2, 2013 at 2:14 pm by MrNate

I will be at CF.Objective() and I hope I will see you there, too!

Here are the sessions that I have a good probability of attending. There are so many great ones, as usual, and most of these were hard decisions, so they are not set in stone. I'm just so excited to be going, I had to share!

Thursday
Writing Secure CFML with Pete Freitag I keep hearing great things about Pete's security talks, and in previous years it was either in a time slot against something else I was interested in, or that I was talking for.
Go Node Without Code with Brian Rinaldi Node interests me in the way that I believe server-side JS is the future, but I think Node isn't the way to go, so Brian's talk sounds interesting.
Railo's Top 10 Developer Features with Mark Drew Railo always interests me, even though I don't run it anywhere in production.
ORM, noSQL and Vietnam with Sean Corfield Just like Sean always does, he pushes us to the edge of cool development practices & technologies.
Mura 6 for Developers with Steve Withington Steve is a big Mura fan, I'm betting this will be awesome.

Friday
How WebKit Renders Web Pages with Elliott Sprehn Because Google is amazing so everything Elliott talks about is like magic.
Semantic Markup with HTML5 by Christian Ready Don't know how much I'll learn, but I do love me some hypertexts.
How Groovy & Grails made me a better CF developer with Scott Stroz I've played with Groovy a bit but am curious about how to get into more.
Who let a bum into the kitchen with Nathan Mische I've heard about these quick dev server setup tools, but am unsure how or why, so this will probably be over my head, which I like.
JavaScript Enterprise Workflows with Jeff Tapper This is something I honestly want to improve on and teach to my co-workers.

Saturday
Deep Dive: The ColdFusion 10 Scheduler with Rob Brooks-Bilson Something I plan to use soon, but mostly I just want to know more about it. I may skip out to Charlie's IIS8 session for the second half, not sure.
ContentBox with Luis Majano I'm interested to see what Luis has done here.
Git Workflows with Tim Cunningham I've done my homework but I always want to know more about how best to structure my Git setup. Not sure about this versus ElliottZ's second session. Or Brad Woods' Agile talk. Too many good ones in this slot!
Building Modern Web Apps with Adrian Moreno Sounds like a lot of things that I'm doing, I like to see how other people put it together.

Again, these are highly subject to change, and again, I'm excited!

(0 comments)

Yes, I will be at MAX (kind of)

posted under category: Life Events on May 1, 2013 at 12:09 pm by MrNate

If you are in the Adobe User Group Managers group, or the Adobe Community Professionals group (or any other related groups), then you know about "The Summit" we do every year. It's a free event Adobe does for us, we talk about the community, we talk about improving things, and then we have a party!

This year, the Summit is only a half day on the Sunday before MAX, and I will be there! I can't stick around for the conference, I don't have the time (but thanks to Megan for offering).

I'm driving my wife & kids across from Phoenix to L.A., on Sunday, for the Summit, then driving back on Monday. It's not so glamorous, but my kids haven't seen the ocean in a couple years.

So anyway, if you want to say "Hi" to me, you have like 6 hours. See you there!

(0 comments)

Monty Python Uses Correct 3-Factor Authentication

posted under category: General on January 10, 2013 at 12:27 pm by MrNate

Let's talk movies and security for a minute. Obviously Hollywood has proven they don't know computers, don't know hackers and don't know security - they know fun stories and special effects, but there have been more awful portrayals of computing than good ones.

Single-factor authentication has been deemed bad form on the internet, and easily bypassed in movies. We have all seen where someone knows the password or cuts off a thumb for the fingerprint scanner. That's simply not enough security. In real life, most passwords in use are plucked out of the most used passwords lists. One single password is easy to guess, and it's obvious because people get their accounts 'hacked' all the time. Single-factor authentication is simply not good enough.

Two-factor authentication is better, but not perfect. Again, there are movies where voice and eye prints are stolen, or a password is guessed and a fake thumbprint is used. In reality, two-factor authentication comes around in the form of web sites that send you a text message or email when you first log in from a new device and you have to enter the code from that separate message. It is a huge step forward because now it's something you know (password) and something you have (access to the email or phone). However, if one account has been taken, how can you ensure a hacker has not also obtained access to your email? It's not foolproof, but it's much closer.

Three factor authentication means "something you know" (password), "something you have" (email/phone/badge/fob), and "something you are" (finger/eye/hand print, face scan, etc). If anyone in any movie actually used this, the bad guys would win a whole lot less. Think about it. You can't just take a finger with you because you need their password. Guessing the password and hacking their email account still means you are missing the physical person. Stealing a badge leaves you lacking as well.

In Monty Python and the Holy Grail, at the Bridge of Death over the Gorge of Eternal Peril, the bridgekeeper asks three very important questions. Let's look at them:

1. What is your name? In authentication terms, he wants "something you are."

2. What is your quest? Could be interpreted as "something you have" though, to be specific, this is something you do not have.

3. What is your favorite color? What is the capital of Assyria? Without a doubt, "something you know."

When you think of computing and movies, Monty Python has all of Hollywood beat. You heard it here first, folks.

(2 comments)

An Agile year

posted under category: Software Quality on December 21, 2012 at 4:36 pm by MrNate

This year (2012, for posterity sake) my project at work took on an Agile methodology. Why? 2011 was a productive year, we made a lot of people happy with our software, but we had about three giant software releases for the whole year. These changes being so far between meant I could never know if what I was doing was going to work for everyone, and it also meant that, while the software was better tested, when there were bugs, they would have to work around them for months until we had the fix out.

Accelerating our release cycle to every two weeks meant that even if something was broken, it wouldn't stay broken for long. It also meant we had to be on top of our tasks a lot more, with a stronger focus on what we are doing today and what we will be doing tomorrow.

How did we do it? We initially decided on twice-weekly scrum meetings, just to say what we did and what we were doing next. This wasn't enough for the project manager, so we bumped it up to 4 times per week (the 5th day we had a regularly scheduled customer meeting). We began the year by listing all of our customers and all of their existing and upcoming tasks, including our own nit-list (like upgrade the database version, wash the dishes, support the new manufacturing system, etc). This is our backlog. We worked with our customers to set a priority on each item, then planned a sprint strategy, taking tasks with the highest priority and mixing them with the most pressing deadlines. Throughout the year we tracked new business and requests into an issues log, promoted items from our backlog into workable sprint items, and we got a lot of things done that way.

We did learn some lessons though. First, daily scrum meetings are great, but when our customer gets involved (and he loves to be involved), he tends to ask questions mid-update, slowing the scrum to a crawl, turning what should be a 5 minute meeting into a 45 minute meeting. We should really cut that out. Also we have the need for a system that will take a customer feedback and track it through an official change request to a prioritized backlog item, to an in-work task, to a bullet point on our release notes. There are things that almost do this, but usually require something custom for the customer feedback part at the very least, and so few of them have been 'blessed' for use within my company. Also we have some release systems that do not play well with Agile. One system that notifies the help desk about outages and work in the area takes an hour to fill out each time we do a production release. Another system we may be forced to use requires a gated software version validation process that will take a day's worth of paperwork for each release.

The worst downside though is that it sucks my energy. I have to be on task a lot more, which has meant less blogging and less tweeting. That's sad for me.

In summary, twenty-five software releases on our two-week sprint cycle, less stress on the development, more pressure on the project manager, and happier customers. All-in-all, it has been a successful experiment that I think we will continue with.

(0 comments)

Happy 10th Birthday CFMX

posted under category: ColdFusion on May 29, 2012 at 11:07 pm by MrNate

Ten years ago today, ColdFusion 6 was released.

Affectionately named CFMX, this sixth major release was a full rewrite out of a C++ core and into a Java EE core. ColdFusion would now be deployed on JRun for the next decade, the formerly current J2EE server, also from Allaire. Other major features were CFCs (ColdFusion Components), enabling an object-oriented programming style that has largely taken over in the CFML-writing community, also web services, native XML abilities, a new charting engine to replace the outdated C-based graphing engine, a new security system, and full support for internationalization and localization. This was a giant fundamental shift for the hundreds of thousands of ColdFusion applications in the wild, and was largely backward compatible.

Cheers to you, Macromedia employees, who pulled off an incredible technological jump, one decade ago, today. Thanks for indirectly employing me, all these years.

(0 comments)

Good news, Dopefly is back up (mostly)

posted under category: General on April 8, 2012 at 4:52 am by MrNate

Here's a note to say that Dopefly is back up. It's been about 3 weeks. Yeesh, awful, I know. Now I'm back up on MySQL, so please drop me a note if you see anything broken around here. A rewrite and redesign is in the works, and may be out sooner than you expect.

Sorry to everyone who missed the content, and especially to Mike Henke who linked my post about actually understanding closures in ColdFusion 10 from The ColdFusion Show.

Update: Looks like auto-incrementing PK columns didn't make the migration to MySQL from SQL Server, so I'm going to guess that comments won't work. This post took a lot more work to get published than it should have.

(0 comments)

A couple days of downtime

posted under category: Life Events on March 16, 2012 at 1:27 pm by MrNate

We're having a hosting change, so expect Dopefly to be down for a couple days while we get it sorted out. Also the azcfug.org site will be down and a few other sites we have hosted here. Thanks to my friend Steven Benjamin for finding us a new home!

(0 comments)

Socially Deprecated Features

posted under category: Software Quality on March 13, 2012 at 1:03 pm by MrNate

A discussion erupted recently, on one of the various discussion groups i subscribe to, about deprecated features that are not really deprecated but more like, not encouraged when thinking about future applications moving forward in development time.

It's hard to explain in a definition, so a case in point is needed.

The Application.cfm file is a ColdFusion construct as old as I can remember. It's not going away, but it is essentially feature complete.

More recently, ColdFusion has given us Application.cfc. The capabilities that gives us are far above and beyond what a had previously, and developers are encouraged to upgrade their applications or at least use Application.cfc in their next projects.

In this case, Application.cfm has been socially deprecated.

Here's another one: Fusebox. It's not a language feature so much as a framework, but if your application uses Fusebox, your program is socially deprecated. Now my friend John is bringing it back, but for the past 5 years, if you have started a new app with Fusebox, you used a socially deprecated framework and your "cool kids" card has been revoked.

using socially deprecated features and frameworks puts your application at risk for falling into technical debt. It's a slow roll down a long hill that will show in bugs that are never fixed, areas of the application that everyone avoids because they are afraid of causing errors, and eventually, lack of knowledgeable developers which will leave you stranded.

The way to avoid social deprecation is to keep engaged with the developer community. Read the blogs, engage in the discussion groups and visit the user groups.

Can you think of anything else that's socially deprecated? I can think of a bunch of things. CFUpdate. Prototype.js. Old stylized code like capitalizing tag and attribute names. Php. Internet Explorer. CFPod. The list goes on and on.

(6 comments)

Actually understanding closures in ColdFusion 10

posted under category: ColdFusion on March 11, 2012 at 10:25 pm by MrNate

There has been a lot of confusion about closures in ColdFusion 10, and I don't think anyone has done a good enough job explaining it. I'm going to try to make it easy.

First, understand that what we call the closures feature is actually a handful of related ideas: anonymous functions, named function expressions, functions as first-class citizens, nested functions, and yes, true closures.

An anonymous function is simply a function without a name. You define it inline, usually as an argument to a function call or as a function's return value. Eventually it may have a name, but at the time and scope of its creation it does not.

A named function expression is another way to define a function. Instead of the classic function operator syntax, function name() {}, you define it a lot like any other variable. Name equals value. var name = function() {};.

Functions as first-class citizens finally reinforces something we have had unofficially since ColdFusion 6.1, passing a function as an argument. The difference now is there is a function data type. This helps us formalize a functional programming paradigm in a previously object-oriented CFML.

Having nested functions means that you can define a function within another. At its most basic, you can categorize you methods, hiding them in another function, and make little helpers that you only call from that defining parent function. You can define them in the classic function operator syntax function name() {} or in the expressed var name = function() {};.

Here is where it gets fun.

That inner function has access to the var scope of the function it was defined from. This is what a closure is. It knows about its origin and it doesn't forget. It will always be tied to that same parent var scope.

Combining those ideas, you can define a function within another and pass it out (with or without assigning a variable name to it), then that outbound function can use its closure abilities to reference data in the method it came from. This is where much of the power of Javascript comes from, and provides a good start to doing functional programming.

The similarities between what CFML will do in CF10 and what Javascript does are incredible. I love the direction we have seen so far, and I am excited for the future of ColdFusion!

(2 comments)

Let's talk about ColdFusion 10 - AZCFUG Feb 22

posted under category: AZCFUG on February 21, 2012 at 5:59 pm by MrNate

Hey, here's a quick note to say we are going to talk about the newly released ColdFusion 10 Beta on Wednesday, February 22nd for this month's AZCFUG meeting. If you're in the Phoenix area, come hang out with us and learn about the new features.

We should take a vote to see what your favorite feature is. For me? There is so much stuff in this release, it's all over the map, I don't know that I can say any one single thing is my favorite. There are new language features, new tags, new functions, new technologies, a new platform, new capabilities - too much for me to pick just one.

Anyways, we'll be talking about it at the usual time and place, UAT's main auditorium at 6:30 PM. See you there!

(3 comments)

Negligence Season 2011/2012

posted under category: General on February 10, 2012 at 8:09 pm by MrNate

So I was doing really great late last year preparing my LESS CSS talk for Adobe MAX, then MAX hit, I finished my presentation on LESS, and I just collapsed. It felt pretty nice, I won't lie. Soon thereafter the holidays started, family activities picked up (did I mention I have 4 kids?). Worse and/or better yet, my fantastic company takes the Christmas through New Year week off and right at the end of that, I got sick with "the Skyrim". It was bad. I still have it, a cough here and there, a sleepless night when I forget my reality pills. I feel bad for all of you who have caught it along with me. It hurts sometimes, but it feels so good when I give in...

Let me recap a few things I should have already by now.

Adobe MAX 2011. This was a great conference. Adobe pulls in amazing speakers, authors and technologists. Ray and the unconference crew also had a fantastic lineup, and it was really, really great. The MAX bash this year was over the top and by far the best party I had been to in my entire life.

Then my boy, Jude, turned seven and we had a Mario party (pun intended), so then I had a new best party ever. Sorry Weezer. Sorry fancy candy pavillion.

Alanda, my wife, scored a Kindle Fire for Christmas. She loves it. While I know it's Android under the covers, she never would based on any evidence. It's Kindle through-and-through, and a great all-around device IMO.

I visited the new Boeing South Carolina 787 factory in late January. It's a beautiful place, and I would move my whole family into that building if I could. About the jet - I am sold on it for sure, and I will buy the first available one as soon as I find the $170m or so that it takes. I am still asking around about the employee discount.

Finally we come to today. I'm reading The Facts and Fallacies of Software Engineering. I count this as studying for one of my CF.Objective(). talks. Speaking of...

This May Is CF.Objective()! I have two sessions to call my own - "Making Software Better" and "LESS CSS, Meet ColdFusion." I'll talk more about these later, but for now this has gone on long enough. Here's to a successful blogging career in 2012!

(0 comments)

Adobe and Homeschool (free and discounted software)

posted under category: General on October 17, 2011 at 12:39 pm by MrNate

I'm not related to Adobe, but I do co-manage an Adobe software users group for ColdFusion. Adobe has been really good to the group, giving us shirts and pens (swag items), plus two huge software giveaways every year, and lots of other benefits for my co-manager and I. That's my disclaimer. I like Adobe because they like me, and because their software is great.

Another thing I do is school my children at home. Well, who am I kidding, my amazing wife really does all of the hard work! There are a lot of up-sides and down-sides to homeschooling, same as any schooling option, but it's just a choice we made and are taking it year-by-year with each of our kids.

With all that said, I want to highlight a couple things that I found on Adobe.com for home schooling families.

According to Adobe's educational purchasing eligibility page, Adobe's education discounts apply to homeschooled students and their teachers. To prove that you are a valid home school family, about 2/3 down that same page lists the articles you can send Adobe as proof. We are a member of a couple homeschool associations, so I scanned my AFHE ID card.

Now what can you get with it?

Adobe.com has a great site for introducing their software in education, Adobe Education. Check it out. From there, I discovered the educational price list. You can see it for yourself that the price differences vary. I would say that most of the software is around 60% off, but some is 75% and some only 25%. A few of them are even free!

Those free packages point to the Free RIA Tools site. You can get ColdFusion 9, ColdFusion Builder 2 and Flash Builder 4.5 for free, just because you homeschool your kids! I made my request last Saturday and was given a serial number today (2 days later).

That's a win, fellow home-schooling families. Very expensive software, yours free.

(1 comment)

Write LESS CSS - Presentation Files Available

posted under category: CSS on October 8, 2011 at 12:21 am by MrNate

Last Wednesday, I had the great pleasure of showing off LESS CSS to the ColdFusion community at Adobe MAX. I had a good crowd for the unconference area, I would say maybe 40 people. Honestly, that unconference tent was too small for this group, and the area was noisy, but that's all part of the adventure. Anyway, during the presentation I promised I would put all the presentation demo files up on GitHub, so here we go, Write LESS CSS - Presentation Material.

I'll try to make an official something-or-other review of MAX 2011 in a few days. Stay tuned. Thanks!

(1 comment)

LESS in Java: Running LESS CSS on the JVM

posted under category: CSS on September 13, 2011 at 10:23 pm by MrNate

Foreword: I am giving a LESS CSS talk at the Adobe MAX 2011 ColdFusion Unconference. Blogging about LESS is just one of my stepping stones to presenting. If you want the really good stuff, you should come to my session!


I recently blogged about LESS ports to other platforms, and I thought about mentioning Java there, but this is not a port so much as just reusing the native implementation. Let me break it down like this: Yes, LESS runs on the Java Virtual Machine. It's not even that hard. How you may ask? Like this...

Mozilla makes browsers and Javascript engines. One of their Javascript engines is called Rhino, a JSR 223 compliant Javascript engine for the JVM. You can run any Javascript in Rhino, except that there is no browser, no window, no document and no DOM (I know, it sounds like a dream come true). The conflict comes where LESS.js relies on browser constructs to get its job of compiling and preprocessing LESS CSS into plain CSS, so we have to defeat that.

Lucky for us, we live in the future, and along with our flying cars, we also have Google and GitHub, which pointed me to Asual's project, lesscss-engine. Asual is a software company in Bulgaria, and their GitHub projects are run by Rostislav Hristov.

The easiest method of setting up Asual's solution is to download his browser.js and engine.js, then from Rhino, within Java, include them in the order of browser.js, less.js, then engine.js - the order is important. I did this in an Ant build file like this:

<script language="JavaScript" src="browser.js" />
<script language="JavaScript" src="less.js" />
<script language="JavaScript" src="engine.js" />


From there it's just a matter of calling the engine methods to load LESS CSS code, convert it to CSS and output to a file. Here is how I did it, this is my code that is directly after the script loading:

<script language="JavaScript"><![CDATA[
var inputFile = readFile('input.less');
var css = compileString(inputFile);
writeFile('output.css', css);

function writeFile(filename, content) {
var fstream = new java.io.FileWriter(filename);
var out = new java.io.BufferedWriter(fstream);
out.write(content);
out.close();
}
]]></script>

The engine.js has a number of good helper methods (readFile, writeFile, compileString, etc.), I did it this way in case there were more LESS files to compile and I wanted to add it to the same css output string. When you do this, make sure you have the Rhino file, js.jar, in your Ant classpath. In Eclipse I loaded the external jar by adding it to the 'Run as...' dialog when you right-click on your build.xml file. Also make sure you are on Java 1.6+ to support JSR 223 Java Scripting.

You aren't limited to compiling LESS when you do this, you know. You can actually do anything you want in Javascript from right inside your Ant build file. It's fantastic.

There are other methods of accomplishing the same goal. Erwan Loisant did something similar by altering the core LESS.js files (including the proper pull request). While he calls his release LESS for Rhino, it's really more of LESS for Ant. Even still, it works great as a rhino-javascript-ant all-in-one solution. I especially like his use of an Ant macrodef to create a <lessjs> tag. His examples work straight across from his blog, perfectly.


Not content to rest on my laurels, I went back to the Asual's LESS Engine project to see if I could make a jar and see what I could do with it. I cloned the GitHub repository locally over http, then I added it as a project to Eclipse. I had to install Maven, which was simple with Eclipse's software installer, and running it is almost exactly like running an Ant build. When you build the project you get a few jars in the target/ folder. I recommend using the lesscss-engine-1.1.4-jar-with-dependencies.jar file, as it's the most likely to work anywhere you need it.

When I checked the LessEngine class, I noticed a main method that was added recently, which means we can call it from the command line, like so:

java -jar lesscss-engine-1.1.4-jar-with-dependencies.jar input.less output.css


Incidentally, if Asual (or someone) were to add a -w command line switch to watch the input file for changes, this would essentially make it identical to the Ruby LESS compiler, lessc. Except, of course, it would be much faster. Just a thought.

So we can call it from the command line. The next, most obvious step, is to put this in an Ant build. This was so simple. Here is what I did:

<java jar="lesscss-engine-1.1.4-jar-with-dependencies.jar" fork="true" dir="${basedir}">
<arg value="input.less" />
<arg value="output.css" />
</java>


Copy and paste that, with the jar, and it will all work as advertised.


To summarize, You can compile LESS on Java. It's fun and easy to do!

If you want to get all the files, or want to see it in action, I'm doing this talk September 28, 2011 at the AZCFUG in Tempe, AZ, then at Adobe Max on October 5th, then again October 12th at the Tucson CFUG. Look forward to more of this kind of chatter here on this blog.

(4 comments)

The Definitive Recording of HPQaTD

posted under category: Software Quality on September 9, 2011 at 2:28 pm by MrNate

Last July I gave my presentation, Holistic Program Quality and Technical Debt to the Denver CFUG, for my friend John Blayter. This is cool and stuff, but the truly impressive thing is that the audio and video is consistent all the way through, and the awful jokes were even relatively funny.

If you haven't seen it, this is the definitive version. This is the one to sit through.

Watch Holistic Program Quality and Technical Debt

Thanks, John, for getting it up there, even though I may have insulted your programming around the 14:30 mark. Yeah, I apologized, then pointed out exactly where I threw you under the bus. That just happened.

Update: You can hear my awesome kids screaming their heads off around 42:00. Fantastic.

(0 comments)

LESS Unofficial Ports

posted under category: CSS on September 9, 2011 at 12:13 am by MrNate

Something I enjoy about LESS is how its ecosystem is a microcosm of a lot of other more well known software ecosystems. There are competitors, contributors, and even ports to other languages. I'm going to talk about those ports today.

Aside from the original Ruby release and the subsequent Javascript browser/Node version which were both written by the creator, Alexis Sellier, there are these other ports.

First, there is LESSPHP. You'll never guess what language that ports to... QBasic! Nah just kidding. There is an obvious benefit to running LESS in PHP, mostly for the fact that your PHP application can now compile the LESS files at the server when they are requested. The JavaScript compiler is great, but doesn't work withthe oldest browsers, and some might take a second glance at having to download another .js file and compiling CSS in the browser. Running PHPLESS will let you get away from the need to eiher preprocess or postprocess your LESS source code. Also, you can invoke it from the command line, and it works just like the Ruby compiler but you only need PHP instead of Ruby.

The second unofficial port is DOTLESS, a port to... DOS batch files! No, just kidding again. Running a native LESS compiler in the CLR is fantastic if you are on Windows or doing .NET development. DOTLESS can run as a filter in IIS that intercepts all .less file requests and translates them on the fly. That also gives way for you to call it programmatically like through a build process, or from the command line in an EXE file, just like the Ruby or PHP command line programs.

Which one of these is better completely depends on what kind of development you do and where you do it. Both projects have their files hosted on GitHub, and they are both very active. It's just good to know there are options.

(0 comments)

The Ease of Moving to LESS

posted under category: CSS on September 6, 2011 at 10:21 pm by MrNate

You are not as far from using LESS CSS as you may think. What does it take to switch from plain CSS to LESS? It's 2 steps.

  1. Rename your .css file to a .less file
  2. Include less.js

That's it! From there, you can start to add some variables and nest your selectors, or get more advanced with mixins and color functions. Oh, and also my favorite thing in the world, the // single line comment!

There are a few cases where your stylesheet won't convert perfectly. I've noticed just a few. They are:
  • Font sizes with a slash for a combined font-size / line-height, LESS tends to divide; the fix is to escape them, surround some or all of it with ~"tilde quotes"
  • Missing semicolons and sloppy CSS won't compile in LESS; it won't validate either, so you should clean it up anyway
  • IE-specific transformation filters and similar unofficial fringe CSS rules, escape the entire thing with the tilde quotes

(3 comments)
Nathan is a co-manager for the Phoenix CFUG (AZCFUG) and a ColdFusion application developer for an aerospace company in the Phoenix East valley (Mesa). Aside from doing ColdFusion applications, Nathan enjoys playing with servers, hacking with a variety of other programming languages and managing his home theater PC. Nathan got his programming start writing batch files in DOS.
This blog is also available as an RSS 2.0 feed. Click your heels together and click here to email Nathan.