We're seeking a ColdFusion Developer in Sydney

Come and join our innovative team in Pyrmont, Sydney. You'd be working with an experienced and talented team developing cutting edge functionality for our RedBalloon and GoDo websites and API projects.

For full details of the position and how to apply please visit Working at RedBalloon.

Below is a breakdown of responsibilites and attributes we're after.

Major Responsibility Areas & Deliverables:

  • Accountability for all customer and internal sites ensuring they are stable and error free from a development perspective and on call availability if required.
  • Reviewing project scope documentation and wireframes from the business to develop technical specification, e.g. web design implementation, application build, database structure, new technology implementation.
  • Project planning, phase documentation and establishment of key milestones. Timeline development and deadline establishment with the IT GM including testing phases.
  • Develop the RedBalloon Internet and Intranet sites to provide a positive user experience of the brand and align all development with the RedBalloon coding standards.
  • Conduct unit testing, system testing, security testing, cross platform testing and user testing.
  • Creating user training guides, technical documentation, diagrams, flow charts and process maps.
  • Performing site releases on schedule with minimum impact to the user experience and developing release recovery strategy.
  • Monitoring and managing site errors with required actions. Prioritisation and quick resolution of critical and major bugs.
  • Analysing incoming traffic, SEO/SEM needs and making recommendations for development.
  • Providing support for marketing campaigns where increase in server load support or time critical release is required.
  • Providing reporting for IT GM for weekly review meetings.
  • Continuous communication with project stakeholders to deliver progress updates.
  • Proactively researching and managing integration of innovative new technologies in line with company roadmap. Staying aware of usability and humanisation best practice.

Qualifications & Attributes

  • Advanced computer skills
  • Strategic and innovative mindset
  • Initiative
  • Flexibility of work patterns

Knowledge & Experience

  • Mandatory
    • Bachelors degree in Computer Science or equivalent technology discipline
    • Min. 3 years commercial ColdFusion development experience
    • Expertise with ColdFusion Components
    • Expertise with Cascading Style Sheets, XHTML, JavaScript, Ajax
    • Experience with Microsoft SQL Server 2000
    • Experience with source code version control systems - SVN or CVS
    • Experience with XML and Web Services
  • Desirable experience
    • Experience with Adobe Flex/Flash
    • Experience with Apache
    • Experience with Eclipse
    • Multi-instance high availability JRUN / ColdFusion administration skills
    • Windows 2003 Server administration skills
    • Microsoft SQL Server 2000 DBA skills

Visit Working at RedBalloon for more info. We look forward to hearing from you.

Easily kill remote desktop sessions to your server

This is more of a future reference post, but if you have the same problem we sometimes face with lots of developers logging into the same remote win2003 server, where both terminal sessions are taken. And sometimes both are taken by the developer who's just gone on holidays! So then you either have to drag you butt down to the server room to kill sessions from the terminal or even worse ring up the data centre for a hosted box.

Well fret no more! you can run the following commands easily to kill any remote sessions to a box from a winXP (and vista i presume?) or parallels for the macl33t

1: Open windows command prompt

2: to view current connections: qwinsta /server:myserver

This results in an output of

SESSIONNAME USERNAME ID STATE TYPE DEVICE
console administrator 0 Active wdcon
rdp-tcp 65536 Listen rdpwd
rdp-tcp#51 administrator 2 Active rdpwd

3: kill a session by: rwinsta [sessionID] /server:myserver

i.e. rwinsta 2 /server:myserver

Unobtrusive spam filter on form

I'm not sure if this is an original concept or just a well known concept in the web-development community however after a couple of months of implementing it on a side project I am very excited by the results (NO SPAM and yes there was traffic :P).

I am very much against anything that makes the user do more work or think more, as from personal experience users are prone to stuffing things up or giving up if things get too hard. So when i implemented the following solution i have to say I think it reached a balance of tricking spam deadbeats and allowing users to communicate.

its very simple.. nothing special just expecting most spammers to modify the value of the "email" field.

<form>
<input name="UserContact" id="UserContactAddress" type="text" />
<input name="email" id="email" type="hidden" value="Real_Person" />
<input name="submitForm" id="submitForm" type="submit" value="Contact Us"/>

and then in the form action all we do is check that email is still what we made it. (you would probably param form.email, man its scary sharing code :S )

