Wednesday, December 29, 2010

Visual Studio 2010 vs. Inconsolata font, part 2

Recently, someone notified me that TTF version of popular Inconsolata font had released and is accessible here. There were some troubles with the OpenType version of the font, so you had to convert it manually to TTF format in order to use in Visual Studio 2010.

So, I’ve downloaded and installed it immediately. The font appeared in Visual Studio 2010 font list. Good. I’ve set it as a default font for text editor and what I’ve seen? Something unexpected:

Inconsolata in Visual Studio 2010

All kind of braces are being rendered in bold, the same goes for semi-colon and comma symbols. But wait, may be the problem is not in VS2010 and the font has troubles? Let’s check the hypothesis and do the same in VS2008:

Inconsolata in Visual Studio 2008 

Looks amazing!

Checking the hypothesis in Notepad:

 Inconsolata in Notepad

Again, no problems. The font is really awesome.

So what are the problems with that Visual Studio 2010 text editor? What were the reasons to change the bug-free and greatly working component from Visual Studio 2008 to this unreliable child of modern technologies? I don’t know.

P.S.
If you find a workaround, please, notify me. Thanks.

Tuesday, December 21, 2010

NetMonitor. Choosing MVVM framework

In the previous post I created a sketch of my small application with the help of Microsoft Expression Blend 4. Among other great features of the development suite there is a one that makes Blend outstanding -- it produces working XAML files, so every single UI screen in your sketch is represented as a separate UI control and the corresponding XAML is more or less ready for copy-pasting to the real application. This makes Blend the most preferable suite for sketching of WPF applications.
Let’s go further. When we are speaking about WPF we mean MVVM pattern and vice versa. What is MVVM? It is a concept that is derived from Model-View-Presenter (Model-View-Controller) pattern. There are several great articles about it, for example, I’d recommend this one and this one. AFAIK, there are two featured MVVM frameworks: GalaSoft MVVMLight & Caliburn, both of them are targeting WPF & Silverlight. I chose the first one, MVVMLight, as a base for my application because it is said that the framework supports designing in Blend, and that’s what I want.
So, I installed MVVMLight and created a new project based on MVVMLight WPF Template, added HostViewModel class, which describes the required information about a host and its health, and MainViewModel class that contains a collection of HostViewModel instances and a pair of commands, Start & Stop, which are derived from RelayCommand. After that I adapted the above-mentioned “Screen_1.xaml” from the sketch project. Here it is:
NetMonitor 02
For now, commands do nothing and the hosts information is static rather than live. Nevertheless, after a short period of work I’ve got a prototype that is written on WPF & MVVM and even shows something.
So, the UI part of the requirements is almost done. In the next posts I’ll try creating a Ping service and make use of it with the help of Start and Stop commands.

Friday, December 17, 2010

NetMonitor. Prototyping with Expression Blend 4

In the previous part I listed the requirements to the application. According to the good practice of program development, I’ve decided to start with UI and make a sketch of main application window.
Earlier I used to play with 2 superior mockup tools, Balsamiq Mockups and Evolus Pencil, but today I’ve decided to try Microsoft Expression Blend 4 because it was specifically designed for WPF-based application development. After several tryouts I’ve managed to make a sketch of the application. Main window has 2 buttons and a list with hosts, each of them contains 4 pieces of information (Host name, IP address, Response time and Health). The sketch looks as follows:
NetMonitor Sketch
I know that there are some troubles with text alignment and may be many others but don’t forget that this is only a sketch and the only purpose of it is to show how the application might look like without extra details.
Here is the main window of Expression Blend 4, as it was in the middle of the sketching process:
Expression Blend Full.
As you may notice, in the left lower corner is the structure of the application. I’ve put a DockPanel inside the LayoutRoot and inserted there a ToolBar with Docking=Top & a ListView, which automatically took the rest of space. After that I’ve created a sample data source and bound it to the ListView. That’s it, my sample data immediately appeared in the ListView. During these operations I saw nor XAML neither C# code.
The sketch is ready, it even can be run in special Sketch Player (another great feature of Expression Blend 4) so customers can play with it, make comments and criticize. The next step will be transforming the sketch into a real application and start building network services.
In case anyone is interested in the source code, I’ve opened a public repository at the bitbucket.org, so anyone could get the sources, play with them and even add any valuable stuff.

