<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3782954984366933851</id><updated>2012-01-28T05:56:32.192+13:00</updated><category term='pascal'/><category term='Delphi SourceSafe'/><category term='Delphi best practice'/><category term='Leadership'/><category term='SQL'/><category term='Delphi 2007'/><category term='Subversion'/><category term='Development Methodologies'/><category term='Database'/><category term='Delphi'/><category term='programming'/><category term='Tools'/><category term='Interbase'/><category term='dsk'/><category term='Indy'/><category term='Firebird'/><category term='Tips'/><category term='Management'/><category term='Gemini'/><category term='project group'/><title type='text'>Steve's Software Development Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3942634598307542124</id><published>2011-08-29T18:52:00.001+12:00</published><updated>2011-08-29T18:59:35.425+12:00</updated><title type='text'>The upcoming Skills Shortage</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-N7BAN7tWVKE/Tls3I1ASJ6I/AAAAAAAACM8/PjV1eRWH2Kc/s1600/skills+shortage.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://3.bp.blogspot.com/-N7BAN7tWVKE/Tls3I1ASJ6I/AAAAAAAACM8/PjV1eRWH2Kc/s200/skills+shortage.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;There has been some talk in the news recently of an upcoming IT skills shortage in the country when we still have a high unemployment rate.&amp;nbsp; I have noticed that every time there is a period of great unemployment, this is followed by what is&amp;nbsp;perceived&amp;nbsp;as a skills shortage.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;During the employment and financial crisis of the last few years, those companies who were able to hire got very used to the idea that they could get exact fits to their needs. While there was high unemployment through these times, companies and employment agencies became comfortable with the knowledge that every job advertised would have a hundred or more applicants. They could then be extremely picky about their exact needs. In other words, if they wanted, say, a senior Java developer to assist them in programming plugins for Atlassian's Jira, then they could easily expect to find amongst the applicants, some who have 3-4 years exerience specifically programming jira plugins in Java.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;This is no longer the case and employees and agencies are crying "Skills Shortage" to the government. Too bad if there are 120 others within a 10 mile radius who are very well qualified and capable and have enough experience to quickly pick up the industry and product knowledge - heaven forbid but they may even be 10 years younger or older than all of the others in the team. Who know's they may even bring some diversity to the team, especially if they are originally from another country or have a different accent and skin color.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;While we do need those highly qualified and experienced people, employing good people willing to work their guts out for opportunity might resolve some of the issues.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Your thoughts?&amp;nbsp;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3942634598307542124?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/3942634598307542124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/upcoming-skills-shortage.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3942634598307542124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3942634598307542124'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/upcoming-skills-shortage.html' title='The upcoming Skills Shortage'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-N7BAN7tWVKE/Tls3I1ASJ6I/AAAAAAAACM8/PjV1eRWH2Kc/s72-c/skills+shortage.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3529128871830884120</id><published>2011-08-28T15:55:00.008+12:00</published><updated>2011-08-28T22:35:09.245+12:00</updated><title type='text'>Of Tablets and Things</title><content type='html'>Although tablet PC's have been out for a few years, the introduction of Apple's iPad really heated up the market. It has been touted as the only useful tablet on the market and indeed, having owned an iPhone for a few years, I had a serious case of "wanna/needa".&lt;br /&gt;&lt;div&gt;&lt;br /&gt;The time finally came when my old Asus WinXT based netbook had too little battery life left for any serious use, the keys were so worn that a lot of the letters on them could no longer be seen and so I finally had to admit that I needed a new one (That sounded like a good enough excuse I thought). I went searching.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Seriously, at the start of the search I was convinced that this was my chance to get an iPad. I had looked at them many times but when I came to actually parting money, well, I type too much and the idea of doing that much typing on a screen pad put the shivers up me. I still liked the idea of the tablet though so I broadened my search. It must be noted that since the final purchase, HP TouchPad was all but given away but unless you were staff, or best friends of staff, few were able to purchase one.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-z_P82PQkFnU/Tlm7X8s3VoI/AAAAAAAACM4/gJpPqvFG3Tc/s1600/transformer2.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-z_P82PQkFnU/Tlm7X8s3VoI/AAAAAAAACM4/gJpPqvFG3Tc/s320/transformer2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;So I ended up with a transformer from Asus. Yes, I was also interested in the Android market. I'd heard a lot of statistics about android but knew these to be based on cheaper phones rather than the tablet market but I felt it had matured enough for the purchase. The Asus Transformer allows me to have a keyboard, but detach the screen to have a fully functional Android tablet.&lt;br /&gt;&lt;br /&gt;I have had this now for a few weeks, so what is my verdict? Having used windows, iPhone, and now Android for serious productive work, I still rate Windows as the basis for the type of work I do. I have been extremely surprised at the quality and usefulness of iPhone apps for on-the-go applications though and regularly enter information including mind maps, documents, and spreadsheets and keep track of my spending habits with it. I have tried to use it for reading books, but it just doesn't work - too small.&lt;br /&gt;&lt;br /&gt;Essentially I wanted a tablet so that I can detail mind maps in my work speaking to customers, pan out presentations, and detail some notes on the go. I also want to be able to read books anywhere - I found I can't really do that on the iPhone despite some serious book reading apps.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm pleased with my purchase with only a little hesitation. I love the ability of the keyboard to enter in bulk text but am just a little disappointed in the quality of the applications. I have some frustrations with it as well, mainly around the use of the keyboard. Keyboards are new to Android so I eagerly await updates that will recognise this. Using the keyboard I cannot use Ctrl-Arrows to jump to the next or previous word, despite how many times even in writing this I try. The copy and paste works but not as well as iPhone (I know others disagree) but copying the right set of characters is still a little hit and miss, even with its grab-able handles.&lt;br /&gt;&lt;br /&gt;There is a couple of very good MS-Office applications available and the Asus Transformer comes with one of them installed. I'm also pleased to find that applications like DropBox and EverNote (I'm using that now), are available for this divide so its easy to move stuff around between computers. The only true disappointment that I have come across is the Mind Map app. I use Mind Maps extensively in my work and I'd have to say is one of the main drivers for me in getting a tablet. The only one currently available on the Android market is called "Thinking Space" and looks every bit as good as the ones I'm used to. However when I use it I find the menus are confusing and not intuitive. The icons are in some cases just wrong - e.g. an icon with a plus sign means create another node as a child of the current node, and an icon with a plus and a right-arrow means to create another node on the same level. It just doesn't make sense. Also, when I do create another node, the focus stays on the previous node, I have to specifically select the newly created node to type into it, when it seems obvious that I'd want to type into the node I just created. But despite the frustrations, this does look&amp;nbsp;promising&amp;nbsp;and I eagerly wait for these few items to be updated to make it more intuitive and easily work.&lt;br /&gt;&lt;br /&gt;I'd say that the Android app market still has a way to go to catch up with the quality of serious apps that is available on my iPhone. The tablet is new to Android and I find that most of the apps that I download to try out, do not make use of the extra screen space and are clearly built for the tiny mobile phone screen. I am convinced though that this will change, and soon.&lt;br /&gt;&lt;br /&gt;While its fair to say that I should have simply got a replacement to my Windows netbook, I really want to put in the time and effort to use the tablet.&lt;br /&gt;&lt;br /&gt;Just as an after thought - my partner has just purchased the very new MacBook Air. For the first time in many years I had to finally agree that she owned a far better computer than I did. I'll keep an eye on this very disturbing development to see where it leads.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3529128871830884120?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/3529128871830884120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/of-tablets-and-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3529128871830884120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3529128871830884120'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/of-tablets-and-things.html' title='Of Tablets and Things'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-z_P82PQkFnU/Tlm7X8s3VoI/AAAAAAAACM4/gJpPqvFG3Tc/s72-c/transformer2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-5333718479899806097</id><published>2011-08-14T18:19:00.000+12:00</published><updated>2011-08-14T18:19:37.600+12:00</updated><title type='text'>Evaluating Software Teams</title><content type='html'>&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-XzH3dPTqDHA/TkdlhRWSQSI/AAAAAAAACMo/WvX2MqimvPg/s1600/appleorange.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="http://3.bp.blogspot.com/-XzH3dPTqDHA/TkdlhRWSQSI/AAAAAAAACMo/WvX2MqimvPg/s200/appleorange.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="-webkit-text-size-adjust: none; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;There has been a very interesting discussion on one of the LinkedIn groups I belong to on evaluations of team members for Software Teams and how to go about it. If you manage a Development team you'll know the answer isn't as simple as comparing producing features against the number of bugs, it's far more complicated than that.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="-webkit-text-size-adjust: none; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Often there is little in software development to quantify and you are working with as many different people as you have team members. They all have differing levels of skills and different personalities.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&amp;nbsp;Even the area of applications they work in will make comparing production to other team members almost impossible.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Developers can knock over 20 bugs and add 3 new functions in a one day but spend the next week trying to resolve a single bug. Performance against sheer production is just not an option.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Managers need to look at other options.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;To properly evaluate, managers must be able to repeat the same evaluation 6 months later and compare the two to see if the individual is performing better than he/she was in the first evaluation, so the evaluation must be against something that is quantifiable, repeatable, comparable, and understandable.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Luckily there are things that you can use other than functions vs bugs. You can evaluate items like:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Standard of dress (programmers turn up in tee shirts - but are they clean and non offensive).&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Attendance to work during required times and hours. This will include calling in if late for any reason.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Attendance to meetings&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Quality of documentation and testing&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Time to respond to a request&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Ability to get along with the others in a pleasant and non-disruptive way&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Ability and willingness to help out others with mentoring. Includes things like contributing at meetings. Must be weighed up with doing their own work.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Following the correct process&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;If customer interaction is involved, how many complaints and compliments.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Desk tidiness (mine is terrible so I have to make a real effort to tidy it every couple of days).&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Willingness to take on new work.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;General attitude&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Attitude to change&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Clarity and effectiveness of documentation&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Try marking these out of 5 (5 being the best). Try to keep them all around 3 so that areas of discussion and commendation are easily highlighted.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;After this the manager can make general comments on their assessment of the team member's skills. This part however is very subjective so must be introduced as comments only discussed behind closed doors and something for them to consider, but its not anything that can be quantified so it can't go into, say, consideration for a bonus.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Try not to compare team members against others - this is THEIR evaluation. It's also not wise to evaluate the team itself - the team is where YOU will be evaluated, not the individuals.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Your comments?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="-webkit-text-size-adjust: none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-5333718479899806097?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/5333718479899806097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/evaluating-software-teams.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/5333718479899806097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/5333718479899806097'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/evaluating-software-teams.html' title='Evaluating Software Teams'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-XzH3dPTqDHA/TkdlhRWSQSI/AAAAAAAACMo/WvX2MqimvPg/s72-c/appleorange.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4341722825478318092</id><published>2011-08-14T17:50:00.000+12:00</published><updated>2011-08-14T17:50:27.413+12:00</updated><title type='text'>Employment Scene over the last two years</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;a href="http://4.bp.blogspot.com/-mlASp-8Cc8g/Tkdh9YUVhOI/AAAAAAAACMk/QgeqeCrTSzM/s1600/nowork.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="156" src="http://4.bp.blogspot.com/-mlASp-8Cc8g/Tkdh9YUVhOI/AAAAAAAACMk/QgeqeCrTSzM/s200/nowork.jpg" width="200" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;It's been hard to miss, the financial crisis of the last few years.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;There have been some real horror stories coming from the United States on the employment scene with many people losing everything, starting with their jobs. In one case I know, a person with a well run retirement fund that had grown to around 14 million, was reduced to a few hundred thousand in a matter of a few days. Things are a little better now but the fabulous retirement that was planned will now never be.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;Australia&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;fared&amp;nbsp;reasonably well on the world stage but still suffered some serious concerns for both full time employees and consultants. The downturn meant that few were hiring. I spoke to an employment agent in&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;Sydney&amp;nbsp;during that first 18 months. His business was not doing very well&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;and he told me that&amp;nbsp;although&amp;nbsp;you could walk the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;streets&amp;nbsp;in Sydney and see crowds of people in business suits going about their work, it was his estimation that at least a quarter of those you saw on the street were looking for work. I considered myself very lucky to have found work during that time.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;New Zealand did not fair as well. When I returned to Wellington at the end of the first quarter last year, I took up a contract with a Government department here. Paradoxically, this contract itself would not have been available except that there was a freeze on employment and they took in a contractor instead. One of the few management positions&amp;nbsp;available&amp;nbsp;for contract. During that time we were able to employ a number of others into short term contracts for necessary projects.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;In the interviews, it was immediately obvious that every person, some very highly qualified and experienced, had a large gap in their employment. The financial downturn turned a lot of very good people out on the street. The look behind their eyes when we discussed this with them showed the horror of the times on their personal and family lives.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;Things are just starting to get a little better but there is still a long way to go before we get anywhere near the heady days of only 5-6 years ago.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4341722825478318092?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4341722825478318092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/employment-scene-over-last-two-years.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4341722825478318092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4341722825478318092'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/employment-scene-over-last-two-years.html' title='Employment Scene over the last two years'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-mlASp-8Cc8g/Tkdh9YUVhOI/AAAAAAAACMk/QgeqeCrTSzM/s72-c/nowork.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-1305468745098938168</id><published>2011-08-14T17:18:00.000+12:00</published><updated>2011-08-14T17:18:17.707+12:00</updated><title type='text'>Returned</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4JvrL8GjrP8/TkdWlRMncNI/AAAAAAAACMg/6WWaye5N_1k/s1600/returned.jpg" imageanchor="1" style="border-bottom-color: initial; border-bottom-style: initial; border-bottom-width: 0px; border-left-color: initial; border-left-style: initial; border-left-width: 0px; border-right-color: initial; border-right-style: initial; border-right-width: 0px; border-top-color: initial; border-top-style: initial; clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-4JvrL8GjrP8/TkdWlRMncNI/AAAAAAAACMg/6WWaye5N_1k/s200/returned.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;I've been very remiss in updating this blog over the past couple of years and I'd like to kick start it again. I get a lot of enjoyment and learning from writing this blog and I've had a lot of feedback to say that others also get that same enjoyment.&lt;br /&gt;&lt;br /&gt;There has been a lot of things happening over the last two years.&lt;br /&gt;&lt;br /&gt;I've found it very sad that I was placed into a position where I had no choice but to return to New Zealand from where I was living in Australia. I loved Australia and the people there. New Zealand has wonderful people too but I had built up a number of friends in both Melbourne and Sydney and a even few in Perth (although I never actually got to Perth).&lt;br /&gt;&lt;br /&gt;My main areas around application development teams has been a joy to me in my contracts, and although my secondary area of Marketing has also been of use, it's the team and the process that has always been of greatest interest.&lt;br /&gt;&lt;br /&gt;This last few years has seen me in different contracts as a Marketing Manager; a Software Development Manager for a government department; and a Software Consultant for a team with a great product now in Wellington New Zealand.&lt;br /&gt;&lt;br /&gt;Over this time I've been very involved in a number of projects and technologies so there is plenty of interesting bits that I can delve into. I'm back on the Blog scene again and will update this again shortly.&lt;br /&gt;&lt;br /&gt;While I was away I had so many spam posts that I had to switched off the ability to comment on my posts. I feel sad that I have to apologise for the stupidity of a lot of people - mostly Indian programming companies touting for work by adding posts that said things like "I agree" and signing off with their company link. Those posts will be removed and the company reported to the blog hosting company so they will be blocked.&lt;br /&gt;&lt;br /&gt;I'll begin posting again shortly.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-1305468745098938168?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/1305468745098938168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/returned.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1305468745098938168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1305468745098938168'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2011/08/returned.html' title='Returned'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-4JvrL8GjrP8/TkdWlRMncNI/AAAAAAAACMg/6WWaye5N_1k/s72-c/returned.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-6285130679482059503</id><published>2010-02-10T10:30:00.001+13:00</published><updated>2010-02-10T10:30:20.517+13:00</updated><title type='text'>Leadership of the Technical Team #3</title><content type='html'>&lt;p&gt;Number 3 in the series on Technical Leadership. &lt;/p&gt;  &lt;h3&gt;Makes Decisions for the Team&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_PDRhMtwI0ss/S3HT31kGeEI/AAAAAAAACHk/1bEfAavHlcQ/s1600-h/top%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="top" border="0" alt="top" align="left" src="http://lh3.ggpht.com/_PDRhMtwI0ss/S3HT44aSnfI/AAAAAAAACHo/qF2PCU46zUw/top_thumb%5B3%5D.png?imgmax=800" width="199" height="225" /&gt;&lt;/a&gt; I was surprised to find that this section was more difficult to write for several reasons. the title “makes decisions for the team” is something that I could have well reconsidered as it seems both obvious and at the same time very snobbish and places the leader in a position that should not be taken – at the top.&lt;/p&gt;  &lt;p&gt;Most people automatically place the leader at the top of the team in a visual organisational chart. While the organisational chart does indeed show this position at the top, it is not the visual reference that I want to portray. I’d suggest that the leader is the one underneath; leading from behind or holding the team up; in a supporting role; carrying all the responsibilities of the team; a servant to the team; and the person protecting the team from the politics and pressures that attempt to divert the team from its path of productivity and enjoyment.&lt;a href="http://lh6.ggpht.com/_PDRhMtwI0ss/S3HT5mCWhyI/AAAAAAAACHs/2Z9qK51NB3s/s1600-h/bottom%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="bottom" border="0" alt="bottom" align="right" src="http://lh3.ggpht.com/_PDRhMtwI0ss/S3HT62I6mdI/AAAAAAAACHw/5bPNlCLOHbM/bottom_thumb%5B2%5D.png?imgmax=800" width="198" height="210" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;One of the ways a leader can serve and support his/her team, is in making decisions for the team as a whole.&lt;/p&gt;  &lt;p&gt;In the position of leader and manager, you are expected to move the focus from the code being produced to the product. You are also expected to know and understand the perspective of several other areas including those of the boss, the company, the customer, the financial budget, and those of other departments within the company.&lt;/p&gt;  &lt;p&gt;It has been said that there are two different types of leaders - we’ll ignore the fact that there are several, just for this instance, let’s assume there are two. Take, for example two good managers of forestry teams tasked with clearing a section of forest and harvesting its timber.&lt;/p&gt;  &lt;p&gt;Leader One will take his team into the forest, start them cutting trees in the most effective pattern that his experience shows for its productivity; he’ll have the trucks lined up to take away the timber in the correct times in the correct order; have the forklifts correctly placed to load the trucks; and have everything running like clockwork so that he/she clears the most timber of any forestry team. That is an excellent team and a good leader.&lt;/p&gt;  &lt;p&gt;However, Leader Two will go into that same section of forest but before work begins, this leader will climb a tree, have a look around and come down to declare to his team that they are in the wrong forest and they should be over the other side of the hill.&lt;/p&gt;  &lt;p&gt;Leader One was acting in the best interest of the project looking at the tasks required and delivering to the tasks. Leader Two however realised that his position was to serve the team by having the ability to view the larger picture, ensuring that the team not only delivered to the project, but delivered to the RIGHT project in the CORRECT direction to also serve the company.&lt;/p&gt;  &lt;p&gt;This ability to raise your head above the tasks at hand to see the overall picture is usually very difficult for those whose lives to this point revolved around climbing inside the disk drive door, only coming out to eat or sleep. &lt;/p&gt;  &lt;p&gt;The leader is in a position to make everyday decisions for the team. With the knowledge and understanding of the forces that effect the team, the leader can guide the team into exceptional productivity and communicate that to those others in the company who need to know. Communication is a strong point and I direct you to a previous post titled “&lt;a href="http://stevepeacocke.blogspot.com/2009/04/even-programmers-need-to-communicate.html" target="_blank"&gt;Even Programmers need to Communicate&lt;/a&gt;”.&lt;/p&gt;  &lt;p&gt;Don’t be scared to make decisions. You will never have all the information, so make decisions on the information that you do have. Some of the most ineffective managers I have come across will be those who will not make decisions but continually wait for more information. &lt;/p&gt;  &lt;p&gt;Remember, you can always change or deal with a bad decision but you can do nothing when no decision is made. Yes, be prepared and able to hold your head up high while you do a total 180 on a decision as more information becomes apparent. &lt;/p&gt;  &lt;p&gt;I have never understood the old saying of &amp;quot;make a decision and stick to it&amp;quot;. That is unwise advice and will have you standing in the wheelhouse of a sinking ship with total resolve as you draw your last breath in the knowledge that you stuck to your decision to ram the iceberg even after it became apparent that it was larger than your ship. &lt;/p&gt;  &lt;p&gt;A good leader will not only make decisions, he will also allow the team to make decisions where appropriate. Grow your team by allowing them to make decisions where they are able. Ensure that they have as much information as possible to allow that decision without attempting to tell the team which decision they should make (although there are times when that might be required). However, be also prepared to stand behind the decision that is made and make it clear to the team if it becomes apparent that they should make a change to that decision.&lt;/p&gt;  &lt;p&gt;Rely on your gut feelings, they will NEVER fail you. Just make sure it is your gut you are feeling and not your heart - that can fail you.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-6285130679482059503?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/6285130679482059503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2010/02/leadership-of-technical-team-3.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6285130679482059503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6285130679482059503'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2010/02/leadership-of-technical-team-3.html' title='Leadership of the Technical Team #3'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_PDRhMtwI0ss/S3HT44aSnfI/AAAAAAAACHo/qF2PCU46zUw/s72-c/top_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-9181266421738093426</id><published>2009-12-16T00:16:00.001+13:00</published><updated>2009-12-16T00:16:38.232+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Leadership'/><title type='text'>Technical Leadership #2</title><content type='html'>&lt;p&gt;(continuing on from “Leading the Highly technical Team”)&lt;/p&gt;  &lt;p&gt; The thing about leadership is that its such a large subject and there are any number of books and other writings on the subject. The point that I'd like to make, stated in my last instalment, is that leading technical teams has some very different aspects to leading other teams. &lt;/p&gt;  &lt;p&gt;However some things don't change. There are lot of young people who have been placed onto a leadership role and have had no training or mentoring and in these days of tight training budgets, and no place to get it. Often these people are given those roles due to nothing more than their technical knowledge. It is my hope that this series will give those people some basis for their new career.&lt;/p&gt;  &lt;p&gt;Firstly, for those who are starting in on this path I will congratulate you. You have shown that you do have the ability to lead, even if you don't yet realize it. To get to this point you have not only shown leadership in the past but you probably also have the support and recognition of your peers. All you need is some training.&lt;/p&gt;  &lt;p&gt;Let's cover the bases first, in no particular order a good team leader…&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;has empathy with both the team and the individuals in the team. &lt;/li&gt;    &lt;li&gt;makes decisions for the team&lt;/li&gt;    &lt;li&gt;is able to listen effectively and impassively &lt;/li&gt;    &lt;li&gt;stands between the team and others who might work against the team&lt;/li&gt;    &lt;li&gt;gains the respect of the team &lt;/li&gt;    &lt;li&gt;ensures the productivity of the team &lt;/li&gt;    &lt;li&gt;ensures the ongoing enjoyment and cohesion of the team &lt;/li&gt;    &lt;li&gt;ensures the team produces in the overall direction of the company &lt;/li&gt;    &lt;li&gt;ensures the team works effectively with others &lt;/li&gt;    &lt;li&gt;makes the very hard decisions that are sometimes needed for the good of the team&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Empathy&lt;/h4&gt;  &lt;p&gt;Empathy itself is a large subject and absolutely essential for leadership. Without it you are nothing more than a manager and possibly a tyrant.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_PDRhMtwI0ss/SydwEGXRRfI/AAAAAAAACHc/PSsEbiPHM68/s1600-h/friends%5B10%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="friends" border="0" alt="friends" align="left" src="http://lh5.ggpht.com/_PDRhMtwI0ss/SydwFBS9pSI/AAAAAAAACHg/LLKmN7WaD74/friends_thumb%5B8%5D.jpg?imgmax=800" width="311" height="386" /&gt;&lt;/a&gt;Empathy means to have an understanding of another person's viewpoint. Not just knowledge of, but “understanding”, there's a big difference. Some have described empathy as &amp;quot;Agape&amp;quot;.&amp;#160; Agape is a Greek word with several meanings relating to a type of love. In this case the meaning I’m using is of a brotherly type of kinship, understanding, placing yourself in another’s shoes, a non-physical, non-sexual type of love. Not the English word or meaning of love but something that still means a positive emotional, yet professionally appropriate, feeling towards another.&lt;/p&gt;  &lt;p&gt;Don't confuse this with agreement, its not necessary to agree with someone to have a true understanding of their viewpoint. This empathic feeling goes towards the team as a whole as well. &lt;/p&gt;  &lt;p&gt;Often during this series I'll be talking about the individual and the team as if they are entirely separate and this is definitely the case. The team is like another identity that takes on it's own role and personality. I have even seen teams hell-bent on doing something that none of the team members want, usually a very bad situation, however it goes to show that the team itself does take on a personality of it's own. It's up to the leader to ensure the team's personality is in harmony with those in the team, and with the positive purpose of the team.&lt;/p&gt;  &lt;p&gt;It is then with this empathy that the leader can understand the person's position and feels a genuine compassion for the circumstances, but in their position of management he/she also must take into consideration all the other factors surrounding a decision and acts accordingly. Being empathic, the leader will let the person know that he/she understands their position and communicates both his/her understanding, and the final decision equally.&lt;/p&gt;  &lt;p&gt;I can almost hear some readers say that this talk of empathy will show a leader to be weak. Not at all, in fact I might suggest that if you are at all worried about appearing weak to your team, then perhaps you may have to reconsider how you interact with them. Are you leading them from the front, or are you chasing them from behind?&lt;/p&gt;  &lt;p&gt;Weakness suggests that you can’t make those all important decisions and are easily led. We’ll get to those hard decisions in a later part of this series, but I’d suggest that you don’t even go there for the moment. You don’t want to appear ready and able to be the hire/fire kind of boss that looks around only to find no-one there.&lt;/p&gt;  &lt;p&gt;Empathy has nothing to do with either strength or weakness. It has to do with understanding your team. &lt;/p&gt;  &lt;p&gt;For the technical team this takes on another dimension. It is rare indeed that the leader has all of the skills of the team. I’ve heard even recently a manager claim that he would never ask one of his team to do something that he would not be able to do. This is a fallacy, in a technical team all the team members are there because they have specialist knowledge that is sometimes very unique. Its not possible for a leader to do everything the team members are able to do unless the members are reduced to a single skill level. Not a very effective team in most cases.&lt;/p&gt;  &lt;p&gt;I couldn’t do half the things my wife does and she could not attempt to do a lot of what I do, yet we make a very effective team. As leader I have led teams who program in several languages on several platforms and have qualified skills that I could not master without the years of training and experience that they have. This I consider ideal as every member of every team is different. I have great admiration for the skills of the team members and this in turn prompts me to do the very best for the team; to be there for them when they need it; to listen; to stand for them against others; and to serve in the best way I can to allow them to use those unique skills. That is empathy.&lt;/p&gt;  &lt;p&gt;Rather than weakness, this empathy is what allows a leader to make what are sometimes very hard decisions for the good of both the team and its individual members.&lt;/p&gt;  &lt;p&gt;continued next session…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-9181266421738093426?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/9181266421738093426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/12/technical-leadership-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/9181266421738093426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/9181266421738093426'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/12/technical-leadership-2.html' title='Technical Leadership #2'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_PDRhMtwI0ss/SydwFBS9pSI/AAAAAAAACHg/LLKmN7WaD74/s72-c/friends_thumb%5B8%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-7246951333399668608</id><published>2009-12-12T00:38:00.001+13:00</published><updated>2009-12-12T00:38:11.594+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Leadership'/><title type='text'>Leading the Highly Technical Team</title><content type='html'>&lt;p&gt;Leading a team is definitely challenging but leading a technical team is a very specialised area&lt;a href="http://lh4.ggpht.com/_PDRhMtwI0ss/SyIvHOt9V9I/AAAAAAAACHQ/MipJjXNP7Wg/s1600-h/TeamLead%5B10%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="TeamLead" border="0" alt="TeamLead" align="right" src="http://lh4.ggpht.com/_PDRhMtwI0ss/SyIvIpGnWzI/AAAAAAAACHU/uSAHjl11VQY/TeamLead_thumb%5B8%5D.jpg?imgmax=800" width="322" height="247" /&gt;&lt;/a&gt; that is extremely demanding. It is very different to other teams in many ways. A highly technical team is made up of artistic individuals who have a world of knowledge, skills and experience in their own technical areas. The highly skilled technical engineer, developer, programmer, or analyst are not generally known for their people skills. This results in every individual of the team wanting to head in their own direction, each certain that their choice is the right one and demanding that others follow their direction, even the boss.&lt;/p&gt;  &lt;p&gt;They not only fall into the “we’ve tried that before and it didn’t work” attitude for every idea, as do most teams anywhere, but these individuals also are more likely to get upset with any changes, need to feel more status than others, and need to be recognised for their often very unique skills.&lt;/p&gt;  &lt;p&gt;I have been very fortunate to have made a career out of leading technical teams, sometimes multi cultural, sometimes leading several teams based in different countries around the world.&lt;/p&gt;  &lt;p&gt;When thinking about this recently I began to wonder about a question often asked, what makes a good leader? I’ve heard it said that people can be born leaders. Absolute rubbish! People are not born leaders, rather they are a product of the experiences they have and the people they meet. Its those experiences and the advice and ideas they get from people they grow to admire that gives them the tools and mindset to lead others.&lt;/p&gt;  &lt;p&gt;Sure there are various skills required to be, for example, a development manager - project management and methodology understanding are some, but I'm not talking about management, I'm talking about leadership. The difference is that a manager manages things but a leader leads people.&lt;/p&gt;  &lt;p&gt;Its not much help having a masters degree in project management when your team has no wish to do the project, our you are faced with a team member who wants to undermine you and your project in order to get recognised by the boss above you. Sure you can threaten dismissal or some other disciplinary action but that's not necessarily leadership.&lt;/p&gt;  &lt;p&gt;Leadership is having empathy with the team and the individuals within the team, and the ability to focus that team towards a common goal. Providing a common direction is a difficult task for managers and it takes leaders to turn a team towards that common goal.&lt;/p&gt;  &lt;p&gt;It’s a sad and unfortunate fact that there seems to be more managers these days than leaders.&lt;/p&gt;  &lt;p&gt;To be continued…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-7246951333399668608?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/7246951333399668608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/12/leading-highly-technical-team.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7246951333399668608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7246951333399668608'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/12/leading-highly-technical-team.html' title='Leading the Highly Technical Team'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_PDRhMtwI0ss/SyIvIpGnWzI/AAAAAAAACHU/uSAHjl11VQY/s72-c/TeamLead_thumb%5B8%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-6732760762243879571</id><published>2009-12-10T13:54:00.002+13:00</published><updated>2009-12-10T15:00:35.617+13:00</updated><title type='text'>Word Clouds</title><content type='html'>I've been playing around with Word Tags or Word Clouds recently and was directed to a website called Wordie (http://www.wordle.net).&lt;br /&gt;This website allows anyone to create word clouds from their favourite websites. Here's mine from my blog.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PDRhMtwI0ss/SyBGhB-FRBI/AAAAAAAACGk/VtQl47LGc-o/s1600-h/wordcloud.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://4.bp.blogspot.com/_PDRhMtwI0ss/SyBGhB-FRBI/AAAAAAAACGk/VtQl47LGc-o/s400/wordcloud.PNG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Calibri, sans-serif; font-size: medium;"&gt;&lt;span style="font-size: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-6732760762243879571?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/6732760762243879571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/12/word-clouds.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6732760762243879571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6732760762243879571'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/12/word-clouds.html' title='Word Clouds'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PDRhMtwI0ss/SyBGhB-FRBI/AAAAAAAACGk/VtQl47LGc-o/s72-c/wordcloud.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-1263250165024139028</id><published>2009-11-25T23:04:00.001+13:00</published><updated>2009-11-25T23:10:09.056+13:00</updated><title type='text'>The PDA Today</title><content type='html'>&lt;p&gt;It's a little off topic but I've been using it so much these days I thought it worth a mention.&lt;a href="http://lh5.ggpht.com/_PDRhMtwI0ss/Sw0Ayl1tu_I/AAAAAAAACF0/q1ikD6P9wVc/s1600-h/psion%5B9%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="psion" border="0" alt="psion" align="right" src="http://lh5.ggpht.com/_PDRhMtwI0ss/Sw0AzuuRkaI/AAAAAAAACF4/goBtN0urTDw/psion_thumb%5B7%5D.jpg?imgmax=800" width="216" height="152" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As mentioned in another post, I've used PDA devices since the late 90's starting out with the Psion 5 before I moved on to the very successful palm pilot, specifically the Palm Tungsten T. I switched to windows mobile with the purchase of the Palm Treo 700w a few years later and in the last year I have had an iPhone and a Blackberry and now back to an iPhone.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_PDRhMtwI0ss/Sw0A04RGl3I/AAAAAAAACF8/wX3w3J3Qe-A/s1600-h/Tungsten_T%5B7%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Tungsten_T" border="0" alt="Tungsten_T" align="left" src="http://lh6.ggpht.com/_PDRhMtwI0ss/Sw0A2KqMbrI/AAAAAAAACGA/P2uMK1h_1vc/Tungsten_T_thumb%5B5%5D.gif?imgmax=800" width="145" height="216" /&gt;&lt;/a&gt; My favourite was the palm tungsten with the great screen and huge array of very useful applications. It never left my side. It wasn't a phone at all but it was a very practical PDA device. I admit I've been struggling to find a replacement as genuinely practical as that little device since.&lt;/p&gt;  &lt;p&gt;The Treo 700w running Windows Mobile I found frustrating. The tiny screen did not allow the lengths that I took the Tungsten to with, for example, running spreadsheets and viewing the calendar showing handy icons (in a third party application). And the little keyboard took ages to&lt;a href="http://lh3.ggpht.com/_PDRhMtwI0ss/Sw0A30xG_3I/AAAAAAAACGE/F-KI6JFfsgs/s1600-h/Treo700w%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Treo700w" border="0" alt="Treo700w" align="right" src="http://lh4.ggpht.com/_PDRhMtwI0ss/Sw0A5Ebe4dI/AAAAAAAACGI/zi6_zxkpS9g/Treo700w_thumb%5B3%5D.jpg?imgmax=800" width="187" height="258" /&gt;&lt;/a&gt; learn effectively. I admit to reverting to Palm's hand writing characters as a preferred way of entering a reasonable amount of text.&lt;/p&gt;  &lt;p&gt;When I got my first iPhone I was dismayed. I couldn't even find a spreadsheet - one of my most useful tools. There was no copy and paste which was screamingly annoying and it just didn't have the power and usefulness I was… well… used to. Then, surprisingly, over the next couple of months I grew to understand the iPhone. It wasn't trying to be a PC and it did have it's limitations, but accept that and you ended up with something, although not nearly as powerful as other systems I've used, was very practical all the same. The penny had dropped and I finally understood the iPhone.&lt;/p&gt;  &lt;p&gt;The iPhone was supplied by the contract I was in at the time and when that was completed I handed that back.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_PDRhMtwI0ss/Sw0A6sAAf3I/AAAAAAAACGM/LAnE8YLua1Q/s1600-h/blackberry%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="blackberry" border="0" alt="blackberry" align="left" src="http://lh4.ggpht.com/_PDRhMtwI0ss/Sw0A7wknDII/AAAAAAAACGQ/lGMNH-hIuc4/blackberry_thumb%5B3%5D.jpg?imgmax=800" width="174" height="257" /&gt;&lt;/a&gt; The next contract supplied a Blackberry Bold 9000 as a standard device. Aha, I thought, back into the &amp;quot;blue suit&amp;quot; of devices. The Blackberry was the true workhorse. No time for nonsense like enjoyment. In my role controlling several development teams around the world and the fast push email processing I was getting emails all day and night. But the workhorse was solid and reliable ... Once I had ironed out the bugs.&lt;/p&gt;  &lt;p&gt;Turns out that the very limited memory for applications meant that every application had to be specifically closed down or the memory would soon fill up. Filling up the memory would slow the system down so much the device would be totally unusable until you were able to either reset the Blackberry, or wait long enough for each painful command until you got to a point where you could shut down enough apps for the system to work again - and even then sometimes it still needed a reset.&lt;/p&gt;  &lt;p&gt;This also prevented loading other applications so I was left with a pretty boring, yet (if I remembered to close each app regularly) a pretty effective one.&lt;/p&gt;  &lt;p&gt;One feature with the Blackberry that took me a while to get used to was that it didn't have a touch screen. No stylus, no finger pointing, just a little trackball controlling a cross-hair cursor. I will taper this with the fact that I'm an experienced PDA user and was forever trying to &amp;quot;tap&amp;quot; a link rather than move the cross-hair to it and &amp;quot;select&amp;quot; the link. I never got used to that but passed it into a learning experience, like learning to drive an automatic without trying to depress the clutch; or learning to be a passenger without trying to use the brake pedal.&lt;/p&gt;  &lt;p&gt;I did have a pretty major issue with it though. As I received so many emails that demanded my reply, I was annoyed to find that the Blackberry would &amp;quot;send me&amp;quot; every email I sent. In other words, not long after I fired off a quick reply I would receive another email. With so many emails coming in I would be forced to bring out the Blackberry again and check, only to find it was the email just sent and if I didn't open it to read it the Blackberry would forever show up that I had xx unread emails. Not something that endeared me to it after a while. I could not find a way around that issue.&lt;a href="http://lh6.ggpht.com/_PDRhMtwI0ss/Sw0A9gmedEI/AAAAAAAACGU/l8R4119Zj-M/s1600-h/iphone%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="iphone" border="0" alt="iphone" align="right" src="http://lh4.ggpht.com/_PDRhMtwI0ss/Sw0A-7HXnkI/AAAAAAAACGY/dabIfoxw460/iphone_thumb%5B2%5D.jpg?imgmax=800" width="206" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Recently I had an opportunity to purchase another phone so I looked at all the offerings.&amp;#160; Having a long and enjoyable relationship with Palm products I really wanted to get the Palm Pre but it's still not available in Australia with no signs of it ever being released here.&lt;/p&gt;  &lt;p&gt;I opted for the simplicity and sheer &amp;quot;nifty-ness&amp;quot; of the iPhone. The new 3Gs version was out here which answered a lot of my earlier issues. I am so far quite pleased with it. It's taken me a while to learn to type on it (all my recent blogs have been written on the iPhone and transferred to the PC for spelling and formatting. It keeps insisting to replace Aus words with their American spelling so I have to keep an eye on it. World domination ain't here yet people and we spell our words using S's and there’s no such thing as a Zee, they’re Zed’s&lt;/p&gt;  &lt;p&gt;But back to the iPhone and I find that the number and power of apps has increased dramatically in the last year. Yes there is even a spreadsheet now and clunky as it is, I can use copy and paste at last. I enjoy the wireless connection meaning the huge amount of data I paid up front for, hardly gets used at all as the danged thing keeps finding home, work, and free wireless connections to use.&lt;/p&gt;  &lt;p&gt;Below, a few screen dumps of some of my more favourite iPhone apps.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_PDRhMtwI0ss/Sw0BE4kppTI/AAAAAAAACGc/IvXGqXysCzs/s1600-h/iphonescreens%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="iphonescreens" border="0" alt="iphonescreens" src="http://lh6.ggpht.com/_PDRhMtwI0ss/Sw0BQJCwfOI/AAAAAAAACGg/5qEOOOmoemo/iphonescreens_thumb%5B3%5D.png?imgmax=800" width="637" height="335" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-1263250165024139028?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/1263250165024139028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/11/pda-today.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1263250165024139028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1263250165024139028'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/11/pda-today.html' title='The PDA Today'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_PDRhMtwI0ss/Sw0AzuuRkaI/AAAAAAAACF4/goBtN0urTDw/s72-c/psion_thumb%5B7%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3594892528095229683</id><published>2009-11-17T22:30:00.000+13:00</published><updated>2009-11-17T22:35:06.621+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>More on Cloud Computing</title><content type='html'>&lt;p&gt;A few posts ago I spoke on attending a Cloud Computing seminar put on by NetSuite. Since then I have looked into this a little more and &lt;a href="http://lh3.ggpht.com/_PDRhMtwI0ss/SwJtHzttUUI/AAAAAAAACFk/rJQOh6xAb2w/s1600-h/curosity%5B6%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="curosity" border="0" alt="curosity" align="left" src="http://lh5.ggpht.com/_PDRhMtwI0ss/SwJtI6Wjc2I/AAAAAAAACFo/ruiZgVPMxpo/curosity_thumb%5B4%5D.jpg?imgmax=800" width="279" height="212" /&gt;&lt;/a&gt;hope to dispel some of the misconceptions of Cloud Computing.&lt;/p&gt;  &lt;p&gt;The idea sounds great, and it's certainly the buzzword of the week if we believe the hype.&lt;/p&gt;  &lt;p&gt;&amp;quot;But hang on,&amp;quot; I hear some of you saying, &amp;quot;Cloud Computing is just having apps on the Internet and we've had that for years. Why should it be different just because someone wanted to get their PhD by coming up with a new name for old technology?&amp;quot; ...and you'd be right in asking that, its a pretty legitimate question in my book.&lt;/p&gt;  &lt;h4&gt;Definition&lt;/h4&gt;  &lt;p&gt;So let's define Cloud Computing precisely, even more than we did in my post of a few days ago. To be considered a true Cloud Computing system, an application must satisfy all of the following criteria:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Application on the Internet. &lt;/strong&gt;It must reside on the publically available Internet. Publically available does not mean anyone has access to your systems, you will still need to log in. Now there is such a thing as an Internal Cloud, and even a Private Cloud, but for the purposes of this paper I'm going to limit this to full public access applications. That is: externally hosted applications where you can use and store your information on the externally provided system (e.g. salesforce.com). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Data on the Internet. &lt;/strong&gt;The data you place into it must reside on the Internet, although obviously it must also be secure so that only you have access to your Data. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;No to little up-front costs&lt;/strong&gt;. You are not purchasing software licences or additional hardware. Sometimes you may purchase consulting services to assist in converting your systems and data. In some extreme cases like perhaps a corporate wide accounting system, additional consulting and training may be necessary. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Nothing is installed on your computer&lt;/strong&gt; apart from a web browser and perhaps some browser additions like adobe PDF viewer. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Costs are consumption based&lt;/strong&gt;. In other words pricing is charged per hour; gigabyte; or hits per month. The less you use it the less it should cost you, and the reverse is also true. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;On-demand&lt;/strong&gt;. The service should, in its minimum configuration, be able to be set up by the user for use that day. Of course in very large and complex corporate systems this may take planning and often highly specialised consulting services. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Scalable&lt;/strong&gt;. As far as the user is concerned they shouldn't have to worry about infrastructure at all. They should be able to increase from megabytes to terabyte throughput without having to organise storage or backups, extra staff, servers, or any of the other hassles. &lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Advantages of Cloud Computing&lt;/h4&gt;  &lt;p&gt;This definition of Cloud Computing shows up a number of areas of cost savings, reduced hassles, and sometimes increased functionality over in-house systems. These include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Costs can be avoided or deferred&lt;/strong&gt;. In most cases, increasing both functionality and capacity should be totally transparent&amp;#160; process. No server purchases or increased IT management. The regular billing cycles of the Cloud Computing model allow businesses to accurately forecast their IT budget based on known consumption levels. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Increases a business ability to change&lt;/strong&gt;. The on-demand model inherent in Cloud Computing enables organisations to increase or decrease computing capacity without hardware, or IT management concerns resulting in no lag time while IT management orders the new hardware; installs the appropriate drivers; sets up the new cabling; tests the newly raided disks; increases the tape backup facilities; increases rack space; sets up active directory; and all the project work that comes with installing new capacity. The ability to then, just as quickly reduce that capacity without worrying about costly hardware lying idle is one compelling reason for the Cloud Computing model. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Faster ROI&lt;/strong&gt;. The Cloud Computing model allows businesses to pay for only the resources it consumes and only as it consumes them. Businesses are able to see a faster return on their IT investment because there is no need to wait for the resources to be procured, provisioned, and managed. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Increased mobile workforce access&lt;/strong&gt;. Your users will be able&lt;a href="http://lh3.ggpht.com/_PDRhMtwI0ss/SwJtNShvSpI/AAAAAAAACFs/ZPQrxsgSArk/s1600-h/salesforce14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="salesforce" border="0" alt="salesforce" align="right" src="http://lh4.ggpht.com/_PDRhMtwI0ss/SwJtPhVbp8I/AAAAAAAACFw/3gcnPPb_Xx0/salesforce_thumb8.png?imgmax=800" width="212" height="240" /&gt;&lt;/a&gt; to access required business functionality without the overhead of network hardware, VPN software, and network management. Users will also be able to access their applications and data while at home, on the road, or in the office from any computer. Some Cloud Computing vendors (some through third party software vendors) allow access via mobile devices like the Blackberry or iPhone. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Additional expert IT staff.&lt;/strong&gt; Highly-skilled professionals are available through the Cloud Computing SaaS (Software as a Service) company to operate and maintain their (your) service. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Increases business continuity&lt;/strong&gt; by providing inexpensive disaster recovery options:. In some cases, cloud computing can be utilized as a viable disaster recovery option—especially for storage—thereby increasing business continuity. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;On the definition of Cloud Computing given in the last section, businesses and individuals should never be concerned about backups, infrastructure, server space, firewalls, upgrades, storage, daily security patches or any of the plethora of other things that are nothing to do with running their business.&lt;/p&gt;  &lt;p&gt;In summary, the ROI (return on investment) should be greater without the large up-front costs of infrastructure; software purchase and installation; and the manpower costs to manage it all. The infrastructure changes need no longer be a concern of the business allowing for both business growth and business reduction to occur without the penalty of either time lag and up front purchases or costly redundant and idle hardware. Also, business can plan their financial outlay with known, regular payments rather than up front large purchases.&lt;/p&gt;  &lt;p&gt;It is also the nature of some businesses that sometimes additional infrastructure and computing power may be needed for short periods of time. Cloud Computing will be able to accommodate these bursts without the huge infrastructure and set up time costs required for something that will not be needed after the task has been completed.&lt;/p&gt;  &lt;h4&gt;Pitfalls&lt;/h4&gt;  &lt;p&gt;All of this of course sounds like a utopian situation but to the consumer there are pitfalls that they should take into consideration before embarking down that path. These can be summarized as the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Be sure of the SLAs. It is up to the consumer to be happy that the SLA will cover their requirements and that they can survive any unforeseen downtime or lack of service. Of course this downtime may also occur even when they have the best server rooms and the best of staff so normal disaster management plans should always be in place anyway. &lt;/li&gt;    &lt;li&gt;Consider the SLA that you provide to your customers. Will holding their data off-line hold up if a customer questions an SLA they hold with you?&amp;#160; This is often overlooked in the rush for the savings and ease of adopting Cloud Computing. &lt;/li&gt;    &lt;li&gt;Vendor lock-in. Will the provider allow you to access your data and how soon can they get it to you if you ask for it? Will they work with another provider to transfer your data if you ask for it? How easy will it be to transfer? Even if you could download your data, will it be accessible to you or will it be in a proprietary format only available from the provider? &lt;/li&gt;    &lt;li&gt;How secure is your data from other eyes. It is possible that your closest competitor is, or will in the future be, using the same service that you are using and perhaps even shared resources. How will you know if your data has been stolen or hacked? Perhaps one way is to review the audit trail - if there is one. This may be able to let you know if someone is using an old forgotten login to access your data or if someone is having too much access that should be investigated (it may be a very valued employee so care must be taken as others may have obtained their login). How can you tell if a sysadmin has copied your data? What security is in place at the SaaS provider to ensure this does not happen? Are they open to an external audit of their security? &lt;/li&gt;    &lt;li&gt;Backups. What backups are taken? If your data is found to be corrupt, how far back can you go to obtain valid data? &lt;/li&gt;    &lt;li&gt;Deleted data. If you permanently remove some sensitive information, has it truly been removed? On what other systems has it been stored? &lt;/li&gt;    &lt;li&gt;Can you download your own data? Even if you can, will you ever be able to access it or is it in a proprietary format only available from your provider? &lt;/li&gt;    &lt;li&gt;Security. Many companies don't even know how many computers connect to their data now, or what data reside on those computers and how and when they are accessed. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;None of these items should stop you investigating Cloud Computing for your own organisation, however you should not abdicate your responsibilities to a third party provider. It is your data and your business that you are dealing with. It is up to you to not only obtain the cost savings that might ensure a good profitable business model for your company (or your employer's company), but to ensure business continuity in the event of the unforeseen.&lt;/p&gt;  &lt;p&gt;Many nay-sayers cite a few instances of data corruption or downtimes, however these must be put into perspective of supplying the service in-house. If an external audit was performed on your current in-house systems, would it pass muster? Have you complete security that your systems are safe and up to date with all patches? Do you know (I mean really know) who access your data now? If you had a disaster or fire on your premises that totally destroyed your server room and office, from an IT perspective would your business survive?&lt;/p&gt;  &lt;p&gt;Although Cloud Computing has been around for a number of years, only recently under that name, it is still seemingly in its infancy. The take-up has not been rapid in some cases. While customers can hand over CRM and email systems to the Cloud, handing over the full enterprise system to the Cloud may be a little hard for most of us right now.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3594892528095229683?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/3594892528095229683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/11/more-on-cloud-computing.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3594892528095229683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3594892528095229683'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/11/more-on-cloud-computing.html' title='More on Cloud Computing'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_PDRhMtwI0ss/SwJtI6Wjc2I/AAAAAAAACFo/ruiZgVPMxpo/s72-c/curosity_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-5063162037517412318</id><published>2009-11-03T21:58:00.001+13:00</published><updated>2009-11-03T21:58:17.126+13:00</updated><title type='text'>Problem Resolution or Project Resolution?</title><content type='html'>&lt;p&gt;Several years ago a large government department IT section was in almost total stasis with every person desperately running in circles at 110% capacity every day but nothing could be accomplished.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_PDRhMtwI0ss/Su_woRFFDyI/AAAAAAAACEs/RHTYbbZ_fiw/s1600-h/directions%5B6%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="directions" border="0" alt="directions" align="left" src="http://lh4.ggpht.com/_PDRhMtwI0ss/Su_wpwOFwfI/AAAAAAAACEw/6qHHpZfDVr4/directions_thumb%5B8%5D.jpg?imgmax=800" width="324" height="267" /&gt;&lt;/a&gt; Each person would come to work each day and arrive to problem after problem as management wanted this or that done urgently and a plethora of every day issues like simple user requests kept the IT staff occupied.&lt;/p&gt;  &lt;p&gt;It wasn't until the end of the day came and the staff crept away for the night before they were called to another crisis, that they realized that yet again, nothing tangible was accomplished.&lt;/p&gt;  &lt;p&gt;I was hired as the process and change consultant to come in and, along with other things, find a way to get things done.&lt;/p&gt;  &lt;p&gt;I was there for a number of months trying to find a way around this issue. I had other work which kept me occupied as I oversaw a large project so I wasn't simply sitting in an office (sadly, I'd like one of those jobs sometime ... or maybe not).&lt;/p&gt;  &lt;p&gt;At first I looked at the normal things like task management and priority and while this gave a little more clarity, it still didn't resolve the main problem of too few hours in the day. I looked at the logic of hiring more people but already this team was larger than most other IT departments for the size of the department.&lt;/p&gt;  &lt;p&gt;I tried several other &amp;quot;normal&amp;quot; and quite logical practices but this government department were set in their ways of abusing the IT staff, and in turn the IT staff were too used to stamping fires.    &lt;br /&gt;I was reminded of a saying as I explained the issue to a colleague one time: &amp;quot;sometimes, when you're fighting back crocodiles, it's hard to remember that the purpose of the exercise is to drain the swamp&amp;quot;.     &lt;br /&gt;It was then that I came up with a fairly drastic idea. I worked evenings and weekends over the next few weeks to fully document my plan. At last I took it to the executive for approval and was pleased to get an OK with their full support.&lt;/p&gt;  &lt;p&gt;Over the next few months the IT department were able to implement several major installations and other changes. Yes there were still the same number of problems coming up each day but now, despite these every day issues, major projects were being completed.&lt;/p&gt;  &lt;p&gt;What I proposed and implemented was nothing less than a total change in the structure of the IS department. Almost every person had a change in their title and job spec. It was drastic indeed but it worked.&lt;/p&gt;  &lt;p&gt;I changed the title of the teams to &amp;quot;&amp;quot;xx Project Team&amp;quot;, I changed the titles of the team leaders to &amp;quot;Project Managers&amp;quot;, and the team members to &amp;quot;Project Support&amp;quot; or &amp;quot;Technical Project Support&amp;quot;.    &lt;br /&gt;So why would changing someone's title make that much of a change to the way they work? As it turns out, there are several reasons. Firstly it gives them an amount of empowerment over their work. They now feel that they themselves can make decisions on how they prioritize their tasks.&lt;/p&gt;  &lt;p&gt;Secondly they now have a focus. No longer are they coming to work to answer phone calls and being pushed and pulled in every direction. Their direction is clear - the project!&lt;/p&gt;  &lt;p&gt;By changing their titles and focusing them on project work they can still &amp;quot;stamp fires&amp;quot; as they occur but now can choose which fires need their immediate attention and which can be left to another time while they concentrate on the all important project.&lt;/p&gt;  &lt;p&gt;These people were well qualified and good at what they did, it was just that they had allowed themselves to be rag dolls being pushed and pulled from one event to another and it wasn't until now that they felt any sort of control at all. It didn't matter what a so called &amp;quot;expert&amp;quot; said to them or what procedures he wanted them to do, they never felt they had enough control over what they did to even attempt to follow them. By changing their focus to project work, I had given them that control.&lt;/p&gt;  &lt;p&gt;So next time you and your team feel harasses and finding it difficult to get things done, ask yourself if you are out to resolve problems, or projects. Look at the longer term.&lt;/p&gt;  &lt;p&gt;It has been said that there are two types of team leaders: one would take their team into the forest and by support, moral-boosting and excellent project control, would cut down the most trees in a day; the other would arrive at the location, then climb the tree to look around, come down and say &amp;quot;guys, we're in the wrong forest we'll need to move before we cut down any trees&amp;quot;.&lt;/p&gt;  &lt;p&gt;Think about it, plan, and know you're delivering to the correct goals.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-5063162037517412318?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/5063162037517412318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/11/problem-resolution-or-project.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/5063162037517412318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/5063162037517412318'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/11/problem-resolution-or-project.html' title='Problem Resolution or Project Resolution?'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_PDRhMtwI0ss/Su_wpwOFwfI/AAAAAAAACEw/6qHHpZfDVr4/s72-c/directions_thumb%5B8%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4187923999551802502</id><published>2009-10-29T21:54:00.002+13:00</published><updated>2009-10-30T10:01:44.141+13:00</updated><title type='text'>Mind Mapping</title><content type='html'>I have been using mind mapping software for many years now and it has often been a great boost to get clarity around thought.&lt;br /&gt;I know that I've often been told that my mind needs a map to get around and I've agreed with them. I know I&amp;nbsp; think the same way everyone else does. Do you memorize your phone number by turning it into a complex calculation? Of course you do and my wife's statements that I'm somehow different is just well, silly.&lt;br /&gt;But back to mind maps.&lt;br /&gt;I have a copy MindJet on my computer at home and pull it out occasionally to help me formulate some thoughts. &lt;a href="http://lh6.ggpht.com/_PDRhMtwI0ss/SulYMA74DaI/AAAAAAAACEk/cle1pLS7yJA/s1600-h/i3%5B8%5D.jpg"&gt;&lt;img align="right" alt="i3" border="0" height="177" src="http://lh3.ggpht.com/_PDRhMtwI0ss/SulYNPh5YFI/AAAAAAAACEo/EedzGIZbM-U/i3_thumb%5B4%5D.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="i3" width="278" /&gt;&lt;/a&gt;Often this results in only a half a dozen links before I know where I'm going with my thoughts and can take it up from there. Sometimes it takes a very large map that I export to an outlined document where I can fully document the thoughts that are now concisely laid out before me.&lt;br /&gt;However it wasn't until I started using mind mapping on my iPhone that real map production became a reality. Now I can take those ideas and problems that arise during the work day and map them out on the train ride home. Next morning I can export all of those linked thoughts into an outline document and produce my paper.&lt;br /&gt;I've tried several systems on the iPhone from a straight outliner (CarbonFin Outliner) to specific mind mapping programs. There is no doubts on my favourite for the iPhone and that's MindNode. This is a simple clean interface that's good for all you can and need to do on an iPhone while sitting on a moving train. I love the fact that the points are not boxed (which to me, makes them harder to read) and each base node is a separate colour. I can even choose sub nodes to be different colours as well.&lt;br /&gt;The ease of transferring the maps to my computer is as simple as selecting to email them (to myself) as an attachment. I have the choice then of several formats including graphics, as an outline document or one of a few standard formats other mind mapping software recognizes.&lt;br /&gt;The only down side is that so far there is no way I can then copy maps back onto the iPhone unless I have an apple computer (which I don't). They say they are working on it and I hope so because this is a very powerful business function for the iPhone.&lt;br /&gt;While I'm at it, why did I choose the iPhone? I've used the Psion, a PalmPilot, a Windows Mobile phone and the Blackberry. All work very well but I just like the simple nature and use I'd the iPhone. If I could I'd have perhaps gone with the Palm Pre but it is yet to be seen in Australia so I opted for the iPhone and so far, apart from the short battery time, quite enjoying it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4187923999551802502?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4187923999551802502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/10/mind-mapping.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4187923999551802502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4187923999551802502'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/10/mind-mapping.html' title='Mind Mapping'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_PDRhMtwI0ss/SulYNPh5YFI/AAAAAAAACEo/EedzGIZbM-U/s72-c/i3_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-665986031632541759</id><published>2009-10-28T01:41:00.001+13:00</published><updated>2009-10-28T01:41:56.179+13:00</updated><title type='text'>Cloud Computing</title><content type='html'>&lt;p&gt;I went along to a cloud computing seminar last week to see what the fuss was all about.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_PDRhMtwI0ss/SubqjX5qIgI/AAAAAAAACEc/9zrs75xcvMw/s1600-h/Cloudcomputing%5B10%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Cloudcomputing" border="0" alt="Cloudcomputing" align="left" src="http://lh5.ggpht.com/_PDRhMtwI0ss/Subqkr6QlQI/AAAAAAAACEg/PMyK_LTK6-o/Cloudcomputing_thumb%5B8%5D.jpg?imgmax=800" width="240" height="179" /&gt;&lt;/a&gt;Cloud computing is a term bandied about a lot in recent times and I really didn't fully understand what it was. When NetSuite put on a free seminar, that is to say; &amp;quot;a free sales pitch&amp;quot;, I took the opportunity to go along and learn more about it. &lt;/p&gt;  &lt;p&gt;I'm not putting down a supplier who would put on such a seminar, in fact I applaud it. It is a good way to learn the different technologies. However as in all such cases, we must weigh what we learn knowing that a fair bit of sales pitch comes along with the facts. This case was no exception to that rule.&lt;/p&gt;  &lt;p&gt;So what's all the fuss about cloud computing? Well, it turns out not much at all … and a whole lot, it depends on your perspective.    &lt;br /&gt;Cloud computing is the name given to the industry springing up around hosting applications and data on the Internet (the cloud). The idea is that it allows a company to get away with just having the laptop or desktop PCs with no need for servers or the infrastructure normally required to support them. All email, scheduling, accounting and all other company software will be a matter of simply accessing the Internet.&lt;/p&gt;  &lt;p&gt;Gmail is a good example of Cloud Computing where the small business can leave all their email details up to Gmail. No in house mail servers; everyone is automatically using the latest software; no backup issues; and no need for an administrator to keep it all protected and current.&lt;/p&gt;  &lt;p&gt;The seminar hosted a few guest speakers who had moved all their corporate accounting to the Cloud (by sheer coincidence, NetSuite products - who would have known). It was interesting hearing first hand how they were able to make the change. I was especially interested to hear one company who had international offices and international currency issues and yet still made a successful change to Cloud Computing.&lt;/p&gt;  &lt;p&gt;The only part of the evening that really annoyed me was hearing&amp;#160; Zach Nelson, CEO of NetSuite repeat often his favourite saying &amp;quot;why would anyone want to use applications designed before the Internet?&amp;quot;. Zach repeated this several times and was obviously very proud of this saying but all it did for me was succeeded in getting my goat. Often applications are not built on the Cloud because of serious reasons. They may be very forward thinking applications that have some serious non-Internet uses. To me Zach Nelson's unfortunate comment displayed his ignorance of the wider business requirements and showed a very narrow view of the world. I will taper this a little though as his view as a Cloud Computing supplier with server based corporate software as his competition, he will naturally be narrow in his outlook.&lt;/p&gt;  &lt;p&gt;There are no doubts in my mind that Cloud Computing will have a large future and it will be interesting to watch how fast the take-up will happen.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-665986031632541759?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/665986031632541759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/10/cloud-computing.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/665986031632541759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/665986031632541759'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/10/cloud-computing.html' title='Cloud Computing'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_PDRhMtwI0ss/Subqkr6QlQI/AAAAAAAACEg/PMyK_LTK6-o/s72-c/Cloudcomputing_thumb%5B8%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-1004542290172130917</id><published>2009-10-23T11:52:00.000+13:00</published><updated>2009-10-23T11:52:43.456+13:00</updated><title type='text'>Sydney This Time</title><content type='html'>&lt;a href="http://blogpress.w18.net/photos/09/10/22/560.jpg"&gt;&lt;img align="right" border="0" height="210" src="http://blogpress.w18.net/photos/09/10/22/s_560.jpg" style="margin: 5px;" width="281" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;The photo was taken on my iPhone from our apartment towards the Blue Mountains one evening.&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;Here we go again. I'm really looking forward to buying a house and settling down in one place again. A luxury that has been out of our grasps for a while now. &lt;br /&gt;&lt;br /&gt;After a great year in Melbourne we've moved again, this time to Sydney.&lt;br /&gt;&lt;br /&gt;I've taken on a position as Product Manager for a spatial data (mapping) company in North Sydney. It's an interesting position and one that has enough challenges that will keep my interest and allow me to learn heaps. It is the first role I've takenon in many years that does not have a team, the last role had a team of around 40 people based all around the world so this will be a little different.&lt;br /&gt;&lt;br /&gt;I'm looking into some exciting technologies and some interesting discussions which I hope to write about soon. The last year has been so disruptive that this blog has suffered from lack of postings, a situation that I hope to rectify in the coming months.&lt;br /&gt;&lt;br /&gt;My interests reside in technologies that help companies and people, in leadership, and in company management so if you have something that you want me to look at, or simply want to meet up sometime and you live in Sydney, then drop me an email (from my profile section) and I'd love to talk to you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-1004542290172130917?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/1004542290172130917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/10/sydney-this-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1004542290172130917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1004542290172130917'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/10/sydney-this-time.html' title='Sydney This Time'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-6084959496387266799</id><published>2009-04-07T13:12:00.001+12:00</published><updated>2009-04-07T13:12:12.336+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Even Programmers need to Communicate</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_PDRhMtwI0ss/SdqoZ79QpWI/AAAAAAAACD8/OlA22OWhmUM/s1600-h/iStock_000005521157XSmall1.jpg"&gt;&lt;img title="iStock_000005521157XSmall" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="300" alt="iStock_000005521157XSmall" src="http://lh5.ggpht.com/_PDRhMtwI0ss/Sdqoam48k0I/AAAAAAAACEA/uzCHtBnRWYI/iStock_000005521157XSmall_thumb.jpg?imgmax=800" width="400" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Few programming teams that I have met really understand how important communication is to their everyday lives. Let me yell this from the highest places I can find - Communication is the most important factor a software team can possess, above technical abilities, above delivery, above project work, above code itself. Without communication, a programming team can die.&lt;/p&gt;  &lt;p&gt;Take two hypothetical programming teams, one is extremely effective and highly knowledgeable and technical. This team can deliver programs on time and on budget at every opportunity, have a repertoire of current programming languages and skills, and can understand and deliver highly complex applications. However, this team has no communication skills.&lt;/p&gt;  &lt;p&gt;The second team has only ever used a single 4GL language, have no technical knowledge outside of their areas and couldn’t hit a delivery target if it was painted on the side of a building in big bold bright neon colours. This team however works hard at communication.&lt;/p&gt;  &lt;p&gt;Now let’s put this in terms understood in today’s financial restraints – Which team would be open to being outsourced?&lt;/p&gt;  &lt;p&gt;The answer would be the first team. Without communication, this team are “perceived” by management and other departments as a cost to the company and full of Prima Donna programmers who don’t offer any service to the company to justify their (perception) huge salaries.&lt;/p&gt;  &lt;p&gt;The second group however are perceived by management as a hard working and loyal group of technically brilliant people that the company simply cannot do without. &lt;/p&gt;  &lt;p&gt;Development teams must be able to explain what they are doing, why they are doing it, the value they give to the company, and why that value should be maintained. But we are talking about a bunch of programmers here. By pure definition these people communicate with one’s and zero’s not with other living organisms.&lt;/p&gt;  &lt;p&gt;I’ll draw on my own experience to give you a real life example of the changes that communication can give to a programming team.&lt;/p&gt;  &lt;p&gt;Many years ago, I was appointed as development Manager to a team of programmers. During the interview process, this team had been described to me as unable to achieve any targets. Production was down and the team was not viewed as a valued asset to the company. It was generally accepted that the team would be outsourced within the next 6 months and I would then move into IT Manager’s role (due to be vacated).&lt;/p&gt;  &lt;p&gt;The first few days on the job, I observed what was happening. Every 30 minutes or so, a different department manager would come into the development area and talk directly to one of the developers and demand they drop what they were doing and work on their project as it was needed yesterday. The programmer would dutifully drop their current workload and take up the task demanded of him by that manager.&lt;/p&gt;  &lt;p&gt;No wonder the programmers had a bad name - they could never finish anything because they were constantly being shifted to working on something else. Every manager thought the programmers had to be forced to work on their material otherwise they’d never get their project out.&lt;/p&gt;  &lt;p&gt;The programmers also complained about their workload telling me they needed to at least double the team to keep up with their work.&lt;/p&gt;  &lt;p&gt;I looked at the code and the projects these developers worked on and spoke to them about their work. It quickly became apparent that the skill level was extremely high but the moral was at an all time low. I concluded that their only fault was their communication so I set about correcting this and became the mouthpiece of the Development Team.&lt;/p&gt;  &lt;p&gt;There were several things I did immediately which had a huge impact. The first was to put into place a job request form. This was originally a simple paper based form allowing users to enter the details of their project on a paper that had a unique job number. This job number was kept by the internal customer to refer to their request.&lt;/p&gt;  &lt;p&gt;For the first time, programmers were then able to prioritise their work. They were also able to see what work was ahead of them. By having all their work available on the desk in front of them, they could tell the internal customer that their job would be due to be completed at a particular date. &lt;/p&gt;  &lt;p&gt;I also spoke individually to those customers who filled out the form, explaining the work request form giving them confidence that their project was now in the “system” and that the work was now prioritised and a date for delivery was now available. This meant that customers were much less likely to come in and speak directly to the programmer unless their project was late.&lt;/p&gt;  &lt;p&gt;Meaning the programmer could concentrate on completing that one task without interruption - new requests could be referred to the job request and any member of the team could take over this discussion. Jobs were actually getting completed.&lt;/p&gt;  &lt;p&gt;Now we had the process in place, I concentrated on communication. It was then my job to support the team by educating everyone on this new process and how to use it to their advantage. I wrote up a development process document and created one-on-one meetings with each of the departmental managers throughout the company. There I showed them through the process and effectively “Sold” the process to them. I also added a “Software Development” column to the company fortnightly newsletter and added the Software Development department to the list of those giving a talk to new employees during their induction. This had the added side effect of being seen by other managers who came along to the induction process for their talk.&lt;/p&gt;  &lt;p&gt;I then started talking directly to the CEO (Chief Executive Officer). I told him what was happening to the Software Development Department and what applications we built and look after in his organisation.&lt;/p&gt;  &lt;p&gt;Within six months, this department went from being a bunch of dead-beats who were due to be outsourced, to being the only IT department that was confirmed too valuable to be outsourced. The CEO started placing Software Development on his rounds when showing visiting VIPs through the company and the main software packages we wrote and supported were being highlighted as great achievements for the company. Eventually the CEO, in his monthly report, stated that all of the company should look towards the Software Development Department as an example of what a well run department should look like.&lt;/p&gt;  &lt;p&gt;So for the matter of a few processes and some effective COMMUNICATION, this team went from a dead weight and an unwanted “cost” to the company, to taking pride of place within the corporate environment.&lt;/p&gt;  &lt;p&gt;So yes, even programmers need communication. Few programmers have that ability to communicate effectively. That is their nature in that the skills of a really good developer are in understanding code and code flow, and to understanding the user’s requirements and delivering to them, not in the areas of marketing and communication. It is up to those supporting the team - the Development Manager, the Team Leader, or the Project Manager - to take up this task of communication.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-6084959496387266799?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/6084959496387266799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/04/even-programmers-need-to-communicate.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6084959496387266799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6084959496387266799'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/04/even-programmers-need-to-communicate.html' title='Even Programmers need to Communicate'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_PDRhMtwI0ss/Sdqoam48k0I/AAAAAAAACEA/uzCHtBnRWYI/s72-c/iStock_000005521157XSmall_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-6540523785423114877</id><published>2009-03-06T09:59:00.003+13:00</published><updated>2009-03-22T20:45:42.232+13:00</updated><title type='text'>So Many Things, So Little Time</title><content type='html'>It has been a very interesting past 6 months or so. I'm now settled in my role in Melbourne as Development Manager for a good sized company here with offices in many countries around the world. It was not the original role that I came over here for, but this time it looks very good.&lt;br /&gt;&lt;br /&gt;It will take me time to put some plans into fruition here but the company is strong and the people who work here are wonderful, both technically and socially. I've got to say that this will be a very enjoyable and hopefully long term stay.&lt;br /&gt;&lt;br /&gt;The methodologies that I have seen working in this organisation range from close to waterfall right through to a form of Scrum, or even sweat room style. All have their places and all work very well for the teams involved. It will not be an easy task to combine all the teams, globally under a single methodology or even if I would ever want to. However I will need to combine them into a single company-wide toolset and supporting structures and increase their visibility to the rest of the company and their needs.&lt;br /&gt;&lt;br /&gt;I have been working on the organisation chart and gaining a feel for the way information flows and how things are done. I've yet to concentrate too much on the other offices but have already expressed that I'll need to get to the European offices in the next few months to meet everyone and spend some time with them.&lt;br /&gt;&lt;br /&gt;Our furniture has finally arrived from New Zealand and we are now settled with schools, church, and other necessities all now sorted.&lt;br /&gt;&lt;br /&gt;I'll try to revive and update this blog reasonably regularly over the following few months. In the meantime I hope this finds you all well and able to survive the current economic uncertainty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-6540523785423114877?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/6540523785423114877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2009/03/so-many-things-so-little-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6540523785423114877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6540523785423114877'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2009/03/so-many-things-so-little-time.html' title='So Many Things, So Little Time'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3036116013043692908</id><published>2008-09-11T14:57:00.002+12:00</published><updated>2008-09-11T14:59:25.952+12:00</updated><title type='text'>Moved Again</title><content type='html'>Just a quick note to let everyone know that I have moved again.&lt;br /&gt;&lt;br /&gt;I've taken a position of Applications Development Manager for a good team in Melbourne Australia. Once I have settled in, I'll take this blog up again. In the meantime, please feel free to talk amongst yourselves.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3036116013043692908?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/3036116013043692908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2008/09/moved-again.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3036116013043692908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3036116013043692908'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2008/09/moved-again.html' title='Moved Again'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-7112432444117664876</id><published>2008-07-17T11:07:00.002+12:00</published><updated>2008-07-17T11:22:15.887+12:00</updated><title type='text'>Programming Languages - Pour Quá?</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/Steve.Peacocke/SH5_DeEdobI/AAAAAAAABcQ/ElmIhgUfe3I/s1600-h/Thought%5B9%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="387" alt="Thought" src="http://lh4.ggpht.com/Steve.Peacocke/SH5_E71SPlI/AAAAAAAABcU/WaRfzIFWip0/Thought_thumb%5B7%5D.jpg?imgmax=800" width="310" align="left" border="0" /&gt;&lt;/a&gt; Inevitably, in any discussion on new application development, the subject of using the correct programming language comes up.&amp;#160; Usually this comes in the form of &amp;quot;Use the correct language for the situation. Shortly following the consideration of this sage advice, comes a respectable statement along the lines of &amp;quot;it doesn't really matter what language we use, so lets use the one we are most familiar with&amp;quot;. But is that really the best advice? Let's explore that a little.&lt;/p&gt;  &lt;p&gt;In my discussions of the development of my personal project I am working on, I was simply not considering the language. For me the choice of Delphi was obvious but I was rightly challenged in that decision. Considering a language is not to be taken lightly, however there are usually good logical thoughts behind using a language the team is familiar with. Usually, the main programming language used by a team can do most things required, and the effort involved in learning a new language and coming to terms with its eccentricities would effect the project timeline and could threaten the delivery. For example, if a development team is to move to a new language there is not just the training involved, but the times when a developer spends a week or more trying to get something working as it should, only to find that those experienced in the language know to do that particular process another way due to some limitation or bug in the tools they are using. We've all been there. Add to that the current development still needing support in the old language.&lt;/p&gt;  &lt;p&gt;However, the language used is a big decision. What of the market you are looking towards? Would the market require, for example, a Microsoft approach - i.e., best approach be damned, unless it's all written in Microsoft Visual Basic, we're not interested (&lt;em&gt;shudder&lt;/em&gt;). Other thoughts may include any of the following:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pure marketing heavyweight&lt;/strong&gt; - Oracle (yes even Oracle Forms, still supported by Oracle, but no further development), and PL/SQL. Selling to large corporates, this approach ticks all the boxes and gets you past the elimination process.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mature large development environment&lt;/strong&gt; - J2EE. While I concede that every J2EE development project I have been involved in has been fraught with troubles and ultimately has not produced (although these issues can often be attributed to other factors), this does not limit the effectiveness of Java when managed correctly. Invariably developing a large corporate application in J2EE means dealing with numerous technologies and more than one programming language. I'm certain that others can cite many excellent large scale development projects using J2EE. J2EE however is the &amp;quot;expected&amp;quot; development environment these days and often companies will look for that environment as a mark of maturity in the supplier.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Medium scale development&lt;/strong&gt; - C# perhaps? This environment is the favourite of those moving from Delphi or Visual Basic and has come to be a relatively well accepted development language well suited to Agile development teams.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Web development&lt;/strong&gt; - While J2EE arguably dominates this area, Ruby for Rails is increasingly being considered for this environment. It is surprising how Ruby for Rails is still an unknown for many executives involved in technology decisions - aren't they the ones who's job it is to know these things? However the conversion rate to Ruby on Rails shows that it's general acceptance is just a matter of increasingly shortening time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Small scale, Win32 development&lt;/strong&gt; - Delphi, Visual Basic, C#, etc. Although it can be effectively argued that the likes of Delphi can easily be used (and I can cite many successful projects) in much larger corporate development projects, the acceptance for this is simply no longer there (shame on Borland).&lt;/p&gt;  &lt;p&gt;While I am quite sure that you have your own list, and that you hold strong considerations that may differ from some of my comments, as a Development Manager in charge of a development team that creates corporate applications, the above is the way that I look at the world of languages. I'd love to hear of your experiences and thoughts.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-7112432444117664876?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/7112432444117664876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2008/07/computer-languages-pour-qu.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7112432444117664876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7112432444117664876'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2008/07/computer-languages-pour-qu.html' title='Programming Languages - Pour Quá?'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/Steve.Peacocke/SH5_E71SPlI/AAAAAAAABcU/WaRfzIFWip0/s72-c/Thought_thumb%5B7%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-164544147551457612</id><published>2008-07-15T10:04:00.001+12:00</published><updated>2008-07-15T10:04:09.473+12:00</updated><title type='text'>Reputation vs The Resume</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/Steve.Peacocke/SHvNVEIdFpI/AAAAAAAABcI/FLRfwidjY0o/s1600-h/Search%5B6%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="300" alt="Search" src="http://lh6.ggpht.com/Steve.Peacocke/SHvNWK3aaFI/AAAAAAAABcM/AMwaJbQ85_4/Search_thumb%5B4%5D.jpg?imgmax=800" width="400" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I have spent a good part of my professional career as a contractor so I was interested when I came across a post titled &amp;quot;&lt;a href="http://sethgodin.typepad.com/seths_blog/2008/03/why-bother-havi.html" target="_blank"&gt;Why bother having a resume?&lt;/a&gt;&amp;quot; on a blog site by Seth Godin. Seth gives an interesting argument that looks at the resume in 2 distinct ways: firstly he suggests that if you have a good reputation, then you won't need a resume; and secondly, that resumes are used by agents and employers in order to reject the bulk of respondents to get down to the interesting few they want to look at. &lt;/p&gt;  &lt;p&gt;I partially agree with Seth on both counts, however experience suggests caution on either front. During the 1990's I was lucky enough to have so many offers for contract work that I could take my pick. Companies were falling over themselves to offer me a contract because I had the distinct advantage of having built up a good reputation in the IT industry here. &lt;/p&gt;  &lt;p&gt;That no longer occurs, so what happened? Did my reputation go bad? No, I am still relatively well known and my reputation has not suffered. Did the job industry dry up? No again, although there are now many more applicants to choose from. The answer to this is much more involved and we have to look at a little history to see what went wrong in the industry here.&lt;/p&gt;  &lt;p&gt;Prior to 2000, there was so much panic over the &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Y2K" target="_blank"&gt;millennium bug&lt;/a&gt;&amp;quot; that anyone who could spell IT was employed in the industry as a Y2K consultant - not much more technical expertise, or even very much in the way of IQ was required. Once the year 2000 came and went without the predicted worldwide mass destruction, the wonderful Y2K pig trough was taken away and hundreds of thousands of &amp;quot;IT Experts&amp;quot; were out on the street looking for new jobs. A short time later 9/11 hit the whole world (my brother was stuck in Hawaii, cursing that the late arrival of his plane from Malaysia meant that he had missed his connecting flight to be at a meeting planned for 9am near the top of one of the towers). Every IT project in New Zealand just suddenly dried up. This also meant that thousands more IT people, this time mostly good, experienced and employable IT people, were out on the street applying for any IT job available.&lt;/p&gt;  &lt;p&gt;Companies and IT job agencies suddenly found themselves with a problem. For each IT job they advertised, they would get hundreds of applicants. Looking through all those CV's for a half decent applicant to consider was a nightmare. Companies that used to do all the hiring themselves, now started to put into place a &amp;quot;Policy&amp;quot;. For those initiated into the secret language of corporates, a &amp;quot;Company Policy&amp;quot; is a proclamation that is set permanently into the steel frame girders of the head office and emblazoned across the foreheads of all General Managers and others who sometimes think they are in charge. This particular policy states, &amp;quot;No longer can a manager employ staff on their own but must go though an employment agency&amp;quot;.&lt;/p&gt;  &lt;p&gt;The reasoning was sound to begin with. Agencies could sift through the hundreds of applications and forward to them only the few that would be suitable for the role they wanted to fill. Reality however was much bleaker than the rosy view they were sold. What tended to happen was that the agencies, in an effort to cope with the influx of applicants, started hiring new, young people who were then tasked with the job of sifting the applications. I do know of agencies (or I should say &amp;quot;agents&amp;quot;) who would, and still do, simply go through the first applications until they have two candidates that sound like they could do the job, then look no further (i.e. hundreds of job applications were never even opened), then forward those two to the client. Most however instigated the process of elimination that Seth talks about. This followed a simple process whereby firstly they would take out only those applications that had a university degree or higher, then go through those taking out only those who's current role was the same as, or similar to the role they are trying to fill. Only then, when they were down to a small hand full, would they actually look at the names and history of those that they had picked.&lt;/p&gt;  &lt;p&gt;Even ringing the agents that I had built up a good friendship and reputation with was fraught with difficulty during the next 5-6 years. To protect themselves from the pleading masses, they had to resort to employing gate-keepers. These gate keepers would only let through people who were either the companies they dealt with, or the named people that had been selected from the process of elimination. The gate-keepers cared not for reputation and had heard before the pretentious arguments that they were somehow &amp;quot;long lost friends&amp;quot; of the employment agent in charge.&lt;/p&gt;  &lt;p&gt;No job I applied for was going to even see my name unless by some pure fluke, I got through the process of elimination. My excellent reputation built with sweat and blood and now meant diddly-squat - the resume was king. Only of you were one of the first 20 who applied for the role, had a Masters degree from a known university, and had been doing that specific role for the past 5 years would you be deemed competent enough to have your name looked at. &lt;/p&gt;  &lt;p&gt;Although the agencies have relaxed their stance somewhat, and I can again speak directly to the agent in charge, don't forget the power of the resume. Also don' forget the all important qualifications - even with my industry recognition and reputation I had to go back to university to gain qualifications enough to pass through &amp;quot;the process&amp;quot;.&lt;/p&gt;  &lt;p&gt;With recession noises being heard through the world at the moment, we may well find ourselves back in the worst of times again for employment.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-164544147551457612?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/164544147551457612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2008/07/reputation-vs-resume.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/164544147551457612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/164544147551457612'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2008/07/reputation-vs-resume.html' title='Reputation vs The Resume'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/Steve.Peacocke/SHvNWK3aaFI/AAAAAAAABcM/AMwaJbQ85_4/s72-c/Search_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-8084602686267075186</id><published>2008-07-01T14:55:00.001+12:00</published><updated>2008-07-01T14:55:30.081+12:00</updated><title type='text'>Learning a new Programming Language</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/Steve.Peacocke/SGmcm9nAZGI/AAAAAAAABcA/O4r783VgOyk/s1600-h/image7.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://lh5.ggpht.com/Steve.Peacocke/SGmcny3M6UI/AAAAAAAABcE/Nq7_uvxg3Is/image_thumb5.png?imgmax=800" width="266" align="right" border="0" /&gt;&lt;/a&gt; Just when I am deep into my evening programming in Delphi, I now have a need to take up yet another language as I take on some Perl skills at work. Its always a typical requirement for any programmer to have a few different programming languages in his/her tool bag. Currently I am working in Delphi, JavaScript, Ajax, Oracle's Application Express (Apex), SQL and others. I have in the past used such languages as Turbo Pascal, C and C++, TRS-Basic, MBasic and Visual Basic, C#, Modula 2, Perl, Java, Logo, PL/SQL, RPG, HTML (yea, I know, not really a language, but...), DataFlex, varieties of xBase (dBase, FoxPro, Clipper), Informix, OPL, Clarion, and no doubt some others.&lt;/p&gt;  &lt;p&gt;Its always a hard slog learning a new language especially as you still have to keep programming in another language on a regular basis. With my work at home and my normal work, I will have to juggle a few languages as well as learning (re-learning) Perl. I used Perl for some minimal CGI scripting in the past but that was some 6-7 years ago and I really didn't get very deep at all. That's about to change. This will definitely impact my after hours programming for a few weeks.&lt;/p&gt;  &lt;p&gt;So how do you handle learning a new language? To me that means studying; pouring over books, tutorials, and code; having bleary eyes; and getting really cranky for a while. Have you only ever needed to know the one language? After all, I can see where some Delphi programmers would never have needed to learn anything else.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-8084602686267075186?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/8084602686267075186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2008/07/learning-new-programming-language.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8084602686267075186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8084602686267075186'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2008/07/learning-new-programming-language.html' title='Learning a new Programming Language'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/Steve.Peacocke/SGmcny3M6UI/AAAAAAAABcE/Nq7_uvxg3Is/s72-c/image_thumb5.png?imgmax=800' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-7453667249677277111</id><published>2008-06-25T12:54:00.003+12:00</published><updated>2008-06-26T10:55:05.738+12:00</updated><title type='text'>Cooking code with the right ingredients</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/Steve.Peacocke/SGGXJYPfCII/AAAAAAAABb4/A4iwI0B_Chg/s1600-h/cooking24.jpg" target="_blank"&gt;&lt;img img style="margin: 0px 5px 0px 0px; border-right-width: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="265" alt="cooking code" height="257" alt="cooking code" src="http://lh6.ggpht.com/Steve.Peacocke/SGGXKhOGXvI/AAAAAAAABb8/4w3OePxRqOo/cooking_thumb20.jpg?imgmax=800" width="376" align="left" border="0" /&gt;&lt;/a&gt; My previous post caused some very interesting discussions on the decisions that I am facing when starting on a new project. The suggestions were as varied as the choices in front of me. It seems that any of the alternatives can do the job, so why don't I just make a decision and move on? Because its at this crucial point that any choice I make will impact the direction of the application for many years to come.&lt;/p&gt;  &lt;p&gt;About the only choice that is not under question is the development language of Delphi. Why? One person suggested that Delphi is dying and that we should all be using Ajax instead. Besides Ajax being a supporting web scripting language/tool that enhances JavaScript, the Internet is not my intended environment for the market I'm interested in pursuing. Oracle's APEX is a great development environment for that and with my recent experience in this it would be the obvious choice - if that was the audience. Delphi on the other hand is a very strong and proven development environment that can be as lightweight or heavyweight as required.&lt;/p&gt;  &lt;p&gt;I have been involved in many varied software development projects using many languages and development environments. I can tell you from experience that 3 to 4 good Delphi developers can totally outperform 30 Java developers on a similar sized project by a factor of several months. I can also tell you that a lone Delphi developer can take on the big boys and totally capture the market.&lt;/p&gt;  &lt;p&gt;But that's the tool, what about the ingredients? There has been discussion on InfoPower, TMS, and DevExpress components. I must admit that I know and enjoy InfoPower and I can complete the full development of the application before I have to purchase. The ExpressQuantumGrid Suite requires that I purchase it before I can even start to code with it. Much though it has been recommended, and indeed it does look nice, its out of the picture for my development. I simply can't afford to purchase it at this stage. TMS is good and I have used that before, however I still fail to see the benefits in most of the TMS components, perhaps I'm missing something.&lt;/p&gt;  &lt;p&gt;InfoPower from Woll2Woll has had a lot of negative statements against it. One comment on my last post even suggesting that it looks a little dated. I thought that perhaps that's due to its demo screen dumps that try to show too many things with background images, interesting colours and an oversupply of fancy icons showing something less than professional looking. In reality I wouldn't use all the fancy background textures and some of the other features, but I would use the excellent usability features that their tools can give you. For example, simply by dropping a component on a form and setting a few properties, I can automatically create a full input screen with its own menu and imbedded controls.&lt;/p&gt;  &lt;p&gt;I'll discuss the Firebird vs ElevateDB decision in another post. Both are very fine databases, both I'd highly recommend.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-7453667249677277111?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/7453667249677277111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2008/06/cooking-code-with-right-ingredients.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7453667249677277111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7453667249677277111'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2008/06/cooking-code-with-right-ingredients.html' title='Cooking code with the right ingredients'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/Steve.Peacocke/SGGXKhOGXvI/AAAAAAAABb8/4w3OePxRqOo/s72-c/cooking_thumb20.jpg?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-897924574753793531</id><published>2008-06-20T11:01:00.002+12:00</published><updated>2008-06-20T17:19:10.389+12:00</updated><title type='text'>Back in from the cold</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/Steve.Peacocke/SFrlOC6QeuI/AAAAAAAABbY/fVBHAR8rRkw/s1600-h/railroad%5B9%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 10px 0px 5px; border-left: 0px; border-bottom: 0px" height="244" alt="railroad" src="http://lh5.ggpht.com/Steve.Peacocke/SFrlP6sDCZI/AAAAAAAABbc/wQ9Ht-MCxWA/railroad_thumb%5B7%5D.jpg?imgmax=800" width="164" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The time has come to return to programming my own application. I have been considering this for some time and indeed have made several false starts on this. Yesterday, I made a start on actually getting into the program again. This is not a work program, but my own application that I built and sold many years ago. It will be a long term, after-hours venture.&lt;/p&gt;  &lt;p&gt;I've been looking at several tools for this venture. Delphi is a requirement as I can deliver a great application to the intended audience using Delphi. I've looked very seriously at both Firebird and ElevateDB as the intended database that I will be using. I still have not made up my mind on these yet as both have their strong points.&lt;/p&gt;  &lt;p&gt;If I end up going with Firebird, then I'll most likely be using the IBObjects components. I've used these before at a customer's site and have been impressed at the genuine speed that results.&lt;/p&gt;  &lt;p&gt;Either way, I'll be looking seriously at using the InfoPower components. Although they can be rather noisy (use a lot of network bandwidth), the intended audience for this application will enjoy the user interface these components can give them. Although I'd also like to take a good look at the ExpressQuantumGrid Suite, they don't offer anything but pre-compiled demos. It often takes a time using the component to decide if its as useful as the demos make out. Besides, I'd like to develop the application first before approaching some financial backers in order to purchase the components, complete the final programming/packaging, and get the marketing under way. Pity, it looks like a good product but I simply can't afford to purchase it at this stage.&lt;/p&gt;  &lt;p&gt;ReportBuilder Pro will also be my choice of reporting tool.&lt;/p&gt;  &lt;p&gt;You can be sure that I'll be looking at alternatives to the components mentioned, but these are my thoughts for the moment. Any feedback for this from you would be greatly appreciated.&lt;/p&gt;  &lt;p&gt;Having spent my development time in the past year in such environments as Oracle, and Oracle's Application Express, although those are good environments, its nice to get back into familiar territory again.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-897924574753793531?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/897924574753793531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2008/06/back-in-from-cold.html#comment-form' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/897924574753793531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/897924574753793531'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2008/06/back-in-from-cold.html' title='Back in from the cold'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/Steve.Peacocke/SFrlP6sDCZI/AAAAAAAABbc/wQ9Ht-MCxWA/s72-c/railroad_thumb%5B7%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-7005808786343338378</id><published>2008-01-21T16:29:00.001+13:00</published><updated>2008-01-21T16:29:27.261+13:00</updated><title type='text'>Team Collaboration Software</title><content type='html'>&lt;p&gt;We're shortly to turn our attention towards team collaboration software and I'd like your help in the search. &lt;/p&gt;  &lt;p&gt;I 've had some excellent feedback on my series on issue/bug registers with some &lt;a href="http://lh6.google.com/Steve.Peacocke/R5QRk0zOIzI/AAAAAAAABZ4/w5g66W1veJQ/Dark%5B5%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 0px 0px 5px; border-left: 0px; border-bottom: 0px" height="236" alt="Dark" src="http://lh4.google.com/Steve.Peacocke/R5QRlUzOI0I/AAAAAAAABaA/6cDBXC1GCpA/Dark_thumb%5B3%5D" width="346" align="right" border="0" /&gt;&lt;/a&gt;wonderful suggestions, some unfortunately far too late in the process to enter into consideration. I'd like feedback now on team collaboration software.&lt;/p&gt;  &lt;p&gt;Since we have settled on JIRA as the issues register, we are seriously considering Confluence (&lt;a title="http://www.atlassian.com/software/confluence/" href="http://www.atlassian.com/software/confluence/"&gt;http://www.atlassian.com/software/confluence/&lt;/a&gt;) but there are others out there.&lt;/p&gt;  &lt;p&gt;The following is amongst the items we's like to see:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Document version control - at least see that there have been previous versions of a document that we can look at. We'd like to see documents stored either in some sort of Windows-type folders, or perhaps attached to some Wiki path, but we'd look at other suggestions.&lt;/li&gt;    &lt;li&gt;Wiki - we have sales-types in the organisation, they don't do Wiki very well so it's got to be able to be used with MS Word or Excel - and if they load a document, make changes, and save it - the Wiki or document MUST be updated, not just the temporary file that's created on the user's temp directory.&lt;/li&gt;    &lt;li&gt;A discussion forum would also be nice.&lt;/li&gt;    &lt;li&gt;able to add graphics to documents&lt;/li&gt;    &lt;li&gt;Able to add new fields to fill in, .. perhaps&lt;/li&gt;    &lt;li&gt;Able to see when and by whom something has been changed&lt;/li&gt;    &lt;li&gt;It would be a HUGE plus if it was able to be run in Unix. In fact, it would be a negative we'd have to get around if it was only Windows.&lt;/li&gt;    &lt;li&gt;Accessible via internet/intranet&lt;/li&gt;    &lt;li&gt;Lightening fast search for a word in a gazzillion documents, including Excel, Word, PDF, etc.&lt;/li&gt;    &lt;li&gt;Secure&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So if you have any suggestions on products that I can look at, then please let me know.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-7005808786343338378?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/7005808786343338378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2008/01/team-collaboration-software.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7005808786343338378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7005808786343338378'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2008/01/team-collaboration-software.html' title='Team Collaboration Software'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-6554294046510100804</id><published>2008-01-18T15:49:00.000+13:00</published><updated>2008-01-18T17:14:31.405+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Tools for the Development Team - JIRA</title><content type='html'>&amp;#160;&amp;#160; &lt;p&gt;&lt;a href="http://lh6.google.com/Steve.Peacocke/R5AlE0zOIvI/AAAAAAAABZI/V_lXWwf53YQ/image%5B14%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 0px 0px; border-right-width: 0px" height="336" alt="image" src="http://lh5.google.com/Steve.Peacocke/R5AlFkzOIwI/AAAAAAAABZQ/BEkf4fN3Hzg/image_thumb%5B9%5D" width="411" align="left" border="0" /&gt;&lt;/a&gt;Crikey, where did the time go? &lt;/p&gt;  &lt;p align="left"&gt;This has been a very busy time for the team with a large number of projects and small alterations coming through as well as RFIs and RFPs (Request For Information / Proposal) to answer. It is at these times when a good issue management tool proves its worth and certainly ours did.&lt;/p&gt;  &lt;p&gt;I've talked a lot about the different tools that we've looked at here, but we did finally make a decision, the winner was JIRA from Atlassian (&lt;a title="http://www.atlassian.com/software/jira/" href="http://www.atlassian.com/software/jira/"&gt;http://www.atlassian.com/software/jira/&lt;/a&gt;). &lt;/p&gt;  &lt;p&gt;So what was it about JIRA that made it stand out against the, sometimes free, competition? It does what it does well. &lt;/p&gt;  &lt;p&gt;Many of the other programs that I looked at tried to do many things, and in my opinion, sometimes meant that it did none of those very well. JIRA doesn't suffer from that. It knows what its supposed to do and it does it well. That's where the final decision lay as far as the team were concerned.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Getting to know JIRA.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I had used JIRA in the past so it was second nature to me, but not yet to the team. There were a couple of language constraints that we had to get past before some of the team could understand the concept. Everything you place in JIRA is an &amp;quot;Issue&amp;quot;. It doesn't matter if its a suggestion, a bug, a task, whatever it is, if its in JIRA, then its an &amp;quot;Issue&amp;quot;. This is one of the very few things that I could not change in JIRA.&lt;/p&gt;  &lt;p&gt;The other area that new users will enjoy getting used to is that nearly everything in JIRA is configurable. At times it seems that everything that is asked for is there within the configuration available to the JRIA Administrator. You will get to understand how such things as Notification Schemes and Permission Schemes work, and you can assign different schemes to different projects.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Projects&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.google.com/Steve.Peacocke/R4V110zOIlI/AAAAAAAABZY/87goTas4J88/Project%5B1%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 0px 0px; border-right-width: 0px" height="186" alt="Project" src="http://lh5.google.com/Steve.Peacocke/R4V12UzOImI/AAAAAAAABZc/j_V18x6TdK0/Project_thumb%5B1%5D" width="278" align="right" border="0" /&gt;&lt;/a&gt;Users or Administrators (depending on what rights the Administrator gives each user or user group) can set up Projects in JIRA and create Issues to the projects. A Project can be either a standard project with a beginning and an end (e.g. a software development project), or an area we can place tasks for normal things needing to be done (e.g. an application or &amp;quot;IT Admin&amp;quot;).&lt;/p&gt;  &lt;p&gt;I have set up the Notification Scheme so that users will get an email when they area assigned to an issue or when someone has added a comment to an issue that is assigned to them. You can set up notifications as you wish. Users can also &amp;quot;watch&amp;quot; particular issues and be emailed whenever anything changes. You can even email JIRA to open a new issue or add a comment and email attachment to an issue.&lt;/p&gt;  &lt;p&gt;Issue numbers are related directly to the project via a 3-4 letter prefix. For example, you might have a project called &amp;quot;IT Administration&amp;quot; and a project called &amp;quot;Worldwide Enterprises Project&amp;quot;, which will have a prefix of IT and WWE respectively. Issues in IT will start IT-1, IT-2 etc. and issues in WWE will start WWE-1, WWE-2 etc. so it's easy to know what project an issue relates to. You will find the team with a new vocabulary of words like WWE-193 and IT-22 arising in every sentence.&lt;/p&gt;  &lt;p&gt;Users can log work against issues and time tracked.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Workflow&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.google.com/Steve.Peacocke/R5AWPkzOIrI/AAAAAAAABZg/5BZ6U7tT1jw/image%5B13%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px; border-right-width: 0px" height="225" alt="image" src="http://lh4.google.com/Steve.Peacocke/R5AWQUzOIsI/AAAAAAAABZk/nPJGsYSgThs/image_thumb%5B8%5D" width="274" align="left" border="0" /&gt;&lt;/a&gt; The Enterprise version has a number of tools that allow you to create and change the workflow, however we opted for the standard which uses a good workflow.&lt;/p&gt;  &lt;p&gt;With the standard, an issue is Open when it is created. Once a developer starts work on it, they can change it to In Progress, unless its a small issue that is completed in less than 30 minutes - they can then just go straight to Resolve.&lt;/p&gt;  &lt;p&gt;I have set it so that only myself and QA can Close an issue, but anyone can Reopen it for any reason.&lt;/p&gt;  &lt;p&gt;Issues are never deleted, only closed.&lt;/p&gt;  &lt;p&gt;Issues can be Resolved in a number of ways and the user is presented with the following in the Standard JIRA, the other JIRA versions allow you to add to or change these :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#0000ff"&gt;Fixed&lt;/font&gt; (default) : A fix for this issue has been completed to the satisfaction of the user &lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff"&gt;Won&amp;#8217;t Fix&lt;/font&gt; : The problem described is an issue which will never be fixed (e.g. the issue relates to a previous version and the workaround its to upgrade) &lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff"&gt;Duplicate&lt;/font&gt; : The problem is a duplicate of an existing issue &lt;em&gt;(user can link the issue to another)&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff"&gt;Incomplete&lt;/font&gt; : The problem is not completely described. Used only if the creator of the issue cannot supply any further information (i.e. the creator is no longer available or all attempts to contacted have failed).       &lt;br /&gt;Normally, if the problem is not described correctly, it is up to the user to reassign the issue back to the creator with more questions as comments &lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff"&gt;Cannot Reproduce&lt;/font&gt; : All attempts at reproducing this issue failed, or not enough information was available to reproduce the issue. Reading the code produces no clues as to why this behaviour would occur. If more information appears later, the issue may be reopened. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Searching&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Users have two ways that they can search for an issue or comment. &lt;/p&gt;  &lt;p&gt;&amp;quot;Quick Search&amp;quot; is a seemingly insignificant little search box up the top right of the screen that is extremely powerful. Type anything into there (like &amp;quot;VPN Connection&amp;quot;) and JIRA will do a very fast search of all its issues and give you a list of all issues contain that word or phrase. If you know the JIRA number, just type it in and you'll be taken directly to the issue.&lt;/p&gt;  &lt;p&gt;&amp;quot;Find Issues&amp;quot; is a menu item that allows you to find issues by creating a Filter. Filters can be created on the fly, saved to a name (e.g. &amp;quot;All Unresolved Development Issues&amp;quot;). JIRA will automatically add a Filter to show you all issues currently assigned to you. &lt;/p&gt;  &lt;p&gt;Setting up these Filters is a simple idea of selecting from the list of selections for the fields to search, for example, selecting 1 or more projects to search. Other areas in this search is the Query on the Summary, Description and Comments fields. Query is a reasonably powerful search facility explained &lt;a href="http://www.atlassian.com/software/jira/docs/v3.11/querysyntax.html?clicked=jirahelp" target="_blank"&gt;Here&lt;/a&gt;. Date and time fields have the ability to enter either specific dates, or relative dates (within the last x hours/days, in range from/to). This allows me to, for example, set up a filter to report on all JIRA issues created last month (don't tell my boss that my monthly management reporting is that easy).&lt;/p&gt;  &lt;p&gt;When you activate or view a Filter, it shows in a list that you can scroll through and export to Excel or Word, and &lt;/p&gt;  &lt;p&gt;Filters can be set up to appear on your JIRA Portal.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The JIRA Portal&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The front screen in JIRA can be set up differently by each user. You can add, delete, and move items around the screen to suit yourself. You can add Filters that you created yourself and add pre-set Portlets. These include such things as Project Stats; Admin functions; Filter Stats; My Watched Issues; and Issues in Progress. These can be arranged as you like with the most used Portlets showing at the top of the screen. &lt;/p&gt;  &lt;p&gt;My own Portlet shows some details about projects; lists all my save Filters; Overdue Issues; Issues update within the last 8 hours; Resolved issues awaiting me to Close; Issues I'm watching; My assigned issues; and a few of the available graphs that I got from a free JIRA Plugin available from the Atlassian website.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Using JIRA&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;After using JIRA now for a few months I can honestly say that I have resolved a number of team issues here. I know what is happening; what the team is working on; issues are tracked and comments are added as new information comes in or things are done; the developers and BA can fully understand issues with a place to keep documents, screenshots and comments; work can be prioritised; and everyone can see what work lies ahead of them.&lt;/p&gt;  &lt;p&gt;Nothing gets forgotten; work is logged against issues; issues are assigned to others where necessary within the workflow; and management reporting is completed.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Down Side&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.google.com/Steve.Peacocke/R5AnpEzOIxI/AAAAAAAABZo/sZww_SVnQfA/image%5B12%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="94" alt="image" src="http://lh4.google.com/Steve.Peacocke/R5AnpUzOIyI/AAAAAAAABZw/lbSxrYfkpkE/image_thumb%5B7%5D" width="52" align="left" border="0" /&gt;&lt;/a&gt; Of course there's a downside -&amp;#160; it costs real money. JIRA comes in Standard, Professional and Enterprise editions costing US$1,200, US$2,400 and US$4,800 respectively. While I would have loved the Enterprise edition, we are getting by quite nicely on the Standard edition.&lt;/p&gt;  &lt;p&gt;You will have to keep on top of it when you first install it as there is a mind-set that says &amp;quot;I've assigned this issue to someone else, it's no longer my problem&amp;quot;. It's also easy to simply ignore issues assigned to you and then get upset when you have hundreds of issues in front of you.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As I said, &amp;quot;JIRA works&amp;quot;. Sometimes it comes down to that. As a Development Manager I can trust it, the developers trust it, and everyone in the company trusts it.&lt;/p&gt;  &lt;p&gt;Try it out for free on your server for a month or two. They'll extend the free trial if you ask them nicely, but I don't think you'll need it. It's so nice to find nice people who actually support and use their product themselves.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Just a&lt;/em&gt; &lt;/strong&gt;&lt;em&gt;&lt;strong&gt;quick note:&lt;/strong&gt; I have no affiliation with JIRA\Atlassian . I don't know anyone there and I don't get anything free from them .. although a tee-shirt wouldn't go astray (HINT HINT Atlassian - Grin).&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-6554294046510100804?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/6554294046510100804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2008/01/tools-for-development-team-jira.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6554294046510100804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6554294046510100804'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2008/01/tools-for-development-team-jira.html' title='Tools for the Development Team - JIRA'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-548226304249401957</id><published>2007-10-17T09:54:00.001+13:00</published><updated>2007-10-24T09:30:48.725+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi best practice'/><title type='text'>Tools for the Development Team - SourceForge</title><content type='html'>&lt;h4&gt;SourceForge&lt;/h4&gt;&lt;p&gt;&lt;a href="http://lh5.google.com/Steve.Peacocke/RxUk963czmI/AAAAAAAABEI/R3RaVKUXTWQ/SourceForge%5B3%5D.jpg"&gt;&lt;img id="id" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 5px 0px; border-right-width: 0px" height="199" alt="SourceForge" src="http://lh3.google.com/Steve.Peacocke/RxUk-a3cznI/AAAAAAAABEQ/kH-5jV4y5Qg/SourceForge_thumb%5B2%5D.jpg" width="244" align="left" border="0" /&gt;&lt;/a&gt;SourceForge (&lt;a title="http://sf.net/powerbar/sfee/" href="http://sf.net/powerbar/sfee/"&gt;http://sf.net/powerbar/sfee/&lt;/a&gt;) was the real contender against Jira and we took a good hard look at it, putting it through its paces. The price (free for less than 15 users) was a compelling argument, as was its document storage and version control of those documents. We installed it on a server here and the team had a play. The following are our findings.&lt;/p&gt;  &lt;p&gt;Initially we found SourceForge (SF) very slow. This was perhaps related to the fact it was set up as a virtual machine. This also meant that it was many gigs to download.&lt;/p&gt;  &lt;p&gt;There was a small learning curve, same as any new product I suppose. The one thing that threw me immediately was that Tasks is not the area you place issues. Within a project, you can &amp;quot;create&amp;quot; new Trackers, and its in that new tracker area off the Main Menu where you can now track issues, or &amp;quot;Artifacts&amp;quot; as SF calls them. I'm not sure that I like the term 'artifact' as I don't want issues buried for centuries for some scientist to dig up to find out how we performed our work.&lt;/p&gt;  &lt;p&gt;You create fields or use the defaults, you can categorise tracker items and the items are also colour coded to show their priority. You can even ask tracker to auto assign different categories to different people. While the auto assignments worked very well, I wanted to auto assign depending on the development process - e.g. auto assign to me all new issues and I can then distribute them to the available team member, then auto assign to QA when the issue is resolved. However, this is another system and what it offers is good.&lt;/p&gt;  &lt;p&gt;SourceForge has several areas of concentration:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Tracker - an issues register &lt;/li&gt;    &lt;li&gt;Documents - a document control system where company and technical documents can be stored, and a sort of version control is applied (more about that shortly) &lt;/li&gt;    &lt;li&gt;Tasks - These are project tasks as opposed to software issues. &lt;/li&gt;    &lt;li&gt;Source Code - links to Subversion or other source/version control systems &lt;/li&gt;    &lt;li&gt;Discussion - a nice discussion forum with threaded messages &lt;/li&gt;    &lt;li&gt;Reports &lt;/li&gt;    &lt;li&gt;Release Packages &lt;/li&gt;    &lt;li&gt;Wiki &lt;/li&gt;    &lt;li&gt;Project Admin &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;&lt;a href="http://lh3.google.com/Steve.Peacocke/RxUk_a3czoI/AAAAAAAABEY/1_dbGyejNPU/folders%5B6%5D.jpg"&gt;&lt;img id="id" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="146" alt="folders" src="http://lh5.google.com/Steve.Peacocke/RxUk_63czpI/AAAAAAAABEg/3uuTQZPTIEQ/folders_thumb%5B4%5D.jpg" width="240" align="right" border="0" /&gt;&lt;/a&gt;Documents&lt;/h4&gt;  &lt;p&gt;The document control was a really nice feature that we gave high marks to. I can add folders and sub folders and place documents in them, just like Windows. The main difference here is that when I go back and add updated files into the same folders, instead of overwriting the files as Windows does, SF treats the newer files as new versions of the older files. I can then review previous versions, almost like I was in a Version Control program.&lt;/p&gt;  &lt;h4&gt;Discussions&lt;/h4&gt;  &lt;p&gt;The SF discussion forums were a nice touch. You can associate a discussion with a tracker artifact, people can reply to discussions and you &lt;/p&gt;  &lt;p&gt;can select to &amp;quot;watch&amp;quot; a particular discussion to get an email when someone adds to the discussion. You can also have it automatically sending out to a mailing list.&lt;/p&gt;  &lt;p&gt;There were a couple of downsides to the discussions. When replying to a comment, you can not see the discussion you are replying to. This will surely cause a lot of mis-quoting. Also, it seems that the user is unable to edit their own discussion after posting so even if they find they have misquoted, they can't edit that to change it. While I can understand not being able to change a comment if another has replied, surely you can edit to change that spelling mistake or typo you noticed in that frozen moment after you press save and before it was redisplayed.&lt;/p&gt;  &lt;h4&gt;File Releases&lt;/h4&gt;  &lt;p&gt;It is a convenient tool to package files in a patch set. You could upload all the files needed for a patch and when pressing the downloading release button, it saves all files into a zip file. Good for patches but I'm uncertain for major releases.&lt;/p&gt;  &lt;h4&gt;Reports&lt;/h4&gt;  &lt;p&gt;Reports can be defined to report on any searchable criteria. A standard report of a graphical summary and the report detail will then be generated. Reports can be on Tasks (project) or Tracker Artifacts.&lt;/p&gt;  &lt;h4&gt;Wiki&lt;/h4&gt;  &lt;p&gt;The Wiki was a disappointment. It was a simple and very basic Wiki without even the ability to add graphics other than as a URL. It has a different command set than I was used to but as it was so limiting, it wouldn't take long to learn.&lt;/p&gt;  &lt;h4&gt;General&lt;/h4&gt;  &lt;p&gt;It had a nice interface and some nice additions when compared with Jira, however when even after 2 weeks the company still could not reply to even a standard sales enquiry (sent by two of us separately), we were left wondering about the likelihood of any response to a real support query. That was the real clincher as far as we were concerned. Sadly, we dropped SourceForge from our list.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-548226304249401957?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/548226304249401957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/10/tools-for-development-team-sourceforge.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/548226304249401957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/548226304249401957'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/10/tools-for-development-team-sourceforge.html' title='Tools for the Development Team - SourceForge'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-1097209547293998804</id><published>2007-10-16T09:20:00.001+13:00</published><updated>2007-10-17T15:02:56.088+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Tools for the Development Team (2)</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.google.com/Steve.Peacocke/RxPLmK3czhI/AAAAAAAABDU/MkHG6wzuytM/coffeeprocess10.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="coffeeprocess" src="http://lh3.google.com/Steve.Peacocke/RxPLm63cziI/AAAAAAAABDc/gGnNmTRZpBo/coffeeprocess_thumb8.jpg" width="404" align="right" border="0" /&gt;&lt;/a&gt;To continue where I left off, the management team, of which I am a member, looked at Jira in a totally different manner. Each person had their own needs for a tool ever so slightly different to Jira. This caused some problems as I was then asked to evaluate a number of other tools that, perhaps with some compromise, everyone can use. Some suggestions were forthcoming and I dutifully took at look at each one. &lt;/p&gt;  &lt;p&gt;The problem with the approach that I made to the management team was that I had obviously failed to impress what the development team needed in the tool. You see, I was out to sell the tool to the rest of the company and in doing so I was focusing on their needs instead of the development team's. This meant that instead of learning how the development team were going to contribute and communicate better, they were thinking &amp;quot;how can I use this new tool&amp;quot;, which invariably led to &amp;quot;I need this tool to do X, and I know one that does X much better than this&amp;quot;. Of course, that meant that they were thinking of their own needs and Jira just didn't cut it for them. Dang, I missed the plot there.&lt;/p&gt;  &lt;p&gt;I got suggestions to consider like Phpaga (&lt;a href="http://www.phpaga.net"&gt;http://www.phpaga.net&lt;/a&gt;). This is an excellent tool for contacts, invoices, financials, and billing tasks, but it has little to nothing to do with the development process. After discussing this and writing up a small review for the management team I suggested that a CRM package was more in line. They have one so will look again at using it effectively. &lt;/p&gt;  &lt;p&gt;Almost all applications I looked at served a single particular purpose, and added some other purposes somewhere along the scale of between &amp;quot;ok&amp;quot; and &amp;quot;that really sucks&amp;quot;. &lt;/p&gt;  &lt;p&gt;So lesson learned. What I should have done is sold it as a development tool. I could have shown the management team how much better the development team was going to be, how much more accountable, how they will now get both statistics and answers from this bunch of strange speaking weirdos that did things magical and totally unknown things that produced the final products. Now they might understand what's going on there and the tool will be well supported.&lt;/p&gt;  &lt;p&gt;As I stated in my last post, I have a number of tools that I will touch on briefly over the next few posts, but as you might have guessed, we have finally decided on Jira. Surprisingly that decision was not made by me. The development team were also asked to review a few of the more successful tools and give their feedback but it was their own decision that we should go with Jira. While Jira did not have the nicest interface or the best reports, and it was only an issues register, it was voted in as the tool to use.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-1097209547293998804?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/1097209547293998804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/10/tools-for-development-team-2.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1097209547293998804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1097209547293998804'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/10/tools-for-development-team-2.html' title='Tools for the Development Team (2)'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-5467647479228235098</id><published>2007-10-12T10:47:00.001+13:00</published><updated>2007-10-13T09:40:19.538+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Tools for the Development Team</title><content type='html'>&lt;p&gt;We placed Jira onto our live server and began using it for real about 2 weeks ago now. So how's it going? Rather well as it turns out.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(Jira is from Atlassian (&lt;/em&gt;&lt;a title="http://www.atlassian.com/software/jira/" href="http://www.atlassian.com/software/jira/"&gt;&lt;em&gt;http://www.atlassian.com/software/jira/&lt;/em&gt;&lt;/a&gt;&lt;em&gt;) and is an issue tracker tool, see earlier posts for discussions.)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I did a demo for the Development Team and they took to it like a duck to water, now that they understood what it's used for and how. I did the same for the rest of the Management Team and they took to it as well, but in a different way.&lt;/p&gt;  &lt;p&gt;Initially it was not used as well as I'd have liked so I put a little pressure on the team by being a bit of a pain in the neck for a couple of days..&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;Me&lt;/strong&gt;: &amp;quot;What are you working on?&amp;quot;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;Developer&lt;/strong&gt;: &amp;quot;I'm updating xyz here that needs a new abc because Freda from WxyCorp has found a glitch with it&amp;quot;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;Me&lt;/strong&gt;: &amp;quot;I don't see this in Jira, have you added it?&amp;quot;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;Developer&lt;/strong&gt;: &amp;quot;Um... (ticidatacida) .. I have now (grin)&amp;quot;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;Me&lt;/strong&gt;: &amp;quot;Oh, OK then. You know that if you are working on anything, no matter what it is, it ..&amp;quot;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;Developer&lt;/strong&gt;: &amp;quot;.. yea yea, I know, - ..'it needs to be in Jira' (sigh)&amp;quot;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The developers are good guys and they really understood the reasons for putting everything in Jira but being developers, they wanted to just develop. Now I note that no-one is working on anything without a Jira issue and they themselves police that nicely by suggesting that others create a Jira issue before they can start on any work. Nice.&lt;/p&gt;  &lt;p&gt;This means of course, that all work is logged and reporting and reviewing can be carried out. Issues are assigned to others with questions when more information is needed, and they get an email to tell them when the issue is reassigned back to them with the answer. Once the have completed the work, they &amp;quot;Resolve&amp;quot; the issue and assign it to the QA Manager. Only the QA Manager and myself as Administrator, can &amp;quot;Close&amp;quot; an issue.&lt;/p&gt;  &lt;p&gt;The Management Team has been impressed with Jira but they all have their own ideas of other tools that would work better for what they want to do. Some other tools that I have looked at are...&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SourceForge Enterprise - &lt;a title="http://sf.net/powerbar/sfee/" href="http://sf.net/powerbar/sfee/"&gt;http://sf.net/powerbar/sfee/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Trac - &lt;a title="http://trac.edgewall.org/" href="http://trac.edgewall.org/"&gt;http://trac.edgewall.org/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Mingle - &lt;a title="http://studios.thoughtworks.com/mingle-project-intelligence" href="http://studios.thoughtworks.com/mingle-project-intelligence"&gt;http://studios.thoughtworks.com/mingle-project-intelligence&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Confluence - &lt;a title="http://www.atlassian.com/software/confluence/" href="http://www.atlassian.com/software/confluence/"&gt;http://www.atlassian.com/software/confluence/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;FDDTracker - &lt;a title="http://www.itps.com.au/dotnetnuke/" href="http://www.itps.com.au/dotnetnuke/"&gt;http://www.itps.com.au/dotnetnuke/&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Other areas I have also look at with a mind to solving some other issues here, they include...&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;TrueCrypt - &lt;a title="http://www.truecrypt.org/" href="http://www.truecrypt.org/"&gt;http://www.truecrypt.org/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;AllSync - &lt;a title="http://www.allsync.biz/help/a_produktbeschreibung.htm" href="http://www.allsync.biz/help/a_produktbeschreibung.htm"&gt;http://www.allsync.biz/help/a_produktbeschreibung.htm&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;SyncToy - &lt;a title="http://www.microsoft.com/windowsxp/using/digitalphotography/prophoto/synctoy.mspx" href="http://www.microsoft.com/windowsxp/using/digitalphotography/prophoto/synctoy.mspx"&gt;http://www.microsoft.com/windowsxp/using/digitalphotography/prophoto/synctoy.mspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;and I'll hope to have others added to that list soon.&lt;/p&gt;  &lt;p&gt;I'll talk on each of those and our eventual decisions as I go along in other posts. In the meantime, I'd like to hear what tools you are using with your team or even on your own to help with development and running a software team.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-5467647479228235098?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/5467647479228235098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/10/development-tools-for-team.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/5467647479228235098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/5467647479228235098'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/10/development-tools-for-team.html' title='Tools for the Development Team'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-8610311520221936993</id><published>2007-09-28T15:57:00.001+12:00</published><updated>2007-09-28T16:07:21.289+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><title type='text'>Installing Jira - The Development Support Tool</title><content type='html'>&lt;p&gt;We are a relatively small (less than 20 employees) software development house with about half a dozen mainline products as well as any number of consulting projects going on. We have some very big name clients in several countries and therefore need to ensure work is completed on time and efficiently.&lt;/p&gt;  &lt;p&gt;While there are normal enhancement projects and major installation projects going on, there are also a number of items that come up for customers wanting changes or where something doesn't go quite as planned. These can disrupt the programmers day and disturb the development of future enhancements or otherwise frustrate the project timelines.&lt;/p&gt;  &lt;p&gt;We have a web based system for clients to record requests and log bugs. This is monitored by our support staff and an email is fired off to developers where necessary.&lt;/p&gt;  &lt;p&gt;All this means that as more emails come in, the developer has to judge the urgency of the email and either drop everything to perform that task, or note that this is another item that he has to do in the future. While they are very good at what they do, I was concerned for several reasons.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I don't have a view on what a developer is doing at any time, or what he has done &lt;/li&gt;    &lt;li&gt;I don't have any way to tell what the workload of a particular developer is. This means I don't know to spread the load between developers when one is overloaded and another is just doing some normal housework &lt;/li&gt;    &lt;li&gt;Programmers can easily forget tasks &lt;/li&gt;    &lt;li&gt;It doesn't assist in any process to development &lt;/li&gt;    &lt;li&gt;I can't plan to ensure enough resources are available. &lt;/li&gt;    &lt;li&gt;I could go on, but you get the idea... &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Generally though, it makes the whole development area invisible to me as the manager.&lt;/p&gt;  &lt;p&gt;I knew that I needed to install a development process, but I knew immediately, I needed a tool to give me the visibility on what's being worked on work to correctly design a development process. I had used Jira before so the decision was an easy one for me. Setting it up was easy and done in minutes, but I wanted a number of changes to the permission and notification schemes, then it was a matter if creating some projects. Done.&lt;/p&gt;  &lt;p&gt;It worked well and I installed a testing project so that people can try out the system without disturbing real work.&lt;/p&gt;  &lt;p&gt;Its been installed now for about a week but the uptake has not been immediate. I'll have to do a demo on Monday to show everyone how it works, assure them that its not going to take over their day with mundane admin tasks, and finally show them a few neat wow bits. After that I'll be enforcing the use of it for the next month.&lt;/p&gt;  &lt;p&gt;If, after that trial, no-one is convinced, then I'll take it away, but I'll need to know what to replace it with if that is the case. There seems to be a few main problems with installing this work request system that I'll have to overcome. These include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#0000ff"&gt;It seems like more work for no reason.&lt;/font&gt; While it may take a minute or less to create a new Jira issue, there are huge benefits for the user, the company, and the client - get over it.&lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff"&gt;Its a way for the boss to monitor my work so he can breathe down my neck.&lt;/font&gt; In fact, its a way to STOP the boss breathing down your neck as he can see what's going on instead of bugging you every half hour. As for monitoring, your not that interesting that I want to spend all my time &amp;quot;monitoring&amp;quot; what you are doing &amp;quot;right now&amp;quot;, I'm a lot busier than that but a quick glance to review workloads will tell me if you have too much work and need help.&lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff"&gt;I get lots of little emails from lots of people wanting me to do things that only take a minute or two, why should I have to put all these into Jira?.&lt;/font&gt; By putting these into Jira, these little jobs will not only show you how much time they take up, but you will never, ever forget to do them. I have set up an email for each project in Jira, simply forward to the email to that address and it'll create your Jira issue instantly.&lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff"&gt;I'm a senior developer, surely &amp;quot;I&amp;quot; don't have to do this. &lt;/font&gt;Yes, sadly I'm afraid that you do.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I'm sure that once everyone is using it and the advantages are being seen, then it'll resolve any arguments. To be fair, no argument have been forthcoming, but I can sense what's not being said at times. They are a great bunch or people that I enjoy working with, I just think I can make life easier for them with this tool. I'll let you know how it goes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-8610311520221936993?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/8610311520221936993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/installing-jira-development-support.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8610311520221936993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8610311520221936993'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/installing-jira-development-support.html' title='Installing Jira - The Development Support Tool'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-7032781809770228379</id><published>2007-09-21T09:37:00.001+12:00</published><updated>2007-09-21T09:37:17.909+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Back again</title><content type='html'>&lt;p&gt;Thanks for your patience, I have finally shifted house and started my new role as Software Development Manager for a software house in Hamilton.&lt;/p&gt;  &lt;p&gt;The shift included a few days in Wellington visiting friends and generally spending time away. Holidays have been a very rare occurrence for me, having at one time, spent more than 12 years without a holiday, I find that taking a break occasionally is a requirement.&lt;/p&gt;  &lt;p&gt;The new role is interesting. Based on Oracle technologies the product is a very stable and sizeable system. The team contains some excellent technical expertise and I will be working hard to install some processes and a decent methodology to ensure that they are supported as much as possible.&lt;/p&gt;  &lt;p&gt;That's all for now as I'm still finding my feet here. &lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-7032781809770228379?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/7032781809770228379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/back-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7032781809770228379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/7032781809770228379'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/back-again.html' title='Back again'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4641222802882976729</id><published>2007-09-10T08:47:00.000+12:00</published><updated>2007-09-10T10:44:57.390+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Returning the outer directory</title><content type='html'>Returning the directory before the current one should be a simple one-line call but I have so often seen a number of very highly convoluted ways of finding the last slash (\) in the directory string and using copy() and other ways that I have decided to relate a simple and direct way to obtain any or all directories prior to, and including the current one.&lt;br /&gt;&lt;br /&gt;The problem with finding the last slash is that you have to watch out for cases where the current directory is a root directory. The good news is that you can ignore all of that.&lt;br /&gt;&lt;br /&gt;You should know that finding the currently running exe program name including directories is Application.ExeName found in SysUtils. This should return something like..&lt;br /&gt;&lt;br /&gt;C:\Program Files\CodeGear\Delphi\5.0\bin\MyProgram.exe&lt;br /&gt;&lt;br /&gt;Of course the directory structure may be different as I'm sure you're not running your programs in the Delphi \bin directory :o)&lt;br /&gt;&lt;br /&gt;But to get the directory that MyProgram.exe is running in, the call is ExtractFileDir(Application.ExeName). This returns..&lt;br /&gt;&lt;br /&gt;C:\Program Files\CodeGear\Delphi\5.0\bin&lt;br /&gt;&lt;br /&gt;ExtractFilePath() dies something similar. It simply returns the string up to the last delimiter (the slash). In other words, anything past the last delimiter is ignored as it is assumed to be the program name. Excellent, this means that we can use that fact on the above directory structure to return the previous directory.&lt;br /&gt;&lt;br /&gt;&lt;font color="blue"&gt;PreviousDir := ExtractFilePath(ExtractFileDir(Application.ExeName));&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;This should return a directory structure of&lt;br /&gt;C:\Program Files\CodeGear\Delphi\5.0\&lt;br /&gt;&lt;br /&gt;We can continue to use ExtractFileDir() to return each directory in the tree until we reach the root directory (perhaps checking if PreviousDir = LastDir?). For example:&lt;br /&gt;&lt;br /&gt;&lt;font color="blue"&gt;Dir := ExtractFilePath(ExtractFileDir(ExtractFileDir(Application.ExeName)));&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Should return one directory up from the previous dir, or in this case: &lt;br /&gt;C:\Program Files\CodeGear\Delphi\&lt;br /&gt;&lt;br /&gt;So there you have it. A single call that returns the previous directory without having to bother with searching for the slash or worrying about the root directory issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4641222802882976729?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4641222802882976729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/returning-outer-directory.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4641222802882976729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4641222802882976729'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/returning-outer-directory.html' title='Returning the outer directory'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-6662201183978835174</id><published>2007-09-06T23:43:00.000+12:00</published><updated>2007-09-07T00:46:38.086+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Firebird'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='Interbase'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Accessing Interbase/Firebird Metadata in Delphi</title><content type='html'>&lt;i&gt;&lt;b&gt;WARNING:&lt;/b&gt; Interbase and Firebird system tables are not for the faint hearted. It is not recommended that you alter anything in these tables if you ever want to use them again - and keep your job. Major stuff-ups can occur.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I was looking at some old Delphi 7 code of mine when I was attempting to get in behind the scenes of Interbase and Firebird tables and fields to learn a little more about them. I came across these little pieces of information I'd like to share.&lt;br /&gt;&lt;br /&gt;The following will list all the tables in one grid and, for each table, list all the fields in another grid. Drop on your TIBDatabase and direct it at your Interbase or Firebird server.&lt;br /&gt;&lt;br /&gt;Now drop a TIBTransaction, TIBQuery, TDataSource, and a TDBGrid and connect them all. &lt;br /&gt;&lt;br /&gt;Enter the following query into the IBQuery1...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="Blue"&gt;  SELECT DISTINCT RDB$RELATION_NAME as MyTable&lt;br /&gt;  FROM RDB$RELATION_FIELDS&lt;br /&gt;  WHERE RDB$SYSTEM_FLAG=0 &lt;br /&gt;  AND RDB$VIEW_CONTEXT IS NULL&lt;br /&gt;  ORDER BY RDB$RELATION_NAME&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and make IBQuery1 live. Now drop on another TDBGrid, TIBQuery and TDataSource and connect them. This time, select IBQuery2 and add TDataSource1 in the "DataSource" Property. This will ensure that the second query will look to the first query to fill in the parameters. That parameter will be the field MyTable.&lt;br /&gt;&lt;br /&gt;Enter the following query string into the SQL property of IBQuery2...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="Blue"&gt;  SELECT RDB$FIELD_NAME AS FIELDS&lt;br /&gt;  FROM RDB$RELATION_FIELDS&lt;br /&gt;  WHERE RDB$RELATION_NAME = :MyTable&lt;br /&gt;  ORDER BY RDB$FIELD_POSITION&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and make that query live. When you run that program, selecting tables in the first grid will show all the field information for that table in the second grid.&lt;br /&gt;&lt;br /&gt;So far I have the following types in the field RDB$FIELD_TYPE. These can translate to... &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;8 = Integer   &lt;br /&gt;&lt;li&gt;10 = Float    &lt;br /&gt;&lt;li&gt;12 = Date     &lt;br /&gt;&lt;li&gt;13 = Time     &lt;br /&gt;&lt;li&gt;14 = Char     &lt;br /&gt;&lt;li&gt;35 = TimeStamp&lt;br /&gt;&lt;li&gt;37 = VarChar  &lt;br /&gt;&lt;li&gt;261 = Blob&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;There'll be a definitive list somewhere but that's all I have needed so far. I got that list from the internet somewhere but it was so long ago that I have forgotten where (thanks to whoever that was).&lt;br /&gt;&lt;br /&gt;That will get you started, but here are some other queries that will return more metadata information...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Return indexes for a table&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="Blue"&gt;  SELECT RDB$INDEX_NAME &lt;br /&gt;  FROM RDB$INDICES &lt;br /&gt;  WHERE RDB$RELATION_NAME = :MyTable&lt;br /&gt;  AND RDB$UNIQUE_FLAG IS NULL &lt;br /&gt;  AND RDB$FOREIGN_KEY IS NULL&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Return all Generators&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="Blue"&gt;  SELECT RDB$GENERATOR_NAME &lt;br /&gt;  FROM RDB$GENERATORS &lt;br /&gt;  WHERE RDB$SYSTEM_FLAG IS NULL&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Return all Triggers&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="Blue"&gt;  SELECT * FROM &lt;br /&gt;  RDB$TRIGGERS &lt;br /&gt;  WHERE RDB$SYSTEM_FLAG IS NULL&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;br /&gt;The shifters are coming in the morning so I'll post this now, please excuse any typing errors. Enjoy your day.&lt;br /&gt;&lt;br /&gt;Remember: &lt;i&gt;A positive attitude may not solve all your problems, but it will annoy enough people to make it worth the effort. Herm Albright (1876 - 1944)&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-6662201183978835174?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/6662201183978835174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/accessing-interbasefirebird-metadata-in.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6662201183978835174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6662201183978835174'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/accessing-interbasefirebird-metadata-in.html' title='Accessing Interbase/Firebird Metadata in Delphi'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4342663560764948279</id><published>2007-09-05T08:12:00.000+12:00</published><updated>2007-09-05T10:11:28.161+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Scrolling to the right place in TMemo</title><content type='html'>After programmatically inserting a number of lines I find that the TMemo will show at the last line as it normally should. However, sometimes what I really want is for TMemo to move to the first line, or perhaps even move to the top of the last lot of inserted lines.&lt;br /&gt;&lt;br /&gt;Here are a few little gems I have picked up on my travels that work a treat.&lt;br /&gt;&lt;br /&gt;Move to a particular line in a Memo...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color=blue&gt;function MemoMoveToLine(LineNo: integer);&lt;br /&gt;begin&lt;br /&gt;    with Memo1 do&lt;br /&gt;    begin&lt;br /&gt;        SelStart := Perform(EM_LINEINDEX, LineNo, 0);&lt;br /&gt;        Perform(EM_SCROLLCARET, LinePos, 0);&lt;br /&gt;    end;&lt;br /&gt;end;&lt;/font&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;What this is doing is calling TControl.Perform. This function actually uses a Windows message to perform some task, in this case placing the cursor at a line number, and then scrolling to that line. Let's take a look at using that function...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color=blue&gt;var&lt;br /&gt;    CurrentLine: integer;&lt;br /&gt;begin&lt;br /&gt;    &lt;i&gt;// Get the current position&lt;/i&gt;&lt;br /&gt;    with Memo1 do&lt;br /&gt;        CurrentLine := Perform(EM_LINEFROMCHAR, SelStart, 0);    &lt;br /&gt;    AddLotsOfLines;&lt;br /&gt;    &lt;i&gt;// Move to the line we started at&lt;/i&gt;&lt;br /&gt;    MemoMoveToLine(CurrentLine);&lt;br /&gt;    &lt;i&gt;// Now Move to the end&lt;/i&gt;&lt;br /&gt;    MemoMoveToLine(Memo1.Lines.Count);&lt;br /&gt;    &lt;i&gt;// Now Move to the start&lt;/i&gt;&lt;br /&gt;    MemoMoveToLine(0);&lt;br /&gt;end;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And there you have it.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramblings&lt;/h3&gt;&lt;br /&gt;I'm well into packing in the evenings now and surrounded by boxes. The truck comes in 2 days to take my furniture to Hamilton where I will start work as Software Development Manager about mid month. I look forward to the challange of a new team and new company.&lt;br /&gt;&lt;br /&gt;Although it will be hard to leave the Mount and this wonderful job and environment, my family is still at the Mount so I'll be back often. Its only a short drive to get here to see them and I'll probably end up with a caravan here for easy weekend stays.&lt;br /&gt;&lt;br /&gt;I'll still be codeing in Delphi for my own programs (and sanity), always have, always will. This will ensure that the blog stays relative to Delphi, although I might introduce a few new subjects as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4342663560764948279?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4342663560764948279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/scrolling-to-right-place-in-tmemo.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4342663560764948279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4342663560764948279'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/09/scrolling-to-right-place-in-tmemo.html' title='Scrolling to the right place in TMemo'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-1754792839539168151</id><published>2007-08-31T08:00:00.000+12:00</published><updated>2007-08-31T17:53:45.928+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi best practice'/><title type='text'>What's this Soundex in Delphi?</title><content type='html'>Delphi has a Soundex routine found in StrUtils, so why am I giving you another? This blog is about how Soundex works. understanding Soundex will help you decide how and when to use it to enhance your program. I am not suggesting for a moment that you dump the already written Soundex routine within Delphi, unless you really want to, but rather I am suggesting that this may be a way to understand how a Soundex code is put together. &lt;br /&gt;&lt;br /&gt;In the early 1980's I wrote a Soundex routine in Turbo Pascal and released it to the world through the bulletin boards that were available back then (before the Internet became readily available to the masses). By releasing it to the public domain, I was more interested in sharing than in copyrighting everything.&lt;br /&gt;&lt;br /&gt;Over the following years, to my great amusement, I found my routine copied several times, sometimes word for word, line for line including comments, with my name replaced with someone else claiming to be the author (I would not be so amused these days). As far as I could tell with the limited searching available at the time, I was the first person to write a Soundex routine entirely in Turbo Pascal, but it is a simple routine so I could easily be wrong on that count.&lt;br /&gt;&lt;br /&gt;The original Turbo Pascal source has been lost to .. well .. somewhere in that box of 5.5" floppies over in the corner there that I've been taking to the dump any day now for about the last 15 years.&lt;br /&gt;&lt;br /&gt;Soundex converts a name to four characters (one letter and three numbers). The conversion will result in the same numbers for like-sounding names. For example all the following names will all result in a Soundex code of "S530" - smith, Smith, smythe, smitt, shmidt, shmidt, snith, snyth, snythe, smmith, etc. This means that if a user enters "Smith", and I search the database for the Soundex code rather than the name "Smith", I will be presented with all those and other similar sounding names.&lt;br /&gt;&lt;br /&gt;Soundex was originally invented by Robert C. Russel and Margaret K. Odell around 1918-1922 and initially used for immigration and census information. Being before computers, the Soundex code is naturally simple so that people can calculate Soundex manually. It is used most in computer applications now. Searching your own database for names that sound like 'Smith', for spell checking and other areas.&lt;br /&gt;&lt;br /&gt;While Soundex is clever, it is not infallible so common sense must prevail. 'Clark', and 'Klark' will come out with a different Soundex code. other examples are Bate (B300), will not be the same as Bates (B320), or Gate (G300).&lt;br /&gt;&lt;br /&gt;In other instances names that really don't sound the same can sometimes, by sheer coincidence, have the same soundex code. Have you ever wondered why sometimes your spell checker wants to replace a mistyped word with something completely different and totally out of context? You are left wondering how on earth the spell checker came up with that word. Well, now you know. Its Soundex.  However, it is still clever enough for most uses.&lt;br /&gt;&lt;br /&gt;So what's the process? Well, it was simple for a reason (above) and still is. &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Take the first letter&lt;br /&gt;&lt;li&gt;Replace the letters BFPV with '1'&lt;br /&gt;&lt;li&gt;Replace the letters CGJKQSXZ with '2'&lt;br /&gt;&lt;li&gt;Replace the letters DT with '3'&lt;br /&gt;&lt;li&gt;Replace the letter L with '4'&lt;br /&gt;&lt;li&gt;Replace the letters MN with '5'&lt;br /&gt;&lt;li&gt;Replace the letter R with '6'&lt;br /&gt;&lt;li&gt;Ignore all other letters and ignore double letters (e.g. the 2 T's in "Letterman").&lt;br /&gt;&lt;li&gt;If the result is less than 4 characters, then pad out with zeros.&lt;br /&gt;&lt;li&gt;If result is greater than 4 characters then use only the first 4  &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;And there you have your Soundex code.  &lt;br /&gt;&lt;br /&gt;There are many ways to implement Soundex and I have chosen one that I hope will allow you to follow what is happening. Take a look at the Soundex routine in StrUtils for another way.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color=blue&gt;function MySoundex(sName: string): string;&lt;br /&gt;var&lt;br /&gt;    Ch, LastCh: Char;&lt;br /&gt;    i               : integer;&lt;br /&gt;    sx              : string;&lt;br /&gt;begin&lt;br /&gt;    sName := UpperCase(trim(sName));&lt;br /&gt;    if length(sName) &lt; 1 then&lt;br /&gt;        sx := '' &lt;i&gt;// got nothing, send nothing back&lt;/i&gt;&lt;br /&gt;    else&lt;br /&gt;    begin&lt;br /&gt;        LastCh := #0;&lt;br /&gt;        for i := 1 to length(sName) do&lt;br /&gt;        begin &lt;i&gt;// step through each character in the name&lt;/i&gt;&lt;br /&gt;            if i = 1 then&lt;br /&gt;                sx := sName[1] &lt;i&gt;// store the first character&lt;/i&gt;&lt;br /&gt;            else&lt;br /&gt;            begin&lt;br /&gt;                ch := #0;&lt;br /&gt;                if sName[i] &lt;&gt; LastCh then&lt;br /&gt;                begin&lt;br /&gt;                    case sName[i] of&lt;br /&gt;                        'B', 'F', 'P', 'V': ch := '1';&lt;br /&gt;                        'C', 'G', 'J', 'K',&lt;br /&gt;                            'Q', 'S', 'X', 'Z': ch := '2';&lt;br /&gt;                        'D', 'T': ch := '3';&lt;br /&gt;                        'L': ch := '4';&lt;br /&gt;                        'M', 'N': ch := '5';&lt;br /&gt;                        'R': ch := '6';&lt;br /&gt;                        &lt;i&gt;// Note no ELSE - ignore all other letters&lt;/i&gt;&lt;br /&gt;                    end;&lt;br /&gt;                    if ch &lt;&gt; #0 then&lt;br /&gt;                        sx := sx + ch;&lt;br /&gt;                    if length(sx) &gt; 3 then&lt;br /&gt;                        break; &lt;i&gt;// we got all we need&lt;/i&gt;&lt;br /&gt;                end;&lt;br /&gt;            end;&lt;br /&gt;            LastCh := sname[i];&lt;br /&gt;        end;&lt;br /&gt;        while length(sx) &lt; 4 do&lt;br /&gt;            sx := sx + '0'; &lt;i&gt;// pad out remaining with zero&lt;/i&gt;&lt;br /&gt;    end;&lt;br /&gt;    result := sx;&lt;br /&gt;end;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;There are lots of variations and improvements on that depending on what you are doing.&lt;br /&gt;&lt;br /&gt;So where would we use Soundex? One obvious way would be to give your users the ability to search for a name by the way it sounds.&lt;br /&gt;&lt;br /&gt;Consider a database full of hundreds of thousands of customers. Simply add a field to the Customer table called .. oh I don't know, how about "Soundex". Then add the soundex code for the customer surname on each customer.&lt;br /&gt;&lt;br /&gt;Because of the way Soundex works, you may find that finding all customers that sound like "Smith" may be a lot faster than finding all customers with the exact name of "Smith". How can this be? Well, since there will be less unique Soundex codes than unique surnames, the index will have less problems finding a Soundex code. Lets say that you are searching for a name in Auckland (approx 1.3 mill), an index on unique surnames will possibly total around 800,000 (&lt;i&gt;rough guess&lt;/i&gt;). However an index on unique Soundex codes for surnames may only total about 100,000 (&lt;i&gt;another wild guess with no substance at all, but you get the idea&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramblings&lt;/h3&gt;&lt;br /&gt;Its beautiful outside again today and although yesterday the wind was getting up a little, I can start to feel the rumblings of spring around here. Are we at last getting out of the deep dark winter that held our grip for the past few months and kept us close to our box of tissues, warm jerseys, and heaters? I hope so. It made me think of where I would be if I had accepted the offer to spend the next few years in Mongolia. I would have loved the experience of learning a new culture and language, but "The Mount" has a way of making me smile.&lt;br /&gt;&lt;br /&gt;I climbed to the top of the mount again last weekend where the view is spectacular. &lt;br /&gt;&lt;A Href="http://www.virtualoceania.net/newzealand/photos/cities/tauranga/066j.shtml"&gt;Mount Maunganui from the top of the Mount&lt;/a&gt;. It was sad to think I'll soon be moving inland to Hamilton, an hour and a half away.&lt;br /&gt;&lt;br /&gt;Have a wonderful day wherever you are and God's blessings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-1754792839539168151?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/1754792839539168151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/whats-this-soundex-in-delphi.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1754792839539168151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1754792839539168151'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/whats-this-soundex-in-delphi.html' title='What&apos;s this Soundex in Delphi?'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-2223800874295233257</id><published>2007-08-23T11:32:00.000+12:00</published><updated>2007-08-24T12:00:24.020+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Have an iif() function in Delphi</title><content type='html'>There are many advantages to learning other programming languages, but there are also some problems as well. The "Immediate If" (iif) function is one of those. In most, if not all, the other languages there is an immediate if function that makes programming just a little easier and allows you to say things in much less lines. Consider the following...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font face="Times New Roman" color=blue size=2&gt;    if Str = 'Top' then&lt;br /&gt;        s := 'Woohoo!'&lt;br /&gt;    else&lt;br /&gt;        s := 'Climb some more';&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;        &lt;br /&gt;While in Delphi we can effectively write this on one line as...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font face="Times New Roman" color=blue size=2&gt;    if Str = 'Top' then s := 'Woohoo!' else s := 'Climb some more';&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;        &lt;br /&gt;This looks untidy. If we were using another language with immediate if, that would look like this...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font face="Times New Roman" color=blue size=2&gt;    s := iif(Str='Top', 'Woohoo!', 'Climb some more');&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;    &lt;br /&gt;Now I realise to some Delphi programmers that are not multiple programming language experienced, all that seems a little esoteric but it is standard use in even Excel. Here's how it works...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font face="Times New Roman" color=blue size=2&gt;iif(condition, TrueResult, FalseResult) : String;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The iif() function first looks at the boolean condition. If that condition is true, then it return the TrueResult, and if it is false, then it returns the FalseResult. Here's the declaration&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font face="Times New Roman" color=blue size=2&gt;function iif(Test: boolean; TrueR, FalseR: string): string;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The 1st parameter is the Test condition, this can be anything (e.g.: x &gt; y).&lt;br /&gt;The 2nd parameter is the string to return if the test condition is True.&lt;br /&gt;The 3rd parameter is the string to return if the test condition is False.&lt;br /&gt;&lt;br /&gt;Here's the full function...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font face="Times New Roman" color=blue size=2&gt;function iif(Test: boolean; TrueR, FalseR: string): string;&lt;br /&gt;begin&lt;br /&gt;    if Test then&lt;br /&gt;        Result := TrueR&lt;br /&gt;    else&lt;br /&gt;        Result := FalseR;&lt;br /&gt;end;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;but in other languages, the 'type' we return can vary. For example we may want to return 99 if true or 0 of false. How do we do that in Delphi? By using the 'overload' directive.  &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font face="Times New Roman" color=blue size=2&gt;function iif(Test: boolean; TrueR, FalseR: string): string; overload;&lt;br /&gt;function iif(Test: boolean; TrueR, FalseR: integer): integer; overload;&lt;br /&gt;function iif(Test: boolean; TrueR, FalseR: extended): extended; overload;&lt;br /&gt;&lt;br /&gt;Implementation&lt;br /&gt;&lt;br /&gt;function iif(Test: boolean; TrueR, FalseR: string): string;&lt;br /&gt;begin&lt;br /&gt;    if Test then&lt;br /&gt;        Result := TrueR&lt;br /&gt;    else&lt;br /&gt;        Result := FalseR;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function iif(Test: boolean; TrueR, FalseR: integer): integer; &lt;br /&gt;begin&lt;br /&gt;    if Test then&lt;br /&gt;        Result := TrueR&lt;br /&gt;    else&lt;br /&gt;        Result := FalseR;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function iif(Test: boolean; TrueR, FalseR: extended): extended; &lt;br /&gt;begin&lt;br /&gt;    if Test then&lt;br /&gt;        Result := TrueR&lt;br /&gt;    else&lt;br /&gt;        Result := FalseR;&lt;br /&gt;end;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We can even extend these to bytes or even TObject if we want to. The only thing we can't do is have the same parameter types and return a different type, e.g...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font face="Times New Roman" color=blue size=2&gt;function iif(Test: boolean; TrueR, FalseR: string): string; overload;&lt;br /&gt;function iif(Test: boolean; TrueR, FalseR: string): integer; overload;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is a no-no. Why? Delphi will decide which function to run based on the parameter types. If all the parameter types are the same, Delphi will not compile as it will see this as an error.&lt;br /&gt;&lt;br /&gt;As already stated, Delphi decides which function it will used based on the types used in the parameters. It will always use the least type for the job. For example, if you have iif()'s set up for both integer and byte, and then use &lt;font face="Times New Roman" color=blue&gt;iif(x=y,5,10)&lt;/font&gt;, then Delphi will use the byte function and return a byte. In most cases this will still work ok even if you are expecting an integer returned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-2223800874295233257?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/2223800874295233257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/have-iif-function-in-delphi.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/2223800874295233257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/2223800874295233257'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/have-iif-function-in-delphi.html' title='Have an iif() function in Delphi'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4718729271243622029</id><published>2007-08-16T10:33:00.000+12:00</published><updated>2007-08-16T10:38:22.174+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Practical Development Methodologies</title><content type='html'>&lt;p&gt;Over the years I have designed and installed a number of development methodologies into various organisations (I'll not list them here). What I'm interested in is a description of the development methodology that is adopted by your company, why, and how well its working.&lt;br /&gt;&lt;br /&gt;I'd also like to know &lt;b&gt;&lt;i&gt;your&lt;/i&gt;&lt;/b&gt; description of the development method, not just the company's blurb sheet. For example, I was once working for a company who was the major client of a software development company. I was asked to report on the development methodology that the software company had adopted and how well it was working in favour of the client.&lt;br /&gt;&lt;br /&gt;The company, like a great many others I know, proudly advertised their methodology as "Agile". Agile is not itself a methodology but rather a concept. There are a number of methodologies which come within the concept of "Agile". Upon investigation, the company was operating under "Iterative and Incremental Development" (IID). After getting to know both the development company, and the client, I was able to report that the IID methodology worked exceedingly well for both the development company, and their major client in this case.&lt;br /&gt;&lt;br /&gt;In most of the methodologies I have installed, I have yet to install a stock-standard, out of the book methodology. I much prefer to look at several areas within the company I am contract to, to ensure a good fit. These areas include:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;How the programming team currently works, what works well and what needs improvement.&lt;br /&gt;&lt;li&gt;The major applications that the team completes, e.g. large developments that take longer than 6 months to deliver, or daily support and enhancements to legacy applications.&lt;br /&gt;&lt;li&gt;The major clients of the team. This may be serving in-house applications (in which case the customer may be another business area) or small, large, or corporate external customers. each has its own unique needs.&lt;br /&gt;&lt;li&gt;The slant that management wants to portray to the outside world.&lt;br /&gt;&lt;li&gt;Both the history and the perceived future of the development team.&lt;br /&gt;&lt;li&gt;The history and quality of the delivered products.&lt;br /&gt;&lt;li&gt;The location and proximity of the team. For example, some companies I have worked with perform all their development in India with local staff consisting of Business Analysis and Technical Architects. Others have split their development team between two cities.&lt;br /&gt;&lt;li&gt;The makeup of the team. Some teams may have 'prima donna' programmers that simply will not conform to changes unless they are subtle or suit their own needs.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;All these will have an effect on the eventual development methodology that will be designed and installed.&lt;br /&gt;&lt;br /&gt;One example of a change to the standard methodology was where I designed and installed a standard Waterfall methodology to cope with external programmers, but changed the process to be used for Functions, instead of whole applications. This reduced the time it took for the external programmers to return their first cut that could be tested and, where necessary, returned for minor alterations. This meant that for any application there were several waterfalls operating at any one time. A sort of RAD-ified, or even XP'd Waterfall.&lt;br /&gt;&lt;br /&gt;So what's your advertised methodology? What's your actual methodology? How well does it work for the team? And how well does it work for the client/customer?&lt;br /&gt;&lt;br /&gt;You don't need to tell me the company you work for, and in most cases it may not be prudent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4718729271243622029?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4718729271243622029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/practical-development-methodologies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4718729271243622029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4718729271243622029'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/practical-development-methodologies.html' title='Practical Development Methodologies'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-8563961251256965991</id><published>2007-08-15T11:34:00.000+12:00</published><updated>2007-08-15T18:38:57.813+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>The Shell Sort</title><content type='html'>Yes, I know Delphi comes with a number of sorting routines, but I thought I'd describe a shell sort as it is fascinating little sort routine that is easily understood and a very fast routine.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[Steve: Although the "Shellsort" algorythm was first published by Donald Shell (as pointed out by Anthony Mills, thanks Anthony), this 'Shell Sort' uses a different approach that would be closer to a "Bubble Sort" with some changes. I therefore take a little 'artistic licence' in describing it in ways that people can visually understand]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The name "Shell Sort" comes from those games that are played by the magician, conman, or simply the swift of hand when they try to get money from the average passerby. Having usually 3 shells, a small coin or marble is placed under one of the shells. The shells are then swapped around at speed and the passerby is asked to bet on which shell contains the marble.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_PDRhMtwI0ss/RsI9QC_jwBI/AAAAAAAABBA/k3CSWx3Lex8/s1600-h/Shell1.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_PDRhMtwI0ss/RsI9QC_jwBI/AAAAAAAABBA/k3CSWx3Lex8/s400/Shell1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5098705074027479058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The shell sort routine does that same swapping around, but only to place all the shells in order. Consider that each shell is numbered, in this case, 1 to 5, but we'll first get our 'swift of hand' guy to jumble them up a little.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_PDRhMtwI0ss/RsI9bi_jwCI/AAAAAAAABBI/vWwUrQuH0ok/s1600-h/Shell2.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_PDRhMtwI0ss/RsI9bi_jwCI/AAAAAAAABBI/vWwUrQuH0ok/s400/Shell2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5098705271595974690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the purposes of this blog, I'll limit the sort to only 5 integer numbers (or shells) although these could be words or extended reals or whatever. So long as you can compare them to see which is the greatest, this routine is the same or similar.&lt;br /&gt;&lt;br /&gt;What this routine does is traverse the 5 shells many times. Each time, it will check each shell and see if it is greater than the next shell, if it is, it will swap the two shells. This will have the effect of moving the largest numbers to the right and the smaller numbers to the left - in other words, sorting them.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_PDRhMtwI0ss/RsI9oC_jwDI/AAAAAAAABBQ/odB9q_dqT5Y/s1600-h/Shell3.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_PDRhMtwI0ss/RsI9oC_jwDI/AAAAAAAABBQ/odB9q_dqT5Y/s400/Shell3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5098705486344339506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Consider the first time through, looking at each shell in turn, and swapping them with the next if it is larger, would, by default, move the largest number to the end. &lt;br /&gt;&lt;br /&gt;Lets take a look at what will happen on the first run through.&lt;br /&gt;&lt;br /&gt;35241 &lt;i&gt;(look at 1st number, swap if 3 &gt; 5)&lt;/i&gt;&lt;br /&gt;35241 &lt;i&gt;(look at 2nd number, swap if 5 &gt; 2)&lt;/i&gt;&lt;br /&gt;32541 &lt;i&gt;(look at 3rd number, swap if 5 &gt; 4)&lt;/i&gt;&lt;br /&gt;32451 &lt;i&gt;(look at 4th number, swap if 5 &gt; 1)&lt;/i&gt;&lt;br /&gt;32415 &lt;br /&gt;&lt;br /&gt;This moved the largest number (5) to the end. This means that the next time through, we would only need to look at the first 4 numbers, and so on until there is only one number left. That will tell us that the shells are sorted. BTW: Did you notice that we only stepped throuigh the first 4 numbers? That's because the last number is, well, it's the last number and doesn't have a next number to compare to.&lt;br /&gt;&lt;br /&gt;Another way to know if they are all sorted (after all, we don't yet know if they are in order before we start) is if we traverse the shells and none needed to be swapped. If we didn't swap any then its in order and we can stop.&lt;br /&gt;&lt;br /&gt;Let's start. Create a new project in Delphi with a form. Drop a TMemo and a TButton on the form. We'll put all the code on the OnClick event of the button, so we can follow it easier. First declare the counters; the shells themselves; and a true/false variable to tell us that no swaps were made during the last traversal.&lt;br /&gt;&lt;br /&gt;&lt;font face="Times New Roman"&gt;&lt;pre&gt;&lt;br /&gt;var&lt;br /&gt;    i, LastShell: integer;&lt;br /&gt;    Shell : Array[1..5] of integer;&lt;br /&gt;    NoSwap: boolean;&lt;br /&gt;&lt;/pre&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then we'll place a procedure inside the OnClick event (something that I would not normally do, but we're keeping it all tight for you). This procedure will simply display the current state and order of the shells so we can see what's happening.&lt;br /&gt;&lt;br /&gt;&lt;font face="Times New Roman"&gt;&lt;pre&gt;&lt;br /&gt;procedure ShowShells;&lt;br /&gt;var&lt;br /&gt;    i: integer;&lt;br /&gt;    s: string;&lt;br /&gt;begin&lt;br /&gt;    &lt;i&gt;// display the shell order in the TMemo&lt;/i&gt;&lt;br /&gt;    s := '';&lt;br /&gt;    for i := 1 to 5 do&lt;br /&gt;        s := s + IntToStr(Shell[i]);&lt;br /&gt;    Memo1.lines.Add(s);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Go on, say ShowShells shix times quickly. Then we'll add another procedure. This one will swap a shell with the next and tell us that the swap occured.&lt;br /&gt;&lt;br /&gt;&lt;font face="Times New Roman"&gt;&lt;pre&gt;&lt;br /&gt;procedure Swap(var First, Second: integer);&lt;br /&gt;var temp: integer;&lt;br /&gt;begin&lt;br /&gt;    Temp := First;&lt;br /&gt;    First := Second;&lt;br /&gt;    Second := Temp;&lt;br /&gt;    NoSwap := false;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Note that I declared variable parameters, but I also could have swapped the array directly. Either way would have been acceptable in this situation.&lt;br /&gt;&lt;br /&gt;Now we can start writing code in the OnClick event itself. First we'll fill the array with the current order of the shells.&lt;br /&gt;&lt;br /&gt;&lt;font face="Times New Roman"&gt;&lt;pre&gt;&lt;br /&gt;begin&lt;br /&gt;    Shell[1] := 3;&lt;br /&gt;    Shell[2] := 5;&lt;br /&gt;    Shell[3] := 2;&lt;br /&gt;    Shell[4] := 4;&lt;br /&gt;    Shell[5] := 1;&lt;br /&gt;    memo1.Clear;&lt;br /&gt;    ShowShells;&lt;br /&gt;&lt;/pre&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Now we can do the actual sorting, using the counters. Remember, we are going down in the number of shells we need to sort each time (the largest will move to the end each time).&lt;br /&gt;&lt;br /&gt;&lt;font face="Times New Roman"&gt;&lt;pre&gt;&lt;br /&gt;    memo1.lines.add('now sorting...');&lt;br /&gt;    for LastShell := 5 downto 1 do&lt;br /&gt;    begin&lt;br /&gt;        NoSwap := true; &lt;i&gt;// No swaps this time through yet&lt;/i&gt;&lt;br /&gt;        &lt;i&gt;// traverse the unsorted shells &lt;/i&gt;&lt;br /&gt;        for i := 1 to LastShell-1 do&lt;br /&gt;        begin&lt;br /&gt;            if Shell[i] &gt; Shell[i+1] then&lt;br /&gt;                &lt;i&gt;// its greater than next, swap them&lt;/i&gt;&lt;br /&gt;                Swap(Shell[i], Shell[i+1]);&lt;br /&gt;            ShowShells;&lt;br /&gt;        end;&lt;br /&gt;        if NoSwap then&lt;br /&gt;            &lt;i&gt;// we traversed the shells and didn't need to swap&lt;/i&gt;&lt;br /&gt;            &lt;i&gt;// any therefore its sorted and we can stop.&lt;/i&gt;&lt;br /&gt;            break;&lt;br /&gt;    end;&lt;br /&gt;    memo1.lines.add('Done');&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Note that we only traversed the shells to LastShell-1? that's because we can't look to swap the lastshell with the next one as its the last shell :-)&lt;br /&gt;&lt;br /&gt;Here's the full code...&lt;br /&gt;&lt;br /&gt;&lt;font face="Times New Roman"&gt;&lt;pre&gt;&lt;br /&gt;procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;    i, LastShell: integer;&lt;br /&gt;    Shell : Array[1..5] of integer;&lt;br /&gt;    NoSwap: boolean;&lt;br /&gt;&lt;br /&gt;    procedure ShowShells;&lt;br /&gt;    var&lt;br /&gt;        i: integer;&lt;br /&gt;        s: string;&lt;br /&gt;    begin&lt;br /&gt;      s := '';&lt;br /&gt;      for i := 1 to 5 do&lt;br /&gt;          s := s + IntToStr(Shell[i]);&lt;br /&gt;      Memo1.lines.Add(s);&lt;br /&gt;    end;&lt;br /&gt;&lt;br /&gt;    procedure Swap(var First, Second: integer);&lt;br /&gt;    var temp: integer;&lt;br /&gt;    begin&lt;br /&gt;        Temp := First;&lt;br /&gt;        First := Second;&lt;br /&gt;        Second := Temp;&lt;br /&gt;        NoSwap := false;&lt;br /&gt;    end;&lt;br /&gt; &lt;br /&gt;begin&lt;br /&gt;    &lt;i&gt;// assign numbers to the array&lt;/i&gt;&lt;br /&gt;    Shell[1] := 3;&lt;br /&gt;    Shell[2] := 5;&lt;br /&gt;    Shell[3] := 2;&lt;br /&gt;    Shell[4] := 4;&lt;br /&gt;    Shell[5] := 1;&lt;br /&gt;    memo1.Clear;&lt;br /&gt;    ShowShells;&lt;br /&gt;    memo1.lines.add('now sorting...');&lt;br /&gt;    for LastShell := 5 downto 1 do&lt;br /&gt;    begin&lt;br /&gt;        NoSwap := true; &lt;i&gt;// No swaps this time through yet&lt;/i&gt;&lt;br /&gt;        &lt;i&gt;// traverse the unsorted shells &lt;/i&gt;&lt;br /&gt;        for i := 1 to LastShell-1 do&lt;br /&gt;        begin&lt;br /&gt;            if Shell[i] &gt; Shell[i+1] then&lt;br /&gt;                &lt;i&gt;// its greater than next, swap them&lt;/i&gt;&lt;br /&gt;                Swap(Shell[i], Shell[i+1]);&lt;br /&gt;            ShowShells;&lt;br /&gt;        end;&lt;br /&gt;        if NoSwap then&lt;br /&gt;            &lt;i&gt;// we traversed the shells and didn't need to swap&lt;/i&gt;&lt;br /&gt;            &lt;i&gt;// any therefore its sorted and we can stop.&lt;/i&gt;&lt;br /&gt;            break;&lt;br /&gt;    end;&lt;br /&gt;    memo1.lines.add('Done');&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-8563961251256965991?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/8563961251256965991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/shell-sort.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8563961251256965991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8563961251256965991'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/shell-sort.html' title='The Shell Sort'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_PDRhMtwI0ss/RsI9QC_jwBI/AAAAAAAABBA/k3CSWx3Lex8/s72-c/Shell1.JPG' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4879414253022901833</id><published>2007-08-14T12:07:00.000+12:00</published><updated>2007-08-14T12:31:04.853+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi best practice'/><title type='text'>The Delphi/Pascal Sentence</title><content type='html'>...or "When/Where to use semicolons".&lt;br /&gt;&lt;br /&gt;Apologies to all you long time Pascal gurus, but in the last few days I was pondering on the advice I gave a few students learning Pascal and felt that Today's post should be directed at those learning the language.&lt;br /&gt;&lt;br /&gt;Many new-comers find it difficult to grasp when they should be using a semicolon. The rules seem complex and inconsistant to them, when in fact they are reasonably consistant. Consider this...&lt;br /&gt;&lt;br /&gt;"Pascal is a sentence"&lt;br /&gt;&lt;br /&gt;Writing in Delphi Pascal is writing sentances, its that simple. Consider the following simple piece of code...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:Courier New;"&gt;if x &gt; 0 then&lt;br /&gt;  ShowMessage('x is worth something')&lt;br /&gt;else&lt;br /&gt;  ShowMessage('x is worthless');&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That equates to a sentence of "If x is greater than zero then x is worth something otherwise x is worthless.". Some people call that a Pascal statement, but I like to think of it as a sentence. Sentences are normally ended in a full stop, but in Pascal, sentances are ended in a semicolon and only the program is ended in a full stop. in the above Pascal sentence, the semicolon comes at the end as it should, and not half way through. You wouldn't say "If x is greater than zero. Then x is worth something. Otherwise. X is worthless." would you? That's 4 parts of a sentence that are seperated into 4 sentences that are meaningless.&lt;br /&gt;&lt;br /&gt;So why can't we just place a semicolon before the else? Well think of it. If someone is talking to you in fluent english and finishes the sentence, then a little later (when you are thinking of something else), states "otherwise...", you would say "Huh? what do you mean 'Otherwise'". The Delphi Pascal compiler would state the equivelent of "Huh?" at that point and totally fail to understand you.&lt;br /&gt;&lt;br /&gt;"OK-ish", I hear you saying "but what about all that begin/end stuff, nobody says that in real life", and normally you'd be right. Consider the following...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;if x &gt; 0 then&lt;br /&gt;begin&lt;br /&gt;  y := x;&lt;br /&gt;  ShowMessage('x and y are the same');&lt;br /&gt;  y := y * 10;&lt;br /&gt;  ShowMessage('and now they are not')&lt;br /&gt;end;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How does that equate to a sentence? Well, there is an overriding sentence there that says something like "If x is greater than zero then do some things...". (There's more to that sentence that I'll add soon).&lt;br /&gt;&lt;br /&gt;You can think of begin/end as brackets if you like, that's what C and some other languages do, but Pascal is ever so slightly different. When speaking fluent Pascal (Pascal is a language after all), and you want to say some other sentences in the middle of your main sentence, you will need to let the listener know that by saying 'begin' and 'end'.&lt;br /&gt;&lt;br /&gt;Each of the lines ending in a semicolon are their own sentences: "make y equal to x"; "say 'x and y are the same'"; "make y equal to y times 10". Being sentences in their own right, they can even have their own begin/ends for their sentences if they need them.&lt;br /&gt;&lt;br /&gt;What about that last ShowMessage() statement? Well, here's where the Pascal sentence comes in. The overriding sentence actually says "If x is greater than zero then do some things and say 'and now they are not'.". More correctly, in fluent Pascal the true sentence is "If x is greater than zero then &lt;i&gt;begin&lt;/i&gt; do some things and say 'and now they are not' &lt;i&gt;end&lt;/i&gt;."&lt;br /&gt;&lt;br /&gt;When speaking Pascal you do have to say the 'begin' and 'end' words in a sentence.&lt;br /&gt;&lt;br /&gt;Now I can also hear you saying "but I have seen a semicolon before the 'end' many times". Yes, and pascal is smart enough to understand that you are saying nothing. Placing a semicolon before the 'end' is the equivilent of stating an empty sentence before finishing the outer sentence. Sweet nothings.&lt;br /&gt;&lt;br /&gt;So what about Procedures and Functions? Procedures and functions are just teaching the Pascal language new words to use. For example...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;Procedure Swap(var x, y: integer);&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;...says "I'm going to teach you the word 'Swap' and it will involve 2 whole numbers". Here's the full procedure which takes 2 numbers and swaps their values so that x equals what y did and y equals what x did (normally used in something like a simple shell sort) ...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;Procedure Swap(var x, y: integer);&lt;br /&gt;var i : integer;&lt;br /&gt;begin&lt;br /&gt;  i := x;&lt;br /&gt;  x := y;&lt;br /&gt;  y := i&lt;br /&gt;end;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this case, the sentence doesn't flow unless you expand it a little.&lt;br /&gt;&lt;br /&gt;"Here's a new Pascal Word 'Swap' that takes 'x' and 'y' as variable parameters.&lt;br /&gt;'i' is a new variable just for the word 'Swap'.&lt;br /&gt;&lt;i&gt;begin&lt;/i&gt; do some things and then make y equal i &lt;i&gt;end&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The 'do some things' were some other sentences as you can see.&lt;br /&gt;&lt;br /&gt;Are you now more confused than ever? Don't worry, that's normal, you are becoming a programmer after all :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4879414253022901833?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4879414253022901833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/delphipascal-sentence.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4879414253022901833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4879414253022901833'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/delphipascal-sentence.html' title='The Delphi/Pascal Sentence'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4941532283557216752</id><published>2007-08-10T15:39:00.000+12:00</published><updated>2007-08-15T13:15:36.508+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Use of Try/Except/Finally</title><content type='html'>&lt;i&gt;[Steve: I have altered the example to a more suitable one - that should teach me to quickly post then leave for the weekend without reading it].&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I have seen a number of discussions recently showing that some developers can be confused over try/except and try/finally blocks. I can give an example in the kind of work that I was doing this morning.&lt;br /&gt;&lt;br /&gt;I often read or write to an external device (let's just call it "the device" as it could be any external device). That device can sometimes send back confusing errors that I try to trap. However because those errors are confusing, I must let the user know all the various issues and ways around them.&lt;br /&gt;&lt;br /&gt;Here's a simplified version of my code (the procedures can raise their own exception with the error message returned from the device).&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;var&lt;br /&gt;    curSave         : TCursor;&lt;br /&gt;begin&lt;br /&gt;    try&lt;br /&gt;        curSave := Screen.Cursor;&lt;br /&gt;        Screen.Cursor := crHourGlass; // Show hourglass cursor&lt;br /&gt;        try&lt;br /&gt;            OpenDeviceConnection; // each will raise an exception if error&lt;br /&gt;            DoStuffWithDevice;          &lt;br /&gt;            ObtainReadings;&lt;br /&gt;            CalculateNewFigures;&lt;br /&gt;            UpdateDevice;&lt;br /&gt;            If not CloseConnection then // raise my own error&lt;br /&gt;                raise exception.create('Cant Close Connection');&lt;br /&gt;        finally&lt;br /&gt;            // return the cursor to what it was&lt;br /&gt;            Screen.Cursor := curSave; &lt;br /&gt;        end;&lt;br /&gt;    except&lt;br /&gt;        // the original exception is now being handled&lt;br /&gt;        // we can re-raise it, but in this case we'll&lt;br /&gt;        // raise a new exception with additions&lt;br /&gt;        on e:exception do &lt;br /&gt;            raise exception.create(e.message + #13+#10&lt;br /&gt;               + 'Please check that the device is switched on' +#13+#10 &lt;br /&gt;               + 'and that the cables are properly connected.'); &lt;br /&gt;    end;&lt;br /&gt;end;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Exceptions created by any of the procedure calls will now result in an error message something like the following...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_PDRhMtwI0ss/Rr9ity_jwAI/AAAAAAAABA4/aKJ1cPKufL8/s1600-h/t.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_PDRhMtwI0ss/Rr9ity_jwAI/AAAAAAAABA4/aKJ1cPKufL8/s400/t.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5097901842128683010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that I have also placed a try/finally block inside the try/except. This is to ensure that we get the cursor back.&lt;br /&gt;&lt;br /&gt;I can raise an exception myself with "raise exception.create", the process then heads immediately to the except block, but before doing that, it must complete the finally block.&lt;br /&gt;&lt;br /&gt;The order that finally and except will be executed depends on the order that you give it. In the above sequence, finally will be completed before the except. Usually you will see them the other way around where the exception is processed before the finally block.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4941532283557216752?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4941532283557216752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/use-of-tryexceptfinally.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4941532283557216752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4941532283557216752'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/use-of-tryexceptfinally.html' title='Use of Try/Except/Finally'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_PDRhMtwI0ss/Rr9ity_jwAI/AAAAAAAABA4/aKJ1cPKufL8/s72-c/t.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-2364407974676038589</id><published>2007-08-02T11:04:00.001+12:00</published><updated>2007-08-03T08:31:49.019+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>More on Delphi's early days</title><content type='html'>&lt;a href="http://bp3.blogger.com/_PDRhMtwI0ss/RrEYBS_jv-I/AAAAAAAABAo/i7-dwWymYTA/s1600-h/TurboToolbox.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5093879064090099682" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_PDRhMtwI0ss/RrEYBS_jv-I/AAAAAAAABAo/i7-dwWymYTA/s200/TurboToolbox.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://bp3.blogger.com/_PDRhMtwI0ss/RrEX5S_jv9I/AAAAAAAABAg/RPb1CV6ctdo/s1600-h/Turbo_pascal_30_cover.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5093878926651146194" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_PDRhMtwI0ss/RrEX5S_jv9I/AAAAAAAABAg/RPb1CV6ctdo/s200/Turbo_pascal_30_cover.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://bp3.blogger.com/_PDRhMtwI0ss/RrEXsS_jv7I/AAAAAAAABAQ/75xqxVujyfg/s1600-h/TurboPascal-1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5093878703312846770" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_PDRhMtwI0ss/RrEXsS_jv7I/AAAAAAAABAQ/75xqxVujyfg/s200/TurboPascal-1.jpg" border="0" /&gt;&lt;/a&gt;My last post generated a bit of discussion, so I was trawling through the websites looking at the early Turbo Pascal information and I came across some interesting tidbits.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;As has already been pointed out by one of the readers, there was life even before turbo Pascal. The Pascal &lt;a href="http://en.wikipedia.org/wiki/Pascal_(programming_language)"&gt;Wiki&lt;/a&gt; states:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"In the 1980s Anders Hejlsberg wrote the Blue Label Pascal compiler for the Nascom-2. A reimplementation of this compiler for the IBM PC was marketed under the names Compas Pascal and PolyPascal before it was acquired by Borland ... renamed to Turbo Pascal."&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are a few pages that I found that are worthy of looking into:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dn.codegear.com/article/20693"&gt;Antique Software: Turbo Pascal v1.0&lt;/a&gt; - you can even download the IBM-PC version&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bbc.co.uk/dna/h2g2/A550829"&gt;Turbo Pascal&lt;/a&gt; - a short history of Turbo Pascal before it became Delphi&lt;/li&gt;&lt;li&gt;Brief &lt;a href="http://www.emsps.com/oldtools/borpasv.htm"&gt;descriptions and photos&lt;/a&gt; of Turbo Pascal versions&lt;/li&gt;&lt;li&gt;A more &lt;a href="http://delphi.about.com/cs/azindex/a/dhistory.htm"&gt;detailed history &lt;/a&gt;from About.com&lt;/li&gt;&lt;li&gt;CodeGear has a &lt;a href="http://dn.codegear.com/museum"&gt;number of historical documents&lt;/a&gt; that you can browse&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;By the later 1980's I dropped the Turbo Pascal IDE in favour of &lt;a href="http://www.multiedit.com/"&gt;MultiEdit&lt;/a&gt;. Its still around, and I still use it on occasion, but the Delphi IDE no longer needs it.&lt;/p&gt;&lt;p&gt;A reader in my last post pricked a memory or two over the character "Frank Borland". On searching, I came across this &lt;a href="http://dn.codegear.com/article/20283"&gt;CodeGear piece about Frank&lt;/a&gt;. It is definately worth a read.&lt;/p&gt;&lt;p&gt;Ok, now playtime is over and I must get back to work.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-2364407974676038589?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/2364407974676038589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/more-on-delphis-early-days.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/2364407974676038589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/2364407974676038589'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/08/more-on-delphis-early-days.html' title='More on Delphi&apos;s early days'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_PDRhMtwI0ss/RrEYBS_jv-I/AAAAAAAABAo/i7-dwWymYTA/s72-c/TurboToolbox.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4832365554956691164</id><published>2007-07-31T11:34:00.000+12:00</published><updated>2007-07-31T12:08:44.462+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Delphi/Pascal Through the Ages</title><content type='html'>(I apologise that this is a long post. if you are in a hurry, then please at least read the last 3 paragraphs)&lt;br /&gt;&lt;br /&gt;Delphi started out life as Turbo Pascal on CP/M. For those of you old enough to remember, CP/M was prior to MS-DOS, which in turn was prior to Windows. While getting to grips with Pascal MT+, I saw an add for a new compiler called Turbo Pascal in the very early 1980's and I bought myself a copy.&lt;br /&gt;&lt;br /&gt;From this simple, small and very fast compiler I wrote a small business accounting program that I sold on the Amstrad Computer. I used some code I found in another Borland addition called 'Database Toolbox' to add file and indexing routines.&lt;br /&gt;&lt;br /&gt;It was about mid 1980's that my accounting program The Trader Series had a serious following in New Zealand amongst Amstrad computer users and I decided to devote all my time porting it to MS-DOS, I gave up my job as Marketing Manager for Panasonic Computers in New Zealand to become a programmer. Coding in Turbo Pascal was fun. There were several enhancements since that first version 1 that I purchased, these included such powerful things as Overlays. We were restricted to 640 Kilobytes of memory so using overlays I could now write much larger programs.&lt;br /&gt;&lt;br /&gt;There were also a lot of third party programs and additions around, including a simple debugger which helped me a great deal. "The Trader Series", the accounting program I wrote, expanded to five separate modules and over half a million lines of code. Having much greater access to memory, I totally rewrote the screen handling so that all screens were built in memory and "shifted" to the screen, making it seem lightening fast for the user. I also abandoned Turbo Toolbox and rewrote the indexing system with a doubly linked, self-balancing B++ tree. These enhancements, along with using linked lists for transactions made it the fastest accounting program on the market at the time.&lt;br /&gt;&lt;br /&gt;I remember running a demo for the company I selected to distribute the program (I decided that I can't be both a programmer and salesman/marketing person). Their high end product took as much as 30 to 40 hours to run an end of month process. I had built up a database of 30,000 debtors, each with about a dozen transactions. After the demo they asked me to perform an end of month and turning to leave, asked when I would be back in to see the result. I told them it had been done. I spent all afternoon proving that it could run an end of month process in less than a minute. That program won the New Zealand Computer Software Awards in 1987 and became New Zealand's largest selling small business accounting program for the next 10 years.&lt;br /&gt;&lt;br /&gt;Turbo Pascal was a great language. Object Pascal raised its head in version 4.0 and I stayed with Turbo Pascal until I sold The Trader Series in 1990.&lt;br /&gt;&lt;br /&gt;By now Windows was getting a grip and I needed to move into this arena. Borland's Pascal for Windows just didn't do it for me. I went with a number of other languages including FoxPro, C++, Visual Basic, and I even tried a new language called Java (it'll never amount to anything but hype, or so I thought - Sigh, I have been proven wrong before).&lt;br /&gt;&lt;br /&gt;Borland then introduced Delphi and I managed to get myself a pre-release copy. Finally a great environment. Something that equaled the environment of Turbo Pascal when it was first introduced. Delphi however had a much larger price tag, but I purchased anyway and was thrilled with the power that even this first release had. Delphi was written in Object Pascal and the source code was included. You could learn lot with that source code and programmers were able to write their own components. The Component market was created with many outstanding components pretty soon there were thousands to choose from.&lt;br /&gt;&lt;br /&gt;Delphi, the new Turbo Pascal, was alive and kicking again. I was a contractor through the 1990's and contracted to many different companies and corporations and was able to persuade more than a few to look at Delphi for their future needs (where appropriate).&lt;br /&gt;&lt;br /&gt;While Delphi was indeed an excellent development environment, I was more and more disappointed in its growing price tag. By 2003, Borland had priced itself completely out of the market. The price for Delphi was now about the same price as a good second hand car in New Zealand and more than almost all other development environments.&lt;br /&gt;&lt;br /&gt;I could no longer afford my favourite development language and companies everywhere in New Zealand were coming to the same conclusion. Sadly, I was shifting to Microsoft and C#. I still had, and still use, Delphi 7, but the call to C# was strong as the companies left Borland, and as Borland lost interest in Delphi. I could not find work as a Delphi contractor any more.&lt;br /&gt;&lt;br /&gt;Earlier this year, I was invited along to the Delphi 2007 pre-release roadshow. There I learned that Borland had shifted Delphi into a separate company and concentrated on its team tools. CodeGear had been created to take over Delphi as its flagship product. Personally I thought it should have been the other way around, but that's the way it is. The price of Delphi was dropped by several thousand from what it was in 2003, and it had been given several enhancements since I last saw it in Delphi 7.&lt;br /&gt;&lt;br /&gt;I saw this as a resurrection of Delphi and a possible push to get Delphi back to its space as one of the top programming environments. They have a long way to go to get back the loyalty that they once had. Companies had dropped them and now few companies will look at Delphi again.&lt;br /&gt;However, in my intervening years with other development environments I have learned a few things: A team of 3 dedicated Delphi developers can totally outperform a team of 40 developers in Java and other Microsoft languages for a similarly large corporate application - by a factor of several months. I have also learned that, although Delphi can do .NET, Win32 can often deliver to the customer a far superior product, much more aligned with the customer's needs, in a much reduced timeframe/cost. And I learned that even a single developer armed with some excellent Delphi tools, can take on the giants.&lt;br /&gt;&lt;br /&gt;CodeGear, your work now is not with enhancing Delphi (other than in the helpscreens), its marketing that will win the lost corporates and large companies back. You won't win them all, the "We're a Microsoft Shop" syndrome is too well entrenched for that. But you can win over a lot and make your headway in the world again, and give back the power to the average programmer.&lt;br /&gt;&lt;br /&gt;I must admit, it's nice to be able to get back to programming without fighting the tool every single step of the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4832365554956691164?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4832365554956691164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/delphipascal-through-ages.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4832365554956691164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4832365554956691164'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/delphipascal-through-ages.html' title='Delphi/Pascal Through the Ages'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-662177053680058920</id><published>2007-07-25T08:53:00.000+12:00</published><updated>2007-07-25T08:55:42.135+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Getting the Time to Program</title><content type='html'>How many others have the same problem?&lt;br /&gt;&lt;br /&gt;I have a number of ideas that I would love to program in my spare time. I have produced many retail programs previously with success so know the pitfalls. I have worked out most of the kinks in the logic of how to implement many of the features. I just need to program them.&lt;br /&gt;&lt;br /&gt;The problem is that I spend a great many hours in the day programming at work. New Zealand is known for being a wonderful place to live, but its also getting known as the hardest working. Us poor Kiwis (the kiwi is our native bird and also the name we call ourselves), have the second highest rate of average hours worked per year compared to all other OECD countries. This means that when I get home, I am in serious need of relaxation and the things I want to program get put off for another night.&lt;br /&gt;&lt;br /&gt;I have some wonderful ideas that I know will be good sellers, I just need the time to program them. Often the time I do spend on these ideas at home, ends up as code that is used in my work programs. This keeps the boss happy (I hope), but doesn't get my programs finished.&lt;br /&gt;&lt;br /&gt;Mind you, with spending every weekend with my Fiance and her daughter, and spending about an hour on the phone to her every night (we live in different towns) does not help the situation so I suppose I'm my own worst enemy.&lt;br /&gt;&lt;br /&gt;How do you make sure that you put aside the time and energy to program in the evenings?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-662177053680058920?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/662177053680058920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/getting-time-to-program.html#comment-form' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/662177053680058920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/662177053680058920'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/getting-time-to-program.html' title='Getting the Time to Program'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-5829032875816933093</id><published>2007-07-19T10:46:00.000+12:00</published><updated>2007-07-24T08:31:30.690+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Development Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi best practice'/><title type='text'>Different Programming Styles</title><content type='html'>I was reading &lt;a href="http://blog.dragonsoftru.com/2007/07/18/programmers-and-temperaments/"&gt;Serge’s Blog&lt;/a&gt; on Programmers and Temperaments this morning and it reminded me of a project I did for a company in Wellington once. It was a large international company (no, I'm not going to tell you which) and they had a very large project that they needed to produce. The project was technically difficult requiring a lot of thought each step of the way.&lt;br /&gt;&lt;br /&gt;After a lot of design by their chief software architect, they called for programmers. About twelve of us were hired for this one project and it was really fun to get to work with a number of others on one project like that. We were given regular daily meetings to try to bring us all up to speed on the technical requirements, and then shown to a large, open plan room with a computer on each desk to choose our own work area.&lt;br /&gt;&lt;br /&gt;What was most interesting though was a discussion that I was having with the project manager about a week later. He commented on the work styles of each of the programmers from the perspective of an observer. This wasn't a moan or gossip session, but a discussion on a real observation.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;After all the meetings and the whiteboard sessions were over, we all drifted into the desks and work practices we wanted. The project manager observed the following different styles...&lt;br /&gt;&lt;br /&gt;I found my niche in a corner desk that was on its own, then got out my pad and spent the next 2 days planning what and how I was to approach my part of the project, before I even touched the keyboard. I wanted to completely understand the requirements (which were mostly in the architect's head, given out on the whiteboard sessions). Once I understood and had a clear plan, then it was a matter of programming.&lt;br /&gt;&lt;br /&gt;Two others immediately grabbed two desks that were joined to each other so they were sitting side by side, then simply pulled one chair over to the other desk to together at the same desk, one computer between them, and designed and programmed together. They needed to talk through what they were doing and help each other plan and program. Occasionally the second programmer would move to the computer on the other desk to program a sample procedure to help explain to the other his thoughts on a subject.&lt;br /&gt;&lt;br /&gt;Another programmer sat down at the first available desk and started pounding out code. He needed to try out various prototypes and work from there, building up his code as he went.&lt;br /&gt;&lt;br /&gt;Various others worked somewhere along the spectrum of the above three different styles. Some couldn't handle it and after a few days left for greener and much easier pastures.&lt;br /&gt;&lt;br /&gt;What was interesting over the following several months was the general effectiveness of the different styles. I (admittedly somewhat surprisingly as there were some seriously experienced programmers that I enjoyed working with) ended up producing the end result much faster, followed by the pair/buddy approach. The person who immediately started coding, had to change and restart so many times that he turned out to be the least effective.&lt;br /&gt;&lt;br /&gt;I'd love to hear your comments on what you have found in your experiences.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-5829032875816933093?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/5829032875816933093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/different-programming-styles.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/5829032875816933093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/5829032875816933093'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/different-programming-styles.html' title='Different Programming Styles'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4644749761578163212</id><published>2007-07-10T11:43:00.000+12:00</published><updated>2007-07-24T08:31:54.767+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi best practice'/><title type='text'>My Delphi 2007 program isn't debugging!</title><content type='html'>I think I've just found a little "think first" when using Delphi 2007. &lt;br /&gt;&lt;br /&gt;Trying to step through the code with the debugger to find out how and why something isn't happening as it should, I placed a break point on the first line of my FormCreate method. When I ran the application in debug mode, my breakpoint changed to a green cross and the program didn't stop.&lt;br /&gt;&lt;br /&gt;Aha! said I to myself thinking myself clever (always a mistake), It's a project option. I must have turned off the debugger. Nope - that wasn't it.&lt;br /&gt;&lt;br /&gt;Aha then! (yes, clever again) I must have changed some other compiler directive somewhere. Nope - stumped.&lt;br /&gt;&lt;br /&gt;Realisation is now dawning on me that I wasn't half as clever as I thought I was and I eventualy even reverted to the old "Microsoft's fault" fix-all - Exit Delphi and all other programs, close down and start the whole computer up again. Load up Delphi, place the breakpoint, run and ... Nope - that wasn't it either.&lt;br /&gt;&lt;br /&gt;Several minutes of frustration followed in which it would not be prudent to relate all the details (I am Christian after all).&lt;br /&gt;&lt;br /&gt;Then it dawned on me. A small 'thank-you' to Him and off I go to Project Options, Build Events. Yes, I had a Post-Build event.&lt;br /&gt;&lt;br /&gt;My normal process is to build the application, then move the application to the ..\bin directory where it needs to be in order to run correctly. Being exceptionally clever (or so I thought at the time), I placed those steps into the Post Build event. That was several weeks ago and I had forgotten.&lt;br /&gt;&lt;br /&gt;In order to correctly debug the program today, I changed the project's output Directory to the ..\bin directory where it needed to be to run.&lt;br /&gt;&lt;br /&gt;What all that meant was that when I ran build (F9), I expected the program to run to the breakpoint and then stop. However, Delphi knew that I wanted some things to happen in the Post build routine and copied over the just-built exe with an older version sitting in the ..\source directory. Now there is an exe running that does not have the breakpoint and does not relate to the code I am expecting to run.&lt;br /&gt;&lt;br /&gt;A interesting morning's lesson on trying to be too clever for my own good.&lt;br /&gt;&lt;br /&gt;Have a great day.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4644749761578163212?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4644749761578163212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/my-delphi-2007-program-isnt-debugging.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4644749761578163212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4644749761578163212'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/my-delphi-2007-program-isnt-debugging.html' title='My Delphi 2007 program isn&apos;t debugging!'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-1767209538029827258</id><published>2007-07-05T16:41:00.000+12:00</published><updated>2007-07-05T20:48:06.725+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Indy'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Where'd the CopyFileTo command go?</title><content type='html'>What a busy month for me. It feels like I've barely got back from the wedding in Brisbane and that was a couple of weeks ago.&lt;br /&gt;&lt;br /&gt;I was working with an older Delphi program today that I hadn't loaded in Delphi 2007 as yet (possibly not since Delphi 6 or 7). When I tried to compile, it failed - it couldn't find CopyFileTo().&lt;br /&gt;&lt;br /&gt;CopyFileTo() is an Indy function that used to reside in idGlobals. It now resides in idglobalProtocols. I simply include ", idglobalProtocols" in the 'uses' statement and it compiled.&lt;br /&gt;&lt;br /&gt;Strangely a search of the internet did not come up with the answer - other than to point me in the direction of Indy. A search of all *.pas files under "..\CodeGear\Delphi\5.0\source\Indy\Indy10" showed me the correct file I should "Use".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-1767209538029827258?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/1767209538029827258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/whered-copyfileto-command-go.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1767209538029827258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/1767209538029827258'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/07/whered-copyfileto-command-go.html' title='Where&apos;d the CopyFileTo command go?'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3870652303611402360</id><published>2007-06-13T10:58:00.000+12:00</published><updated>2007-06-13T11:09:27.575+12:00</updated><title type='text'>In Brisbane next week</title><content type='html'>My son is getting married so its off to Brisbane to attend the wedding.&lt;br /&gt;&lt;br /&gt;This means that the past week has been turned upside down and I haven't done much on the blogsite because of this and other commitments.&lt;br /&gt;&lt;br /&gt;Brisbane is a wonderful place and I wish I could have more time to see the sights. It'll be a lot warmer there than it is here at the moment so my Fiance is dragging out her summer clothes and has started packing for the trip. Being a guy, I only need a few minutes to throw some stuff into a bag before I leave, go pick her up and head to the airport.&lt;br /&gt;&lt;br /&gt;I have just a little bit of apprehension on the length of time it will take to pick up Carol though. Based on her descriptions of decisions on things to pack, I'd best arrive at her house with plenty of time to spare.&lt;br /&gt;&lt;br /&gt;I wouldn't miss this for the world. My son and his Fiance are the most wonderful couple and their getting married has been high on my wish list for years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3870652303611402360?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/3870652303611402360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/06/in-brisbane-next-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3870652303611402360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3870652303611402360'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/06/in-brisbane-next-week.html' title='In Brisbane next week'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-942377524065408082</id><published>2007-06-06T13:01:00.000+12:00</published><updated>2007-06-06T14:44:36.565+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi best practice'/><title type='text'>Storing database fields to a TComboBox</title><content type='html'>While there is a TDBLookupComboBox that allows the developer to attach the TDBLookupComboBox to a table directly, it does have some issues in its use. I prefer to use a normal TComboBox and feed it from a Query. It is then a standalone ComboBox that can be used for more than just updating a field in one table with a field in another.&lt;br /&gt;&lt;br /&gt;But how do I fill the ComboBox? And once filled, how do I know which record the user has selected?&lt;br /&gt;&lt;br /&gt;First the Query. I am assuming that, like me, you create a field in every table that is filled with a unique ID. I can use this ID in other tables to create a join. For example, I may have a Customer table ...&lt;br /&gt;&lt;br /&gt;CustomerID: Integer&lt;br /&gt;Name: String (e.g. VarChar)&lt;br /&gt;&lt;br /&gt;Lets say I want a ComboBox of all my customers for the user to select. The query would look something like this ...&lt;br /&gt;&lt;br /&gt;SELECT CustomerID, Name&lt;br /&gt;FROM Customer&lt;br /&gt;ORDER BY Name&lt;br /&gt;&lt;br /&gt;I am always sure to ask for the ID first and then the text that the user will want to see. Now lets fill the ComboBox with that detail. Because I may wish to do this with many comboboxes in my application and with many different queries on other tables, I have built a procedure to fill the ComboBox using AddObject.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Courier New;font-size:10;"  &gt;&lt;span class="pas1-reservedword"&gt;Procedure&lt;/span&gt;&lt;span class="pas1-space"&gt; FillCombo(cb: TComboBox; Q: TQuery);&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;begin&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;   cb.items.clear;&lt;br /&gt;  Q.First;&lt;br /&gt;  &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;while&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;not&lt;/span&gt;&lt;span class="pas1-space"&gt; Q.Eof &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;do&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;   &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;begin&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;       cb.Items.AddObject(Q.Fields[&lt;/span&gt;&lt;span class="pas1-number"&gt;1&lt;/span&gt;&lt;span class="pas1-symbol"&gt;].AsString, TObject(Q.Fields[&lt;/span&gt;&lt;span class="pas1-number"&gt;0&lt;/span&gt;&lt;span class="pas1-symbol"&gt;].AsInteger));&lt;br /&gt;      Q.Next;&lt;br /&gt;  &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;end&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;end&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now I want to use that procedure to fill my ComboBox.&lt;br /&gt;&lt;br /&gt;  FillCombo(cbCustomer, MyQry);&lt;br /&gt;&lt;br /&gt;So how then can we tell which record the user has selected? Simple, I have created a function that will return the ID of the selected record, in this case the selected Customer. If none has been selected, it will return -1.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Courier New;font-size:10;"  &gt;&lt;span class="pas1-reservedword"&gt;function&lt;/span&gt;&lt;span class="pas1-space"&gt; GetSelected(cb : TComboBox) : integer;&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;begin&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;   &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;if&lt;/span&gt;&lt;span class="pas1-space"&gt; cb.ItemIndex = -&lt;/span&gt;&lt;span class="pas1-number"&gt;1&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;then&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;       result := -&lt;/span&gt;&lt;span class="pas1-number"&gt;1&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;   &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;       result := Integer(cb.Items.Objects[cb.ItemIndex]);&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;end&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So all we need to do is call it.&lt;br /&gt;&lt;br /&gt;  CustomerID := GetSelected(cbCustomer);&lt;br /&gt;  if CustomerID = -1 then&lt;br /&gt;      // none selected&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-942377524065408082?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/942377524065408082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/06/storing-database-fields-to-tcombobox.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/942377524065408082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/942377524065408082'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/06/storing-database-fields-to-tcombobox.html' title='Storing database fields to a TComboBox'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3490025047796804174</id><published>2007-06-05T08:19:00.000+12:00</published><updated>2007-07-24T08:33:05.436+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Elevate Software's new ElevateDB</title><content type='html'>I have just obtained ElevateDB from &lt;a href="http://www.elevatesoft.com"&gt;Elevate Software&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You will notice a link off this site for a Free SQL tool tool called &lt;a href="http://www.trader.co.nz/tools"&gt;Twenty Queries&lt;/a&gt; that I wrote some time ago when I wanted to find out the inner workings of SQL. That tool was for a product called DBISAM, a very good SQL database written entirely in Delphi. It compiled completely into your Delphi generated application with no BDE or other engined to install. Using my tool you could create a totally SQL call to recreate your entire database structure from the exe and therefore didn't even need to distribute the database tables with your application either.&lt;br /&gt;&lt;br /&gt;ElevateDB is the big brother to DBISAM and I am very much looking forward to getting into developing with it. First on my list will be updating "Twenty Queries" for ElevateDB.&lt;br /&gt;&lt;br /&gt;I'll tell you more about my experiences with it once I have had a play.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3490025047796804174?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/3490025047796804174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/06/elevate-softwares-new-elevatedb.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3490025047796804174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3490025047796804174'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/06/elevate-softwares-new-elevatedb.html' title='Elevate Software&apos;s new ElevateDB'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3235874206343882854</id><published>2007-05-23T08:47:00.000+12:00</published><updated>2007-05-24T00:27:03.775+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi 2007'/><title type='text'>Delphi 2007 is in the House</title><content type='html'>This week I installed delphi 2007 on my work computer. Some initial comments:&lt;br /&gt;&lt;br /&gt;Man, the difference in loading is light speed compared to 2006. &lt;br /&gt;&lt;br /&gt;Hey ... The help actually works!!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dow.wau.nl/aew/delforexp.html"&gt;DelForExp&lt;/a&gt;, the "in IDE" source code formatter that I use, doesn't work in 2007 yet, despite the statement that it does on the website. It jams up everything with non-ending errors. Bummer, I'll have to wait for that to be fixed. &lt;a href="http://www.gexperts.org/"&gt;GExperts &lt;/a&gt;seems to work fine though.&lt;br /&gt;&lt;br /&gt;Why oh why has CodeGear gone away from offering example code in its help screens? This applies to Delphi 2006 as well, but as you will know, its help, well.. didn't.&lt;br /&gt;&lt;br /&gt;Overall impression: Its fast, it works, its a must have update. Sad to say, Delphi 2005 and 2006 did not qualify for the "must have update" statement. So if you are still working away with the tried and true, trusty old Delphi 7 - now's the time to upgrade and boost your productivity folks.&lt;br /&gt;&lt;br /&gt;Back to work Steve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3235874206343882854?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/3235874206343882854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/delphi-2007-is-in-house.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3235874206343882854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3235874206343882854'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/delphi-2007-is-in-house.html' title='Delphi 2007 is in the House'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3869667301183604260</id><published>2007-05-23T08:37:00.000+12:00</published><updated>2007-07-24T08:32:48.791+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Roadmaps to start with Delphi in June</title><content type='html'>Jim Douglas, CEO of CodeGear, has set up his own &lt;a href="http://blogs.codegear.com/jimdouglas/"&gt;Blog site&lt;/a&gt;. Today he tells us that Roadmaps of the major product lines will be published starting in June. Delphi gets the main attention as the first Roadmap to be published.&lt;br /&gt;&lt;br /&gt;This will make interesting reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3869667301183604260?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/3869667301183604260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/roadmaps-to-start-with-delphi-in-june.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3869667301183604260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3869667301183604260'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/roadmaps-to-start-with-delphi-in-june.html' title='Roadmaps to start with Delphi in June'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-6555061524147699186</id><published>2007-05-22T12:59:00.000+12:00</published><updated>2007-05-23T16:06:38.666+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi best practice'/><title type='text'>Global Variable Rant</title><content type='html'>Taking over someone else's programs is never an easy task. I'm not about to judge the programmer as I was not there for the decisions made, or the time pressures and stress that was going on at the time.&lt;br /&gt;&lt;br /&gt;However, I will ask every fledgling and seasoned programmer out there to spare a thought for best practice techniques. Trying to read code where extensive use of global variables are used is well nigh an impossible task.&lt;br /&gt;&lt;br /&gt;Instead, create objects and define limits within those objects using such things as Sets (e.g. TMyStatus = (stActive, stInactive, stPaused);) and/or comments which allow another person to know what is happening. Please use variable names that can give some indication as to what its used for. Variable names like glbBoolsghSet02 (I made that one up) tells another programmer nothing.&lt;br /&gt;&lt;br /&gt;Good commenting IS needed even in good Delphi code. I'll leave explaining what I mean by good commenting in another blog a little later.&lt;br /&gt;&lt;br /&gt;Enjoy life, there's reason in that madness - its just buried a little deeper in some objects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-6555061524147699186?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/6555061524147699186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/global-variable-rant.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6555061524147699186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/6555061524147699186'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/global-variable-rant.html' title='Global Variable Rant'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-2379306330831410594</id><published>2007-05-22T08:04:00.000+12:00</published><updated>2007-05-23T16:07:11.176+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi best practice'/><title type='text'>Too many tabs? Too much code?</title><content type='html'>I've been working on a project that has a number of tabs on the form. With two or three tabs, the full code for these can be included in the forms unit without a problem. But when you are adding more and more tabs, either you are going to have to rethink your user interface or have one big mother of a unit with a gazillion lines of code.&lt;br /&gt;&lt;br /&gt;There is another way that I learned a number of years ago - place each tab on a different form. "What? But that's nonsense Steve, you've been smoking something!", I hear you say. Not so. Follow along for a tricky bit of coding.&lt;br /&gt;&lt;br /&gt;Create your form with all your tabs - just don’t put anything in them for the moment. Now for each tab, create a totally separate form, place a TPanel on the form and align it to Client. Give that Panel the same name for each form so you'll remember it, like MainPanel. Then create all your components onto the MainPanel and add your logic code to that form.&lt;br /&gt;&lt;br /&gt;Now, going back to the main form with all the tabs, in the OnChange event of the Tabs, place something like the following code...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font: 10pt Courier New;"&gt;&lt;span class="pas1-reservedword"&gt;procedure&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-identifier"&gt;TfrmMain&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;pcMainTabChange&lt;/span&gt;&lt;span class="pas1-symbol"&gt;(&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Sender&lt;/span&gt;&lt;span class="pas1-symbol"&gt;: &lt;/span&gt;&lt;span class="pas1-identifier"&gt;TObject&lt;/span&gt;&lt;span class="pas1-symbol"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;begin&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;    &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;case&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-identifier"&gt;pcMainTab&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;TabIndex&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;of&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;        &lt;/span&gt;&lt;span class="pas1-number"&gt;1&lt;/span&gt;&lt;span class="pas1-symbol"&gt;: &lt;/span&gt;&lt;span class="pas1-identifier"&gt;FrmOne&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;MainPanel&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Parent&lt;/span&gt;&lt;span class="pas1-space"&gt; := &lt;/span&gt;&lt;span class="pas1-identifier"&gt;tsOne&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pas1-number"&gt;2&lt;/span&gt;&lt;span class="pas1-symbol"&gt;: &lt;/span&gt;&lt;span class="pas1-identifier"&gt;FrmTwo&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;MainPanel&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Parent&lt;/span&gt;&lt;span class="pas1-space"&gt; := &lt;/span&gt;&lt;span class="pas1-identifier"&gt;tsTwo&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pas1-number"&gt;3&lt;/span&gt;&lt;span class="pas1-symbol"&gt;: &lt;/span&gt;&lt;span class="pas1-identifier"&gt;FrmThree&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;MainPanel&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Parent&lt;/span&gt;&lt;span class="pas1-space"&gt; := &lt;/span&gt;&lt;span class="pas1-identifier"&gt;tsThree&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;end&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;end&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And there you have it. Simple isn't it?&lt;br /&gt;&lt;br /&gt;the tsOne, tsTwo etc are the names you can give to the individual TTabSheet you want the form's components to appear on.&lt;br /&gt;&lt;br /&gt;What is happening here is that you are changing the parent of the MainPanel to the TTabSheet of the tab you want it to appear in. By changing the parent, you are actually telling it that it now lives on that new tabsheet instead of the form. All the code will still apply.&lt;br /&gt;&lt;br /&gt;All the logic code for each tab is in a separate form, kept tidy and easier to follow.&lt;br /&gt;&lt;br /&gt;You can add code to create the form at runtime if you wish, but remember to free it again in the OnChanging event.&lt;br /&gt;&lt;br /&gt;God bless and have a wonderful day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-2379306330831410594?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/2379306330831410594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/too-many-tabs-too-much-code.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/2379306330831410594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/2379306330831410594'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/too-many-tabs-too-much-code.html' title='Too many tabs? Too much code?'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-3775159000332359859</id><published>2007-05-21T12:20:00.000+12:00</published><updated>2007-05-25T15:13:22.365+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Accessing multiple edit Components</title><content type='html'>I was asked by a friend how he could access all his components without a long and hard to maintain list in the Source Code. He had a number of Edits on his form and he wanted to add all the edits up, knowing the were all set to receive integer values.&lt;br /&gt;&lt;br /&gt;Here's how he can do it...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font: 10pt Courier New;"&gt;&lt;span class="pas1-reservedword"&gt;function&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-identifier"&gt;GetEdits&lt;/span&gt;&lt;span class="pas1-space"&gt; : &lt;/span&gt;&lt;span class="pas1-identifier"&gt;Integer&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;var&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;    &lt;/span&gt;&lt;span class="pas1-identifier"&gt;i&lt;/span&gt;&lt;span class="pas1-space"&gt; : &lt;/span&gt;&lt;span class="pas1-identifier"&gt;integer&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span class="pas1-identifier"&gt;comp&lt;/span&gt;&lt;span class="pas1-space"&gt; : &lt;/span&gt;&lt;span class="pas1-identifier"&gt;TComponent&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;begin&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;    &lt;/span&gt;&lt;span class="pas1-identifier"&gt;result&lt;/span&gt;&lt;span class="pas1-space"&gt; := '';&lt;br /&gt;    &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;        &lt;/span&gt;&lt;span class="pas1-comment"&gt;// fMain is the main form.&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;        &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;for&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-identifier"&gt;i&lt;/span&gt;&lt;span class="pas1-space"&gt; := &lt;/span&gt;&lt;span class="pas1-number"&gt;0&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;to&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-identifier"&gt;fMain&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;ComponentCount&lt;/span&gt;&lt;span class="pas1-space"&gt; - &lt;/span&gt;&lt;span class="pas1-number"&gt;1&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;do&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;        &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;begin&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;            &lt;/span&gt;&lt;span class="pas1-identifier"&gt;Comp&lt;/span&gt;&lt;span class="pas1-space"&gt; := &lt;/span&gt;&lt;span class="pas1-identifier"&gt;fMain&lt;/span&gt;&lt;span class="pas1-symbol"&gt;.&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Components&lt;/span&gt;&lt;span class="pas1-symbol"&gt;[&lt;/span&gt;&lt;span class="pas1-identifier"&gt;i&lt;/span&gt;&lt;span class="pas1-symbol"&gt;];&lt;br /&gt;            &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;if&lt;/span&gt;&lt;span class="pas1-space"&gt; (&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Comp&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;is&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-identifier"&gt;TEdit&lt;/span&gt;&lt;span class="pas1-symbol"&gt;) &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;then&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-comment"&gt;// its an edit component&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;                &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;if&lt;/span&gt;&lt;span class="pas1-space"&gt; (&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Comp&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;as&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-identifier"&gt;TEdit&lt;/span&gt;&lt;span class="pas1-symbol"&gt;).&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Text&lt;/span&gt;&lt;span class="pas1-space"&gt; &amp;lt;&amp;gt; '' &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;then&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;                    &lt;/span&gt;&lt;span class="pas1-identifier"&gt;Result&lt;/span&gt;&lt;span class="pas1-space"&gt; := &lt;/span&gt;&lt;span class="pas1-identifier"&gt;result&lt;/span&gt;&lt;span class="pas1-space"&gt; + &lt;/span&gt;&lt;span class="pas1-identifier"&gt;StrToInt&lt;/span&gt;&lt;span class="pas1-symbol"&gt;((&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Comp&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;as&lt;/span&gt;&lt;span class="pas1-space"&gt; &lt;/span&gt;&lt;span class="pas1-identifier"&gt;TEdit&lt;/span&gt;&lt;span class="pas1-symbol"&gt;).&lt;/span&gt;&lt;span class="pas1-identifier"&gt;Text&lt;/span&gt;&lt;span class="pas1-symbol"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;end&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;except&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;        &lt;/span&gt;&lt;span class="pas1-identifier"&gt;result&lt;/span&gt;&lt;span class="pas1-space"&gt; := -&lt;/span&gt;&lt;span class="pas1-number"&gt;1&lt;/span&gt;&lt;span class="pas1-symbol"&gt;; &lt;/span&gt;&lt;span class="pas1-comment"&gt;// Oops, that edit was not a number&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-space"&gt;    &lt;/span&gt;&lt;span class="pas1-reservedword"&gt;end&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="pas1-reservedword"&gt;end&lt;/span&gt;&lt;span class="pas1-symbol"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-3775159000332359859?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3775159000332359859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/3775159000332359859'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/accessing-multiple-edit-components.html' title='Accessing multiple edit Components'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-8038827581687563390</id><published>2007-05-14T11:25:00.000+12:00</published><updated>2007-05-14T11:44:25.778+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='project group'/><category scheme='http://www.blogger.com/atom/ns#' term='dsk'/><title type='text'>But I don't wanna Project Group!</title><content type='html'>I've been head down on an important change to the system so have reluctantly put aside the blog. Have no fear though as I am back onto it again.&lt;br /&gt;&lt;br /&gt;While I was working away I came across a Delphi frustration that caused some concern. I've only recently taken over a very large amount of code from a previous programmer who used the "New Directory" theory of version control. This creating a new directory for each release.&lt;br /&gt;&lt;br /&gt;His directory structure looks something like this...&lt;br /&gt;&lt;br /&gt;\ProjectName\01a\&lt;br /&gt;\ProjectName\01b\&lt;br /&gt;\ProjectName\01c\&lt;br /&gt;\ProjectName\01d\&lt;br /&gt;&lt;br /&gt;When version 01d is released, the entire directory would by copied into a new ..\01e\ directory and work would continue there.&lt;br /&gt;&lt;br /&gt;This works fine until I set up proper version control here. However Delphi starts to insist on changing code in the previous directory even when you are working on the new one. It also starts to insist - yes absolutely INSIST, that it must create a Project Group that includes the project in the old directory.&lt;br /&gt;&lt;br /&gt;To get around this, I deleted the *.dsk file. These are text files that hold specific directory information that Delphi uses. Delphi will recreate this file when it next loads.&lt;br /&gt;&lt;br /&gt;Some have suggested that I also delete *.cfg and *.dof files as well, but so far these files have been innocent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-8038827581687563390?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/8038827581687563390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/but-i-dont-wanna-project-group.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8038827581687563390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8038827581687563390'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/05/but-i-dont-wanna-project-group.html' title='But I don&apos;t wanna Project Group!'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-143774126186927327</id><published>2007-04-03T12:30:00.000+12:00</published><updated>2007-04-03T12:43:21.748+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Gemini'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi SourceSafe'/><title type='text'>Development Tools</title><content type='html'>Having looked more into these development tools and this is my recommendations for going forward.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Issue Tracking. &lt;/strong&gt;&lt;br /&gt;Although Jira is a great tool and I highly recommend it, the expense is perhaps too great for somthing that has not been used in an organisation before, and therefore the benefits may not be known.&lt;br /&gt;&lt;br /&gt;I will be looking closely at Gemini (&lt;a href="http://www.countersoft.com/Default.aspx?PageID=10"&gt;&lt;span style="font-size:85%;"&gt;http://www.countersoft.com/Default.aspx?PageID=10&lt;/span&gt;&lt;/a&gt;). It has a free 10 user configuration and seems, at least on the surface, to be a very effective and comparible tool. I'll let you know how it goes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Version Control&lt;/strong&gt;&lt;br /&gt;After reading up about Microsoft Visual SourceSafe, I have decided not to go with this product either. There are more than several reports on its viability on large databases of code.&lt;br /&gt;&lt;br /&gt;I will also be looking at Subversion. I hear its not as simple to use as SourceSafe but is free and has some very strong support amongst others I know. One quote I had was "I even resorted to reading the [words deleted here for family reading] manual, but now I understand it, its really good and simple to use".&lt;br /&gt;&lt;br /&gt;Again, I'll keep you posted on how things pan out. If you have any comments or suggestions I'd love to hear from you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-143774126186927327?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/143774126186927327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/04/development-tools.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/143774126186927327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/143774126186927327'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/04/development-tools.html' title='Development Tools'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-8674750380544006893</id><published>2007-03-29T20:38:00.000+12:00</published><updated>2007-03-29T22:37:04.962+12:00</updated><title type='text'>On the move</title><content type='html'>This will be interesting. I'm on the move to the Bay of Plenty and a new job there programming in Borland's Delphi. Monday, Tuesday and Wednesday this week I was there to spend time with the outgoing programmer.&lt;br /&gt;&lt;br /&gt;This seems like a dream job. I live at one of the best beaches in New Zealand, my house is less than 5 minutes to work, and I have a really nice office overlooking a park (all to myself with a couch and an air conditioner and opening windows).&lt;br /&gt;&lt;br /&gt;The code looks interesting. The previous programmer has spent a lot of time on that code and I can see how it has grown from simple quick-fixes to full fledged programs being used in the marketplace. A very difficult, but perhaps good time for a new programmer to take over.&lt;br /&gt;&lt;br /&gt;The applications are written in Delphi 7 and Delphi 2006. The outgoing programmer has spoken to them about Delphi 2007 so I hope to get that when it becomes available here.&lt;br /&gt;&lt;br /&gt;The very first thing that I will be doing on Monday is to get my favorite source code formatter installed "DelForExp" (http://www.dow.wau.nl/aew/DelForExp.html).  This allows me to format the code in a way that I can see what goes on.&lt;br /&gt;&lt;br /&gt;While I'm certainly not criticising the previous programmer's layout, its MUCH better when I can readily see the code. To do this, I'll use DelForExp and format it to have 4 character indents instead of 2 - at least until I am familiar with the code.&lt;br /&gt;&lt;br /&gt;I'll also be installing GExperts (http://www.gexperts.org/). GExperts is not a necessity (not like DelForExp), but it is a good tool that can certainly come in handy.&lt;br /&gt;&lt;br /&gt;I'll also argue for a version control system. Here I'll go against the grain for some folks and recommend Microsoft's own Visual SourceSafe. I know, I know, no real branching etc. but it does what is required with the minimum of fuss (I have no link for this, you'll have to scan the Microsoft site to find it).&lt;br /&gt;&lt;br /&gt;As the programmer was continually being interrupted with requests for changes and bug fixes and future ideas, I have already set one or two people there to have a look at JIRA (http://www.atlassian.com/software/jira/). I have used Jira in a large multi-programmer environment for the past year and I am very impressed. This issue tracking system will be able to take the pain out of remembering and processing bugs, new features, releases, discussions, process help desk issues, prioritise work, and process all the work flows that go behind all that. Try it, I found it one of the best.&lt;br /&gt;&lt;br /&gt;Well that's about all for now. The truck comes to take my stuff out of my Auckland apartment in the morning and delivers it the next day to my new home in Mount Maunganui so I have lots of other things to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-8674750380544006893?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/8674750380544006893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/03/on-move.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8674750380544006893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/8674750380544006893'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/03/on-move.html' title='On the move'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3782954984366933851.post-4635070115413389730</id><published>2007-03-07T22:32:00.000+13:00</published><updated>2007-03-07T22:59:24.210+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Welcome to my Blog</title><content type='html'>Gidday, and welcome to my Blog.&lt;br /&gt;&lt;br /&gt;This blog will mainly concentrate on Delphi code examples, news, personal experiences with Delphi, and with things I have learned, like remembering to take your keys with you when you go out - it only takes the click of the door behind you to remember that you can't get back in without them.&lt;br /&gt;&lt;br /&gt;I've been using Delphi since version 1.0 of Turbo Pascal waaaaay back. I was even using something called Pascal MT+ before that. I've used many languages over the years, including Basic, C, C++, dBase and all its hybrids like Foxpro, Visual Basic, Java, JavaScript, Perl, DataFlex, Modula 2 ..... The list goes on. However, underlying it all I kept returning to Borland's Delphi.&lt;br /&gt;&lt;br /&gt;IN the 1980's I designed and wrote New Zealand's top selling suite of small business accounting programs - that's more than 500,000 lines of code in one release - on my own. No other language could cope with a single programmer managing that many lines of code. I wrote everything from the file handling (indexes, files, linked lists etc.) to the screen and memory handling - all in Turbo Pascal. Since then I have seen numerous examples of very large applications written and running very well in Delphi.&lt;br /&gt;&lt;br /&gt;Since selling that accounting suite, I have been a consultant to many different organisations including telecommunications, banks, insurance, logistical operations and others, large and small as everything from Applications developer, Team lead, Project Manager, Development Manager, and even Business Unit Manager. I have enjoyed most thoroughly but never more so than when put behind a computer with Delphi up and running.&lt;br /&gt;&lt;br /&gt;Welcome to what I hope to be a regular and informative blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3782954984366933851-4635070115413389730?l=stevepeacocke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevepeacocke.blogspot.com/feeds/4635070115413389730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevepeacocke.blogspot.com/2007/03/welcome-to-my-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4635070115413389730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3782954984366933851/posts/default/4635070115413389730'/><link rel='alternate' type='text/html' href='http://stevepeacocke.blogspot.com/2007/03/welcome-to-my-blog.html' title='Welcome to my Blog'/><author><name>Steve Peacocke</name><uri>http://www.blogger.com/profile/03155137500284265720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_PDRhMtwI0ss/SyBVjMqskQI/AAAAAAAACGs/67ISE85-e34/S220/Steve.PNG'/></author><thr:total>0</thr:total></entry></feed>