<cfif structkeyexist(form,'submitForm')>
<cfif form.email eq 'Real_Person'>
/do your thing
<cfelse>
/do what you like to the spammers.......
</cfif>
</cfif>
This is just a simple mind game with the spammers and would probably not implement it on anything at a commercial level, however for blogs and general places the turkish spam alliance feel obliged to attack (sorry they love our wikki) it appears to be a simple yet unobtrusive solution.

I would be interested to hear negative cases to it and a reference if this was blogged somewhere else..

Send Growl notifications from your ColdFusion App

Ok, so i realised there are many coldFusion developers on macs now and if you are like us then you love getting notifications of everything via Growl!

So we thought how cool would it be to be able to send growl notifications from any CF app, like sending the mac-using CEO a growl notification each hour with a sales summary, etc...

We also noticed there were a few implementations already (in ruby, php, python, java) but none in our favourite language (and the java implementation was bloated with a growl listener client included... where as we want a fast coldFusion native easily modifiable sending solution only + you don't need to do no funky installations)

Ok, so after a long night, using the other examples as reference, i've got a working alpha prototype that allows you to setup as easily as:

application.objGrowl = createObject('component','growl').init(appName='cfGrowl:My App');

then add some available notification types:

application.objGrowl.addNotification(notification='Company Sales',enabled=true);
application.objGrowl.addNotification(notification='Site Error',enabled=true);

then add client hosts to receive the notifications:

application.objGrowl.addHost(host='192.168.0.1',password='1s2v3');
application.objGrowl.addHost(host='192.168.0.2',password='1@23$45');

then broadcast a new notification:

application.objGrowl.sendNotification(
   notificationType='Company Sales',
   title='Website Store Hourly Sales Report',
   message='5 orders, 10 products, $3000 revenue',
   priority = 0,
   sticky = false);

so the code is attached, and we've only tried it currently with static IPs in an intranet environment, so it may need tweaking to work with firewalls, not entirely sure about that, or you could target with port forwarding a single mac machine that using growl network options can relay broadcast to all local machines... something to look at in future anyway.

you need to make sure you've got "listen for incoming notifications" and "allow remote application registration" checked in the network options tab in system preferences, and enter a server password, that you then enter when you add your IP and password as a new host.

also i read that snarl client for PC plans on being able to consume growl notifications in near future so this could soon be an even cooler cross platform solution

i'll make a riaforge project out of this if people show interest to further develop features (like writing hosts out to an XML file so they aren't lost on application restart), otherwise just our office will have the coolest coldfusion app notifications in the world ;)

Apache and the ColdFusion Administrator

We have been doing a bit on an audit of things over the last few days and we came across something that shocked us. Somewhere between CF and Apache, our ColdFusion administrator was accessible on our servers.

Now we all know that you should never have your CF admin pages visible to the general internet, you should always have them tucked away. We did! Or should I say, we thought we did. Turns out that you could still browse to the right URL and CF would render the admin for you.

There were no mappings or aliases, Apache would just see the .cfm pass the request to CF and it would just render it. Bit of a pain but nothing a quick change to the apache config wouldn't fix.

<Location "/CFIDE/Administrator)>
Order Allow,Deny
Deny from all
AllowOverride None
</Location>
That should to it right? we no, actually... it doesn't. It turns out that our silly case insensitive OS was still letting it through. A bit of hunting and a bit of playing with RegEx brought us this little gem.

<LocationMatch "((?i)/cfide/administrator)>
Order Allow,Deny
Deny from all
AllowOverride None
</LocationMatch>
It looks very similar to the first one except for the regular expression that tells apache to ignore case and match this string.

Now, our apache server returns a nice big fat...

Forbidden

You don't have permission to access /cfide/administrator on this server.

now doesn't that look better?

Cross Site Scripting (XSS) in ColdFusion

Firstly let me say that this is not definitive, this will not ensure that your site is safe. There may be more that you need to do. We were in need of a simple way to make sure that users were not using our "email a friend" forms to send nasty stuff around... So, using the stripHTML() udf from cflib we managed to get rid of all of the nasties from form fields as they hit the site just by looping over the form scope

<cfscript>
// clean up all the form fields for cross site scripting for(key in form)
{
form[key] = stripHTML(form[key]);   
}
</cfscript>
if you wanted to be a little nicer and allow users to have HTML formating tags (like bold) in their forms, then you can use safeText() in a similar manner to get rid of nasty tags. This is a little slower to run however due to all the looping and stuff.