Thursday, December 16, 2010

Express Software Releasing Challenge

I’ve been thinking that Chrome browser team is the champion in super fast release building. According to Wikipedia, they managed to deliver 5 major revisions, from 4.0.249 to 8.0.552 within 2010 year, and I’m not sure that they won’t release the 9.0 before the New Year.

I’ve been thinking so until I opened my RSS reader today and found out that there is another pretender to this title, and its name is: Opera browser team, my congratulations! They managed to deliver 3 Release Candidates within a day. Here is the proof:

Opera RC

Frankly speaking, I’ve never seen anything like this in my whole life. What a speed!

Sunday, December 12, 2010

Comprehending WPF. NetMonitor

About a month ago I wrote a post about the overall complexity of WPF technology, steep learning curve and other things that might be perceived as roadblocks, especially for novices or old-school WinForms programmers.

After that I had several intensive discussions with my colleagues on the subject and they told me one important thing, the main idea was that the technology just seems to be overcomplicated, especially from the first look, when you don’t see the overall picture how it is built, how it works and how it should be used. Another thing that is worth mentioning is that the architecture is reasonable, because it gives a UI designer the required flexibility and power, which WinForms just can’t provide and this very fact can only be seen on complicated UI scenarios, not on simple ones.

As a result, they persuaded me to take a closer look on the platform and give it another try. And I did so. They say that abstract theoretical knowledge can’t compare with practical one, so I decided to make something small but more or less useful on WPF and therefore, get some practical knowledge of the technology.

I’ve set my choice on a little handy tool that will monitor and report the health of my network. For now the most quick and simple way to check the health is to open several Command Prompt windows and run a Ping command to various hosts in the network starting from my own router, then gate, VPN server, etc. and ending up with globally available hosts like google.com or similar. So you have to look at all those console windows, process and aggregate their logs and make a conclusion where the real problem is. As you might imagine, this way is neither convenient, nor informative, and finally, I’ve decided to create a better solution.

I’ve started with requirements. What are they?

The most important thing is to invent a codename. I’ve chosen a self-describing name — NetMonitor, why not?

UI

  • The main window shows a predefined read-only list of hosts and an average response time from Ping command.
  • Each host has a name and a valid internet address.
  • Two buttons start and stop the process of pinging.

Internals

  • In order the UI thread not to be frozen while waiting for Ping command response, each host pinging procedure must run in a separate thread.
  • Sending a Ping request once a second will be enough for monitoring tasks.
  • List of hosts for pinging should be configured from outside the application code, say, in app.config file or something. Personally, I don’t like xml configuration files, so i will try using ini file instead.

That will be enough, at least for the first version.

In the next posts I’ll write about the process of building the application.

Monday, November 8, 2010

On ASP.NET

As you might suppose, I don’t like ASP.NET also. It adds unnecessary complexity and generates tons of garbage inside webpages (not to mention ViewState), pretending to solve such a simple task as building html application.

Take a look at this piece of shit code, which represents an ordinary checkbox:

<input id="ctl00_ctl00_ctl00_ContentPlaceHolder_ContentPlaceHolder_ContentPlaceHolder_formProfile_checkBoxSubscription" type="checkbox" name="ctl00$ctl00$ctl00$ContentPlaceHolder$ContentPlaceHolder$ContentPlaceHolder$formProfile$checkBoxSubscription" checked="checked" />

I’ve found it in a common ASP.NET page, imagine how much pieces of such creepy code in the Internet.

Wednesday, October 27, 2010

On WPF

Recently, I’ve get interested in practical usage of WPF technology and, as an obvious result, I’ve encountered plenty of obstacles as the technology is not as clear and straightforward as Windows Forms was.

I agree that from the theoretical point of view, WPF might be considered as a great step forward, but from practical one it is likely to be 2 steps backward. It is overcomplicated, it requires you to forget the well-known time-proven UI concepts and techniques, and to spend weeks and months on studying the brand new one. And even after that you can’t be sure that you are doing things right just because almost all things could be done in plenty of ways: code, styles, templates, etc. Not to mention the absence of several must-have controls in standard library, such as DataGrid, DateTimePicker, MaskEditBox, etc. on the moment of .NET 3.5 initial release. What are they hoping for? I don’t understand. Frankly speaking, it seems that WPF is bringing much more problems than it tries to solve. Remember blurry fonts and images, long application startup time, etc.

