Preview: corporate eejit
Insanity is Normal
Last Build Date: Wed, 6 Aug 2008 08:26:49 -0400
Copyright: Copyright 2008
You Aint Going to Need It Yet
Tue, 5 Aug 2008 21:05:22 -0400
One of my work projects is a pretty hefty 1.5 year old project with about 8 developers. When we started we figured we will need messaging, dynamic persistence (not using a database schema for some aspects) and some other technical features.We started down that road and found the weight of the technical baggage overwhelming. As we were figuring out what needed to be built going down dead ends back out etc. we were too slow moving as any major change required plenty of of work.Finally one of the developers spent a weekend and pared the project down to the bare essentials. Over a year later we are re-introducing some of those features and in time may end up adding all of them back. So our original instincts were correct - but premature and damaging to the project at an early stage. And so it occurred to me that the point of YAGNI is not YAGNI - You may well need it assuming you survive - but just not yet and not carrying the extra weight too early might mean the difference between success and failure.
Due to circumstances beyond our control
Sun, 8 Jan 2006 18:42:44 -0500
- You order a food delivery from a supermarket (take your pick of any of the UK ones)
- Food does not arrive when it should and no one calls
- You call said supermarket to find out whats up
- The recorded message goes - "Due to circumstances beyond our control we are experiencing high call volumes, it will take us approximately 2 hours to answer your call"
My dear suppliers - you are in control of your bloody circumstances.
People have better things to do at 10:30 PM on Friday night then call you.
If they call it's because some of the circumstances you do control have been badly controlled.
Sort it out ! - and next time please get the message to say - "Due to our poor quality service we are experiencing high volume of angry calls, you might want to come back later..."
CMMi - The Missing Practice
Sun, 8 Jan 2006 18:11:18 -0500
We are doing some CMMi work at work and overall I have no major issues with it.
The vocabulary makes me want to vomit ( you need to institutionalize this practice....) but overall it's relaxed enough about how things are done to be fine.
One major issue and surprise though - Recruitment is not one of the practices covered
If there is a single most important practice in the life of a software organization, a practice that will make the difference between success and failure, between quality and muck it has to be recruitment.
Working as an architect I should in theory have nothing to do with recruitment, but I make it my business. I think the strongest technical people you have need to be involved and dedicate enough time and thought to how recruitment works. Helping sort out the recruitment of developers is probably the single most important contribution a technical leader can make to his company.
Should I Be Having Fun at Work?
Wed, 1 Jun 2005 05:56:30 -0400
It wouldn't work otherwise.
I can not imagine spending such a major chunk of life doing something which is no Fun.
From the WordNet Search
- activities that are enjoyable or amusing; "I do it for the fun of it"; "he is fun to have around"
- playfulness: a disposition to find (or make) causes for amusement; "her playfulness surprised me"; "he was fun to be with"
- amusing: providing enjoyment; pleasantly entertaining; "an amusing speaker"; "a diverting story"; "a fun thing to do"
I believe fun to be an integral part of sustainable pace, and of getting the best out of yourself and the people working with you.
It could be added to the agile manifesto:
Having fun over Having the will to live sucked out of you
I Love Job Interviews
Tue, 31 May 2005 12:31:46 -0400
From a real interview :
- "Can you explain transactions ?"
- [some explanation of a transaction...] "It's like the Teletubbies having real people inside. They look cute and furry on the outside but are actualy complex inside..."
- "Is this a hidden reference to ACID?"
- [in tears ]"Take it back! They don't have people inside them. they are from outer space!"
The Architect Debate
Tue, 10 May 2005 18:02:49 -0400
A very active debate on TSS regarding what makes an architect
, and how to tell the difference between a senior developer and an architect. As someone whose job title has the dreaded A word in it somewhere, I can offer a sure fire way: architects are better paid.
This is one reason lead developers are lured into wearing the A badge, much as they dislike being associated with uselessness.
The Constant WTF
Sun, 10 Apr 2005 06:41:05 -0400
I have been reading and enjoying the daily wtf.
A real must read, and a good way to savour the output of all those nearly developers out there...
For those who have been enjoying it, there is now a better fix - The Constant WTF
GridBag Of Shite!
Wed, 23 Mar 2005 13:47:15 -0500
Is GridBagLayout the worst ever ?
Run the application...
GridBag baby GridBag!
Java Development Connoisseur + Open Source Contributor = OSX
Sun, 7 Nov 2004 14:39:32 -0500
So Is OSX the thinking geeks Linux ?
Within the group of OSS java geeks I have the pleasure of knowing, there is a growing number of OSX users.
I guess it's like the iPod vs Rio , no matter how much storage , battery life , etc the rio has ,
the iPod has the allure.
Also as a user OS , OSX wipes the floor with both Windows & Linux.
I'm still waiting for OSX on Intel before I move..
Resharper - Bringing the dead goat back to life
Sun, 7 Nov 2004 14:34:48 -0500
If you are using Visual Studio 2003
(fondly known as the dead goat), especially if you are trying to write code, rather than ride the wizards, run to the JetBrains site and get Resharper
Though it's missing a few very useful refactoring (introduce field sticks out for me, but there are quite a few missing) it works like a magic wand passed over the deceased goat, bringing it to life, and making it trot at a pace not a million miles away from real development
Quite a few of the old friends are there including :
- Ctrl+N Go To Class
- Shift+F6 Rename
- Ctrl+O Popup Outline
- Ctrl+Alt+V Introduce Variable
- Ctrl+J Insert Live Template
- Ctrl+Alt+F Reformat Code
And naturally Alt+F4- Go back to IntelliJ :-)
Confluence Console - Why ?
Tue, 28 Sep 2004 12:21:00 -0400
Well the short answer is, I had to copy a space between servers...
So withoput further delay to your browsing amusement I present the imaginatively named Confluence Console
Fri, 17 Sep 2004 13:51:40 -0400
Everybody has a pet name for variables - foo, bar , baz, the standard french one is toto for some reason...
Mine is Mooky
Manifesto for Agile Corporate Software Development
Sun, 1 Aug 2004 20:39:30 -0400
I was really excited reading the Manifesto for Agile Software Development
"We are uncovering better ways of developing
software by doing it and helping others do it.
Through this work we have come to value:"
The Agile Manifesto Values
||We Value More
|Individuals and interactions
||processes and tools
|Responding to change
||Following a plan
"That is, while there is value in the items on
the right, we value the items on the left more. "
This is great I thought, and set about applying this at a corporate level.
Naturally, in order to achieve this, the current slightly naive touchy feely approach had to be adjusted.
Perhaps made more industrial strength to suit a no no-nonesense corporate environment.
After many meetings, heated debates, and a handful of re-writes we managed to agree on the following revised edition.
The Corporate Agile Manifesto Values
||We Value This Too
||Not Bad Either
|Individuals and interactions
||Committees and standards
||Processes and tools
||Mostly working software with slightly out of date documentation
||Service Level Agreement
|Responding to change
||Following a plan
That is, while there is value in the items on
the right, we value the items on the left more. Unless the project is shorter then 5 months or has a team of more then 12 developers.
The values in the middle we do, but we don't like them nearly as much as most of the items on the left, or some of the items on the right (assuming they are within the half yearly budget envelope).
And while we try and value the items on the right more then the ones in the middle, the values on the left have precedence if endorsed by a senior sponsor, or are attempted after lunch by an inexperienced developer.
Microsoft does the right thing
Sat, 31 Jul 2004 06:04:33 -0400
After blogging and writing about the exciting combination of anonymous delegates and generics,
I followed a link to the .net core libraries blog.
I was thrilled to see that they have applied these ideas
to the collections api.
It would be very useful applied in more areas like IO and Database access, but at the very least it's a good start.
Groovinating C# 2.0
Wed, 28 Jul 2004 16:07:06 -0400
Following a chat with Joe
, I have been playing with the anonymous delegate feature of C# 2.0 and I like it.
(shame about VC# Express 2005 though... IntelliJ it's not)
I have been trying to Groovinate C#, and it's looking quite nice
Would be better built-in. ( If anyone in Microsoft happens to be reading...)
Visual Studio 2003 - The Pain !
Thu, 22 Jul 2004 16:46:28 -0400
I have recently started writing C# in anger , and was fairly shocked by the poor quality of some aspects of VS 2003 namely :
- Renaming a WinForms element in the designer does not change the code - it just fails to compile
- Stack traces are not hyperlinked - can not click on a line and go to the source
- The UI designer is worse then the VB6 version - try a splitter with a tree on the left a listview on the right and a status bar across the bottom. Whoever released this needs an urgent sanity check
- Non resizeable dialogs. Why do MS never produce resizeable dialogs? (look at the Options dialog)
- None of the useful IntelliJ stuff - It's like racing a dead goat without Resharper
The Eclipse Pain - Nearly There ?
Tue, 8 Jun 2004 19:17:14 -0400
Tells the sad tale....
Well , with the Eclipse quicksand of the last few months, it has been a pain to keep both TimTam
and The Groovy Eclipse code working on the latest Milestone.
Now with RC1 out and no more API changes for 3.0 I'm working on both.
And as the Eclipse team has finished the Browser work for OSX , the TimTam on the Mac will
be an option.
TimTam beta1 is out
Tue, 13 Apr 2004 21:19:13 -0400
it's just a release
, I have to let it go, there will be others some day...
Recently added features :
- Lazy Loading of Page Information
- Permission Tree Decoration ( ok , it's a little lock if you don't have write access )
- Initial Content Assist Support ( For Confluence Macros only at the moment, but it's more a declaration of intent)
In the next version :
- Page Drag N Drop ( Code in place pending bug fixes in Confluence)
- Page Version Diffing , Roll Back
- RSS Integration
- Extended Content Assist
- Whatever you ask for..
- the default confluence server - http://confluence.atlassian.com seems to have a problem
with the SOAP configuration , and is not available through TimTam
I hope Mike fixes this soon...
The Best Swing Layout Manager - Now Available for SWT
Mon, 22 Mar 2004 06:19:13 -0500
Having used many layout managers on a number of platforms , I consider Karsten Lentzsch's Form layout the best
It separates the layout concerns into :
- layout manager ( responsible for doing the layout )
- builder ( responsible for configuring and constructing the layout)
This separation, coupled with the use of a very simple form specification language, make it a joy to use.
As i'm doing a lot of Eclipse work, I was planning on porting the code ( it's OS ) to SWT,
but have been spared the effort by Florian Fankhauser: SwtForms
This is a very welcome addition to the arsenal
of any Eclipse/SWT developer.
Thank You Florian !
Groovy Support in Eclipse M7 - Update
Fri, 19 Mar 2004 20:48:24 -0500
New Version Out:
- Missed a change in the compiler exception classes- hence no decent error reporting
- Content Outline dispose bug - this is a bit like C++ when stuff goes bang!
- Wizard problems - mainly in the latest integration build
When working with this plugin, make sure you filter in GroovyFailureMarker problems
Go to the Problems window, open the menu, select Filters... and make sure it's selected
- All Runners will run any TestCase based class as if it had a main by calling junit's TextRunner ( make sure you have junit.jar in the proj - it's automatically added by either the groovy or junit new test wizards)
- Support for latest integration build eclipse-SDK-I20040318
It looks like this in the integration build :
Pick it up from the same place :
Please post Bugs / Requests in the Codehaus Jira.
Groovy Support in Eclipse M7
Thu, 18 Mar 2004 19:14:06 -0500
Didn't have nearly enough time to spend on this.
But release we must.
- Java Configuration based Syntax Highlighting
- New Class/ New Test Wizard
- Naive Builder ( good enough for small groovy projects )
- Run As - Run.. in a seperate VM linked to the eclipse console
- Content Outline
It looks like this :
Get it here :
- Create a normal Java project, src dir , packages , classes etc
- File->New->Other ( Ctrl-N) Groovy Class
- Name it , choose a package etc
- Write some groovy groovy code
- Run->Run As->Groovy
Bugs , requests etc in Codehaus Jira
Next on the list :
- Groovy unit test runner
- Content assist - mid hard
- Refactoring support- well hard
The Biscuit is out of the Bag
Wed, 17 Mar 2004 11:39:33 -0500
is fast , and the biscuit is out of the bag...
In between working on the groovy support in Eclipse (M7 support in CVS tonight..) and doing my day job,
I have written TimTam
An eclipse based editor for Confluence
It uses Confluence’s SOAP API
to do it's thing , and even if I say so myself is a more pleasant way
of editing a confluence site then confluence...
I will release the code and a plugin version for eclipse-m7 this weekend, with an RCP client coming shortly.
Pushing your Ferrari around the race track
Mon, 9 Feb 2004 18:48:50 -0500
I have had the opportunity to pair with quite a number of developers seeking Java related employment recently,
and I could not help but notice a common and significant problem.
They where using the cutting edge, refactoring and code generation enabled IDE's ( IDEA or Eclipse )
like it was Borland Turbo C 2.0 circa 1992.
Not for a second where they inclined to peer into the Refactoring menu.
The Source Menu was left untouched, and years of great improvements to developer productivity where ignored like a pile of
rusting washing machines.
Eclipse and IDEA are not
a nice editor with a compiler/make/debugger stuck on the side.
Mastering the use of these tools can make you considerably more productive. And is one of the gret joys of developing in Java.
So stop pushing blindly, open up the menus you have not bothered with, yes the ones that were not there when you were happily using Visual Studio 6.0
and get productive.
Releasing Broken Software or Why Red is the New Green
Sun, 25 Jan 2004 18:16:29 -0500
Deploying software to production is really stressful.
The users have expectations, your boss has expectations, it's scary so many things can go wrong.....
The JUnit bar is green , but we all know this does not mean there are no bugs, they are just in hiding.
But with the power of XP and TDD we have a plan.
Preempt the software from surprising you, by going live when in the red.
This way when the bugs come pouring in , you know where they are, and can be the envy of your peers by being the fastest bug
fixer in the company.
You know where you stand when your in the red, So go on break a few tests...
New Year - New Stuff
Fri, 9 Jan 2004 19:18:16 -0500
Long time no blog , so it's good to be back.
Anyways , I'm reading the highly enjoyable Contributing to Eclipse: Principles, Patterns, and Plugins
and it came at exactly the right time as I'm at the beginning of some eclipse plugin development.
I'm working on eclipse support for Groovy
I'll try and get it to a level where using Groovy in eclipse java projects for unit testing or for some of the production code is close to using Java from a tool support
The JDT has a fairly steep learning curve ( vertical almost ) and it doesn't look like I can just plug it in, but we shall see....
For know I have a builder running fine , a Launcher/ Launch shortcut in a separate vm with console support, and a [very] simple editor.
I'll try and make this available next week as an eclipse update site through codehaus....
I'm having fun , and this will assist in the work I'm doing around the RCP
as a corporate desktop app platform.
Happy New Year !
A Hole in the 2.3 Servlet Spec - Closed in 2.4 Final !
Tue, 25 Nov 2003 18:10:51 -0500
SRV.6.2.2 Wrapping Requests and Responses
"The same requirement of wrapper object identity applies to the calls from a
servlet or a filter to RequestDispatcher.forward or RequestDispatcher.include,
when the caller wraps the request or response objects. In this case, the request and
response objects seen by the called servlet must be the same wrapper objects that
were passed in by the calling servlet or filter."
And so forever more sitemesh and it's ilk will play nicely and in a standard compliant way with any 2.4
compliant servlet engine ( coming soon to a store near you ).
I feel a sense of belief in the power of the JCP.
The MS Roller Coaster - Release Fast - Deprecate Fast
Thu, 20 Nov 2003 05:27:55 -0500
Microsoft's ongoing march of technology continues at some pace.
Reading some of the available information on the new Longhorn technologies, specifically
Avalon and XAML (GUI) , and Indigo (Web Services) I get the distinct feeling that they are deprecating two .net technologies after only 2 years
in the market.
Why should anyone waste time with winForms , when Avalon will make it obsolete in a couple of years or less, and alpha versions are available today.
why should anyone waste time on .net remoting, when Indigo will make it obsolete in a couple of years or less, and alpha versions are available today.
With no JCP or multi vendor arguments to slow things down, the pace of change is relentless.
.net is a relatively young platform , and there are bound to be some parts of it that are discarded along the way.
A Hole in the 2.3 Servlet Spec
Tue, 11 Nov 2003 06:36:58 -0500
We like sitemesh so much, we actually use the damn thing in our applications.
It is also used heavily in Jira which we run.
Recently we had to upgrade our Websphere servers to 5.0.x where x >= 1
and sitemesh stopped working.
All we got back was a blank page.....
To get a clear picture of the problem, here is a simple description of how sitemesh does it's thing.
1. request arrives at the sitemesh filter for foo.jsp
2. sitemesh filter creates a substitute response , and let's the call complete by calling chain.doFilter, passing in the substitute response
3. once the call returns, the substitute response contains the data rendered into it by foo.jsp
4. the filter consults the configuration for the name of the decorating page to apply to this request
5. the content of the target page (foo.jsp) is placed as an attribute in the request
6. the filter uses a RequestDispatcher to the decorator ( say mainDecorator.jsp) and calls include passing in the 'real' request and response .
7. the decorator page renders into the response ( note that this is the first time anything is actually written to the 'real' response )
8. the decorator page contains a
tag , which reads the target page data stashed in the request, and renders it into the decorator page
9. end result ==> decorator page rendered around target page.
After running the excellent sitemesh testsuite ( kudos to Joe ), we discovered the problem:
It was to do with mixing filters with request forwards.
Where did the forward calls come from ?
Well, the application uses an MVC framework ( Web Work 1.3, but same applies to Struts ), which after executing the action,
forwards the invocation to a view, using the RequestDispatcher forward call.
Following some discussions with the very cooperative IBM guys , we arrived at the following loophole in the servlet spec :
Servlet spec 2.3
SRV.8.4 The Forward Method
"Before the forward method of the RequestDispatcher interface return, the response content must be sent and commited, and closed by the servlet container"
That seems reasonably clear, until you add the filter's ability to substitute or wrap the 'real' response,
as clearly stated by SRV.6.2.2
If the response passed in to the forward call of the RequestDispatcher interface, is a 'fake' and not the 'real' response for this invocation,
should the forward call send, commit, and close the 'real' response or the 'fake' response ?
IMHO , it should be what ever response was passed to the forward call, but that was not the case in WAS 5.0.1/2, and so the behaviour was :
sitemesh+MVC = blank page .
Fortunately the IBM WAS guys agreed, and quickly produced a fix for this ( IBM iFix PQ80592).
I hope the spec is clarified at some point as well...
Mon, 27 Oct 2003 16:56:56 -0500
We use it , it's a good idea, the code is mostly nice with some container related gunk, and the testing suite written by Jo Walnes makes for a good example of how it should be done.
, It's such a good idea ASP.NET will have it's own sitemesh in version 2.0 with master pages...
However it is currently broken on both tomcat and websphere
with a Using OutputStream after using a Writer
In both containers this relates to including a .html resource, and having the container code call getOutputStream().
I must say the Writer/OutputStream - choose one only - situation is so very very stupid and fundamentally flawed
Even the bloody container is unable to stick to one of them in some requests, what chance an application using some third party code ?
Where as the the above mentioned problem is curable ( by means other then using ASP.NET ) , we are experiencing a sitemesh/webwork related problem
with Jira 2.4.1.
Running on webspeher 5.0.x where x >= 1 , we get back a beautiful white empty page when trying to log in.
Attaching some trace output to sitemess, by passing in a PageResponseWrapper for the second pass, reveals the request is perfectly formed , but attempts at writing it
to the real response result in nothing appearing on the other side.....
What a pain.
Dublin Core Metadata Element Set, Version 1.1:
Thu, 16 Oct 2003 06:20:01 -0400
: Off to a wedding in Dublin
: My friends are getting married tomorrow in Dublin, so I'm taking a couple of days off for some guinness and champagne drinking, and general meriment
Corporate Lessons in XP - Lesson #1
Tue, 7 Oct 2003 17:06:43 -0400
I work for a very large company( fondly known as a corporate ) , as the title of this blog suggests.
We have recently started applying the Xtreme Programming methodology to our development process, to make it go faster
and as I am involved I thought I'll keep track of the key lessons
I learn as we go along, and write them down here.
I knew there will be some profound ideas along the way...
XP Rule #1 - Don't Clean Broken Windows
OK, the way I understand this after a week of extreme learning is, the code is like windows, which is uncanny as we develop
on Windows ! , how cool is that ? awesome!.
Know, we have to make sure the windows (code) doesn't break ( stop working ), so we have to constantly clean (refactor) it.
If it is already broken however ( broken by someone else perhaps , like the idiots who worked on it before you ) we must not clean it,
as we might cut our hands (waste time) .
I don't know about you, but it certainly struck a chord with me.
I can not believe how naive and clueless I was before, and I'm sure there are more important lessons ahead.
IntelliJ IDEA changed my life
Fri, 3 Oct 2003 19:36:21 -0400
In the last 2 years we were part of a revolution in development technology
The revolution was not broadcast on TV
Bill and Scott didn't cover it in their respective key note speeches
It wasn't on MSDN , or java.sun.com
Gerald Bauer was'nt upset about it
There were no ads for this revolution
I guess it was fitting that it came from Prague , like others before it, bringing freedom and joy to
the oppressed, battling to keep the windows complete and the code clean under the old regime.
IDEA changed all that , and if imitation is the sincerest form of flattery,
then the Eclipse team have certainly flattered it enough.
So I will just add a small personal note : JetBrains, thank you for making my working life better.
The Repetitive Test Injury Pattern
Fri, 3 Oct 2003 18:58:11 -0400
This is how it happens:
you are developing a part of the application that involves looking up some data
based on a user provided pattern ( country code, counterpart code whatever ) ,which then queries the database, displays some results on the screen or page , and allows you too work with the results
in some way , perhaps zoom on a single result in more detail, certainly sort the results.
You spend time on this page, perhaps two, three, or even more days going through the same repetitive sequence :
- Change the code
- Run the application / Web Container
- Load the page
- Type a pattern for the lookup
- Sort the result by clicking on a column header
- Zoom on a particular result
Then your boss walks round to your desk to see the cool new screen.
He tries it
The app blows up with some exception
He tries again , and this time gets some results, he tries to sort them.
They are incorrectly sorted
He tries to zoom on one
How can this be , you have done this over and over, hundreds of times in the last few days without a hitch?
You have just been a victim of Repetitive Test Injury.
You were using the same lookup pattern every time
You were sorting the same column every time
You were zooming the same record every time
Hundreds of potential opportunities to find new bugs squandered. And
the humiliation of seeing your boss enjoy himself so much :-)
Just Say No - Don't Repeat your Manual Tests, Take every opportunity you have to widen the test circle.
With thanks to Fred Tingey, who has stood smiling at my NPE's and GPF's many times...
Winter is Coming
Wed, 1 Oct 2003 17:56:04 -0400
Sore Throat - check
Fever - check
Want to stay in bed and not go to work - check
Winter is coming again.