The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,860 other subscribers

Archive for the ‘QC’ Category

Happy birthday Turbo Pascal! Some marketing and Borland Conference videos

Posted by jpluimers on 2023/11/20

Some of you might remember [WayBack] Borland – Wikipedia, that today in 1983 shipped the first version of Turbo Pascal [Wikipedia].

It was of great influence, leading to other Turbo languages, Delphi, and – through it’s creator Anders Hejlsberg – eventually C#, .NET and TypeScript.

From the mid 1990s until the early 2000s, the Borland organised conferences (having various names, like Borland Language Conference, Borland Conference, Borland Developers Conference, Inprise Conference) had famous opening videos, and product marketing videos.

Some of them are below the signature.

Hopefully by the time of publishing, all of them are still there.

Edit 20231202:

I scheduled this post back in Winter 2019/2020 in between radiation therapy and surgery.

By now, more information on the anniversary has appeared online.

For more Turbo Pascal history, including – in reverse chronological order – old screenshorts and the first advertisements (and how quickly they changed from the pink on white to full colour ones), see my 2021 blog post Much Turbo Pascal history (via What is a Delphi DCU file? – Stack Overflow). It had many screenshots including a Turbo Pascal 1.0 screenshot, which I have added it here to the right. By now  Turbo Pascal – Wikipedia and Borland Graphics Interface – Wikipedia are quite complete history of Turbo Pascal.

Read the rest of this entry »

Posted in .NET, C#, Delphi, Development, Pascal, QC, Software Development, Turbo Pascal | Leave a Comment »

Why I wish QC had been archived in full…

Posted by jpluimers on 2018/10/25

A quick search later and it seems I’m bumping into [WayBack] http://qc.embarcadero.com/wc/qcmain.aspx?d=125403 (the version I’m bugfixing is built using XE6).

The workaround listed (in my case blanking indexfieldnames in OnBeforeClose) works.

Now… imagine if this had been filed to QualityPortal instead.

I would have had to remember to search it, and maybe wouldn’t have found it as Google does fuzzy searches very well.

And due to the lower visibility it likely would have fewer comments as well…

So yeah EMB/Idera, please revisit the choice of walling up QualityPortal.

Source: [WayBack] So I just hit a weird issue in our program. A quick search later and it seems I’m bumping into this http://qc.embarcadero.com/wc/qcmain.aspx?d=125403… imagine if it had been in QualityPortal… – Asbjørn Heid – Google+

–jeroen

 

Posted in Delphi, Development, QC, Software Development | Leave a Comment »

Delphi: uninstalling the ancient CollabNet 1.7.5 version

Posted by jpluimers on 2018/10/24

