Most Popular Posts

1/17/2012

Interview about TPL Dataflow

When Jonathan Allen of InfoQ contacted me for an e-interview about TPL Dataflow, I immediately searched InfoQ to see what content it had about TPL and TPL Dataflow. Not only did I find content, but I found an article Jonathan had written about my Guide to Implementing Custom TPL Dataflow Blocks.

So I did the THE INTERVIEW. Hopefully you find my insights on TPL Dataflow useful.

12/30/2011

About Me @ Microsoft (part III)

At the beginning of this month, December 2011, I joined SharePoint and more specifically its Developer Platform team. Our charter is the third-party application model in SharePoint. This is a very interesting domain. I am trying to get up-to-speed as fast as possible.

I admit I was plain lucky to get this job. It happened after a series of accidents and involved several great managers to whom I am deeply indebted.

I am eager to start contributing to SharePoint as a modern web development platform.  I am also planning to engage with the SharePoint developer community. I am already getting some rough ideas. Hopefully they will start taking shape soon [and I will not be embarrassed to  share them].

12/18/2011

Free Chess Clock 0.3

This update adds mouse support to my HTML-based Free Chess Clock to make it suitable for keyboard-less devices like phones and tablets.

You can try the new version online, but you’ll have a better experience if you DOWNLOAD the HTML page and run it locally.

11/26/2011

My Bets on Scalable Databases

For those who don’t follow the database industry closely, here is the problem: Relational database servers clearly dominated the market for the last 15-20 years, but today they render inadequate for  Big Data. There are sectors of the industry where relational databases have never been able to perform - web indexing, bio research, etc. MapReduce has emerged to serve those sectors. While the MapReduce pattern is no match for SQL in terms of functionality, the distributed storage architecture on which MapReduce is based has a great potential for scalable processing.

Now the question is: Which approach will produce a rich, yet scalable, data processing engine first? 

  • a) Enabling relational databases to operate over distributed storage, or
  • b) Expanding the processing functionality over distributed storage?

I bet on the latter approach:

Scalable databases will emerge from distributed storage.

It may seem that I am betting against the odds, because relational database vendors already have both the code and the people for the job. However, those codebases are about 20 years old and thus they are  barely modifiable. The assumption that data is locally, yet exclusively, available is spread out everywhere. So I don’t believe those codebases will be of much help. Even if database vendors abandon their existing codebases, and try to solely leverage their people to build a new data processing technology from scratch, there are ecosystems grown around those legacy database engines that will keep randomizing the development process and will hold back progress. So those developers will be much less efficient then developers who don’t have to deal with such a legacy baggage.

If the above bet comes true, it will trail the following consequence:

There will be new companies who will play significant roles in the database industry.

11/23/2011

Rest in Peace, PFX

This is a milestone in my career at Microsoft that marks the end of About Me @ Microsoft (part II), but it doesn’t yet mark the beginning of “Part III”. Part III is unclear at this moment. (I hope there will be such a part). I should know more in about a week or two.

Briefly, without disclosing any details:

The PFX team (Parallel .NET Framework Extensions) no longer exists.

By “the PFX team” I mean the people, not the products. The codebase still exists. There is another team that is chartered to maintain it, but no PFX developer is on that team. I don’t know what the future of those products will be, and I doubt there is anybody who knows that at this point. So please don’t ask me. I can only hope innovation in .NET parallelism will continue.

Looking back, I feel lucky that I’ve had the rare chance to be part of the PFX team. The knowledge I’ve gained during these two years is priceless. I came with a few ideas I wanted to explore, and now I’m leaving with a lot more.

While I’m sad about how abruptly things ended, I’m looking at it positively – it’s the trigger I needed to take the next step in my career. I am looking ahead empowered for new adventures.

9/28/2011

SQL# - First Draft

I recently drafted a specification of a new database language - SQL# (pronounced "es-kju-el sharp"). It is available on http://sqlsharp.zlatko.michailov.org where I plan to publish future updates as well as samples and tools.

As far as the name is concerned - I really like it despite of the problems the # sign creates for file names and URLs. This name doesn't seem to be used yet - neither Google nor Bing find any literal matches. So until someone claims ownership of the name, SQL# it is.

Where did this come from? The programmability of Transact-SQL has been a pin in my eye for more than 10 years. My previous creature, Z-SQL, was a modest attempt to make T-SQL look and feel more like PL/SQL, but at the end of the day it was still SQL. I've grown to realize that the SQL legacy, in whatever flavor it comes, is what repells application developers. Even I started catching myself staring at seemingly valid SQL code that SQL Server was rejecting. When I realized I was writing in C# inside SQL Server Management Studio, I decided to take a more radical approach - to replace all the awkward SQL constructs with something that comes naturally - C#.

Of course, there are constructs like the data manipulation statements, SELECT/INSERT/UPDATE/DELETE, that only exist in SQL and cannot be replaced. We'll have to live with those for now, but for a large set of commonly used constructs like object definitions, variable declarations, loops, cursor traversals, etc. there is no reason why we should continue suffering. On top of this I add one of my favorite C/C++ features that is unfortunately missing in C# - preprocessor directives. While I only provision a limited preprocessor functionality, I believe I have captured the key use cases.

The most common question people have asked me is: Why SQL# when there is already LINQ? LINQ and SQL target two completely different classes of applications. I don't want to spark yet another discussion on which one is better. I would only say one doesn't exclude the other - LINQ did not (and will not) obsolete SQL especially in these times when the volumes of data organizations deal with grow faster than ever. Just like SQL made its way up to C# in the form of LINQ, I push C# down to SQL. I hope to find a similar reception from the SQL developer community.

What are the next steps? At this point I am seeking feedback on the overall usefulness of SQL# as well as on individual features - either proposed or missing. I am in no rush to start implementing any tooling that translates SQL# to Transact-SQL at least not until I am confident I've captured the right feature set. Even then, I will be looking for volunteers to write a compiler, a language service, and other tools. My goal is to continue driving the specification forward and to create an ecosystem of tool vendors.

So, if you are a SQL developer and you are interested in shifting your development experience in this direction, please read the spec and log your feedback here. It will be greatly appreciated.

2/13/2011

Free Chess Clock 0.2

I found and fixed some awkward behavior in Chess Clock 0.1.

Symptom

It is possible to accidentally reset the clock. In fact, it was too easy to do that - by hitting Enter instead of right Shift while the focus was still on the Reset button.

Solution

Do not reset the clock if a game is in progress. In order to reset the clock once a game has started, the page has to be reloaded. As a side effect, the clock could be paused (while the alert is being displayed.)

Availability

  1. A new standalone version is available for download.
  2. The online page has also been updated.

Enjoy!