Developping for the translation industry RSS 2.0

 Tuesday, October 23, 2012

In early 2011, a reporter at PC World did a series of articles on Google Docs, and he took a close look at their claim that they can “easily translate documents into 53 different languages.” He asked his bilingual Twitter followers for help, sending them an English document and its Google Docs translation and asking them what they thought.

The results were hit or miss. English and French was passable :

 "I'd give the translation 7 on a scale from 1 to 10. I would not use such a service in a professional setting, although it gives a good general idea of the text."

But English and Hebrew was “one big disaster.”

My Hebrew-speaking volunteer said, "Sorry to say, but, in general I can describe the translation into Hebrew as "one big disaster". In 95 percent it is just unreadable (not only "hard to understand")."

He also tested Arabic, Spanish and probably several other languages. He summed up the results by saying, “Suffice it to say, I wouldn’t blindly trust any translation done by Google Docs. Obviously, the translations feature in Google Docs needs some work, to be, at least, understandable.

In summary, if your business model is even marginally dependent on brand image, you should think twice about using those “free” translation services. A professional translation company is always the best way to go.

Other posts:

Origin of the punctuation marks we use everyday

Google Translator Hacked

In the news: Google will allow users to opt-out of Analytics tracking

US Investigators Pinpoint Author Of Google Attack Code

Password aren't a good defense?

Tuesday, October 23, 2012 10:58:51 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | Language | Language Industry
 Tuesday, March 06, 2012

Question Mark ?
Origin: When early scholars wrote in Latin, they would place the word questio – meaning “question” – at the end of a sentence to indicate a query. To conserve valuable space, writing it was soon shortened to qo, which caused another problem – readers might mistake it for the ending of a word. So they squashed the letters into a symbol: a lowercased q on top of an o. Over time the o shrank to a dot and the q to a squiggle, giving us our current question mark.

Exclamation Point !
Origin: Like the question mark, the exclamation point was invented by stacking letters. The mark comes from the Latin word io, meaning “exclamation of joy.” Written vertically, with the i above the o, it forms the exclamation point we use today.

Equal Sign =
Origin: Invented by Welsh mathematician Robert Recorde in 1557, with this rationale: “I will settle as I doe often in woorke use, a paire of paralleles, or Gmowe [i.e., twin] lines of one length, thus : , bicause noe 2 thynges, can be more equalle.” His equal signs were about five times as long as the current ones, and it took more than a century for his sign to be accepted over its rival: a strange curly symbol invented by Descartes.

Ampersand &
Origin: This symbol is stylized et, Latin for “and.” Although it was invented by the Roman scribe Marcus Tullius Tiro in the first century B.C., it didn’t get its strange name until centuries later. In the early 1800s, schoolchildren learned this symbol as the 27th letter of the alphabet: X, Y, Z, &. But the symbol had no name. So, they ended their ABCs with “and, per se, and” meaning “&, which means ‘and.’” This phrase was slurred into one garbled word that eventually caught on with everyone: ampersand.

Octothorpe #
Origin: The odd name for this ancient sign for numbering derives from thorpe, the Old Norse word for a village or farm that is often seen in British placenames. The symbol was originally used in mapmaking, representing a village surrounded by eight fields, so it was named the octothorp.

Dollar sign $
Origin: When the U.S. government begin issuing its own money in 1794, it used the common world currency – the peso – also called the Spanish dollar. The first American silver dollars were identical to Spanish pesos in weight and value, so they took the same written abbreviations: Ps. That evolved into a P with an s written right on top of it, and when people began to omit the circular part of the p, the sign simply became an S with a vertical line through it.

This comes from a book named “Uncle John’s Supremely Satisfying Bathroom Reader”


Other posts:

Some funny cross cultural marketing and translation mistakes part 1 and part 2

.NET String Format Syntax Cheat Sheet

Google Translator has been Hacked

Information on The New Canadian Translation Standard

Tuesday, March 06, 2012 8:53:13 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Friday, July 30, 2010

Genetic algorithms are a form of evolutionary computation, a branch of artificial intelligence that focuses on evolving effective or optimal solutions to difficult problems, based on the biological theory of evolution.

Genetic algorithms are, at their core, a search/optimisation technique. They are a way of finding maximum/minimum solutions to problems and, can be effective when there is no algorithmic solution to the problem. An example here would be the ‘Traveling Salesman’ problem.

Genetic algorithms work by taking an initial population of potential solutions (referred to as individuals), selecting a subset of the population that has the highest fitness then using that subset to generate a second generation. From the second generation again a subset with the highest fitness is selected and used to generate a third generation. This repeats until either the ‘fittest’ individual is considered a good enough solution, or until a certain number of generations have passed.

There are advantage to using genetic algorithms to solve problems over more traditional methods like hill climbing.

  • Genetic algorithms can quickly produce good solutions though they may take a lot of time to find the best solution. This is a benefit when the problem is such that the absolute best solution is not necessary, just one that is ‘good enough’
  • They are not susceptible to getting trapped by local maxima.
  • They do not work on the entire search space one potential solution at a time, but rather work on populations of potential solutions, focusing towards more optimal areas of the search space.

A genetic algorithm will almost always find an optimal solution, given enough time. The main downside is that they may take a lot of time to find that optimal solution.

Components of a Genetic Algorithm

There are two main critical parts in setting up a genetic algorithm for a problem.

  • The encoding of the potential solutions into a form where they can be operated on.
  • The fitness function which defines which individuals are better than others, which are closer to the maximum that is being searched for.

Most of the design work when using genetic algorithms goes into those two problems.


Encoding is the process of taking all the values that make up a potential solution and turning them into a form that the genetic algorithm can operate on.

The selection of an encoding is of utmost importance to the effectiveness of the entire process and a poor representation can make the entire problem much harder than it should. Unfortunately there has been little academic work done on the process of designing representations.

Often for genetic algorithms, the end result of the encoding will be a binary string. There are other variations of evolutionary computation that use other representations, from the arrays of real numbers used by evolutionary strategies to the code trees used by genetic programming.

Fitness function

Depending on the problem, the fitness function can be trivial to write or near-impossible. The design of the fitness function is completely based on the problem that is being solved.

There are two important considerations for a fitness function.

  • It must be deterministic.
  • It must be fast

If the fitness of an individual is assessed twice, it must come to the same value1. If the fitness function could return different values for the same individual, then it is of no use in determining the fittest individuals in the population and hence the genetic algorithm will not be able to identify the best solution to the problem.

The fitness of each individual is assessed at least once in each generation. The calculation of the fitness function is usually the most time consuming part of the entire process and the longer the fitness function takes to run, the longer the entire process is run

(1) There are cases where the fitness of an individual may depend on external factors which change over time. Hence a fitness function may give different values for one individual if calculated at different times. Genetic algorithms in a changing environment are a little beyond the scope of this entry.

Evolution Process

In order to create a new generation, the fittest individuals from the previous generation are taken and used to generate the next generation. There are two main operators that are used to generate a generation from the previous one. Crossover and mutation.


Crossover involved taking two individuals, splitting each one’s encoded string and swapping parts to generate two new individuals.

Say we had two individuals with the following encoded strings (spaces added for clarity)
0000 0001 1111 1110
0101 1010 1100 0011
and we chose the splitting point for the crossover after the 4th bit, the resulting strings after the crossover will be
0000 1010 1100 0011
0101 0001 1111 1110

