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

Archive for the ‘Delphi’ Category

Delphi Constraints in Generics – RAD Studio XE documentation wiki

Posted by jpluimers on 2011/04/21

Quite a few things are similar when doing Generics in both Delphi and C#.

But constraints are a bit different.

To quote the Delphi Wiki page on Constraints in Generics – RAD Studio XE:

Constraints can be associated with a type parameter of a generic. Constraints declare items that must be supported by any particular type passed to that parameter in a construction of the generic type

Constraint items include:

  • Zero, one, or multiple interface types
  • Zero or one class type
  • The reserved word “constructor“, “class“, or “record

You can specify both “constructor” and “class” for a constraint. However, “record” cannot be combined with other reserved words.
Multiple constraints act as an additive union (“AND” logic).

A few other differences are these:

  • In .NET, there is a unified typing system: everything descends from System.Object, including both value types and reference types. In Delphi this is not the case. In .NET, when you don’t specify a constraint, but use the type in a reference way, it will do automatic boxing. Delphi has no concept of automatic boxing, so you cannot use a non-constrained type as a reference
  • In both .NET and Delphi, you cannot specify a constraint on an enumeration type. In .NET you can work around this by constraining on the underlying interfaces. In Delphi you cannot do that because enumeration types are ordinal types that do not implement interfaces.
  • In Delphi you cannot constrain on ordinal types.

Note that – like the Delphi documentation – the C# constraints on type parameters documentation is not complete on those either.

Related: a great post [WayBack] Using Generics in Delphi – Phil Gilmore covering the comparison between C# and Delphi in more depth.

–jeroen

via: Constraints in Generics – RAD Studio XE.

Posted in C#, Delphi, Development, Software Development | 10 Comments »

Entity Framework 4 – security warning popup workaround: Do you trust all the T4 “text templates” on your system, even future ones?

Posted by jpluimers on 2011/04/13

When using Entity Framework 4, your transofmrations (model to classes, DB to model, etc) are performed by T4 Text Templates.

Those templates are executed all over the place (when saving your project, building your project, changing your model, etc).

Since anyone can insert a T4 Text Template into Visual Studio, and those are scripts, it is a potential vulnerability.

The default Visual Studio behaviour is to show you a dialog like this:

[Security Warning]

Running this text template can potentially harm your computer. Do not run it if you
obtain if rtom an untrusted source.

Click OK. to run the template.
Click Cancel top stop the process.

[X] Do not show this message again

[OK]  [Cancel]

Some blogs mention Just click OK and feel free to check “do not show this message again.”

I’m not sure I want that: it would indicate I always trust T4 Text Templates, even the ones added in the future (T4 Text Templates are executable content, malicious software could find it’s way into your development environment; anyone remember the virus that hooked itself into the run-time library sources of a development system so it would spread through anything compiled on that system?).

But I also don’t want to click OK on that dialog.

It would be so nice if the dialog:

  1. Showed which template is about to be executed
  2. Allowed me to skip only for that particular template

Anyone better thoughts on this?

–jeroen

via Customizing EDM Code Gen in EF4 : Don’t Be Iffy.

Posted in .NET, C#, Delphi, Development, EF Entity Framework, Prism, Software Development | 4 Comments »

Delphi XE introduced SafeIntfAsClass to cast back interface to class (via: oop – Delphi – Proxy Design Pattern – interface problem – Stack Overflow)

Posted by jpluimers on 2011/03/23

Delphi XE introduced the SafeIntAsClass to cast back from an interface to a class.

This is one of the things I really started to miss after doing a lot of .NET work (where that worked starting with .NET 1).

Older versions of Delphi did not support safely casting from an interface back to an object.

–jeroen

via: oop – Delphi – Proxy Design Pattern – interface problem – Stack Overflow.

Posted in Delphi, Development, Software Development | 4 Comments »

Delphi Labs: DataSnap XE and jQueryMobile; a Web Frontend accessing DataSnap through a Delphi WebBroker server

Posted by jpluimers on 2011/03/22

[Wayback] Paweł Głowacki recently released two very interesting blog articles, together with 5 (five!) demonstration videos on how to get your mobile device to talk to a DataSnap backend using [Wayback] jQueryMobile so you get a very native look & feel UI on your mobile device without putting a lot of effort in writing a native device app.

  1. [Wayback] Part 1: Delphi Labs: DataSnap XE – WebBroker jQueryMobile Boilerplate – DelphiFeeds.com.
  2. [Wayback] Part 2: Delphi Labs: DataSnap XE – jQueryMobile Web Frontend – DelphiFeeds.com.

Highly recommended!

–jeroen

Read the rest of this entry »

Posted in Delphi, Development, JavaScript/ECMAScript, jQuery, Scripting, Software Development | Leave a Comment »

Ideone.com | Online IDE & Debugging Tool >> C/C++, Java, PHP, Python, Perl and 40+ compilers and intepreters

Posted by jpluimers on 2011/03/18

