Developping for the translation industry RSS 2.0

 Tuesday, May 06, 2008

This code example sets the permission to create files and update them in a folder for a particular user but doesn’t propagate these permissions to the subfolders.


using System.Security.AccessControl;


System.IO.DirectoryInfo folderInfo = new System.IO.DirectoryInfo(folder);

DirectorySecurity folderSecurity = folderInfo.GetAccessControl();


FileSystemAccessRule rule =

      new FileSystemAccessRule(


      FileSystemRights.ReadAndExecute |

        FileSystemRights.AppendData |

        FileSystemRights.CreateFiles |








Tuesday, May 06, 2008 5:52:15 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.NET | C# | Code Snippet
 Thursday, May 01, 2008

The Office Labs at Microsoft gave us a nice (and free) product.

Community Clips is a free tool that can be used to do screencasts and help videos.  It integrated directly in the quick access bar in office 2007 applications and can also be used outside of these applications with the tray icon it creates.

It generates very lightweight .wmv files and is really easy to use.


Thursday, May 01, 2008 6:24:19 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Friday, February 29, 2008

Originally taken from

Programming is like sex because :

  • One mistake and you have to support it for the rest of your life. (Michael Sinz)
  • Once you get started, you'll only stop because you're exhausted.
  • It often takes another experienced person to really appreciate what you're doing.
  • Conversely, there's some odd people who pride themselves on their lack of experience.
  • You can do it for money or for fun.
  • If you spend more time doing it than watching TV, people think you're some kind of freak.
  • It's not really an appropriate topic for dinner conversation.
  • There's not enough taught about it in public school.
  • It doesn't make any sense at all if you try to explain it in strictly clinical terms.
  • Some people are just naturally good.
  • But some people will never realize how bad they are, and you're wasting your time trying to tell them.
  • There are a few weirdos with bizarre practices nobody really is
    comfortable with.
  • One little thing going wrong can ruin everything.
  • It's a great way to spend a lunch break.
  • Everyone acts like they're the first person to come up with a new technique.
  • Everyone who's done it pokes fun at those who haven't.
  • Beginners do a lot of clumsy fumbling about.
  • You'll miss it if it's been a while.
  • There's always someone willing to write about the only right way to do things.
  • It doesn't go so well when you're drunk, but you're more likely to do it.
  • Sometimes it's fun to use expensive toys.
  • Other people just get in the way.
Friday, February 29, 2008 4:51:24 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Thursday, February 07, 2008

The company where I work is currently hiring.  We’re searching for two superstar C# developers for a Research and Development project.

So, if you live near Montreal (Canada) or wish to move here and want to contribute to a great team, send me your CV at and I’ll contact you individually for more details.


Thursday, February 07, 2008 9:23:01 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Thursday, December 20, 2007

If you’re using SQL Server 2005, you probably have encountered this error at least once.  When people see this error, they may not know where to start searching.  This post is a recap of every possible cause to this problem (that I know of).

The error message you get is :

An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connection. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

The possibles causes are:

Server accessibility and availability:

  • Depending on your connection type, make sure that TCP/IP or Named Pipes are enabled in the Surface Area Configuration tool.
  • Also make sure that TCP/IP or Named Pipes are enabled in the SQL Server Configuration Manager.
  • Make sure that you can ping the server from the client.
  • Make sure that your SQL Server is started (obvious but still needs to be on the list).

Connection String:

  • You should also double check your connection string to be sure that there is not a typo in the server name or instance name.
  • You also should try both Server\Instance and Server\\Instance in your connection string.  This is because some applications convert \\ to \. 
  • You may also try to add the SQL port to the connection string (ex: Data Source=mysqlserver\myinstance,1433).

If you are using SQL Server Express:

  • Check that SQL Server Browser is enabled and is started in the SQL Server Configuration Manager.  If it was disabled, also make sure that you set the Start Mode to “Automatic”.

If your SQL Server is behind a Firewall:

  • Check that there is an exception in your firewall configuration to let the traffic through port 1433 (for SQL Server) and 1434 (for an UDP packet sent to get information on the SQL Instance like the protocol, the TCP port to use, etc).

 If your SQL Instance is on a cluster:

  • UDP packets are dropped in some cases when dealing with an instance on a cluster.  This is a known issue and I don’t know if Microsoft will do something about it.  For more details and workarounds, you can go here, here or here.

if you’re trying to connect to your SQL Server with an ASP.NET application:

  • Make sure that the version of the .NET Framework loaded in IIS on the server for this specific Web Site is the right one (I experienced this error when I deployed an application built with the version 2.0 Framework on a web server with 1.1 loaded by default).
  • The process account of the ASP.NET application must have rights to connect to the SQL Server database.

This list may not be complete. So if you know another cause or element that needs to be checked for this particular scenario, drop me a line at and I’ll update this post.

Thursday, December 20, 2007 5:37:05 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Wednesday, December 19, 2007

Jeff Atwood recently posted on the topic of sorting strings in a more natural order that the default string sorting gives us.  His main point is, when we’re dealing with numbers, a simple alphabetic sorting doesn’t cut it.

So. just for fun, here’s my little C# 2.0 Implementation of a more human-friendly sorter.


public class FriendlySorter<T> : IComparer<T>


    public int Compare(T x, T y)


        if (x == null || y == null) return 0;

        if (x.ToString() == y.ToString()) return 0;


        string[] left = Regex.Split(x.ToString(), "([0-9]+)");

        string[] right = Regex.Split(y.ToString(), "([0-9]+)");


        int index = 0;


        while (true)


            while (left[index] == right[index]) index++;


            if (left.Length == index && right.Length == index) return 0;

            if (left.Length <= index) return -1;

            if (right.Length <= index) return 1;




                return (int.Parse(left[index]) - int.Parse(right[index]));




                int CompareResult = String.Compare(left[index], right[index]);

                if (CompareResult != 0) return CompareResult;








The following code :

List<string> list = new List<string>();


list.Add("Track 1 : abc");

list.Add("Track 2 : abc");

list.Add("Track 10 : abc");

list.Add("Track 5 : abc");

list.Add("Track 11 : abc");

list.Add("Track 22 : abc");

list.Add("Track 9 : abc");


list.Sort(new FriendlySorter<string>());


Will produce the results :


For small sets the performance is Ok.  But when dealing with a larger amount of data (1000+ items), the sorting performance drops a lot (I currently have 5 seconds to sort 1000 random elements).  I will probably try to enhance it in the future and update this post.

Happy holidays !

Wednesday, December 19, 2007 6:42:12 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.NET | C# | Code Snippet
 Wednesday, November 28, 2007

Visual Studio 2008 is a great tool.  But there is one very annoying point. The bad news of the day is that, if you tried the pre-release version of Visual Studio 2008, there are a whooping 22 steps needed to un-install it.

Needless to say that it made me really cranky when I found about this.  I guess it's the price to pay when you are an early adopter..

Wednesday, November 28, 2007 11:20:34 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Thursday, November 22, 2007

Some complex queries involving more than one layer of calculations cannot be easily done in SQL.  Let’s say you need to compute the average number of sales per customer.  Your first thoughts may be something in the lines of :


But when you try to execute this kind of query, you will get an error message looking like this :

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

At this point, your instinct should tell you that the average of sales per customer should be something relatively easy to compute using SQL.  Some folks use temporary tables as a workaround to this limitation.  This solution is very bad for your query performance, especially when you have to deal with large databases.  The flow for such a task is :

1– Create a new temporary table to hold the computed values.

2– Insert the values in the new table.

3– Select the value you need from the temporary table.

4– Delete the temporary table.

The easier way that’s a lot faster both to write and to execute is to use derived tables.

SELECT AVG(number_of_sales) FROM (SELECT COUNT(SALE_ID) AS number_of_sales FROM SALES GROUP BY CUSTOMER_ID) dt_sales

The magic here lies in the FROM part.  The FROM keyword can use tables OR derived tables.  A derived table is simply created by writing the query and giving it an alias (in my examplen it is dt_sales).  Derived tables are created only in memory and thus are a lot faster than on-disk temporary tables.

Derived tables can be used exactly as regular database tables.  For example, you can make joins between them or between regular tables and derived tables.

Thursday, November 22, 2007 1:13:09 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -

About the author/Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2019
Stanislas Biron
Sign In
Total Posts: 135
This Year: 0
This Month: 0
This Week: 0
Comments: 1
All Content © 2019, Stanislas Biron