In genetic algorithms crossover is the primary operator used. What I described here was a single crossover. There are a number of other variations that can be used.


Mutation is an operator applied to a single individual. It’s usually applied after crossover has generated new individuals. Mutation involves flipping a single bit somewhere in the encoded string.

Let’s take the two individuals that were generates by the crossover earlier and apply a random mutation to each
0000 1010 1100 0011
0101 0001 1111 1110
0000 1010 1101 0011
0101 0001 1011 1110

In genetic algorithms mutation is very seldom applied and only a small percentage of individuals in a generation will be affected by the mutation operator.


As a quick example let’s manually evolve a simple function to see how the whole thing works.

Let’s say I have an array of 4 numbers (call it num) between 0 and 15. I want to know what values give me the best value for the following.


I know, that’s simple enough that we could work out the optimal solution just by eye. Not the point. This is enough to do a quick and effective demo with.

I’m going to encode that by simply converting the numbers in the array to binary and concatenating the binary representations of the 4 numbers (spaces just added for clarity). The fitness function is already defined. I’m going to start with an initial population of eight individuals.

1111 1111 1100 1110 – fitness = (15-15-12+14) = 2
0101 1010 1100 0011 – fitness = (9-10-12+3) = –10
1011 0111 0011 1111 – fitness = (11-7-3+15) = 16
1111 1001 1010 0011 – fitness = (15-9-10+3) = -1
1010 1010 1010 1010 – fitness = (10-10-10+10) = 0
1000 0010 0111 0110 – fitness = (8-2-7+6) = 5
0000 0001 1111 1110 – fitness = (0-1-15+14) = -2
1010 0101 0010 0101 – fitness = (10-5-2+5) = 8

From this I’m going to take the 4 individuals with the highest fitness, use crossover operations (with the crossover point exactly in the middle) between them until I have 8 individuals for the 2nd generation and then apply a single bit mutation to one of the individuals (detailed steps left as an exercise for the reader)

1111 1111 0011 1111 – fitness = (15-15-3+15) = 12
1011 0111 1100 1110 – fitness = (11-7-12+14) = 6
1111 1011 0010 0101 – fitness = (15-11-2+5) = 7
1010 0101 1100 1110 – fitness = (10-5-7+6) = 4
1011 0111 0111 0110 – fitness = (11-7-7+6) = 3
1000 0010 0011 1111 – fitness = (8-2-3+15) = 18
1010 0101 0111 0110 – fitness = (10-5-7+6) = 4
1000 0010 0010 0101 – fitness = (8-2-2+5) = 9

We can already see an improvement. The average and maximum fitness is much higher than for the first generation. I’ll do one more generation in this example, again taking the 4 fittest individuals, crossing over to generate 8 new individuals and then applying a single bit mutation to two individuals. This time however, the crossover point will between the 4th and 5th bit.

1000 1111 0011 1111 – fitness = (8-15-3+15) = 5
1111 0010 0011 1111 – fitness = (15-2-3+15) = 25
1000 1011 0010 0101 – fitness = (8-11-2+5) = 0
1111 0010 0011 1111 – fitness = (15-2-3+15) = 25
1111 0010 1010 0101 – fitness = (15-2-10+5) = 8
1000 0111 0011 1111 – fitness = (8-7-3+15) = 13
1111 0010 0010 0101 – fitness = (15-2-2+5) = 16
1000 1011 0010 0101 – fitness = (8-11-2+5) = 0

I think that’s enough for this example. We’re getting fairly close to the best possible solution (15,0,0,15), close enough to see how this works. The population size was very low, that’s why there are duplicates appearing in the results of the crossover. With a larger search space there would be a lot more diversity.

I hope that anyone still reading found this brief diversion into the realms of AI interesting.


Friday, July 30, 2010 10:27:32 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | Artificial Intelligence
 Tuesday, June 15, 2010

How can you can make your site run faster? Google has launched a firefox extension called Page Speed which webmasters can use to evaluate the performance of their web pages and to get suggestions on how to improve them.

Page Speed is available as an open-source Firefox Add-on. However it requires another addon to work called Firebug, which integrates with Firefox and lets you edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.

Page Speed will perform several tests on your web server configuration and front-end code based on a set of best practices for improved web page performance, and will then provide helpful suggestions on how to improve its performance. It will not only make your site faster, but also reduce your bandwidth and hosting costs.

Here is how a sample site speed test error report looks like

Page Speed Test


While you give your site a try with Google Page Speed, you can also check out Yahoo! Yslow, another Firefox extension that works with Firebug to identify website speed performance issues.

Other Posts:

Tools for Web developers

8 easy tips to drive traffic from search engines to your site

What are your customers saying about you online?

Tuesday, June 15, 2010 10:05:09 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | SEO | Tools
 Tuesday, May 04, 2010

Some people are really language gymnasts. Georges Perec, who could write a whole 300 pages novel without ever using the letter e, also wrote a palindrome of more than 6000 characters. At the time of this writing, it can also be found at (which is, of course, a palindromic URL, in case you did not notice). This is the palindrome in French. Enjoy:

Trace l'inégal palindrome. Neige. Bagatelle, dira Hercule. Le brut repentir, cet écrit né Perec. L'arc lu pèse trop, lis à vice versa.

Perte. Cerise d'une vérité banale, le Malstrom, Alep, mort édulcoré, crêpe porté de ce désir brisé d'un iota. Livre si aboli, tes sacres ont éreinté, cor cruel, nos albatros. Être las, autel bâti, miette vice versa du jeu que fit, nacré, médical, le sélénite relaps, ellipsoïdal.

Ivre il bat, la turbine bat, l'isolé me ravale : le verre si obéi du Pernod -- eh, port su ! -- obsédante sonate teintée d'ivresse.

Ce rêve se mit -- peste ! -- à blaguer. Beh ! L'art sec n'a si peu qu'algèbre s'élabore de l'or évalué. Idiome étiré, hésite, bâtard replié, l'os nu. Si, à la gêne secrète -- verbe nul à l'instar de cinq occis --, rets amincis, drailles inégales, il, avatar espacé, caresse ce noir Belzebuth, oeil offensé, tire !

L'écho fit (à désert) : Salut, sang, robe et été.


Adam, rauque ; il écrit : Abrupt ogre, eh, cercueil, l'avenir tu, effilé, génial à la rue (murmure sud eu ne tire vaseline séparée ; l'épeire gelée rode : Hep, mortel ?) lia ta balafre native.