Moreover, I’m not alone in these thoughts. The Internet is full of stories on the subject. For example, when I was trying to find a solution for one of problems which could be easily solved in Windows Forms, I’ve bumped into an interesting and rather emotional post, which is titled as “What the HELL is wrong with WPF?”. Don’t miss it as well as its comments.

Some quotes:

- “Using WPF I can easily make a button which contains a spinning 3D cube playing videos on each face that turns green when the mouse goes over it, all without any C# code. Unfortunately, no one would ever want to do that, while it’s easy to imagine a situation wherein you’d want toolbar icons to gray themselves (like, I dunno, every Windows application ever made).”

- “I fucking hear ya! I’m also struggling with this shit every day just to discover that MS – again – really went out of their way to accommodate every possibility imaginable but rendering the whole system/concept unusable on the way.”

- “…I mean SERIOUSLY? What the fuck man! Win forms were a beauty, then why the flying fuck you want to release something ENTIRELY different and say that its the way forward especially when winform isnt broken. I mean why fix something when its not broken.
I am so sick of MICROSOFT and their policy of shoving their crappy pieces of junk software down our throats. They know people are smart and don’t want their shit, so they start issuing threats of disengaging old software unless you buy the new one.”

Wednesday, October 20, 2010

Scroll Lock key as OS crasher

Recently, while surfing the wikipedia website, I’ve bumped into an article about the ScrollLock keyboard key. In list of its utilizations in numerous programs, the following one made me smiling:

In Windows NT-based operating systems with a certain registry setting called "CrashOnCtrlScroll" enabled, double tapping Scroll Lock while holding the Ctrl key initiates a system crash to allow debugging the current state of the operating system.

Be careful, guys! =)

Wednesday, September 8, 2010

For those, who prefer the dark side

Just have found a nice color scheme for Visual Studio with ReSharper 5.1 {ColorIdentifiers = On} by Krzysztof Kozmic.

Here is how it looks:

R51

Hope you will like it.

Thursday, September 2, 2010

Are you a human being?

SO-fixed

Unfortunately, I’ve failed to pass the verification test. May be you will manage to do this?

Sunday, August 29, 2010

The most useless feature of Visual Studio 2010

Although the majority of people like discussing new exciting features and possibilities, I tend to be more rational and sceptical in this field. For example, I don’t like the new blue-yellow look of the studio,  I hate the new WPF-base editor because is doesn’t support my favorite open type fonts, I dislike the situation when every new release of VS is becoming slower and slower and eats more and more resources but the most annoying thing in my opinion is the tendency to add bells and whistles instead of concentrating on quality and performance.

Take, for example, the following “killer-feature”, which everybody might have already noticed:

VS-zoom

It is editor zoom control. Everyone was dreaming of this for ages. (Yes, it is sarcasm). They even dedicated to it a standalone post with video trailer. Nice. Here it is.

I especially liked one of the comments by Atle Iversen, let me quote it:

“Here are my suggestions for "features" in Visual Studio 2012 (which would make me actually consider upgrading)

  • increased performance (everywhere)
  • less bugs (everywhere)
  • less memory use/waste

I know that you put in a *lot* of effort in improving Visual Studio, but you're putting in the right effort at the *wrong* places - instead of more functionality with less quality we need less functionality with more quality !!!”

Although, I’m not sure that anybody from VS team has heard this cry from their customer.

Moral: Stop living in reality separated from your customers, their needs and requests. It’s a dead end.

Wednesday, August 25, 2010

Programming fonts

Recently, I’ve found an interesting post, where top 10 programming fonts are being compared. Every font is accompanied with comments and image of font in action. For example, one of my favorite ones, DejaVu Sans Mono looks like that:


Another one, which I also like and which is used in Android OS, is Droid Sans Mono:


The whole story is here. Hope you find there your new favorite programming font instead of boring Courier new and Consolas.

Sunday, August 22, 2010

Visual Studio 2010 vs. Inconsolata font

Hello,

