Community pulse: Delphi’s Killer Feature

Managing variables with ease

Managing variables with ease

The usual “off-line” comment: Guys, we’re preparing FileSuite 2. Many interesting things inside – many bugs fixed, folder constraints more scripting commands and, of course, Shell Events. On of the main themes of this release are the usability issues so feel free to submit your feedback. We hope that we’ll have something to present in 7-10 days. Thanks a lot.

And now back in present: There’s a question on StackOverflow asking What’s your favourite programming language, and its killer feature?

Seeing there that Delphi’s choice is #1 among the answers it seems that Delphi’s killer ‘feature’ is becoming (again) its community.
Continue reading

How the Humans Think

Happy new year to everyone! πŸ™‚

To everyone? Well, yes, I suppose so because we don’t require any password to read this post πŸ™‚
New year? Well, yes. Dude, have a look at the calendar. (Well, we accept as standard the Gregorian Calendar, isn’t it?)
Happy?… hmmmm… this can be a problem. A tough one. Let me explain… Continue reading

A Better Time Machine

Well, here we are. Finally we released the FileWatcher. If was a very interesting experience about, if the time permits, we’ll blog further.

But what’s most important in this experiment was that we were determined to build a tool for you. For customers. Sounds great, isn’t? But in practice isn’t so straight as it seems to be… Continue reading

What one can found behind a mask?

What if we’ll add the “x” feature?
This is the question.

(adapted from) Steven C. McConnell

Well, first of all let’s see what we see πŸ™‚

Masks.MatchesMask Function

Indicates whether a file name conforms to the format specified by a filter string.

function MatchesMask(const Filename: string; const Mask: string): Boolean;

Call MatchesMask to check the Filename parameter using the Mask parameter to describe valid values. A valid mask consists of literal characters, sets, and wildcards.Each literal character must match a single character in the string. The comparison to literal characters is case-insensitive.Each set begins with an opening bracket ([) and ends with a closing bracket (]). Between the brackets are the elements of the set. Each element is a literal character or a range. Ranges are specified by an initial value, a dash (-), and a final value. Do not use spaces or commas to separate the elements of the set. A set must match a single character in the string. The character matches the set if it is the same as one of the literal characters in the set, or if it is in one of the ranges in the set. A character is in a range if it matches the initial value, the final value, or falls between the two values. All comparisons are case-insensitive. If the first character after the opening bracket of a set is an exclamation point (!), then the set matches any character that is not in the set.Wildcards are asterisks (*) or question marks (?). An asterisk matches any number of characters. A question mark matches a single arbitrary character.

MatchesMask returns true if the string matches the mask. MatchesMask returns false if the string does not match the mask. MatchesMask raises an exception if the mask is syntactically invalid.

Note: The Filename parameter does not need to be a file name. MatchesMask can be used to check strings against any syntactically correct mask.

(from Delphi’s Help)

So, we have here a very nice function primarily designed to (quote again) Indicates whether a file name conforms to the format specified by a filter string, right? Wrong!Continue reading

Community pulse: New ways to enhance Delphi

There is an interminable thread on the public.non-technical battlefield called ‘Delphi for the Mac’. At the time of writing, there are approximative 500 (five hundreds) posts on that. (493 to be more exact). No, I won’t provide a link. Because I think that is better (at least now after 500 posts) to start a concrete discussion in order to enhance our tool of choice.

Don’t get me wrong, I do think that defending a tool is good, but this defense must take the form of enhancing our product, and not denigrating the other one just because it doesn’t fit with “my/our” philosophy.

So, in my humble opinion, we must take and adapt what is good on the other product (XCode / Interface Builder in this case) and avoid what is bad. I know that you are willing to do give feedback on this, the vast majority of you proved it many times, including in the last poll which we made. The results are depicted in our classical pie on the right.

However, our community has a long lasting disease – we transform ourselves in a community of talkers in order to be a team of doers. We had this also with .NET and now it seems that we start to have it with Mac. Sons, the better covering of user’s needs through innovation is the thing which will ensure our survival.

So, in short: …and correct me if I’m wrong. πŸ™‚

Continue reading

Compile-A-Virus, FileFeeds: a Solution