Litige. Regagner (et ne m'...).

Ressac. Il frémit, se sape, na ! Eh, cavale ! Timide, il nia ce sursaut.

Hasard repu, tel, le magicien à morte me lit. Un ignare le rapsode, lacs ému, mixa, mêla : Hep, Oceano Nox, ô, béchamel azur ! Éjaculer ! Topaze !

Le cèdre, malabar faible, Arsinoë le macule, mante ivre, glauque, pis, l'air atone (sic). Art sournois : si, médicinale, l'autre glace (Melba ?) l'un ? N'alertai ni pollen (retêter : gercé, repu, denté...) ni tobacco.

Tu, désir, brio rimé, eh, prolixe nécrophore, tu ferres l'avenir velu, ocre, cromant-né ?

Rage, l'ara. Veuglaire. Sedan, tes elzévirs t'obsèdent. Romain ? Exact. Et Nemrod selle ses Samson !

Et nier téocalli ?

Cave canem (car ce nu trop minois -- rembuscade d'éruptives à babil -- admonesta, fil accru, Têtebleu ! qu'Ariane évitât net. Attention, ébénier factice, ressorti du réel. Ci-gît. Alpaga, gnôme, le héros se lamente, trompé, chocolat : ce laid totem, ord, nil aplati, rituel biscornu ; ce sacré bedeau (quel bât ce Jésus !). Palace piégé, Torpédo drue si à fellah tôt ne peut ni le Big à ruer bezef.

L'eugéniste en rut consuma d'art son épi d'éolienne ici rot (eh... rut ?). Toi, d'idem gin, élèvera, élu, bifocal, l'ithos et notre pathos à la hauteur de sec salamalec ?

Élucider. Ion éclaté : Elle ? Tenu. Etna but (item mal famé), degré vide, julep : macédoine d'axiomes, sac semé d'École, véniel, ah, le verbe enivré (ne sucer ni arrêter, eh ça jamais !) lu n'abolira le hasard ?

Nu, ottoman à écho, l'art su, oh, tara zéro, belle Deborah, ô, sacre ! Pute, vertubleu, qualité si vertu à la part tarifé (décalitres ?) et nul n'a lu trop s'il séria de ce basilic Iseut.

Il à prié bonzes, Samaritain, Tora, vilains monstres (idolâtre DNA en sus) rêvés, évaporés : Arbalète (bètes) en noce du Tell ivre-mort, émeri tu : O, trapu à elfe, il lie l'os, il lia jérémiade lucide. Pétard ! Rate ta reinette, bigleur cruel, non à ce lot ! Si, farcis-toi dito le coeur !

Lied à monstre velu, ange ni bête, sec à pseudo délire : Tsarine (sellée, là), Cid, Arétin, abruti de Ninive, Déjanire...

Le Phenix, ève de sables, écarté, ne peut égarer racines radiales en mana : l'Oubli, fétiche en argile.


Prix : Ile de la Gorgone en roc, et, ô, Licorne écartelée, Sirène, rumb à bannir à ma (Red n'osa) niére de mimosa : Paysage d'Ourcq ocre sous ive d'écale ; Volcan. Roc : tarot célé du Père.


Silène bavard, replié sur sa nullité (nu à je) belge : ipséité banale. L' (eh, ça !) hydromel à ri, psaltérion. Errée Lorelei...

Fi ! Marmelade déviré d'Aladine. D'or, Noël : crèche (l'an ici taverne gelée dès bol...) à santon givré, fi !, culé de l'âne vairon.

Lapalisse élu, gnoses sans orgueil (écru, sale, sec). Saluts : angiome. T'es si crâneur !

* * *

Rue. Narcisse ! Témoignas-tu ! l'ascèse, là, sur ce lieu gros, nasses ongulées...

S'il a pal, noria vénale de Lucifer, vignot nasal (obsédée, le genre vaticinal), eh, Cercle, on rode, nid à la dérive, Dèdale (M... !) ramifié ?

Le rôle erre, noir, et la spirale mord, y hache l'élan abêti : Espiègle (béjaune) Till : un as rusé.

Il perdra. Va bene.

Lis, servile repu d'électorat, cornac, Lovelace. De visu, oser ?

Coq cru, ô, Degas, y'a pas, ô mime, de rein à sonder : à marin nabab, murène risée.

Le trace en roc, ilote cornéen.

O, grog, ale d'elixir perdu, ô, feligrane ! Eh, cité, fil bu ! ô ! l'anamnèse, lai d'arsenic, arrérage tué, pénétra ce sel-base de Vexin. Eh, pèlerin à (Je : devin inédit) urbanité radicale (elle s'en ira...), stérile, dodu.

Espaces (été biné ? gnaule ?) verts.

Nomade, il rue, ocelot. Idiot-sic rafistolé : canon ! Leur cruel gibet te niera, têtard raté, pédicule d'aimé rejailli.

Soleil lie, fléau, partout ire (Métro, Mer, Ville...) tu déconnes. Été : bètel à brasero. Pavese versus Neandertal ! O, diserts noms ni à Livarot ni à Tir ! Amassez.


Pali, tu es ici : lis abécédaires, lis portulan : l'un te sert-il ? à ce défi rattrapa l'autre ? Vise-t-il auquel but rêvé tu perças ?

Oh, arobe d'ellébore, Zarathoustra ! L'ohcéan à mot (Toundra ? Sahel ?) à ri : Lob à nul si à ma jachère, terrain récusé, nervi, née brève l'haleine véloce de mes casse-moix à (Déni, ô !) décampé.

Lu, je diverge de ma flamme titubante : une telle (étal, ce noir édicule cela mal) ascèse drue tua, ha, l'As.

Oh, taper ! Tontes ! Oh, tillac, ô, fibule à reve l'Énigme (d'idiot tu) rhétoricienne.

Il, Oedipe, Nostradamus nocturne et, si né Guelfe, zébreur à Gibelin tué (pentothal ?), le faiseur d'ode protège.

Ipéca... : lapsus.

Eject à bleu qu'aède berça sec. Un roc si bleu ! Tir. ital. : palindrome tôt dialectal. Oc ? Oh, cep mort et né, mal essoré, hélé. Mon gag aplati gicle. Érudit rossérecit, ça freine, benoit, net.

Ta tentative en air auquel bète, turc, califat se (nom d'Ali-Baba !) sévit, pure de -- d'ac ? -- submersion importune, crac, menace, vacilla, co-étreinte...

Nos masses, elles dorment ? Etc... Axé ni à mort-né des bots. Rivez ! Les Etna de Serial-Guevara l'égarent. N'amorcer coulevrine.

Valser. Refuter.

Oh, porc en exil (Orphée), miroir brisé du toc cabotin et né du Perec : Regret éternel. L'opiniâtre. L'annulable.

Mec, Alger tua l'élan ici démission. Ru ostracisé, notarial, si peu qu'Alger, Viet-Nam (élu caméléon !), Israël, Biafra, bal à merde : celez, apôtre Luc à Jéruzalem, ah ce boxon ! On à écopé, ha, le maximum

Escale d'os, pare le rang inutile. Métromane ici gamelle, tu perdras. Ah, tu as rusé ! Cain ! Lied imité la vache (à ne pas estimer) (flic assermenté, rengagé) régit.

Il évita, nerf à la bataille trompé.

Hé, dorée, l'Égérie pelée rape, sénile, sa vérité nue du sérum : rumeur à la laine, gel, if, feutrine, val, lieu-créche, ergot, pur, Bâtir ce lieu qu'Armada serve : if étété, éborgnas-tu l'astre sédatif ?

Oh, célérités ! Nef ! Folie ! Oh, tubez ! Le brio ne cessera, ce cap sera ta valise ; l'âge : ni sel-liard (sic) ni master-(sic)-coq, ni cédrats, ni la lune brève. Tercé, sénégalais, un soleil perdra ta bétise héritée (Moi-Dieu, la vérole !)

Déroba le serbe glauque, pis, ancestral, hébreu (Galba et Septime-Sévère). Cesser, vidé et nié. Tetanos. Etna dès boustrophédon répudié. Boiser. Révèle l'avare mélo, s'il t'a béni, brutal tablier vil. Adios. Pilles, pale rétine, le sel, l'acide mercanti. Feu que Judas rêve, civette imitable, tu as alerté, sort à blason, leur croc. Et nier et n'oser. Casse-t-il, ô, baiser vil ? à toi, nu désir brisé, décédé, trope percé, roc lu. Détrompe la. Morts : l'Ame, l'Élan abêti, revenu.

Désire ce trépas rêvé : Ci va ! S'il porte, sépulcral, ce repentir, cet écrit ne perturbe le lucre : Haridelle, ta gabegie ne mord ni la plage ni l'écart.


Great stuff!


Other posts:

Once in a while, stop and pay attention...

List of Crazy Laws in the United States

SQL Injection humor

Facts and Figures about the Language Industry

Tuesday, May 04, 2010 2:25:37 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Monday, February 22, 2010

Scott Hanselman recently has published the survey results of : What .NET Framework features do you use?

Quite interesting numbers! It interesting to see that such a high percentage of the respondants still use winforms. It’s also interesting to note that the number of Silverlight users is higher than the number of WPF users.

The survey also shows that WebForms, Ajax, WCF and Linq2SQL are clearly the technologies of choice as of now.


Other posts:

How-To: hiring and managing geeks

Sorting strings for real people - A human-friendly IComparer

How to set NTFS permissions using C# 2005

How to Use Active Directory to authenticate users in C#

How to find monday of the current week using T-SQL

Monday, February 22, 2010 11:13:35 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Wednesday, February 10, 2010

PhotographerI like to use to use images to help illustrate the theme or point of a blog post. It’s a proven “best practice” in blogging and I highly recommend that every blogger do it.

One trick for easily finding and properly using images in your blog posts is to search the creative commons licensed photos on the photo sharing site Flickr.

So, what’s Creative Commons?

Creative Commons is a non-profit organization that has created a standardized set of tools for granting various levels of permission for people to use creative works freely. The author or in this case photographer of the works designates a type of license and then Flickr allows you to sort through and find only photos that are free to be used for blog posts. I choose to use photos that carry the attribution/share alike license. This means that I may use the image here as long as I attribute the image to the Flickr user’s account where I found it. Here’s Flickr’s description of CC licenses.

So, here’s how to find and grab great images.

  1. Surf to the Flickr Creative Commons Search Page – all images you search for here are free to use with proper attribution
  2. Search for a specific phrase or concept and choose the image that fits
  3. Click on “all sizes” and choose the size you wish to post on your blog
  4. Right click the image and choose “copy image location” – use this path to paste into your blog post where you want the image to appear
  5. Somewhere in your post add the words – Image credit and the link to the Flickr account where you found the image (see at the bottom of the post)

To be a good photo user make sure you add your own images and make the available through the proper CC license – you can make this a default Flickr account setting.

Image credit: dashitnow

Other Posts:

The Best Damn Web Marketing Checklist, Period!

What Are Customers Saying About You Online?

8 easy tips to drive traffic from search engines to your site

Wednesday, February 10, 2010 9:35:46 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Friday, February 05, 2010

You can place a robots.txt file in the root of your site to help inform search engines and other bots about the areas of your site that you don’t want them to access. For example, you may not want bots to access the content of your images folder: 

User-agent: *
Disallow: /images/

You can also provide instructions for particular bots. For example, to exclude Google image search from your entire site, use this: 

User-agent: Googlebot-Image
Disallow: /

The robots.txt standard is unfortunately very limited; it only supports the User-agent and Disallow fields, and the only wildcard allowed is when you specify it by itself in User-agent, as in the previous example.

Google has introduced support for a couple of extensions to the robots.txt standard. First, you can use limited patterns in pathnames. You can also specify an Allow clause. Since those extensions are specific to Google, you should probably only use them with one of the Google user agents or with Googlebot, which all of its bots recognize.

For example, you can block PNG files from all Google user agents as follows: 

User-agent: Googlebot
Disallow: /*.png$

As with regular expressions, the asterisk means to match any sequence of characters, and the dollar sign means to match the end of the string. Those are the only two pattern matching characters that Google supports.

To disable all bots except for Google, use this: 

User-agent: *
Disallow: /

User-agent: Googlebot
Allow: /

To exclude pages with sort as the first element of a query string that can be followed by any other text, use this:

User-agent: Googlebot
Disallow: /*?sort

This clause will also work only woth the Google bots.


Other posts:

White House new Robots.txt

8 easy tips to drive traffic from search engines to your site

Huge List of Dumb and Crazy Laws in the United States

Tools for Web developers

Friday, February 05, 2010 2:26:11 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Tuesday, December 15, 2009


Here are some interesting facts and numbers about the language industry.

Language Services Market

  • The language services market is predicted to reach US$25 billion by 2013.
  • North American telephone interpreting providers account for 85% of the combined revenue of the Top 15 global providers.
  • The average year-over-year growth rate of the top 20 translation companies in 2007 was 26.68%.
  • The total market for outsourced interpreting services stood at US$2.5 billion in 2007, with telephone interpreting worth US$700 million.
  • 70% of LSPs employ between one and 10 people, 11% employ between 20 to 99, and the rest employ 101 or more.  Only six firms worldwide employ more than 1,000 people.
  • Nearly 90% of companies outsource some or all of their translation and localization work.
  • In 2005, there were around 4,000 translation companies with more than five employees in the world; 450 of those were based in the United States.

Translation Technologies

  • 20% of medium-to-large LSPs offer a house brand of translation management.
  • 67% of language buyers say that a vendor’s automation capabilities are important.
  • Content that reaches 200,000 words (roughly 400 U.S. letter-size pages) triggers the need for a translation memory.


  • About 40% of translation buyers regularly buy from five or more suppliers, while 20% buy from only two.
  • Almost one-tenth of software firms fully outsource localization work to a language services provider, specialty coding house or offshore developer.
  • Only 26% of companies can formally measure and calculate the return on their localization investment.
  • 44% of translation buyers stayed with their vendors for five years or more, with the rest citing far longer relationships.
  • Three-quarters of the typical purchaser of translation services have been buyers for six years or less.

Global Marketing

  • It would take 83 languages to reach 80% of all the people in the world, and over 7,000 languages to reach everyone.
  • Websites offered in only one language can address at most 30% of the total online population.
  • Translating into 50 languages provides access to almost 96% of the world’s online residents.
  • 72.4% of consumers say they would be more likely to buy a product with information in their own language.
  • 56.2% of consumers say that the ability to obtain information in their own language is more important than price.
  • 72.1% of the consumers spend most or all of their time on sites in their own language.
  • English, French, Italian, German, Spanish and Japanese add up to 88% of the addressable online market.
  • More than 99% of what people write, say, or generate never leaves the language in which it was created.
  • Websites tailored linguistically and transactionally to the residents of one country can address, at most, 20% of the total world online population.
  • Over 70% of software suppliers localize new releases.
  • Only 12 of the top 100 global brands and just four of the top 50 U.S. online retailers translated a significant part of their corporate websites in Spanish.


Source: Common Sense Advisory

Tuesday, December 15, 2009 1:34:59 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
Business | General | Language Industry
 Monday, November 23, 2009

I use log4net in every applications I build that needs to have some sort of log. 

Most of the examples on the log4net site puts the configuration right in the App.config/Web.config file for the example application. Since they are simply example and not real-life scenarios, that’s not necessarily the best way to do it. For example, you may have a single log4net.config that you want to use in several projects or you simply want to stick log4net.config somewhere else to make those config files more readable.

The magic bit that at least I can't easily find and always forget is:

If you add an appSettings key called "log4net.Config" you can put an app-relative path to an external log4net.config file in there and everything will automatically configure itself using that.

It looks like this:

<?xml version="1.0"?>
    <add key="log4net.Config" value="log4net.config" />

That example puts the log4net.config file right in the root of the application. You could specify "config/log4net.config" to put it in a "config" subfolder. You don't even have to call the XmlConfigurator.Configure method or mark your assembly with an XmlConfiguratorAttribute or anything. Some voodoo magic happens in the background and it just works.


Other posts :

How to enumerate the Domain Controllers in the current Domain in C#

How to Create User Accounts in Active Directory using C#

How to restart a Windows service using C#

How to set NTFS permissions using C# 2005

Monday, November 23, 2009 10:21:14 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.NET | General | Tools
 Friday, February 13, 2009
“Beware of bugs in the above code; I have only proved it correct, not tried it.”
(Donald Knuth, 1977)

“It is practically impossible to teach good programming style to students that have had prior exposure to Basic; as potential programmers they are mentally mutilated beyond hope of regeneration.”

(Edsger W. Dijkstra, 1982)

“The question of whether computers can think is like the question of whether submarines can swim.”

(Edsger W. Dijkstra)

“The use of COBOL cripples the mind; its teaching should therefore be regarded as a criminal offense.”

(E.W. Dijkstra)

“Measuring programming progress by lines of code is like measuring aircraft building progress by weight.”

(Bill Gates)

“Software suppliers are trying to make their software packages more ‘user-friendly’…  Their best approach so far has been to take all the old brochures and stamp the words ‘user-friendly’ on the cover.”

(Bill Gates)

“Never trust a computer you can’t throw out a window.”

(Steve Wozniak)

“Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.”

(Stan Kelly-Bootle)

“Computers are like bikinis. They save people a lot of guesswork.”

(Sam Ewing)

“No matter how slick the demo is in rehearsal, when you do it in front of a live audience, the probability of a flawless presentation is inversely proportional to the number of people watching, raised to the power of the amount of money involved.”

(Mark Gibbs)

“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”

(Martin Golding)

Walking on water and developing software from a specification are easy if both are frozen.

(Edward V Berard)

Java is to JavaScript what Car is to Carpet


"If you want to set off and go develop some grand new thing, you don't need millions of dollars of capitalization. You need enough pizza and Diet Coke to stick in your refrigerator, a cheap PC to work on and the dedication to go through with it."

(John Carmack)

Software and cathedrals are much the same - first we build them, then we pray.


Friday, February 13, 2009 4:45:37 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | Humor
 Tuesday, February 03, 2009
This is a problem, which can be easily solved by children before entering elementary school. If you want to give it a try, please forget everything you have ever studied. Here it comes:

8809 = 6
7111 = 0
2172 = 0
6666 = 4
1111 = 0
3213 = 0
7662 = 2
9312 = 1
0000 = 4
2222 = 0
3333 = 0
5555 = 0
8193 = 3
8096 = 5
7777 = 0
9999 = 4
7756 = 1
6855 = 3
9881 = 5
5531 = 0

2581 = ?

Can you solve it ?
Others posts:
Tuesday, February 03, 2009 1:56:12 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
Challenge | General
 Monday, February 02, 2009

On the Financial Times’s blogs Tony Barber wrote this article about his recent experience of machine translation. After hearing a recommendation that bloggers should “try to use computer-generated translations” to provide foreign language versions of their own blogs he decided to see for himself and he put Google Translate to the test.

One section that was especially funny was taken from a Polish Newspaper and translated into English using Google Translate it says,

“A sign of the collapse of the French culture of the restaurant is visible on the streets of Paris rash of quick-service bar, offering generally pogardzane a few years ago and cheeseburgery hamburgers.”

Cheeseburgery Hamburgers — brilliant!

Monday, February 02, 2009 2:19:02 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | Humor
 Monday, January 19, 2009



 Want to call a meeting today?

Then first, stop and consider the hourly cost of the people that will be attending your meeting. You'll realize quickly that calling a meeting is very expensive since no productive work is done during that time. 

It's important to ensure that every person present and every minute of your meeting adds value. It’s equally important that your motivation for calling this meeting is justified and need a consensus of everyone attending. Don't invite people who won't participate but will simply report back to their boss or team (sending a copy of the meeting minutes by email will be a lot more effective). Also, don't call a meeting to tell people things that could be communicated by email or memo.

In fact, you should only call a meeting when actual decisions needs to be taken or something really needs to be discussed live with the attendees.

Then when you finally decide that you need to hold your meeting, make sure that:

  • You are prepared. People don’t like seeing the main speaker confused or ill-prepared.
  • You assign someone to the note-taking task. Everyone else can then actively participate, knowing that the full meeting notes will be emailed to them later that day.
  • You verify that everyone present has a good reason to be present.
  • You keep it short and sweet. A long, boring meeting is useless and energy-draining. The most effective meetings I've seen are the daily stand-up meetings in the Agile Methodology. They typically last from 5 to 15 minutes and still manage to get a lot done in that period of time.
Monday, January 19, 2009 5:08:27 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
Business | General
 Friday, January 16, 2009

JoshuabellA man sat at a metro station in Washington DC and started to play the violin; it was a cold January morning. He played six Bach pieces and his performance lasted about 45 minutes. During all that time, since it was rush hour, it was calculated that thousands of people went through the station, most of them on their way to work.

Three minutes went by and a middle aged man noticed there was musician playing. He slowed his pace and stopped for a few seconds -- then hurried to meet his schedule.

Then, maybe a minute later, the violinist received his first dollar tip from a woman who threw the money in his violin case and, without stopping or looking at the musician, continued to walk.

A few minutes later, someone leaned against the wall to listen to him, but the man looked at his watch and started to walk again. Clearly he was late for work.

The one who paid the most attention was a 3-year old boy...

His mother tried to rush him, but the boy stopped to look at the violinist. Finally the mother pushed hard and the child continued to walk turning his head all the time. Something interesting is that, every single time a child walked by the musician, he or she tried to stop and watch. And every single time, a parent rushed the kid away.

Some time later, a lady stopped and gave the musician a long hard look before walking on. It turns out that she didn’t even notice the music.  She were trying to figure out what he was doing there, how does this work for him, can he make much money, would it be better to start with some money in the case, or for it to be empty, so people feel sorry for him? She was analyzing it financially.

In the 45 minutes the musician played, only 6 people stopped and stayed for a while. About 20 gave him money but continued to walk their normal pace. He collected $32. When he finished playing and silence took over, no one noticed it. No one applauded, nor was there any recognition.

No one knew this but the violinist was Joshua Bell, one of the best musicians in the world. He played one of the most intricate pieces ever written with a violin worth 3.5 million dollars.

Two days before his playing in the subway, Joshua Bell sold out at a theater in Boston and the seats averaged $100.

This is a real story. Joshua Bell playing incognito in the metro station was organized by the Washington Post as part of an social experiment about perception, taste and priorities of people. The themes were: in a commonplace environment at an inappropriate hour: How do we perceive beauty? Do we stop to appreciate it? Do we recognize the talent in an unexpected context?

One of the possible conclusions from this experience could be:

If we do not have or take the time the time to stop and listen to one of the best musicians in the world playing the best music ever written, how many other things are we missing?

Want to be really innovative? Notice what's going on right in front of you and appreciate it.

Friday, January 16, 2009 5:06:43 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Wednesday, December 17, 2008

I’m taking a short blogging break for the hollidays.

Happy hollidays and see ya in 2009!

Wednesday, December 17, 2008 3:38:53 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Thursday, November 27, 2008

As a follow-up on my post on Bizspark, Microsoft’s initiative to provide startups with free versions of their software, here is DreamSpark

Basically, DreamSpark is the same thing as Bizspark but aimed at students all over the world. DreamSpark is simple, it's all about giving students Microsoft professional-level developer and design tools at no charge. DreamSpark enables students to download and use Microsoft developer, designer, gaming tools, Windows Server 2008 and more. In order to access the softwares available on DreamSpark, students only need to verify their student status once every 12 months.

The full list of software that is available for free on DreamSpark’s site is:

  • Visual Studio 2008 Professional Edition
  • Visual Studio 2005 Professional Edition
  • Expression Studio 2 (includes Web, Blend, Media and Design)
  • SQL Server 2008 Developer Edition
  • Windows Server 2008 Standard Edition
  • IT Academy Student Pass
  • Robotics Developers Studio 2008
  • SQL Server 2008 Express Edition
  • Visual Studio 2008 Express Edition
  • XNA Game Studio 2.0 (with 12-month Creators Club Student trial membership)
  • Virtual PC 2007

The Microsoft developer, designer and gaming tools available on DreamSpark are NOT 30-day trial versions; they’re the complete and full professional grade versions.

There is a little problem however. If you’re living in Canada like me (and probably in other places too), not every university is participating in this program.  Here is the list of the canadian’s universities that are participating as of today:

  • ISIC
  • McGill University
  • Queen’s University
  • Simon Fraser University
  • University of Alberta
  • University of Calgary
  • University of Gelph
  • University of Ottawa
  • University of Saskatchewan
  • University of Toronto
  • University of Windsor
  • York University

So, if you’re canadian and not a student of one of these universities, you can’t benefit from this program right now.  However, i’m sure that Microsoft is working on integrating more universities into their program.

If you want to have your university added to this program, or if you are a administrator of a university that isn’t currently on Microsoft’s list, go to this page to get more information about enrolling.

Thursday, November 27, 2008 2:16:58 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | News
 Wednesday, November 26, 2008

Here is my list of some great file hosting sites that make uploading and sharing files really simple.

You are welcome to share if you know more free file hosting services which our readers/viewers may like.

MediaFire - Free File Hosting

MediaFire - Free File Hosting Made Simple

With the free account, you get unlimited :

  • Downloads
  • Uploads
  • Bandwidth
  • Storage

The only downside to this service is the 100Mb file size limit for the free account.  The file size limit for the pro account is 10Gb.

File Savr - Free File Hosting

File Savr makes file hosting easier with Web 2.0 technology and the use of Ajax and Flash. FileSavr has 10 GB upload size limit, currently the largest available on the internet. This allows users the flexibility to upload any large file of 10 GB or less.

File Factory - free and simple file hosting service

File Factory

FileFactory lets you host files up to 300MB for free. You don’t have to register and there is nothing to download. Your files can be downloaded an unlimited number of times! One thing I found very annoying and spammy about FileFactory was the number of ads they have on the page.

FileDen - Free file hosting and online storage

File Den

With File Den’s free file hosting and online storage service it’s easy to share files across the internet with friends, family, work associates or anyone else. They allow our users to direct link to their files also giving you the oppurtunity to embed your files into your webpages, myspace or other social networking profiles.

Fileqube - Free Online Storage


Fileqube has an eye-pleasing design that shows its intentions well. When you upload a personal file it gives you a download link, a link to remove the file, and embed code to drop your file’s link on a website. The only downside is the 150MB file size, which is rather small with some of the other sites in comparison.

File Dropper - Free File Hosting for MP3, Videos, Documents

File dropper

FileDropper’s beauty is in its simplicity. It has one click file hosting where you simply click on the upload button and select your file. After the file is uploaded you are taken to the page where the file is hosted. If the file is an image, it shows the image directly on the page for easier sharing. Upload size is an impressive 5 GB.

Happy uploading!


Other posts:

8 easy tips to drive traffic from search engines to your site

Microsoft BizSpark - Free MS software for startups

Wednesday, November 26, 2008 4:27:40 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | Tools
 Wednesday, November 05, 2008

Microsoft is launching a new program focused on helping Startups get up and running. The program is called BizSpark and according to Microsoft, the biggest benefits are

  • Software. Receive fast and easy access to current full-featured Microsoft development tools, platform technologies, and production licenses of server products for immediate use in developing and bringing to market innovative and interoperable solutions. There is no upfront cost to enroll.
  • Support. Get connected to Network Partners around the world — incubators, investors, advisors, government agencies and hosters — that are equally involved and vested in software-fueled innovation and entrepreneurship who will provide a wide range of support resources
  • Visibility. Achieve global visibility to an audience of potential investors, clients and partners

Basically, you enroll and are given access to a almost all the nessecary server and development software you need. The server licenses are even prouduction grade, so you can deploy (from what I can tell) cheaply. You are getting a high end MSDN subscription and a lot more, all for free.

Wednesday, November 05, 2008 11:13:54 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | News
 Monday, August 11, 2008


Randal Stross of the New York Times explains why many experts propose dropping website passwords entirely for a security system based on cryptography.

The best password is a long, nonsensical string of letters and numbers and punctuation marks, a combination never put together before. Some admirable people actually do memorize random strings of characters for their passwords — and replace them with other random strings every couple of months.

Then there’s the rest of us, selecting the short, the familiar and the easiest to remember. And holding onto it forever.

I once felt ashamed about failing to follow best practices for password selection — but no more. Computer security experts say that choosing hard-to-guess passwords ultimately brings little security protection. Passwords won’t keep us safe from identity theft, no matter how clever we are in choosing them.

Read Full story here.

Monday, August 11, 2008 1:19:25 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Thursday, July 31, 2008

AppScout has a good article on the new Amazon’s payment service:

Amazon on Tuesday unveiled two new payment options that allow Web site owners to shift payment transactions to the online retailer.

With Checkout by Amazon, webmasters will get help from Amazon in managing shipping charges, sales tax, promotions, and post-sale activities including shipments, refunds, cancellations, and charge backs.

Amazon Simple Pay, meanwhile, is a less complicated option for those who don't need Amazon's end-to-end checkout pipeline and order management capabilities.

To enable Checkout by Amazon, webmasters must add Amazon 1-Click to their account and insert a few lines of code into their Web site template. When customers go to check out of the site, they click the "Checkout with Amazon" button, a widget pops up asking for a shipping address, and customers buy via Amazon's 1-Click. Amazon sends them a confirmation e-mail, and users remain on your site.

Click here to read more

Thursday, July 31, 2008 8:37:49 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | News
 Wednesday, July 30, 2008

CAPTCHAs are everywhere now.  When you want to open an account, anywhere, you will encounter one of those.  But there are times when the programmers probably needed a spec describing exactly what the expression “proving that you are a human” means…

Corey Smith found some of the worst CAPTCHAs on the Web.  Here is my personal favourite:


Wednesday, July 30, 2008 1:26:43 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1] -
General | Humor
 Thursday, June 26, 2008

From The Wall Street Journal:

Brand reputation, or what your customers think about your business, is crucial for any small company that wants to attract new clients and grow a business.

What one customer says in a blog or product review can directly influence another customer’s decision to choose you over your competitors.

Here are four ways you can monitor your brand online:

1. Google Alerts: Set up a once-a-day alert for the names of your company, key products and top executives so you can check every time they’re mentioned on a Web site or news story. You can also set up alerts to track the same information about your competitors.

2. Social-media buzz: At, you can search social-media sites that Google Alerts may not catch. For example, Serph pulls results from social-bookmarking site and social news site, among others.

3. Customer reviews: Monitor and respond to what customers are saying about your business on review Web sites like and These sites allow businesses to register with the site so they can customize their listings with contact information and better interact with customers.

4. Yahoo Pipes: This service allows you to set up a “pipeline” that aggregates information from search engines, miniblogging tool twitter, photo-sharing site flickr and other Web portals that could be mentioning your business.

Thursday, June 26, 2008 2:04:57 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
Business | General | Marketing

The quality of your sleep is a determining factor in your daily productivity.  Hacking your sleep schedule requires some time and effort but can be really rewarding in the end.  You will have more time to do whatever you like to do (work, be with your family, blog, etc.) and you will have more energy to do it.

  • Do not eat before going to bed (at least 2 hours before sleep time).
  • Sleep in dark, quiet room.
  • Sleep with fresh air (open windows or get air refresher).
  • Exercise during the day. If you don’t exercise, go for a 15 minutes walk before the sleep time.
  • Do not watch TV in the bed before going to sleep. Read a book, take a bath, do something relaxing.
  • Don’t drink coffee or other stimulants within 6 hours of bed time.
  • Don’t take long naps (more than 30 minutes) during the day.

Follow these simple tips and within one or two weeks you will notice how your sleep starts improving.

A trick that works marvels for me is:

First, condition yourself to wake up exactly at the same time every morning, weekdays, weekends and holidays included.  Your body needs stability at some point in the sleeping process.  For working people like me, the easiest variable to standardize is the wake-up time.  Then, go to sleep only when you feel tired.  Don’t give yourself a specific bed time but let your body decide when you need sleep.  By having the same wake-up time, your body will automatically feel tired at exactly the right time to have the perfect sleeping time, every time.  Doing so will save you countless hours of sleepless bedtime.  I went from 8–9 hours of sleep per normal night to 6–7 and I have the same amount of energy than before.

Another tip that I can give you is to stop the caffeine and replace it with exercise.  A good rule of thumb is 15 minutes of exercise for each cup of coffee taken in a normal day.  For example, if you take 3 coffees in your normal day, exercise 45 minutes per day.  After 2–3 weeks, you will find that you need less and less coffee to stay awake and alert.  Within 2–3 months, you will have replaced your coffee addiction altogether, you will be more healthy, more rich (coffee is expensive in the long run), you will sleep better and you will need less sleep than before.

Since everyone is different, something that works for me may not work for you.  These are just examples of what you can do to sleep better but you need to find what works best for you.

Thursday, June 26, 2008 12:53:52 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Thursday, May 22, 2008

All the Mix08 sessions are online !

I also found this blog post with links to the wmv of all 88 sessions if you want to watch them offline.

Thursday, May 22, 2008 9:15:28 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | News
 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] -
 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] -
 Tuesday, October 23, 2007

There are so much “productivity hacks” out there.  The blog lifehacker is full of little productivity hacks to boost your effectiveness.  For developers we have more stuff to look at that every one else combined.  This is not an article about some yet-another-incredible-new-tool, because there will be a better one next week.  I’ll have plenty of time later to talk about my favorite tools that are great Time Savers. But IMHO, there is no tool yet that is as high a productivity booster as owning whole features in an application.

The current problem with any tool is that you can have a productivity increase of 1.5x – 2x.  Maybe you can make that number 3x - 4x if the tasks you have to accomplish are repetitive, you are a master of your particular tool and you take the time to enhance it, creating your own snippet or macros.  The thing about it is that, with most these kind of tools, you just become a faster typist.  Since the number of lines of code is a terrible productivity metric, we can assess that being a faster typist doesn’t necessary make you a more productive developer.

The real productivity gains lies elsewhere.  It has been given many names : Being “in the zone”, “in the moment”, “in trance”.  Everybody has experienced this state of mind where time seems to stop, you lose awareness of everything around you and you wake up, several hours later, having done a week’s worth of work.  This state of mind is one of the main points of the classic software project management book Peopleware.  Getting into that state of mind can take from 15 minutes up to a full hour or even more depending on the individuals and many others parameters (ambient noise, stress level).  And getting out of that state of mind is terribly easy. 

But what’s all this have to do with developers owning some features?  Simply that owning some code will make the “in-the-zone-boot-up-time” a lot shorter when working on that particular piece of software.  Basically, what’s happening when you are in the process of getting in the zone?  Your subconscious mind is loading (or, at least, tries to load) the entire problem space that you’re facing.  When there are unknown elements, as there are always in shared code situation, the problem space is filled with variables elements, making the process really harder than if you know everything about the problem.

When you own features, you have seen (and probably written) every single line of code and you know every bit of functionality, every hack that shouldn’t be there and every little design flaw.  So when you work on that feature, the feature problem space contain only known elements and is a lot easier to load in your subconscious mind.  Moreover, it helps a lot for debugging and refactoring situations to know the entire feature characteristics.  The developers that own their features will avoid a lot more pitfalls than those who share functionnalities, simply because they know the implications everywhere of the code they’re writing.

Owning features is not only beneficial on the developer’s performance side.  Developers in general are elitist people and they don’t like others developers messing with their code.  The fact that it is clearly stated that features X, Y and Z are properties of Joe Developer will surely make him not only happier on the job but he will be a lot more committed to those features than he could ever have been otherwise.

But that’s just me, what’s your opinion on this subject?

Tuesday, October 23, 2007 8:28:49 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Monday, October 22, 2007

At the office, we use an Outlook addin (that I originally developed in Visual Studio 2002 targeting the 1.0 .NET Framework).  Finding that technology to be a little obsolete (all of our others internal applications are on the 2.0 Framework), we’ve decided to migrate it to 2.0 and add some news features while we’re at it.

The migration and installation went fine at first on my Vista development PC but I couldn’t get the addin to load on the users computers (that are on WinXP).  Every thing I tried, didn’t work and the addin couldn’t load at all.  What I ended up doing is a complete rebuild of the application using VSTO SE (Visual Studio Tools for Office Second Edition).  Since everything works well now, I’ll share with you every resource that I came across about creating an addin with VSTO.

1. Get the prerequisites:

In order to deploy a VSTO addin, you need the following prerequisites installed on every user’s computer:


2. Code the addin:

Pretty straightforward step, depending on your company’s requirements.  I’ll write another article about that part soon with some code examples.


3. Prepare for deployment:

In order to prepare for the deployment of your solution, you need to set the code access security policy for your assemblies.  To do so, you need to do the following tasks:

  • Get the “SetSecurity” project here and add it to your project.
  • Sign your assembly (or assemblies) in the Signing section of the project’s properties.  All you need to do is to check the Sign the assembly check box and create a new strong name file.  You need to make sure that every assembly that you deploy is signed (including the SetSecurity.dll assembly).




  • Add the SetSecurity project output to your deployment project and add a custom action for Installation, Rollback and Uninstall.


In the custom action data for the Install custom action, you need to enter the following data, replacing “OutlookAddin” with the name of your addin:

/assemblyName="OutlookAddin.dll" /targetDir="[TARGETDIR]\" /solutionCodeGroupName="MyCompany.OutlookAddin" /solutionCodeGroupDescription="Code group for OutlookAddin" /assemblyCodeGroupName="OutlookAddin" /assemblyCodeGroupDescription="Code group for OutlookAddin" /allUsers=[ALLUSERS]

For the Rollback and Uninstall, all you need to provide in the custom action data is:



That’s a wrapper of about everything useful I found in my research.  I hope this helps you!  If there is something you think would be a good addition to this article, feel free to email me at: stan AT stanbiron DOT com.

Some more useful resources:

  • If you don’t have VSTO as part of your Visual Studio Installation, here is the link to download it separately.
  • If you code on a Vista PC and you use Visual Studio 2005 (with the Vista service pack), you won’t be able to debug into a VSTO addin for Office 2003.  Microsoft has issued an hotfix to resolve this problem.
  • If you can’t get the addin to work on the target computer, you can use this really great Outlook Addin Checker that looks for missing registry keys, prerequisites or Code Access Security policies.
  • There is a two-part article on MSDN for every step needed to deploy an VSTO addin or document customization: part 1 and part 2.  These article are somewhat long but every bit of information for the deployment part is there.  They also explain how to set custom deployment conditions to ensure that the prerequisites are installed.


Monday, October 22, 2007 4:14:29 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | Office Interop | Tools
 Wednesday, October 03, 2007

It’s simply amazing! Scott Guthrie announced today that the .NET framework source code is going to be released later this year.  He says it will be released at the same time that Visual Studio 2008 and the 3.5 Framework are going to be released.  This means that you will be able to drill down inside the framework when debugging your applications in Visual Studio 2008.

This is a bold move from Microsoft’s part by any standards.  I think the motivation behind this release is two-fold:

1. This seems to be part of a larger company-wide politic to show to developers that Microsoft genuinely care about them.

2. They also need to work with the flow.  More and more, tools like Lutz Roeder’s .NET Reflector (a utility and Visual Studio plugin to decompile and visualize .NET assemblies) are becoming popular and the Framework is, for all intent and purposes, already opened and ripped apart.  I look at classes of the framework myself using this tool from time to time.

All that being said, this is really great news and I can’t wait to play with this and see the internals of the framework “in action”.

Click here to view the full article from Scott.

If you don’t know who Scott Guthrie is..  Well he’s the team leader for :

  • IIS
  • The AJAX Toolkit
  • The CLR
  • The Compact Framework
  • Windows Forms
  • Commerce Server
  • Visual Web Developer 2005
  • Visual Studio Tools for WPF

In others words, if you love your job as a programmer using Microsoft’s technologies, it’s because of this guy.

Tags: ,
Wednesday, October 03, 2007 2:37:44 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
General | .NET | News
 Tuesday, October 02, 2007

If you haven’t already heard about it, (very unlikely since it has been all over the news) there is a bug in Microsoft’s Excel 2007 that display the wrong result when doing a multiplication.  The bug first shown up with the multiplication of 77.1 * 850 but the Excel team blog tells us that there are 12 specific calculations that are subject to this flaw.

Basically, this is a problem with the internal representation of numbers in Excel that gets translated for displaying.  It’s a conversion bug in the UI part so it won’t affect any calculation, charting or other number analysis on those numbers.  VBA script and COM Interop are also immune to this bug because they use the internal representation and not the number actually rendered on the Excel interface.  Joel of has a really good article that explains the specifics of this bug. 

Every forum and blog posts that I've seen out there, with the exception of Joel’s one, shouts that this is a major/critical bug and start bashing on Microsoft for their “gross incompetence”.  My humble opinion on this is that those guys are going totally overboard and see critical problems when there are, in fact, none.  Since the bug we’re talking about affect only the number displaying but not the internal representation it will affect people’s life only if they do those exact calculations and don’t use the calculation result to do anything else.  The chances of that happening out there exists, I agree.  However, they are so slim that this bug should not be considered critical at all.  Microsoft will probably release a hotfix in the next days/weeks and it will all be history soon.

UPDATE: The Excel team has released a hotfix to correct this issue.  The fix can be found here.

Tuesday, October 02, 2007 2:45:18 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Monday, October 01, 2007

MeMy name is Stanislas Biron. I'm currently working at Versacom in Montréal, Canada, as the Research and Development Director. Versacom is the biggest Canadian translation firm and, as R&D Director, I try to discover new ways to tackle translation's workflow (From customer's initial request to the final product) and process (Improving translation itself). Before that, I was the President of a very small consulting company based in Quebec, Canada.

You might say I'm a business savvy developer with a strong entrepreneur's spirit.

I'm writing this blog to share my thought on software project management, tools, programming, entrepreneurship, database administration and the occasional humor post. In fact, I blog about everything that I think would help other developers, DBAs, and software industry execs.

You can contact me at

Monday, October 01, 2007 11:00:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
 Thursday, September 27, 2007

Hmmm..  It seems that I have started myself a nifty little blog!  I might be a little late on the train, starting a technical blog in 2007, am I?  But more importantly, why am I doing this ?  Well, for starters I like to help others. I want to share my knowledge and ideas with the most people possible, and I want to connect with other people who like the same things as I do.

Who am I?  I’m Stanislas Biron, software consultant in Montreal, Canada.  I have a lot of interests in everything that is tech-related but I'm especially fond of the Microsoft’s .NET technologies (C#, VB.NET, ASP.NET) and I will probably blog a lot of content about those.  I also want this blog to become some kind of code repository for interesting snippets or whole projects.  So if you have some interesting code that you want to share with the others readers, feel free to email it to me at :  I’ll make sure to include it into my posts and maybe that someday, I'll be able to do a “Stan’s daily piece of code” to showcase the numerous marvels that we can come across in our work as developers.  Sometimes, I'll also show some bad code (that I may or may not have written at some point) and show you how that kind of code can be refactored and transformed to become better.  Everyone of us makes mistakes but it’s by sharing those mistakes and by listening to others that we can really learn from them.

And by the way, I'm using the Dasblog blogging engine to run this blog and so far it’s a very smooth and nice experience.  It’s written in ASP.NET and is Open Source so if you’re interested in seeing some interesting blogging engine code or if you want to start a blog yourself and wonders what technology to use, Dasblog is a good choice in my opinion.

So let’s get started, shall we?

Thursday, September 27, 2007 1:08: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