After several days playing with the Silk style for Visual Studio 2008/2010 I’ve realized that you can’t achieve more or less good overall results with default fonts like Consolas, Courier New or something. I know that there is a perfect font, named Inconsolata, and what is more important, its author made it free. Here is how it looks like:

The same font in action:

I must make a remark that the font is being redistributed in OpenType format. I was happy using the font in Visual Studio 2008 but unfortunately, 2010 version has different Text Editor component, written totally on WPF and these things together make impossible usage of all other fonts except TrueType ones. WTF???

Luckily, I’ve found a workaround:

  1. Download the font from the official site.
  2. Go to online font converter, and convert OpenType Inconsolata font into TrueType format.
  3. Install TrueType version onto your system.
  4. VoilĂ !

VS

Hope that will be useful.

UPDATE:

Here is the second chapter of this fascinating story.

Friday, August 20, 2010

On Visual Studio styles

I’m almost sure that everybody knows StudioStyles.info website, where tons of various syntax highlighting styles for Visual Studio 2008/2010 are being added and updated everyday.

Right after its appearance I decided that default VS style is too bright and therefore, too tiring for my eyes and switched to a darker one, named “Son of Obsidian”:

sonofobsidian

I thought that I would feel positive result but I was wrong. Watching on dark screen and seeking for light symbols of code seemed to be even more tiring than the default color scheme. Soon I started to search for less contrast schemes and after several minutes of looking over styles on the website I found “Old Book”:

oldbook

This one was much better, it was really easy for eyes, and mimicked an old, pergameneous book. I used this style for several months, until I realized that it was not ideal and there might be more optimal one.

Today I’ve made a draft of a new style, which is going to be clean and tidy. Here it is:

silk

I’ve named it as “Silk” because in my opinion it is smooth and clean. If you like it, it can be found here.

I would like to hear any comments or remarks.

Friday, August 13, 2010

Fast Reflection Library

Hi there,

Recently while browsing Microsoft Codeplex projects I’ve found another good thing. They call it ‘Fast Reflection Library’, it is written in C# and its purpose is to provide the same as part of the reflection features like executing method dynamically but give simple and faster implementations.

Example of usage:

using System;
using System.Reflection;
using FastReflectionLib;
    
namespace SimpleConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            PropertyInfo propertyInfo = typeof(string).GetProperty("Length");
            MethodInfo methodInfo = typeof(string).GetMethod("Contains");
    
            string s = "Hello World!";
    
            // get value by normal reflection
            int length1 = (int)propertyInfo.GetValue(s, null);
            // get value by the extension method from FastReflectionLib,
            // which is much faster
            int length2 = (int)propertyInfo.FastGetValue(s);
    
            // invoke by normal reflection
            bool result1 = (bool)methodInfo.Invoke(s, new object[] { "Hello" });
            // invoke by the extension method from FastReflectionLib,
            // which is much faster
            bool result2 = (bool)methodInfo.FastInvoke(s, new object[] { "Hello" });
        }
    }
}

Although DataObjects.Net contains its own implementation of fast reflection (see: Xtensive.Core.Reflection), I like in this one the following aspects: clear & minimalistic design, simple and obvious API & ease of use. It took several seconds to understand the general idea and start using it. I think that this might be a good example of how library should look like: it should solve 1 concrete problem in most efficient way and do nothing more in order not to turn into another dinosaur.

Friday, July 9, 2010

The useful finding

Just’ve found on the web an amazing resource full of nice CSS templates, licensed under the Creative Commons Attribution 3.0 Unported License — FreeCSSTemplates.org.

Here are some examples:

Well done!

Thursday, May 27, 2010

Time to get your discount on X-tensive products

Hey guys, great news for you!

If you are interested in getting a discount on DataObjects.Net or HelpServer, take a look at this link and this one.

Saturday, May 15, 2010

On blog changes

Hi there,

Recently members of DataObjects.Net team have finally agreed on principal alteration of news and announces publishing policy. By this I mean that in order not to spread your attention between several personal blogs we decided to concentrate on exactly one, dedicated to DataObjects.Net development. So I’d strongly recommend you to update your RSS subscriptions.

In case you are interested in using the ORM under Visual Studio 2010 & .NET 4.0, there is a big announce for you, don’t you miss it!

