cftopper.com

eTag()

eTags are cool - read more about them here - eTags.

eTag() is a handy function that you can use to perform client-side programmable caching of your coldfusion pages.

To get the benefit just call <cfset eTag( "My Page" )> and the next time a user visits this page, they will get a 403 not modified response and execution will stop here.

Getting advanced... add in the date..

<cfset eTag( "#pageName#_#lastUpdatedDate#" )>

... this will regenerate the page IF the lastUpdatedDate has changed.

We use this extensively in Teamwork Project Manager to reserve dynamic pages almost instantly. It also reduces server load because processing stops.

Here is the code:

<!--- eTag will return a 304 not modified response if possible --->
<cffunction name="eTag" output="no">
    <cfargument name="eTag" type="string" required="yes">
    <cfargument name="useHash" type="boolean" required="no" default="yes">
   
    <cfif useHash>
        <cfset ARGUMENTS.eTag = Hash( ARGUMENTS.eTag )>
    </cfif>
   
    <cfheader name="ETag" value="""#ARGUMENTS.eTag#""">

    <cfif ( StructKeyExists( CGI, 'HTTP_IF_NONE_MATCH' ) and CGI.HTTP_IF_NONE_MATCH contains ARGUMENTS.eTag )>
        <cfcontent reset="yes">
        <!--- nothing has changed, return nothing --->
        <cfheader statuscode="304" statustext="Not Modified">           
        <cfabort>
    </cfif>
   
</cffunction>
Tags: ColdFusion | Tips | Tools

Form Wizard launched

Yesterday I released version 1.1 of Form Wizard for ColdFusion.

It will save your hours and hours of tedious work designing forms for your website, and then doing the javascript validation, database store, email notifications etc.

And the look and feel can be extended to integrate with any website design.


Form Wizard for ColdFusion


It's the shanizzle.
Tags: My Work | Tools | WebDev

Backup Software Recommendations

I'm going to tell you a secret, but don't tell anyone. Shhhhsss.
About 3 weeks ago on a quiet Tuesday evening I installed the latest version of subversion client TortoiseSVN on one of our website hosting servers in Dublin - I had to reboot the server after the install. This is when it all went wrong...

I usually wait maybe 2 minutes and the server is backup serving a plethora of client websites and a few small web apps. I waited and waited, repeatedly pinging the server, searching for the first sign of life.

The server was apparently lifeless. Nada. Nothing. Zip. "No reply from server"...

We called our hosting company. No I lied ... we didn't. We actually had to use their brutal support chat program and bludgeon English into a pigeon-English speaking Polish guy to request that the server be manually restarted.

I guessed that I had hit the "shutdown" option instead of the "restart" option and that the technicians would reboot the server in a jiffy and that all would be well.. so I tottered off home.

Some time later I got a frantic phone call from Dan informing me that the technicians said the server's hard drive was fried. I turned visibly white and raced back to the office for damage assessment.

Hours later, the technicians in Dublin had managed to salvage some data by plugging the hard drive into another PC and running a Linux program to do a sector by sector copy where possible. We recovered a lot of data but we had still lost a fair amount. Luckily we had most, but not all, of the website databases backed up to a PC in my office thanks to Navicat and scheduled tasks.

The technicians reinstalled a blank Windows 2003 server installation along with the data they managed to recover and Dan and I spent the entire night working feverishly to get all the websites and applications working before our clients got to work and started screaming.

