Friday, October 26, 2007

Jira Permissions Revisted

Just some quick notes on how i configure Jira.

1. Create a project role called Client (Administration-> Project Role Browser), I do this because I allow clients to play an active role in JIRA and they don't quite fit the Jira Users Role.

2. Assign Permissions to the Client Role (Administration -> Project Role Browser). For example, I often like to be able to assign work (issues) to clients, you want to add the client role anywhere you see the User Role.

3. On a per project basis, assign your appropriate Client User Group to the Client Role . ( Administration-> Project, Project Team, Project Roles -> View Members)

Easy!

Ben Forta coming to Melbourne for CF8!!!

Ben forta just blogged that he's coming to Australia for a CF8 tour


He will be in November 22nd: Melbourne November 22... mark your calenders

Thursday, October 25, 2007

Keating make's fun of Costello's use of his legacy

Keating savages 'indolent' Costello, The Age
Attack on unions despicable: Keating ABC News





I would loved to see the whole speech (pause, ok, the abc had the video), the last 7 minutes (13 all up) are classic Keating, he seemed more relevant than ever, tho a little older.

He destroyed Howard and Costello's position on economic's and IR, putting the last 11 years in historical context, taking claim for the the Accord's ongoing effect. You get the feel this is going to be sweet revenge for 1996.

Having watched Howard & Costello build their economic reputation off his legacy, Keating explains it as only he can... classic stuff

Wednesday, October 24, 2007

New mobile gmail version

Gmail mobile is the best email app i have seen on a phone and it just got better.

Now when is my gmail imap coming? Grounds to use thunderbird again!

Friday, October 19, 2007

SATA external storage solution

Enhance make a number of external storage solutions. The E8 - ML in particular looks rather interesting.

Has anyone used it?

Thursday, October 18, 2007

Bennelong Time



Thank you the ABC and the 7:30 Report

Faster Inserts and updates with CFTRANSACTION

If you are ever doing lots of inserts of updates, you can speed up the processing
by a substantial factor by wrapping up lots of individual records ( ie loop over and update a dataset ) in a CFTRANSACTION statement.

This actually applies to any programming language and any decent DB .

Why? Each query when it is finished will be explicitly committed (talking CF specifically here, btw).

In oracle that means write to disk (generally the same for other databases). So for 1000's updates that's a 1000 disk writes where oracle is writing the changes out to disk. That's a lot of overhead.

When you wrap things up in a transaction, that disk activity is postponed until a commit occurs, either explicitly <cftransaction action="COMMIT"> or when it's finished </cftransaction>

Depending on how your DB is configured in terms of REDO logs etc, what your inserting or updating, the optimal size of a transaction differs.

How to know how many rows to process before issuing <cftransaction action="COMMIT">? It's a bit of a black art :)

There are some cool tricks in Oracle like Asynchronous Commits which effectively says to Oracle, you know better than me, you decide when to commit.

Wednesday, October 17, 2007

Speed up your XP keyboard



Keyboard King is a great little utility i found which extends the range of speed up setting available for your keyboard response settings.

Great when your scanning thru long documents or lots of source code. Don't set them to high or your keyboard starts to feel a little skitterish. It's good being able to change the speed for different sets of keys

Sunday, October 14, 2007

ORA-1000 maximum open cursors exceeded

i wrote a while back about a bug i was hitting with cached metadata and cfqueryparam

Tonight I hit the old ORA-1000 bug because i was still using CFQUERYPARAM which means there is an open cursor for each query.

What I was doing a row count and inserting a different table name into the SQL. The problem was for each different table name (plus the random value i was inserting to avoid caching) was generating a cursor in oracle.

Solution? Sometimes you shouldn't use bind parameters!

Just be sure to validate your variables to avoid sql injection.

Friday, October 12, 2007

Console2 seems mess with focus on file downloads

console2 seems to steak focus from file dialogs in firefox.

when i try and download a file, i often seem to lose the focus on the file dialog when i have the error console open with always on top set.

waiting on a bugzilla email to file a bug

I also would love an option to exclude the window from the alt-tab list, or could fire fox finally get different icons for windows?

Thursday, October 11, 2007

10 Year Winamp 5.5 is a new classic

Just downloaded the new version of winamp and i have to say it's one of the best releases yet.