Somehow the integration team at Embarcadero still hasn’t discovered there are [WayBack] newer CollabNet SVN Client versions than 1.7.5 which has been shipped since Delphi XE3 until Delphi XE6. The newer version (currently 1.8.8 when writing this, now 1.10.2 in 2018) have plenty [WayBack1/WayBack2SVN security issues fixed.

The easiest way to uninstall the CollabNet SVN Client is running this small script:


call :start %ProgramFiles%
call :start %ProgramFiles(x86)%
goto :end
:start
startlocal
set CollabNet="%*\CollabNet\uninst.exe"
echo %CollabNet%
if exist %CollabNet% start "CollabNet uninstall" %CollabNet%
endlocal
goto :end
:end

Then install the [WayBackSlik SVN client. Like [WayBackЈοеу, I’ve switched to [WayBackSlik SVN a long ago. Here is [WayBackhis reasoning:

I have long since stopped using the CollabNet-branded version because it’s behind a registration wall. I found Slik SVN as a good alternative. It’s exactly the same command-line client you get from CollabNet, sans the hassle in downloading it.

I hope someone at Embarcadero enters this in QC^w QualityPortal as I’m awaiting Embarcadero response about a security issue there.

–jeroen

Posted in Delphi, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Development, QC, Software Development, Source Code Management, Subversion/SVN | 2 Comments »

I totally forgot that Delphi has had a function to get the current executing thread – Stack Overflow

Posted by jpluimers on 2018/07/05

While updating some old code fiddling with the[WayBackGetThreadId function, I wanted to have some TThread wrapper around it. I had totally forgotten there has been already a means for this since Delphi 2009 (which initially had a bug, but that was worked around at first and fixed later): [WayBackCurrentThread.

The latest version of Delphi, Delphi 2009, has a CurrentThread class property on the TThread class.

This will return the proper Delphi thread object if it’s a native thread. If the thread is an “alien” thread, i.e. created using some other mechanism or on a callback from a third party thread, then it will create a wrapper thread around the thread handle.

20081001 at 5:00 – [WayBackBarry Kelly

Sources

–jeroen

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 10.2 Tokyo (Godzilla), Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, QC, Software Development | Leave a Comment »

Delphi still doesn’t raise overflow exception on Int64 multiplication…

Posted by jpluimers on 2018/06/28

Thanks to Stefan Glienke for pointing me at the below patch for [WayBack] Why doesn’t raise overflow exception on multiplication example or how to detect in this case?{$RANGECHECKS ON} {$OVERFLOWCHECKS ON}varvalue: Int64;… – Rafael Dipold – Google+.

It’s basically an issue in __llmulo that has been documented but not solved since “forever”:

some people “some while ago” reported this and even posted a solution: [WayBackhttp://qc.embarcadero.com/wc/qcmain.aspx?d=34049

And there it is again: [WayBackhttp://qc.embarcadero.com/wc/qcmain.aspx?d=119146

And most recently: https://quality.embarcadero.com/browse/RSP-16617

FWIW here is a runtime patch that corrects this (using the version posted in QC#119146): https://pastebin.com/jzLgYeqm

The bug tracking of the Delphi team is so bad, that some of the reports actually mark this issue “As Designed” like in [WayBackhttp://qc.embarcadero.com/wc/qcmain.aspx?d=118287

The below patch requires rights to call [WayBackWriteProcessMemory as documented in [WayBackHow to Read and Write Other Process Memory.

–jeroen

Patch at [WayBack] https://pastebin.com/jzLgYeqm

Read the rest of this entry »

Posted in Delphi, Development, QC, Software Development | 3 Comments »

Class helpers and virtual methods – E2003 Undeclared identifier: ‘QueryInterface’/ ‘_AddRef’/’_Release’

Posted by jpluimers on 2018/06/20

Reminder to self: if you want to stay compatible with old (Pre Delphi XE) source code, then do not use virtual methods in class helpers.

Technically you can, as class helpers can inherit from other class helpers, but this is only supported as of Delphi XE.

In lower versions you get these errors as apparently the Delphi compiler tags an IInterface to the class helper compiler result:

[Error] Project1.dpr(14): E2003 Undeclared identifier: 'QueryInterface'
[Error] Project1.dpr(14): E2003 Undeclared identifier: '_AddRef'
[Error] Project1.dpr(14): E2003 Undeclared identifier: '_Release'

Source: [WayBackQualityCentral 9782

–jeroen

Posted in Delphi, Development, QC, Software Development | 2 Comments »

Maybe one day the Object Inspector gets a real overhaul

Posted by jpluimers on 2018/01/23

Maybe one day the Object Inspector gets a real overhaul and hopefully the first thing is someone fixing the F11 behaviour that – in the early days of real Delphi productivity – toggled between designer and object inspector.

Lets digress to that one first as it’s much related to Object Inspector productivity.

F11 four way toggle UX nightmare

Like F12 (that toggles between designer and code editor) it was a predictive two way toggle that never lost it’s state (since around Delphi 7 it’s a four stage toggle: designer -> object inspector -> code editor -> object inspector -> designer) but:

  • it’s hard to remember the current state (especially when switching between editor files or designer targets)
  • the sequence sometimes it forgets state
  • the sequence is unlike all other toggles such as F12 (designer/code editor) and Alt+F12 (view-as-designer/view-as-text) that are two-way.
  • it does not update the menu (that always shows “Object Inspector F11”, not the next phase in the stage)
  • makes it impossible to predictively and immediately go on one step to:
    • Object Inspector
    • Designer
    • Code editor

Quickly selecting a property or event by name

A long time before that (I forgot in which time frame, as in the beta-D1..D3 era, productivity enhancements were rapidly succeeding each other): when you start to type in the name column, it will select the property or event (depending on the tab you’re on).

At first that feature wasn’t documented at all for a very long time, not even in the [WayBackDelphi 2007 Object Inspector documentation around 10 years after this feature was introduced. So it became part of a lot of “Delphi productivity” conference sessions (I think Delphi “conference” productivity shortcuts will find you some).

Around Delphi 2010, it got documented in [Archive.isObject Inspector Keyboard Shortcuts – RAD Studio:

Tab+<letter> Jumps directly to the first property or event beginning with the letter.

Five more years later, the documentation got finally changed to use the “incremental search” coined in [WayBackMalcolm Groves — Incremental Searching in the Delphi Object Inspector.

Delphi Seattle documentation [WayBackObject Inspector Keyboard Shortcuts – RAD Studio:

Tab+<letter> Starts an incremental search on the Name column of properties and events. Use the backspace key to delete characters of your search pattern.

Slow productivity increases

Early 2012 and later that year, Uwe Schuster wrote two blog posts that are now only in the WayBack machine as his site vanished:

The most important features were

  1. the implementation of a 2005 feature request: [WayBack] QualityCentral: Add property filtering to the Object Inspector.
  2. the addition of “Favourite” properties tab at the top

The cool thing on the filter implementation is that it search both the properties and sub properties. Which made it very easy to edit the Color sub-property of a Font by just typing “color” (the filtering was insensitive too).

Later I found there is also a beta 6 on DropBox downloads saved from his site via [WayBackWhat bugs me ;-) about the new Communities is that you first have to join in …: [WayBackDropbox – Uwe Schuster

Some screenshots are at [WayBackTDelphiBlog: Revised Object Inspector для Delphi 2010-XE3 от Uwe Schuster. Обзор.

Half baked Delphi Seattle reimplementation

Two and a half years ago, [WayBack and Archive.isComing Soon to RAD Studio … Enhanced Designer Experience! – Community Blogs – Embarcadero Community suggested improvements for the Object Inspector. I was hoping it would mach or improve the Object Inspector Expert – as hinted a [WayBack] Open Delphi, select a component, move to the Object Inspector, select the filter box, and start typing… (Coming soon, among other Object Inspector improvements… – Marco Cantù – Google+ –  but it didn’t:

Maybe David Hoyle comes up with a proper implementation

Slightly more a year ago there was an interesting thread [WayBack] I always wanted an object inspector where i can tell, first item always ‘name’ second to Xth, left, top, width, height, etc… then the rest, i wouldn’t… – Attila Kovacs – Google+

David Hoyle – of OTA fame – responded, so basically this post is a reminder to see if by now he or someone else has come up with something better than Embarcadero did.

–jeroen

Posted in Delphi, Development, QC, Software Development | Leave a Comment »

QCScraper ClientDataSet XML dump results – archive of qc.embarcadero.com

Posted by jpluimers on 2017/12/21

Since I’m pressed for time, but didn’t want to wait until putting the dumps on-line, below is a rendering of my gist QCScaper ClientDataSet XML dump results – README.md.

Wishing everybody a great holiday season!

This gist contains two QCScaper XML dumps of the http://qc.embarcadero.com content taken a few days after it came up.

There are four files: two files per dump (both in plain downloaded format as well as formatted with tidy -xml -utf8 for easier comparison, for instance with Beyond Compare).

Each file is compressed uzing 7-zip as the original files would each exceed the 100 megabyte gist size limit; please see https://developer.github.com/v3/gists/#truncation

There are slight differences because of the internal QC architecture, which you can for instance see in issue #7788

Hopefully I will find some time later to blog about this in a better way.

Related links:

Entries I still need to look at:

–jeroen

Related:

Posted in Delphi, Development, QC, Software Development | Leave a Comment »

QualityCentral Report 95543: An overloaded routine cannot be assigned to the method reference

Posted by jpluimers on 2017/12/20

Since I bumped into this while qc.embarcadero.com was down, and quality.embarcadero.com is not publicly indexed and requires an account to be able to manually search:

I’m not sure how long qc.embarcadero.com will be up again, so if people can help archiving these entries in the WayBack machine: please indicate how you can help.

Thanks a lot!

I bumped into [Archive.is] QualityCentral Report 110364: Open Interface methods are not assignable to anonymous method variable which is related to [WayBack/Archive.isQualityCentral Report 95543: An overloaded routine cannot be assigned to the method reference.

The former is now tracked as RSP-13007, but I could not find back the latter (JIRA search keeps insisting it cannot find 95543).

The latter is the actual problem I was having: this is code that does not work:

{ Expected: the test case gets compiled.
  Actual: E2010 is issued.
}

procedure foo; overload;
begin

writeln('FAIL')
end;

procedure foo(const c: char); overload;
begin

writeln('PASS')
end;

var f: procedure (const c: char);
type T = reference to procedure (const c: char);
var r: T;
begin
{$apptype console}

f := foo;
// correctly picks the proper version

f('1');


r := foo;
// E2010 Incompatible types: 'T' and 'Procedure'

r('2')
end.

–jeroen

 

 

 

Posted in Delphi, Development, QC, Software Development | 1 Comment »

Looking for more examples of Unicode/Ansi oddities in Delphi 2009+

Posted by jpluimers on 2017/09/25

At the end of April 2014, Roman Yankovsky started a nice [Wayback] discussion on Google+ trying to get upvotes for [Wayback] QualityCentral Report #:  124402: Compiler bug when comparing chars.

His report basically comes down to that when using Ansi character literals like #255, the compiler treats them as single-byte encoded characters in the current code page of your Windows context, translates them to Unicode, then processes them.

The QC report has been dismissed as “Test Case Error” (within 15 minutes of stating “need more info”) by one of the compiler engineers, directing to the [Wayback] UsingCharacterLiterals section of Delphi in a Unicode World Part III: Unicodifying Your Code where – heaven forbid – they suggest to replace with the Euro-Sign literal.

I disagree, as the issue happens without any hint or warning whatsoever, and causes code that compiles fine in Delphi <= 2007 to fail in subtle ways on Delphi >= 2009.

The compiler should issue a hint or warning when you potentially can screw up. It doesn’t. Not here.

Quite a few knowledgeable Delphi people got involved in the discussion:

Read the rest of this entry »

Posted in Ansi, ASCII, Conference Topics, Conferences, CP437/OEM 437/PC-8, Delphi, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 7, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Development, Encoding, Event, ISO-8859, Missed Schedule, QC, SocialMedia, Software Development, Unicode, UTF-8, Windows-1252, WordPress | Leave a Comment »