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,839 other subscribers

Archive for the ‘Development’ Category

Funny Delphi code of the day: on literals

Posted by jpluimers on 2013/12/09

The fact that the [WayBack] 31-character limit on ClientDataSet field and index names is worse, but I just encountered this GetParamNameWODog function in a Delphi 3rd party library:


function GetParamNameWODog(const ParamName: _string): _string;
begin
if (ParamName <> '') and (ParamName[1] = '@') then
Result := Copy(ParamName, 2, 1000)
else
Result := ParamName;
end;

What’s wrong with using the Length function here?

Yes, SQL Parameter names will probably less than 1000 characters, but then the 1000 literal should be a constant with a meaningful name, and the '@' literal should be too. Read the rest of this entry »

Posted in Delphi, Delphi XE3, Development, QC, Software Development | Tagged: , , | 12 Comments »

Owly CI should team up with Ohloh

Posted by jpluimers on 2013/12/05

This was originally scheduled for December 1st at noon and therefore made it to the “Missed Schedule” list as well:

Two interesting sites I found recently:

OwlyCI is like NuGet for Delphi. They add Delphi open source repositories, and provide them as installable packages, and shows build statistics.

Ohloh provides statistics (including build statistics!) for open source repositories (any language and environment)  and shows various other statistics like check in counts, LoC, etc. Koders merged into Oholoh about a year ago.