FileWatcherLogoThe idea started with the advent of the new kind of viruses commonly called Compile-A-Virus which compiles itself in one of the system units of a certain programming language. Nowadays, the most famous one is the W32/Induc-A which targets the old versions of Delphi, but in fact, there are other malware in the same category which targets other platforms. One of the most targeted platforms today is .NET (starting since 2002 already) on which there are even tools and videos (!) how to do itContinue reading

WordPress’s Contest – Ways to leverage the community potential

Hi guys, WordPress started a nice contest – more details here. This should give us an idea how to leverage the community potential and be on target while keeping a fast paced advancement of a “certain product” ;-). Why shouldn’t we follow their example?

Also, please don’t hesitate – if you have more ideas to win the contest I’m eager to listen – I really want to make our tool of choice more popular, and bringing new guys here is one of the ways.
Anyway here are my entries to contest:… Continue reading

Turbocharging Delphi 2010 #2: Adding dynamic functionality to 3rd parties – the solution



First of all, let me stress that once again it is shown that the community is way smarter than any individual alone. And of course, when I say any individual, I mean any individual, regardless of company at which he’s working ;-). That’s why I think that the feedback was, is and will be the main innovation power, especially in our industry were, due of the very intellectual nature of our job we can make very easy mistakes if we advance alone. Only in this way we can approach to the naturalism and neutrality of perfection. Yes, I put the Stanley Kubrik‘s photo on purpose.

The man of the day in this case is Heinz Z. (Heinz, if you want, I can make public your full name πŸ™‚ ) which on my latest post about different techniques to extend the functionality of a class which we cannot control, gave a very simple and effective solution. Rather than leaving his answer there I think that’s appropriate to make a special post here giving him the pen:… Continue reading

Turbocharging Delphi 2010: Adding dynamic functionality to 3rd party frameworks (Read: VCL)

giraffeYeah, I know: Use Tag. But no, I won’t. If I can. But sometimes I cannot. But let me explain the problem first:

Many times there is a need to have metadata which has at least one of the properties bellow…

  • dynamic
  • added at runtime
  • to objects which we don’t control their class specification

…then we are in trouble… Continue reading

Innovation: Array quirks and Generators

ListsSpeaking a little bit about innovation, we had a great discussion about Class Signatures also here in this blog as well as in a very hot thread in the .language forum, and finally I’ve submitted also a QC Report – vote for it btw.

But today I would ask for your opinion about another feature request, which, in fact, will fill a gap (or rather an oddity?) in the Delphi compiler. But the main point is how to implement it… Continue reading

Community pulse: Undo in form designer.

reaching-the-sky-lOne of the main drawbacks of our IDE is the lack of Undo in the Form Designer. I thought that it was a matter of time to do it, but when I read this thread I figured out that the problem can be also elsewhere… …besides of the assumptions about what the community thinks about something. πŸ˜‰ Continue reading

Building impossible frameworks

twinsSome time ago we had to write an impossible application. And like any other such application, it doesn’t showed up from the beginning how “impossible” it was. It was about a team scheduler which would assign different task to different team members, based on various constraints related to each member’s capabilities as well as to the project time line.
Why I remembered this? Because of some comments on a previous post made by Chris Rolliston and Ken Knopfli. Both made good comments with regard to the hidden complexity which most of the times surfaces during the application lifecycle.
And remember, the most common cause of failure of a software project is (according to Steve McConell) is it’s uncontrolled complexity. Also, Tom DeMarco & Timothy Lister note in their reference book (Peopleware – a must read) that not even a single project (from thousands which authors examined) failed because of a technical reason.
So, we took our weapon of choice (Delphi of course) and started to build the impossible… Continue reading

On Design

DesignThese days we had to work on some glyphs for some components which we’re about to release. Well, we had a great discussion on this because (isn’t it?) we all like to give our favorite color to the bike shed. But sometimes we must overcome our personal passions and inclinations and think to the others. Anyway we do not design for ourselves but for others.

At a first glance we should ask “How do you like it?” And indeed we should.

At a first glance we should obey to what the users Β say. And indeed we should.

At a first glance that’s all. But is not… Continue reading