The new skin and built in three column media library aka iTunes is great. Looks a little noisy, but it makes better use of a 1600x1050 screen than any other media player i have tried and liked.

Tip: click the icon under the mini playlist in the top right hand corner and have a full window height playlist. much better than the tiny box it defaults to

Tuesday, October 09, 2007

Using WMS TileCache on Apache Win32 with Mod Python

TileCache is a cool tool for caching WMS titles. Using it with Openlayers which is a great javascript library for using with WMS Servers

I had a few issues installing it on Windows using Apache 2.0.61, Python 2.5 and mod_python

This configuration worked for me nicely, the PythonPath directive fixes the "ImportError: No module named TileCache.Service" error


<Directory "c:/inetpub/wwwroot/TileCache/">
AddHandler python-program .py
PythonHandler TileCache.Service
PythonOption TileCacheConfig "c:/inetpub/wwwroot/TileCache/tilecache.cfg"
PythonPath "['c:\inetpub\wwwroot\TileCache'] + sys.path"
PythonDebug On
</Directory>

Friday, October 05, 2007

Mapguide refresh the King.Oracle schema cache trick

I hit an issue today with mapguide, i was creating a table and then creating a layer to view it.

GetClassDefinition kept crashing with "The specified class was not found." Turns out for performance reasons King Oracle caches the SDO_GEOM_METADATA for the class list and there is no simple API way to fix this.

I swapped a few emails with Harris and then as a last attempt I updated the FeatureSource XML with a simple save, which turns out to cause Mapguide to refresh King Oracle and read in the new SDO_GEOM_METADATA.

I didn't hit this so often when i was doing dev, because there is a 10 minute timeout for FDO providers.

Oracle Import Trick

If you ever need to import a select list of tables from a large export file, a good trick is to do a import with rows=n which will just create the tables without data

imp scott/tiger@orcl file=export.dmp rows=n

then you can simply delete the tables you wish to import from the schema and then run the import normally. Oracle will simply throw a create error and skip the table

you can get funky if you can access the orginal schema and do things like this (note the dblink)

select 'drop table ' || table_name ||';' drop_sql
from dba_tables
where owner ='SCOTT'
and secondary = 'N'
and table_name in
(select table_name
from dba_tables@srcdb_link
where owner ='SCOTT'
and secondary = 'N')
order by 1


which is useful if you have a big export which you only want to import a subset of the tables because you have dropped them already in the src database

Thursday, October 04, 2007

XP Hardisk Activity Monitor

Glint is a great XP Harddisk Activity Monitor, it basically reads windows counters and displays them.
Nice to be able to monitor physical hard disk activity at a glance.

I added physical counters for each cpu and each harddisk R & W



Good for watching disk load as you back up stuff and exporting databases before a system restore as my machine is BSOD ing too much...

Tuesday, October 02, 2007

Updated Varscoper.cfc CFSCRIPT Support

Here's an updated version of my varscoper mods. Dan Wilson found a bug with the way I was handling the // comments.

The code will now strip all // comments and will also correctly handle code with Unix line endings (I convert windows style CRLF to LF and process the code based only on LF)

Mike Schierberl, the author of Varscoper replied and said he will add my code to the code base on Riaforge when he finds some time!


<cfset var variableCFScriptDelim=" #chr(13)##chr(9)##chr(8)#">
<cfset var variableCFScriptStart = ""/>
<cfset var variableCFScriptEND = ""/>

<cfset var variableCFScriptText = ""/>
<cfset var variableCFScriptTextTmp = ""/>
<cfset var variableCFScriptCmd = ""/>
<cfset var variableCFcommentSTART = "" />

<cfset var variableCFcommentEND =""/>
<!--- Now start looping over all cfscript statements to identify variables that are being set --->

<cfset currentPositionVariableFind = 1 />
<cfset variableCFScriptStart = FindNoCase("<CFS"&"CRIPT>",functionInnerText,currentPositionVariableFind)/>

<cfloop condition="variableCFScriptStart NEQ 0">

<!--- Identify the cfscript statement --->
<cfset variableCFScriptEND = FindNoCase("</CFS"&"CRIPT>",functionInnerText, variableCFScriptStart+1)/>


<cfif variableCFScriptEND neq 0>
<cfset variableCFScriptText=""/>