Thanks for your attention!

Thursday, April 8, 2010

Update on Envy project

Despite the fact that the initial post concerning Envy project was published on April, 1st, it was not a joke as you might thought. We really were going to deliver all that sort of stuff (standalone editor, plug-ins for various IDE and everything). But one thing has changed. I am very pleased to announce that TytanNet project came back to life and its author is going to continue his work on this excellent product. But how such a good bit of news might influence Envy?

It is rather obvious. As me & Denis were thinking that TytanNet is being supported no more and that there was no any chance that it would be updated to meet Visual Studio 2010’s plug-in infrastructure requirements, we decided to develop a version of Envy which could be plugged-in to various IDEs such as Visual Studio, SharpDevelop, etc. As far as the necessity of such sort of plug-ins is no more actual (TytanNet has its own powerful environment editor), we can concentrate on standalone application which is intended to replace standard Windows environment variable editor.

To be honest, the main goal of the project is a temptation to combine the idea of getting more familiar with new technologies such as WPF, MVVM, etc., with development of a simple but useful application, at least for us or may be anyone else also.

In case you still doubt that I am sincere, here is the link to the repository.

Here is a blueprint of the main window:

Envy

As you might noticed, it is rather simple and straightforward. Add/Remove, in-place editing, apply or discard, nothing special.

BTW, thanks to Kenny Kerr for his excellent window clipping tool.

I’ll write more on Envy development in the upcoming posts. Stay tuned.

Thursday, April 1, 2010

The birth of Envy project

Introduction

“Envy” goes for an advanced environment variables editor that has a standalone version as well as plug-ins for various IDE.

The very idea of creating such kind of stuff came spontaneously to me and Denis Krjuchkov while we were discussing the upcoming release of Visual Studio 2010 in terms of compatibility with plug-ins made for the previous versions (VS 2005/2008). As you know, both of us at the current moment work for X-tensive company in a rather ambitious project called DataObjects.Net 4. In the project the approach with unit tests configuration through specialized environment variables is widely used.

In order to cope with such kind of task Tytan.Net plug-in for Visual Studio 2005/2008 is utilized. It provided the ability to manage environment variables of Visual Studio's process, but unfortunately had several minor drawbacks, for example, environment variables editor had quite poor keyboard support, it has no ability to remember variable values set in previous sessions, etc. The most important one is the fact that the project's development had stopped, so there is no any chance that the plug-in for Visual Studio 2010 will ever be released.

Thus, we came to the idea that we should make an attempt to create at least a replacement for it, a better replacement, we hope. In addition, the standard environment variables editor in Windows OS is the ugliest thing I've ever seen, especially when you have to edit the PATH variable. You know what I'm talking about, don't you? =) So why don’t just kill two birds with one stone and create the plug-ins as well as standalone one?

The vision

We are going to deliver a convenient and user-friendly environment variables editor which can be used as a standalone applications or can be plugged-in into Visual Studio 2008/2010 and SharpDevelop.

List of features:

  1. Simple and intuitive user interface
  2. Full keyboard support
  3. Automatic multiline editing for variables with multiple values, such as PATH
  4. Standalone application – a replacement of standard Windows environment variables editor
  5. Plug-in for Visual Studio 2008/2010 & SharpDevelop
  6. Ability to save and load a set of variables from external files.

The roadmap

Version 0.1 – Standalone application, just a window which contains a grid with 3 columns: variable acope, name & value. The 2 latter columns are editable. The form contains 2 buttons: Save & Discard which updates environment variables and resets the state of the grid contents to initial one, accordingly. In-place name & value column editing & variable removing are possible.

Version 0.2 – The same standalone application but with some features such as:

  • Filtering by text pattern
  • Multiline editing
  • Adding new variable

Version 0.3 – The standalone application again, but with another set of features:

  • Full keyboard support
  • Variable values history (remember a list of previous values for variables)
  • Application settings & auto-update

Version 0.4 – Plug-in for Visual Studio 2008. The source code of Tytan.Net should be investigated in order to find out how to create and register a plug-in into Visual Studio. At this step the installer will be provided as well because the procedure of plug-in registration might require additional steps.

Version 0.5 – Plug-in for Visual Studio 2010. As it is reported that the plug-in API in Visual Studio 2010 changed significantly, this step might take more time than the previous one.

