Friday, August 27, 2004

QualityCentral a waste of time? I don't think so! 

I see many people on the Borland newsgroups asking for the best way to inform Borland about bugs. The answer to this question is simple; QualityCentral. It is the only guaranteed way that your bugs and feature requests will be noticed by Borland. Many other posters in the newsgroups claim that QualityCentral is a waste of time. Below are links to three of my bug reports (two for Delphi 8, one for the QualityCentral client), which were fixed in a subsequent patch. I think this disproves the myth that QualityCentral is a waste of time quite nicely.

2630 - Cannot move splitter on Comments Tab
6894 - Code Editor flickers with ClearType enabled on Windows XP
7036 - WinForms CodeDom parser cannot parse class properties

I also see many people criticize the interfaces to QualityCentral (Web and desktop clients), citing them as unusable. I personally have no problems with them, but am currently using a Windows client developed by Jeremy North. While still in alpha, I find it very nice with many useful features.

So you have been warned, people. If you want Borland to fix bugs or implement new features, use QualityCentral. It's as simple as that.

(5) comments

Wednesday, August 25, 2004

Warning schmarning! 

I've finally decided enough is enough, and have started slowly removing all traces of compiler hints and warnings in the Delphi app I maintain. First step was to remove all from our component package, and now I'm working on the main executable. I'm finding the occasional subtle bug along the way too, which re-enforces my belief that it is pure folly to ignore these.

Only 272 hints and 224 warnings to go. :-)

(2) comments

Wednesday, August 18, 2004

More horror code 

Stumbled across this code today when attemting to tidy up the hundreds of hints/warnings in the app I maintain (a rant best left for another blog post). All I can say is yuck with a capital Y :-(

if Bpp=16 then Base:=$FFFF else Base:=-1;
n:=0; b:=fMask mod 10; Inc(n,b); fMask:=fMask div 10;
bMask:=Base shr(Bpp-n); bshr:=8-b; gshl:=b;
b:=fMask mod 10; Inc(n,b); fMask:=fMask div 10;
gMask:=Base shr(Bpp-n)and not bMask; rshl:=n; gshr:=8-b;
b:=fMask mod 10; Inc(n,b); fMask:=fMask div 10;
rMask:=Base shr(Bpp-n)and not(bMask or gMask); rshr:=8-b;

No formatting was lost when posting this code snippet, BTW. It has been accurately presented in all its...ahem...glory.

(4) comments

Saturday, August 14, 2004

My Dream Machine Part 2 

My new home PC arrived yesterday and it's a real screamer! For the first time I can remember, my home PC is gruntier than my work one (with the exception of RAM; my work laptop has 2Gb). The specs are:-

-P4 3.2Ghz w/Hyperthreading
-1Gb 533Mhz DDR2 SDRAM
-160Gb HDD
-128Mb ATI RADEON X300 Graphics Card (OK this was good until I found out it was considered an entry level card :-( )

(0) comments

Wednesday, August 11, 2004

A change is as good as a holiday 

I've decided to change the name of my blog to something a bit more interesting than it's former name of 'Dave's Blog'. I think this new one is a lot more colourful, and describes the purpose of this blog a bit more.

(0) comments

Tuesday, August 10, 2004

For he's a jolly good fellow! 

Danny Thorpe (Borland Chief Scientist) has revealed that the next version of Delphi will support a new kind of for loop. I doubt I could do it full justice here, so I strongly recommend you read all about it on theDelphi Compiler Core blog, but is essentially like the C# foreach on steriods (the multidimensional array example is way cool!).

Of course, in true Delphi fashion, it goes above and beyond what other languages have implemented, and it works for the Delphi Win32 AND Delphi for .NET compilers. :-)

(0) comments

Friday, August 06, 2004

Another cross against with 

An ADUG member (name suppressed to protect the innocent) unleashed this code on the mailing list today. Add it to the mounting stack of evidence as to why using with is not a good idea.

n := -1; { counter which identifies which group index we are up to }
with TProjectAlias(gAliases.Items[PrjIndex]) do begin
with TNetList(PNetIndex.Items[NetIndex]) do begin
with TAppIndex(ApplIndex.Items[AppIndex]) do begin
for i := 0 to SortedLevels.Count - 1 do begin
with TLevelEntry(SortedLevels.Items[i]) do begin
if GroupAdd = StrPas(inGrpAdd) then begin
n := n + 1; { increment count }
if n = inIndex then begin { check if it is the right one }
tmpDesc := TLevelEntry(SortedLevels.Items[i]).Desc; { copy description }
StrPCopy(outDesc, PadString(tmpDesc, DESC_LENGTH));
end; { if }
end; { if }
end; { with }
end; { for }
end; { with }
end; { with }
end; { with }

Granted, like most starting out Delphi developers I initially embraced the concept (wow, think of all the typing I'm saving with this great feature), but gave away the notion a few years ago due to it being harder to maintain, and the ambiguity issues it can create. I used to make an exception when creating class functions to show modal forms (as shown below), but I've even stopped doing that now.

with TSomeForm.Create(nil) do
Result := ShowModal;

(9) comments

The snake's gonna be released from it's cage 

Borland announced today that they will be showing their next version of the Delphi development enviroment, codenamed Diamondback, at BorCon USA 2004. It's a shame I won't be able to attend, as I'd love to be there to see that.

And here's hoping the "What's New in the Delphi Compiler" track detailed in the article will put pay to all the FUD spread on the ngs that Borland have abandoned the Win32 side of their business. I know it won't but a man can dream, can't he?

(0) comments

This page is powered by Blogger. Isn't yours?