<cfset variableCFScriptTextTmp =mid(functionInnerText, variableCFScriptSTART + len('<cfs'&'cript>'),
variableCFScriptEND-variableCFScriptSTART- len('<cfsc'&'ript>') )/>


<!--- change to use unix style lines endings --->
<cfset variableCFScriptTextTmp =Replace(variableCFScriptTextTmp,"#chr(13)##chr(10)#",chr(13),"ALL")/>

<!--- strip line // comments as they don't end in a ; --->
<cfset variableCFcommentSTART=find("//",variableCFScriptTextTmp,1)>

<cfloop condition="variableCFcommentSTART neq 0">
<cfset variableCFcommentEND=find("#chr(13)#",variableCFScriptTextTmp,variableCFcommentSTART+2)>
<cfif variableCFcommentEND gt 0>
<cfset variableCFScriptTextTmp=
Mid(variableCFScriptTextTmp,1,variableCFcommentSTART-2) & chr(13)
& Mid(variableCFScriptTextTmp,variableCFcommentEND+2,len(variableCFScriptTextTmp) )/>

</cfif>
<cfset variableCFcommentSTART=find("//",variableCFScriptTextTmp,variableCFcommentSTART+2)>
</cfloop>

<!--- strip out /* type comments */ --->
<cfset variableCFcommentSTART=find("/*",variableCFScriptTextTmp,1)>

<cfloop condition="variableCFcommentSTART neq 0">
<cfset variableCFcommentEND=find("*/",variableCFScriptTextTmp,variableCFcommentSTART+2)>
<cfif variableCFcommentEND gt 0>
<cfset variableCFScriptTextTmp=
Mid(variableCFScriptTextTmp,1,variableCFcommentSTART-2)
& Mid(variableCFScriptTextTmp,variableCFcommentEND+2,len(variableCFScriptTextTmp) )/>

</cfif>
<cfset variableCFcommentSTART=find("/*",variableCFScriptTextTmp,variableCFcommentSTART+2)>
</cfloop>

<cfloop index="variableCFScriptCmd" list="#variableCFScriptTextTmp#" delimiters=";">

<cfset variableCFScriptCmd=ListFirst(ListChangeDelims(variableCFScriptCmd," ",variableCFScriptDelim),"=")/>
<cfset variableCFScriptCmd=trim(variableCFScriptCmd)>
<cfif ListFirst(trim(variableCFScriptCmd), " ") eq "var">
<cfset VariableNameCfset=mid(variableCFScriptCmd,3,len(variableCFScriptCmd))/>

<cfset VariableNameCfset=trim(ListGetAt(variableCFScriptCmd,2, " "))/>
<!--- Update the var-ed struct to note that we are using this var --->
<cfset tempVaredStruct["#VariableNameCfset#"] = "not used">
</cfif>

</cfloop>
<!--- Update the current parsing position to start from the end of the cfset statement --->
<cfset currentPositionVariableFind = variableCFScriptEND>
<cfset variableCFScriptStart = FindNoCase("<CFS"&"CRIPT>",functionInnerText,currentPositionVariableFind)>
<cfelse>
<cfset variableCFScriptStart=variableCFScriptStart+len("<CFS"&"CRIPT>")>

</cfif>
</cfloop>

<cfset currentPositionVariableFind = arguments.positionToStart />

Windows XP: Stop: 0x000000D1 KB925922

The computer restarts unexpectedly, or you receive an error message in Windows XP: "Stop: 0x000000D1"

Been getting lots a Blue Screens of Death (BSOD) Today... and my computer takes a good 10 minutes to boot... time for a rebuild, but no time to do it... argghhh

and why can't i just download the hotfix.. i mean i like the 8 hour turn around guarantee but really.... sigh.. arghhh.. ah well

UPDATE received the hotfix email an hour and a half later, installed, rebooted.. lets see what happens

Monday, October 01, 2007

Radiohead bypasses the record labels

Just head on the Radio (JJJ) that Radiohead doesn't have a record company for their new album "In Rainbows" and are offering direct digital downloads!!!!

The price? Simple, you decide! Yep, minimum price is 1 Pound, or a couple of Aussie bucks... sweet....

money for the artists, instead of the RIAA lawyers

This has the potential to really screw over the record labels, finally!!!!!!