Version 0.6 – Plug-in for SharpDevelop 3/4.

In the future posts I’ll write more detailed information about our competitors, development model, software architecture and so on. Stay tuned.

P.S.
Happy April Fools' Day! =)

Wednesday, March 24, 2010

A bit proud of myself

Sometimes it just happens =)

Recently, online banking service (Bank24.ru), frontend part of which had been designed and developed by me & my colleagues, Yuri Kurzhumov & Dmitri Govoruhin, was highly valued and won the first place prize in online banking services contest held in Russia.

 

Although I don’t work for Bank.ru anymore, I am proud of the result and I’d like to congratulate all the staff from Information Technology Department of Bank24.ru who participated in any way in creating, developing and maintaining the best national online banking service. My special congrats to: Alexey Vinogradov, Anna Mamaeva, Boris Dyakonov, Eugene Samoilov, Igor Karfidov, Olga Urchenko, Pavel Gushin, Sergei Vedeneev & Tatjana Talykova. Great work!

Sunday, March 14, 2010

Me on Google Buzz

Hello All,

here is my Google Buzz link: http://www.google.com/profiles/Dmitri.Maximov#buzz

I find it a bit more convenient than blog for sharing short ideas, publishing links to good articles and everything quick and small-sized.

Stay tuned! =)

Busy people versus effective people

The excellent essay “The cult of busy” by Scott Berkun about time, efficiency, busy people and everything. Don’t miss it.

It seems that it is rather easy nowadays to become extremely busy, but will you be efficient enough to sort out the problems? The answer is not so obvious and might surprise you.

Saturday, February 27, 2010

Denis Krjuchkov vs. Oracle

I’m glad to introduce yet another™ technology-related blog by Denis Krjuchkov, one of the most ambitious and highly talented software architects I’ve ever known. I’m pretty sure that the blog will be extremely interesting especially for those who is keen on investigating the very depth of modern software technologies, concepts and languages.

The first post is dedicated to a struggle with a weird bug in Oracle which prevents robust serializable access to database even when there is only one opened connection. So check this out.

BTW, the long-awaited DataObjects.Net 4.2 is planned to be released at the end of this week. Stay tuned!

Saturday, February 20, 2010

DataObjects.Net 4.2 RC’s health status

It is considered as a good and beneficial idea for a development team and the whole product’s development process to become more open for its community. DataObjects.Net 4 team shares these views and tries to move step by step towards the goal of openness and transparency.

We moved the project repository to Google Code, which means that everybody has access to the source code, revision history and changeset tracking. We started to use publicly available issue tracker. Anybody can report an issue, request a feature and vote for it. We use it by ourselves to track development tasks and therefore the current status of the development process can be seen on project’s update page. Finally, support forum is open 24 hours a day, so everybody is always welcome.

A part of our English-speaking developers began their personal blogs in order to share their thoughts, ideas, new concepts, samples and examples with the community. The most outstanding blogs are:

  • the well-known Alex Yakunin’s blog. A must have source of information if you are interested in .Net in general and in DataObjects.Net in particular.
  • Alex Kofman’s blog. Not so frequently updated but anyway, it is worth reading. Alex prefers to discuss general ORM-related concepts, often in DataObjects.Net 4 context.
  • Alex Ilyin’s blog. Although he doesn’t work on DataObjects.Net 4 directly but he makes a contribution to the project on everyday basis participating in hot discussions and reporting tons of suggestions and remarks. It is he, who tests the very green alphas of DataObjects in his sophisticated (and sometimes even a bit weird) scenarios.
  • This blog. As you are already here, I suppose that you know what the blog is about ;)

But sometimes I’m asking myself – is it enough to  feel and understand whether the project is healthy, robust, well-doing, or not? How to figure out the core understanding of the product’s quality through the deluge of these numerous activities?
Finally, I’ve got the idea. It’s all about numbers, not words. Unit tests results can be used to assess the health status of the product. For now DataObjects.Net 4 has almost 1000 unit tests for the Core part and almost 1500 tests for storage providers (In-memory database, Oracle, PostgreSQL, MS SQL Server) and such number of tests is enough for a simple statistical analysis.