Really cool stuff; dozens of computer languages are supported, including C# and VB.NET (both on Mono) and a few Pascal flavours.

Briefly about ideone

ideone.com is a… pastebin. But a pastebin like no other on the Internet. More accurate expression would be online mini IDE and debugging tool.

Ideone is an Italian word for great ideas – because ideone.com is a place where your greatest ideas can spring to life.

ideone.com is designed mostly for programmers (but, of course, common plain text can also be uploaded). You can use it to:

share your code (that’s obvious – it is a pastebin, isn’t it? :)) in a neat way,

run your code on server side in more than 40 programming languages (number still growing)

and do it all with your own input data!

ideone.com also provides free Ideone API which is availabe as a webservice. It’s functionality allows you to build your own ideone-like service!

for logged in users Ideone offers possibility to manage their codes, publish multiple submissions at one go, and more.

All codes can be accessed through convenient hash links. Source code pages provide information about the code and its execution: memory usage, execution time, language and compiler version, code itself, input uploaded by the user, output generated by the program and error messages from compilers and interpreters.

–jeroen

via Ideone.com | Online IDE & Debugging Tool >> C/C++, Java, PHP, Python, Perl and 40+ compilers and intepreters.

Posted in .NET, C#, Delphi, Development, Software Development, VB.NET | 4 Comments »

“Try to avoid foreach/for loops”–Over my Dead Body! | Visual Studio Feeds

Posted by jpluimers on 2011/03/16

Zack Owens wrote a nice article comparing various loop constructs.

Summary:
If the semantics are the same, it does not matter if you use foreach, for, while or do while: they all  have equal speed.

So: choose the loop construct that best fits the problem you are trying to solve.

–jeroen

via: “Try to avoid foreach/for loops”–Over my Dead Body! | Visual Studio Feeds.

Posted in .NET, C#, Delphi, Prism, Software Development | 12 Comments »

online: Create a GUID

Posted by jpluimers on 2011/03/10

Edit 20260804: the createguid.com domain got hijacked by a gambling site. In stead, use [Wayback/Archive] UUID Generator Online – Generate UUID v4 Values | TextBases which is client-side JavaScript based unlike the original page. Thanks Bakti for notifying me.

Other alternatives already had been listed in the comments below, but some have gune defunct since then. I have listed the still working ones:

Read the rest of this entry »

Posted in .NET, Delphi, Development, JavaScript/ECMAScript, Scripting, Software Development | 14 Comments »

Why is the result of RoundTo(87.285, -2) => 87.28 – Stack Overflow

Posted by jpluimers on 2011/03/08

Programmers on all sorts of platforms get this wrong all the time (I admit having done this in bad ways myself too).

In short: Don’t expect floating point values in a computer to be represented as decimals.

Rob Kennedy wrote a very nice answer on this:

The exact value 87.285 is not representable as a floating-point value in Delphi. A page on my Web site shows what that value really is, as Extended, Double, and Single:

87.285 = + 87.28500 00000 00000 00333 06690 73875 46962 12708 95004 27246 09375

87.285 = + 87.28499 99999 99996 58939 48683 51519 10781 86035 15625

87.285 = + 87.28500 36621 09375

And David Heffernan points to the best link you can get on this topic:

The classic reference on floating point is What Every Computer Scientist Should Know About Floating-Point Arithmetic.

For currency based calculations, if indeed this is, you should use a base 10 number type rather than base 2 floating point. In Delphi that means `Currency`.

–jeroen

via delphi – Why is the result of RoundTo(87.285, -2) => 87.28 – Stack Overflow.

Posted in .NET, Algorithms, C#, Delphi, Development, Floating point handling, Software Development | 14 Comments »

Ask yourself: “are you writing a framework now?” – How (not) to write Factorial

Posted by jpluimers on 2011/03/01

On the Development Choas Theory blog, I bumped into a brilliant blog post titled How (not) to write Factorial in Java.

It is not about Java, or any other programming language, platform or library for that matter.

It equally applies to your favourite programming language and framework (be it shell scripts, assembler, .NET, Delphi, haskell, PHP, ruby, Eiffel, Java or any other).

It is about the question that Neal Ford taught me quite a while ago that you should ask yourself several times a day:
“Am I writing a framework now?”

Developing software is about only developing the things you really need to.

Framework development is in a totally different league than developing ‘just’ software.
It requires even more thought, attention, testing, etc.
And after that, you need to support it on a different level too.

Frameworks are far more costly than you would guess at first sight…

So only develop a framework  for something (*) if you observe that it is actually used in a lot of places and requires a framework.

(*) insert what you are currently working on here.

–jeroen

Via:  Development Chaos Theory » Blog Archive » How (not) to write Factorial in Java

Posted in .NET, C#, Delphi, Development, Software Development | 6 Comments »

Delphi friend in NZ seeks work (preferably remotely)

Posted by jpluimers on 2011/02/25

A seasoned Delphi developer friend in NZ (near Christchurch) seeks work, preferably if he can work remotely.

Please drop me an email to get more information.

–jeroen

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