Of course, you really should do this for the URL scope and perhaps even the cookie scope.

Luhn algorithm or Mod10 check

After searching the internet for a whole 10 minutes I found loads of examples of code that will check to see if somthing passes a 'mod10' check but none that will actualy create the check digit in the first place.

So after a bit of research, here it is. A very simple way to generate a mod10 check digit and append it to the end of a number...

<cfscript>
function createMod10(number)
{
   // this is an implementation of the Luhn algorithm or Luhn formula,    // also known as the "modulus 10" or "mod 10" algorithm,    // it calculates the check digit for a number and appends it to the end of the orignal string
   // this function generates the check digit and appends it to the orignal string
var nDigits = Len(arguments.number);
var sum = 0;
   var i=0;
var digit = "";
var checkdigit = 0;
for (i=0; i LT nDigits; i=i+1)
{
digit = Mid(arguments.number, nDigits-i, 1);
      if(NOT (i MOD 2))
      {
         digit = digit+digit;
         // check to see if we should add          if(len(digit) gt 1)
         {
            digit = left(digit,1) + right(digit,1);
         }
      }
      checkdigit = checkdigit + digit;
}
// divid by 10 checkdigit = checkdigit mod 10;
if(checkDigit neq 0) checkDigit = 10 - checkDigit;
return arguments.number & checkdigit;
}

</cfscript>

UPDATE: there was a slight mistake in the first version - this is better

CFCron goes opensource

Continuing along our plans to give back to the ColdFusion community we would like to announce the release of CFCron.

What is it? CFCron is a task scheduler based around the same concepts as the unix Cron, it allows you to easily maintain loads of different scheduled tasks without having loads of scheduled tasks in ColdFusion - all you need is just one, the cfcron task. CFCron will handle the rest.

Have a look at our CFCron project page for a demo and to grab the code. If you have any comments, feel free to stick em here or jump into our forums.

Building a Security System With Active Directory and Coldfusion

We have 2 secure admin systems and an active directory that we currently store user-data in (and is the one that is maintained). What we would like to do is to consolidate all this user information to the active directory due to the sheer overhead of maintaining three user tables.

So I have typed out a login script and thought i would share..

Our issue is that our admin system still relies on the information in these tables in the two separate systems so this is what we would like to happen

<try>
//if form submited call this function checkuserexists(username, password)
//function <cfldap action="query"
server="ourdomain.net"
name="quser"
start="DC=ourdomain,DC=net"
      filter="(&(objectclass=user)(mail=#form.arguments#@ourdomain.net))"
username="ourdomain\#arguments.username#"
password="#arguments.password#"
attributes = "give me all of them">


checkdb(quser)
if checkdb returns no user
//new user add them adduser(quser)

load session struct from db


success!
<cfcatch type="any">
bad login
</cfcatch>
</try>

Sorry for the mish-mash of pseudo and cf code but I guess the thought i am trying to get out is I wonder if there is a better way than try/catch. I have tried but it just gives me a big fat "inappropriate authentication".

Reference

BlogCFC and Google Maps Code And Explanation

Well I wrapped up the code on the way in this morning and this has been my first chance to throw it up with an explanation of what it does.

The DB sql is one table that i exported out of Microsoft SQL I have not tested this out in MYSQL but if someone would like me to explain just send feedback and I will type it up.

Things to know...

  • There are four functions to add at the bottom blog.cfc
  • Two admin pages that you can basically just throw up
  • Two tags and a slight modification to the admin layout (justs adds "locations" to the menu)
  • And the bit I'm not happy with the implementation on index.cfm which displays the map/s (sooo Sorry Ray) and if any one has a better way to do it i would love to know how to improve it (before my lead developer comes back from holidays would be tops!)
  • You need to get an api key and add it to the applications scope (application.cfm) you get a Google Map Api key here for your Domain (ideally this would be in the blog.ini file in the future
  • and the other thing.. there is no edit at the moment you can delete them though
Other than that just make sure you init your blog before adding any maps and you should be set to go.

Something to note, the two tag files are complete open-source as Lucas has released them before feel free to use and this is just one form of implementation with them.

If anyone has any worries let me know.

The code is the download button below.

More Entries