Here is the indication of DataObjects.Net 4 RC’s health status for today (20-02-2010):

The green/red bar shows the percentage of successful/failed tests for the Core and every storage provider. Note that PostgreSql 8.2, 8.3, 8.4, MS SQL Server 2005 providers show no failed tests at all. The worse result is for Oracle, its 90% only. Support for Oracle 11g is still in beta stage but we are going to improve it. The next unlucky one is the provider for MS SQL Server CE 3.5, it is also waiting for a bunch of fixes as well as its big brother  - MS SQL Server 2008.

So, I’m going to invent this health status meter publishing on a regular basis. Hope you’ll find it useful. In this case it could move to the official website of the project.

BTW, in case you have any suggestions on the topic – don’t hesitate to post a comment or two. You know, you are always welcome!

Thursday, February 18, 2010

Google URL shortener for everyone

The above-mentioned Google service is definitely useful, especially for long URLs, but it has one big disadvantage, at least for those who prefer any browser other than Google Chrome and don’t want Google toolbar to be installed. Not a nice strategy for such web service-oriented company, I suppose.

Luckily, there is an alternative way to get your URLs shortened with the Google URL shortener. It doesn’t require any software to be installed, it is no more than a simple web page:

Note, that the project is not affiliated with Google.

Wednesday, February 17, 2010

Microsoft Sql Server CE 3.5 provider for DataObjects.Net 4

The first version of Microsoft Sql Server CE 3.5 provider for DataObjects.Net 4 is going to be officially shipped in the upcoming DataObjects.Net 4.2 release.

Let me shortly introduce Sql server CE’s limitations. So it doesn’t support:

Feature Where is used Workaround, if any
Temporary tables Local collections support Regular tables are created and dropped automatically
Full-text search Full-text queries -
Batches Batch database operations -
CROSS APPLY SQL operator “First”, “Single”, “ElementAt”, etc. LINQ methods inside sub queries;
”SelectMany” LINQ method without “DefaultIfEmpty” specifying
-
UPDATE FROM [Table] Upgrade procedure Another, but analogous SQL statement is used
INSERT DEFAULT VALUES Insert operation Default values are explicitly specified
Savepoints Nested transactions -
ROW NUMBER SQL operator “Skip” LINQ methods -
INTERSECT, EXCEPT SQL operators “Except”, “Intersect” LINQ methods -
nvarchar(max), varchar(max), varbinary(max) datatypes   text, ntext, image are used instead
COUNT_BIG function “Count” LINQ method Result of “Count” is explicitly casted to bigint type

But despite of all these limitations there is one huge advantage of CE usage: it doesn’t require separate installation. This is significant feature for developers who works on desktop applications for personal use, for example. Just ship, install and it works. No more problems with database server installation, connections, firewalls, network configurations, etc. Another case is running tests on your business model. Actually, you don’t need big database server for this.

In order to use DataObjects.Net 4 with Sql Server CE instead of his big brother, use the following connection url:

<domain connectionUrl="sqlserverce://user:password@localhost/<Path to your database file>"/>

Another option is to use native connection string:

<domain provider="sqlserverce"
        connectionString="Data Source=<Path to your database file>"/>

Sql Server CE 3.5 provider for DataObjects.Net 4 is already available in DataObjects.Net 4.2 RC.

Tuesday, February 16, 2010

File sync problem and possible solutions

It is well-known fact that an overwhelming majority of people are quite lazy, especially programmers. The latter invented functions and subroutines, classes and components in order not to code things twice. In this very case it seems that a sort of creative laziness can bring huge benefits to the world we are living in. But what if a person is not lazy enough to invent a brilliant idea or use an existing one? I was that person for last several years.

My problem was connected to my work. Not to the work itself but to the fact that I usually work at the office as well as at home and I want to get the whole working environment with me wherever I go. By the environment I mean not only projects that I’m working on (this case is handled rather well with the help of hg or subversion) but the entire set of files, documents, may be some music, electronic books, etc.

I tried a number of ways. The most long-lived one was an approach with a flash drive usage. I had to plug-in it every time I came to the office and upload the updated files onto my computer. Before I left the office I had to do the reverse operation – copy updated files back to the flash drive. The same routine was waiting for me at home. If I forget any of these operations – I get out of sync and simply can’t continue my normal working process.