I think they should team up (:

–jeroen

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

.NET/C#: Some links on validation/guarding/checking

Posted by jpluimers on 2013/12/05

From my link archive:

–jeroen

Posted in .NET, .NET 3.0, .NET 3.5, .NET 4.0, .NET 4.5, C#, C# 3.0, C# 4.0, C# 5.0, Development, Software Development | Leave a Comment »

SQL Server: some links on BULK IMPORT format files

Posted by jpluimers on 2013/12/04

From my link archive:

Note that for importing decimal/numeric columns, you have two options:

  1. Cast through FLOAT using a FORMAT file
  2. Use OpenRowSet with VARCHAR, then CAST afterwards
    Weird rounding for decimal while doing a bulk insert from a CSV.

Some more links on this:

–jeroen

Posted in Algorithms, CSV, Database Development, Development, Floating point handling, Software Development, SQL Server, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 | Leave a Comment »

Windows Development: Switching JIT debuggers (via: Stack Overflow)

Posted by jpluimers on 2013/12/03

StackOverflow user User Sertac Akyuz posted a small Delphi snippet showing how to switch the Windows JIT debugger.

I’ll need to complete it somewhere, but since the concept is interesting, here is his answer:

Write a simple application that would launch the debugger you want in case of an application crash.

Register your app in

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

In case of an 64bit OS, also to the following key

HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

add/modify the string named Debugger with value:

"C:..\Win32\Debug\Project1.exe" %ld %ld

A very simple application:

procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Add('BDS 16');
  ComboBox1.Items.Add('BDS 15');
  ComboBox1.Items.Add('WinDbg');
  ComboBox1.Items.Add('VS');
  // etc..
  ComboBox1.ItemIndex := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  proc: THandle;
begin
  Assert(ParamCount >= 2);
  proc := OpenProcess(SYNCHRONIZE, False, StrToInt(ParamStr(1)));
  case ComboBox1.ItemIndex of
    0: ShellExecute(0, '', 'C:\..\RAD Studio\9.0\bin\bds.exe',
          PChar(Format('/attach:%s;%s', [ParamStr(1), ParamStr(2)])), '',
          SW_SHOWNORMAL);
    1 : // etc..
    2: ShellExecute(0, '', 'C:\Program Files (x86)\..\windbg.exe',
          PChar(Format('-p %s -e %s -g', [ParamStr(1), ParamStr(2)])), '',
          SW_SHOWNORMAL);
    3: ShellExecute(0, '', 'C:\Windows\system32\VSJitDebugger.exe',
          PChar(Format('-p %s -e %s', [ParamStr(1), ParamStr(2)])), '',
          SW_SHOWNORMAL);
    //..
  end;
  if Bool(proc) then begin
    WaitForSingleObject(proc, INFINITE);
    Application.Terminate;
  end;
end;

–jeroen

via: windows – Switching JIT debuggers? – Stack Overflow.

Posted in .NET, Delphi, Development, Software Development, Visual Studio and tools | Leave a Comment »

Any workaround for this SQL Server Management Studio threading issue?

Posted by jpluimers on 2013/11/29

I just got this error when SQL Server Management Studio 2012 was complaining about the owner of a certain SQL Server 2012 database and tried to copy that message to the clipboard:

This message cannot be copied to the clipboard.
Additional information
Current thread must be set to single thread apartment (STA) mode before OLE calls can be made.
Ensure that your Main function has STAThreadAttribute marked on it. (System.Windows.Forms)

Is there anyone who knows how to workaround this issue in SSMA?

–jeroen

Posted in Database Development, Development, Software Development, SQL Server, SQL Server 2012 | Tagged: , | Leave a Comment »

Development tools should become more version control friendly, and version control tools more whitespace tolerant

Posted by jpluimers on 2013/11/28

There are a few more messages in the “Missed Schedule” backlog, and I really hope that WordPress is going to address this really annoying bug soon as I have to recheck my blog multiple times a day now.

Back on topic:

Development tools should become more version control friendly, and version control tools more whitespace tolerant

I’m taking Delphi and Bitbucket here as an example, but this holds for many more development tools and version control tools.

Ultimately, you want changes to be as simple as this one: only the relevant changed lines show up as an actual change.

But often changes include convoluted non-relevant information.

A few things development tools should not do: Read the rest of this entry »

Posted in .NET, C#, Delphi, Development, DVCS - Distributed Version Control, Software Development, Source Code Management, Visual Studio and tools | 2 Comments »

Delphi .dproj files: FrameworkType and FormType (via: Embarcadero Discussion Forums)

Posted by jpluimers on 2013/11/28

One more of the “Missed Schedule” series, this time it was originally scheduled for October 1st, (2013 that is).

Delphi XE2 and up introduced the FrameworkType and FormType elements in the .dproj files to distinguish between VCL and different flavours of FireMonkey.

Actually, Delphi XE1 already had the value None for FrameworkType, so some cross-platform changes trickled into the Delphi builds early.

Though the IDE writes these values to the .dproj files, you [Wayback/Archive] cannot change their values from within the Delphi IDE, not even through the Open Tools API.

There is no documentation about the values in the .dproj files. the only places I could find were these about FrameworkType in combination with [Wayback/Archive] Actions:

that basically tell this:

FrameworkType

Defines whether an action is created for the VCL or FireMonkey (FMX) framework. The default of this parameter is VCL (for compatibility with legacy applications).

This parameter is used to avoid situations when VCL actions are used in FireMonkey applications and inversely; this can lead to a serious increase in an application’s size and to execution errors, for example, calling of Windows API under MacOS.

But it is incomplete, and there is no documentation about FormType. Read the rest of this entry »

Posted in Delphi, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Development, Missed Schedule, SocialMedia, Software Development, WordPress | Leave a Comment »

DLL call forwarding: learned something new today!

Posted by jpluimers on 2013/11/28

Learned something new today:

the effect of a DLL forwarder. The code for the function Ds­Address­To­Site­NameW doesn’t live in netapi32.dll. Instead, netapi32.dll has an export table entry that says “If anybody comes to me asking for Ds­Address­To­Site­NameW, send them to logoncli!Ds­Address­To­Site­NameW instead.”

–jeroen

via: If you can’t find the function, find the caller and see what the caller jumps to – The Old New Thing – Site Home – MSDN Blogs.

Posted in Development, Software Development | Leave a Comment »

.NET Framework 1.1 and Visual Studio .NET 2003 support ended 20131008 (via: Microsoft Support Lifecycle)

Posted by jpluimers on 2013/11/27

WorPress did it again to me:

2013/10/08; Missed schedule

Anyway:

If you still have a coded base in the .NET Framework 1.1 / Visual Studio 2003, then you should note that after 20131008, the extended support has ended.

Though the introduction of both feels like yesterday to lots of us, they have been supported for more than 10 years. An era has ended. Time to move on to newer versions has passed long ago.

The next important date is about 2.5 years from now: 2016-04-12, when the support for the .NET Framework 2.0 and Visual Studio 2005 ends.

From the Microsoft Support Lifecycle: .NET Framework 1.1 and Microsoft Support Lifecycle: Visual Studio .NET 2003 pages (I formatted the dates into YYYY-MM-DD): Read the rest of this entry »

Posted in .NET, .NET 1.x, C#, C# 1.0, Development, Missed Schedule, SocialMedia, Software Development, Visual Studio 2003, Visual Studio and tools, WordPress | Leave a Comment »