In the end, the only thing we lost was a very small website. We recovered the page content from Google page cache (isn't Google great) and then gave the client a new, much better website for free to make up for the down time which was 1 day while Dan knocked the new site out.

And here's my point: disasters will happen, so plan for them.

Our New Backup Plan


We have since installed Carbonite Backup on all our servers. Everywhere. It's an absolutely bargain for only $30 a year per server for unlimited data. I thought there must be a catch at first, but no, it's a steal, easy-to-setup and works great.

That's the files sorted. But what about the databases. Well, we use MySQL on all our servers (if you use anything else you are a stupid Microsoft whore or Oracle slut, sorry) and it's difficult to restore MySQL from just the raw data files. I wanted something that could backup an entire server of MySQL databases automatically including new databases without any additional configuration - the reason we lost that one website was because each website had to be manually configured with our old database backup system and we had missed a few.

Eventually, after a serous amount of poking about ye olde internet, I found exactly what I was looking for in Auto Backup for MySQL from Swordsky SoftWare. This is the only program I could find that would run as a service and backup multiple entire servers reliably without needing additional configuration as each new website is added.

It also has a thoughtful array of options such as automatic removal of old backups after so-many days - something that I used to have to do manually in the past. The SwordSky team, whoever they are, have done a fantastic job here and I encourage you to give it a go. It's a bargain at only $100 or so too.

So there you have it, two cheap, easy-to-setup products that may one day save your ass.
Tags: Tips | Tools | WebDev

We have launched!

We have finally launched!!

And what a wild ride it has been getting everything ready.

Check out Teamwork Project Manager at www.teamworkpm.net

The Website - Final Days

About a 5 days ago we had this marketing website almost complete. We stood back and looked at what we had created... and we decided... it sucked. Against the pressure of the looming launch date chiseled in stone on the preview website, we started again. We threw away the old website and said to our designer, Adam, "Hey Buddy, um... we don't like the site. Can you cook us up something prettier?".

Lo and behold, he disappeared off the face of the Earth for 2 days and returned with the new website design. And we saw that it was good. We worked round the clock slicing and dicing, XHTMLizing and CSSing, content-managing, tweaking and testing.

A few hours behind the intended launch time, we made the critial change to the IIS web server and set the new site live, flying open the doors allowing all to sign up for the shiny new kid on the block - Teamwork Project Manager.

Here we are in my office seconds after putting the website live. We are tired, we are hungry, we have sore backs and aching asses... but we're happy. That's me, Topper, on the left and Dan on the right.
We are holding the camera in our out-stretched hands (attempt number 10 to take a photo with both of us in the frame. The bad quality reflects that this was taken on my trusty K750i camera phone.)



We still have a lot to work to do on this website of course but we are proud of what we have created.

Teamwork Project Manager - Final Days

We started making some important changes with just days left to launch.

For example, our testing had revealed that user were getting confused between project view and top-level/dashboard view. They would just blink wildly and we've have to explain that you have to click-into a project. Also in project view they wondered where all the other projects had gone.

We fixed this by redesigning the navigation system into two bands of tabs in stead of just one with and extra "Project View" tab at the top level to make it obvious that the user was now indeed, in project view. It's so much more intuitive this way.

What else - oh yes, Dan whinged on about the need for starring of projects for so long that I finally relented. I didn't plan on getting this done for launch but I'm very glad I did now. Now, when you are members of a whole host of projects and the dashboard is getting a little busy, the user can switch to custom view where he will only see the projects he has starred.

Also when there are loads of active projects such as here at Digital Crew, we now only list the projects that have been active in the last 14 days on the sidebar. Other projects can then be shown by clicking "All projects". It looks so simple but we had a good 10 minute discussion over the best way to present this to the user. We considered tabs for "Recent Projects" and "All Projects"  but in the end, I think the way we have it now is much better.

TeamworkPM is launched at last and Dan is a happy little camper

Après Launch

This morning I woke up and eagerly turned on the computer, anxious to see if we got any sign-ups or feedback. I was delighted to see a very positive email - " I have started playing with the app and am incredibly impressed with the ui and the streamlined approach to project management.". He then asked us to provide a roadmap and listed a few more features he would love to see.

This type of feedback just hours after launch is great motivation for me. I'm going to get busy cooking up the extra feature this guy wants and serve it hot! Stay tuned.

TeamworkPM Launched - Topper has his legs up! A job well done.

PS. I will be adding a roadmap page to the Teamwork site before the end of the day,
PSS. I just added a "Chat Now" link in the footer of this website so feel free to get in touch.

Check out Teamwork Project Manager at www.teamworkpm.net

Smart Maintenance Message

If you need to perform an upgrade on your ColdFusion website and it requires keep users away for a little while so they don't see error messages, then you can use the following ColdFusion file to show them an "upgrading..." message.

Your users will see this message but your team can continue accessing the website by entering an access code on the URL like so www.testsite.com/?accesscode=byPass

The access code can easily be changed in the file and the template can easily be turned off by changing 1 to 0 at the start of the file.

Display this message when doing an upgrade.

Tags: Tips | Tools

Top 5 Must-Dos on new Windows PC

A buddy of mine wants me to come over and help set-up his newly reinstalled XP laptop. But my life is hectic at the moment. so for-now I've put this list of the top 5 must-dos for a new Windows PC.

As sent to my buddy in an email just moments ago.
Who knows, it might help somebody else.



Yo Bud,

This is just off the top of my head.
The 2 things you really need are to update windows and to install an anti-virus.

  1. Update Windows


    (This is Mircosoft fixing all the security flaws and providing a more reliable and easier-to-use system.)

    To perform the update, just visit
    http://www.update.microsoft.com/

    The site should guide you through the process. It will ask you to validate your software and you may have to say YES to install something called an "activeX control".

    Once it starts - It will take a while to download but you can be using the computer away in the meantime installing other shit.

    When it finishes a round of installs, it sometimes asks you to reboot.

    Once it has rebooted, return to that website and check for updates again... keep at it until there is nothing left to upgrade.

    Note: with these updates, your version Internet Explorer will be be updated to version 7 at some point. Just say yes when prompted, IE7 is a good thing.

      
  2. Install good and free antivirus software


    (You can complete this step even while step 1 is at work downloading updates)

    First-things-first, we'll download an excellent and completely free anti-virus solution. The best available (IMHO) is AVG Free Edition.

    It's available at:
    http://free.grisoft.com/

    Be careful not to get the paid-for version. Get the free Basic Protection version, it is all you need. Download it but don't install it yet; we first need to remove the crap pay-later-ware antivirus off your computer.

    Completely uninstall all the crap or pre-installed anti-virus on your computer.
    So if you have MacAfee or Norton, completely uninstall anything that bearing their name. You will probably have to reboot.

    Now install AVG Free Edition. Just run the program and say yes to everything.

    Happy days, we now have good free virus protection.

      
  3. Install good and free Anti-Spyware


    Next I recommend you get SpyBot - Search and Destroy.
    (This is excellent free software that saves you from yourself and keeps shitty software away from your pc - it's a must have really.)

    The website for this software is awful and confusing so here is a direct link to download the software:

    http://www.safer-networking.org/en/mirrors/index.html

    Click one of the download buttons under the heading "Hosted by Safer-Networking" (The other download screens are confusing).

    Install this with all options.

    Once it's installed it will ask you if you want to download all updates - this is important - say YES.

    Excellent, we not have good anti-spyware.

    Once every now and then if you've been doing a lot of downloading, you may want to download the run this program, download any updates and scan your computer. This will remove or block any shitty software that may be slowing your computer down.

      
  4. OK, you need good and free Office Software.


    (If you have Office 2003, that's great, skip this step.)
    There is an free office suite, that is (IMHO), 90% as good as Microsoft office.

    It's call OpenOffice and is available at:
    http://www.openoffice.org/

    To download. click the is a big-fuck-off link (in green in case you missed it)

    On the next page, again, click "Download Openoffice". Then click "Windows"... on the next screen click "continue to download" and it should start.

    Install this when it has downloaded.

    You now have a full office suite.
      


  5. Some Porn


    Next essential link, some good Porn, go to:

    Go to www.t*******lpost.com
    ;p

    (I'll replace this paragraph with a good suggestion, if you have any)

Sin é buddy - Enjoy.


If you have any suggestions/software to add to the list, let me know with the comments below.
Tags: Online | Tips | Tools

Password Generator

If you ever need a quick random password, just visit:

Aside: I knocked this up in 30 seconds using dcRandomPass.

Free Query to Excel Function

generateExcel SampleI'm working on extending a system with excel reports so I knocked up a handy function that will turn any Query into an excel view.

Download


Syntax


The function generateQuery takes 4 arguments: the query, the columns, the mode and the filename. The syntax is:

generateExcel( theQuery, columnList, mode, filename  )

But you can call it with just the name of the query if you want, e.g.:

generateExcel( myQuery  )

Options


  • You can be specific about the columns:

    generateExcel( products, "productname, productCost" )

    The Column list argument allows you to specify the order you want the columns displayed in, or omit columns you don't want. If you want you can just leave it blank and it will just use the query column list - but the columns could be in any order.
  • There are 3 output modes: "display", "save" and "debug":

    generateExcel( products, "productId, productname, productCost", "save" )

    The default mode is "display".

    Mode "display": This will try to display the excel chart within the browser. If the end-user's browser does not allow this, Excel will launch and show the output instead.

    Mode: "save": This will just do a download and will not attempt to display within the browser.

    Mode: "debug": Will display the columns as a normal HTML page with <pre> tags.

  • The filename attribute allows you to specify the filename that the excel should be saved as. The default is "report.xls".

If you find this function useful, please just send me an email to say thanks peterATdigital-crew.com

Enjoy!

Update May 15 2007


I made some improvements yesterday - the code uses <cfcontent reset="yes"> so that it will reset the output before rendering the excel view and now supports exporting dates properly.
Tags: ColdFusion | Tools

Topper Contributes to Open Source

I *think* this is the first time I have ever actually contributed to an Open Source project. Sure, I've given out free code, but I've never actually contributed to a community based software project until today.

I didn't want to have to use a CFX tag for image resizing anymore (even If I did make CFX_Jimage) so I tracked down Rick Root's ImageCFC.

In the project I was working on, I needed to create thumbnails that were exactly 90x90 with no whitespace from any size of source image. The source image could be any size.

To do this correctly, you need to figure out whether to resize on the X or Y axis, do so, then and clip off the remaining bit.

Figuring out the Axis to Resize on


You have to get the scale of the destination width over the current width and compare it to the destination height over the current height:

if( deltaX/currX < deltaY/currY ) then Resize on X Axis
else Resize on Y Axis

Then you have to clip the center piece of the remaining image:

        <cfset cropOffsetX = max( Int( (imgInfo.width/2) - (newWidth/2) ), 0 )>
        <cfset cropOffsetY = max( Int( (imgInfo.height/2) - (newHeight/2) ), 0 )>

It was a little tricky to get right (mainly because my brain was refusing to cooperate yesterday), but eventually I cracked it and it work's perfectly.

I submitted my new resizeBestFit function to Rick. Within a few short hours, he has integrated it nicely into the existing resize function and added an extra option, cropToExact.

ImageCFC Version 2.14 is available now. Cudos Rick.
Tags: ColdFusion | Tools | WebDev

Navicat - Top Dog MySQL Manager

Here at Digital Crew, we use MySQL for just about everything only using other database types when clients force us to... yeuck. MySQL Rocks. But you know that.

What you mightn't know is that there is an absolutely awesome program for managing MySQl called Navicat. I have just been saved hours of work of tedious syncronising data between two databases using one of Navicat's many excellent features.

Navicat

This program is simply excellent - it will pay for itself in no time and has my highest endorsement.
Tags: My Work | Tools | WebDev

ColdFusion-alike List Functions for Javascript

Those ColdFusion list functions are pretty useful so I made a Javascript version of them. Enjoy.
Download
/* ColdFusion List Functions
   These functions manipulate lists just list ColdFusion does.
   (c) Digital Crew
   Happy Christmas. Knock yourself out.
   email: topper@digital-crew.com
   web: www.digital-crew.com   /   www.cftopper.com
*/
function listFind(c,n,d)
{
	if(arguments.length<3)d=",";
	var e = c.split(d);
	for(var i=0;i= 1 && p <= e.length )
	{
		return e[p-1];
	}
	alert("Out of range");
	return "";
}
function listSetAt(c,p,v,d)
{
	if(arguments.length<4) d=",";
	var e = c.split(d);
	if( p >= 1 && p <= e.length )
	{
		e[p-1] = v;//set the value
		//rebuild the string
		for( var i=0,c=""; i < e.length; i++ )
			c = (c!=""?(c+d):"")+e[i];
	}
	else alert("listSetAt: Index " + p + " is Out of range");
	return c;
}
function listInsertAt(c,p,v,d)
{
	if(arguments.length<4) d=",";
	var e = c.split(d);
	if( p >= 1 && p <= e.length+1 )
	{
		e.splice( p-1, 0, v );//insert the value
		//rebuild the string
		for( var i=0,c=""; i < e.length; i++ )
			c = (c!=""?(c+d):"")+e[i];
	}
	else alert("listSetAt: Index " + p + " is Out of range");
	return c;
}
function listLen(c,d)
{
	if( c == "" ) return 0;
	if(arguments.length<2)d=",";
	return c.split(d).length;
}

..Not the best 'Pages' Design in the World...

..oh no, this is just a tribute! This is the latest Digital Crew database design for storing website pages.

I have evolved this design over the years and I'm pretty happy with this result - this design supports multiple sites, page redirection, page short name (for navigation) and page long name, page HTML (for basic pages or intro text on complex pages), meta information, visibility, security, published status, alternative URLs, alternative files, making page for special (dynamic) processing and the ability to open the page in a new window.

Use it, if you like.

Design view of MySQL 'Pages' table

CREATE TABLE `pages` (
  `pageid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `siteId` int(11) UNSIGNED NOT NULL DEFAULT '1',
  `pageparentid` int(10) UNSIGNED DEFAULT '0',
  `pageCode` varchar(50) character SET latin1 NOT NULL,
  `pageNavName` varchar(100) character SET latin1 NOT NULL DEFAULT '',
  `pageName` varchar(150) character SET latin1 NOT NULL DEFAULT '',
  `pageHTML` text character SET latin1 NOT NULL,
  `pageDisplayOrder` smallint(5) UNSIGNED NOT NULL DEFAULT '2000',
  `pageIsPublished` tinyint(1) NOT NULL DEFAULT '1',
  `pageDescription` varchar(255) character SET latin1 DEFAULT NULL,
  `pageKeywords` varchar(255) character SET latin1 DEFAULT NULL,
  `pageIsFolder` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  `pageIsDynamic` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  `pageIsVisible` tinyint(3) UNSIGNED NOT NULL DEFAULT '1',
  `pageIsLocked` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  `pageAccess` enum('O','I','A') character SET latin1 NOT NULL DEFAULT 'A' COMMENT 'A=All, I=Logged In, O = Logged Out',
  `pageRedirectPage` varchar(50) character SET latin1 DEFAULT NULL,
  `pageAltFile` varchar(255) character SET latin1 DEFAULT NULL,
  `pageAltURL` varchar(255) character SET latin1 DEFAULT NULL,
  `pageOpenNewWin` tinyint(3) UNSIGNED DEFAULT '0',
  `pageShowOnInPageNav` tinyint(3) UNSIGNED DEFAULT '1'
  PRIMARY KEY  (`pageid`),
  KEY `pageparendId-pageId` (`pageparentid`),
  CONSTRAINT `pageparendId-pageId` FOREIGN KEY (`pageparentid`) REFERENCES `pages` (`pageid`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Source Control - 3 months later

For years we knew that we should be using source control. But we weren't. We didn't want the hassle of using source control.

But here's the thing: We make software components for ColdFusion. Some of these components are the cornerstones of our content management solutions which are in turn the cornerstone of our successful website and Intranet development business. In the past, when I made a change to UDI, a component for managing database content, I'd manually copy the code back to a central location. Then I would get the code again when starting a new project. The current version and change log were stored within the main.cfm file of each component. Painful.

What were we thinking?! About 3 months ago, I decided to take the bull by the horns and investigate the incredible complex, tedium world of source control. I got some manuals on Subversion and read a lot about CVS and source control systems. All pretty scary stuff to begin with.

But in truth, with the most excellent amazing fantastically brilliant TortoiseSNV extension for windows, source control is absolutely painless. Made changes? Just right click on the directory and select check-in, provide a short message and your done. Need the latest version, just right click and choose SVN Update. Wow, painless and simple.

And here is the thing I've come to notice, and it's a compelling reason to use source control - and not just because you should. You will be one hundred times more productive. How? You see, with the hassle of maintenance gone, I find myself making hundreds of little fixes and improvements all-the-time now.

If you make software and your not using some sort of proper source control, your officially living in the dark ages.

Tags: ColdFusion | Tips | Tools | WebDev

QueryWizard Version 1.1

Today I made a number of important improvements to the QueryWizard that I started yesterday. Already the QueryWizard is proving to be a useful tool for me. Just unzip this and execute <cf_queryWizard>.

The Query Wizard

I've tried to make the Query Wizard as intelligent as possible.

  • Matching Field Names
    It automatically links up any URL or FORM variables to matching fields. But database fields are often prefixed with the name of the table (at least at DCHQ they always are) so it matches the right hand side of the column name against the variables names.
  • Preview of Field Values
    As you see in the drop down for matching fields I now display a preview of the data that was held in the field when <cf_queryWizard> was executed.
  • Query Name Selection
    The wizard does it best to pick a suitable name for the generated query. If you are INSERTing into the "Monkeys" table, the query will be called "InsertMonkey".
  • Matching indentation level
    You can place <cf_queryWizard> anywhere in your CFM template and the query that is generated in its place will match your indentation keeping everything nice and neat.

Road-map

  • Ability to specify SORT ORDER when doing SELECT
  • Ability to SELECT from multiple tables and specify the join type and clause - this is going to be tricky Messing
  • General improvements to interface including have the generated query not scroll

And with that I'm out of ideas so please download the query wizard and hit me with your suggestions.

Tags: My Work | Tools | WebDev

I've been thinking about making this tag to quickly knock out queries for literally years now. The advantage of doing this at run-time is that we have access to the list of variables that are available.

So lets say you made a contact form and on the contact form's action page you want to insert the details into the database...

  1. Just type <cf_queryWizard> on the action page and run it - i.e. submit the form. Then wizard opens in a new window.
  2. Choose type "insert"
  3. Choose the table that will store the records
  4. Match each database field to the correct FORM variable provided in the list.
  5. Click "Insert this query".

I spent the last 6 hours writing it but I'm hoping that we'll all benefit from this. I'm giving it out completely free to all fellow ColdFusion developers. I'd love to see this in wide usage so please let everybody know about it.

Notes

  • The tag works best if you have the variables "APPLICATION.datasource", "APPLICATION.db_username" and "APPLICATION.db_password" but if not you can pass in your own datasource, username and password as normal. e.g.
    <cf_queryWizard datasource="#myds#" username="#myusername'" password="#mypass#">
  • You can not place this is the customtags directory - It calls itself as a standalone coldfusion page and needs to be present in the directory.
  • There was no way to figure out which file is executing the tag so I cheated Messing
    I got around this by deliberately creating an error and getting the parent file name from the cfcatch.tagcontext. A clever hack but might cause this tag to not work with BlueDragon etc so I also allow you to pass in the path the current file like so: <cf_queryWizard thisfile="#GetCurrentTemplatePath()#">.
  • You can run <cf_queryWizard abort="yes"> to halt execution until the query is programmed.
  • Note: You can only have one of these on a page at a time. I'll fix that for version 2.
  • Security Note: It should be completely secure so long as only a developer gets to execute this. The permissions to edit are session/uuid based.

Hit me with your feedback. Source code is open - fell free to hack. Sorry for lack of comments - I just ploughed this out.

Update

Dan spotted a bug when using this with Internet Explorer. Fixed now.

Tags: My Work | Tools

CF_ProFlashUpload - Live at Last

I've finally released the flash upload component - the development of which I was blogging about here. Took a while for myself and Dan to come up with a good name. We were throwing all sorts of crazy ideas out there. Anyhow, please please go ahead and try it out. The demo is fully functional apart from a banner that asks you to purchase it.

I'm selling this baby for $50 per website - a fair price I think given the amount of work that went into this sucker.

What Is CF_ProFlashUpload? This widget creates a interface that allows your site user to easily upload multiple, even hundreds of files to your server. Each file has an individual progress bar and there is also an overall progress bar. The upload rate is also displayed.

 

The component allows you to use a multiple file upload component of any size as part of any ColdFusion application. It is extremely easy-to-use. You can call the component passing in just the upload directory and nothing else. Or you can use any of the advanced options to customise security options, file-type options and the look-and-feel of the component.

One of the nicest features of this component are per-file progress bars. The upload rate is also displayed along with the overall progress.

The demo is completely functional - just download it and you'll be up and running in minutes.

Tool: Regular Expression Tester

Here is a good tool I made eons ago that from time to time I find invaluable.Topper's Regular Expression Test Tool

Next time your knocking out a regular expression for ColdFusion, load up this, paste in some sample code and keep tweaking your expression until you get it right.

Tags: ColdFusion | Tools

About Topper on ColdFusion

Peter Coppinger aka Topper is a neurotic web monster who spends most of his chaotic life developing ColdFusion web applications when not drinking himself into a stupor and scheming his plans for world dominance.

Peter founded Digital Crew way back in 1999. Digital Crew run CFTagStore.com and have also produced lots of powerful ColdFusion tools like ProFlashUpload and CFMyAdmin.

I made this site to share my thoughts, tips and tools with fellow ColdFusion developers.

If your a ColdFusion developer, go ahead and subscribe to this site and in exchange i'll try to provide quality content to make it worth your while.
RSS Feed for Topper on ColdFusion

    I'm speaking at CF-United Europe!

    CFDevCon I'm going to be speaking at CFDevCon08! It's my second time speaking in front of more than 10 people so please lend your support.

    The topic is:
    Introducting TeamworkCMS and Site Engine - Building better websites in half the time or something like that..

    Digging

    My Work - Just Finished

    • modules.cit.ie
      Web-=based modules/programmes designer tool and database system for Cork institute of technology.
    • Teamwork Project Manager
      The top secret project is finally released. The project management app will rock your world - give it a go.
    • PMG
      New website for Project Management Group website.
    • Digital Warehouse Wholesale
      Added wholesale products to existing client website.
    • New Digital Crew documentation website
      New version of documentation.digital-crew.com using new InfinityCMS site engine. It's done now. Just add content.
    • PFH Company Webite
      New website/CMS/Newsletter System for prestigious Irish IT company.
    • Module Manager for CIT
      CIT is switching to module based courses. We are making an application for managing/submitting these modules. Gettig there.
    • Bons Secours Cork Hospital Intranet
      New Intranet for Bons Secours hospital in Cork. Considering turning this Intranet system into stand-alone product.
    • Revamping InfinityCMS
      I'm making major improvements to our content management solution, InfinityCMS. Making it faster, more powerful and easier to check into/out-of source control. Done but it's always going to be evolving.
    • BPC Update
      Minor functionality update for internal Pfizer Best Process Chemistry project.