The other options that I tried:

  • Working from home via VPN + Remote desktop. This is not very useful especially when your ISP is not stable. It requires that both computers are on, network speed is rather high.
  • Using a FTP server in order to  sync 2 computers. Not convenient, counts on your manual actions. But doesn’t require that both computers are on.
  • Using one of Opera unite applications such as File Sharing, or Document Sync + Document Courier bundle. The latter one is very promising though. Opera-based solutions don’t require external ftp server although the maximum size of synchronizable directory in case of DS+DC must not exceed 350 Mb.
  • Microsoft FolderShare – the same as the previous one but from Microsoft. Requires a specified application to be installed. Files are stored on your computer but the application provide access to it from the other ones. So again, both computers must be on in order to access shared files.

During those unsuccessful attempts to get a bit of happiness with all that stuff I suddenly realized what I actually wanted. It was simple and genius at the same time: all I wanted is to have on both computers a folder that can automatically synchronizes with some external internet storage. No more.

So my next step was to find an internet service of such kind. But no luck. Actually, there are tons of internet services which provides you with backup capabilities of any sort but not with auto synchronization. Moreover, I started to think that there is no such service and I had to invent my own one. 
Finally, after fruitless searches I found one, but it was worth hours of googling. In fact, even google couldn’t help me as I found the answer in Wikipedia =).

So the solution is – Dropbox! It does exactly what I want, simply syncs a folder in you computer with a cloud, so there is no any necessity to keep your computer working after the sync procedure is completed. It listens to the file system events and uploads updated files immediately. You don’t have to do anything special, just install, configure and that’s it! I really loved the service. It helps to forget about sync problem and concentrate on something really important. It provides free of charge account with 2 Gb limit and it seems that it is enough for me, at least for now. There is a small video presentation on the main page, so I suppose that it is worth watching.

Don’t get me wrong, this is not an advertisement of any kind.  I decided to write the post just because I really, really impressed by the finding. Hope you’ll like it too. They say – “Happy dropboxing!” =).

Sunday, February 7, 2010

A code quality assessment concept

Alex Ilyin shares an interesting concept of code quality assessment. Don’t miss it. The idea is quite fresh and promising.
The only minus that I can see is that the actual realization might be a bit time consuming.

Saturday, January 23, 2010

Ayende on Dependency Injection

Here is another post from Ayende, this time on rejecting Dependency Injection inversion. It is worth reading and highly recommended for those, who don’t like the very idea of IoC usage. For example, Alex Ilyin is from that camp. Recently we had quite interesting conversation on this topic in comments to this post.

Updates on the development process

The beginning of 2010 year was quite busy for the entire DataObjects.Net 4 team. One part of it headed with Alex Yakunin, has been busy with the late DataObjects.Net 4.1 release (which in fact still haven’t been shipped), the other has been working hard on the upcoming DataObjects.Net 4.2 release.

While other developers from the latter part have been working on full-text search, object-to-object mapper and other features from 4.2, personally I was working on highly demanded by customers SQL Server Compact Edition 3.5 support. The work is already done, CE support related code was committed and is being tested by our CI server during the last 2 days. The feature is going to be included into 4.2 release. As for Sql Server CE, it has a huge number of restrictions and I’m going to list all of them in one of the future posts. To sum up, it can replace its big brother (Sql Server 2005/2008) only partially.

Speaking about the upcoming DO.Net 4.2 release, we are planning to make a stable Release Candidate at the end of the January (at the beginning of the February) and deliver DO.Net 4.2 final in the middle of the February, so stay tuned.

As for me, I’ve finished working on 4.2 branch and there is a high possibility that I’ll be busy during the next 2 or 3 months with another project, not connected with DataObjects.Net development at all. The project is going to be very complicated and, as it usually happens, has very limited time-frame, but I hope that my participation will help a lot/a bit. My role will be mainly as business analyst/system architecture. I’m preparing myself for working on endless Word documents, requirements, UML diagrams, precedents, etc. So wish me good luck. =)

However, if I have enough time I’ll keep on posting some regular notes on DO.Net development process.

Monday, January 18, 2010

A frank confession

Alex Ilyin lifts the curtain on terrifying details of DataObjects.Net 4 development process.