<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-10523981</atom:id><lastBuildDate>Wed, 19 Mar 2008 09:18:52 +0000</lastBuildDate><title>Serge Goes International</title><description/><link>http://www.apptranslator.com/blog/</link><managingEditor>Serge Wautier</managingEditor><generator>Blogger</generator><openSearch:totalResults>132</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-1311637453559489852</guid><pubDate>Thu, 25 Jan 2007 19:20:00 +0000</pubDate><atom:updated>2007-01-25T20:35:31.292+01:00</atom:updated><title>Word of the day: Unicodality</title><description>&lt;strong&gt;Unicodality&lt;/strong&gt;: Property of an application or piece of code to support Unicode and/or ANSI. Studies show that this word was &lt;a href="http://blogs.msdn.com/michkap/archive/2005/02/18/376225.aspx"&gt;invented&lt;/a&gt; by a guy named &lt;a href="http://blogs.msdn.com/michkap"&gt;Michael Kaplan&lt;/a&gt; who seems to care about this kind of thing.&lt;br /&gt;&lt;br /&gt;Yes, Google, Yahoo et al show use of the word on different sites (not only on MichKa's &lt;a href="http://blogs.msdn.com/michkap"&gt;blog&lt;/a&gt;). But read carefully: They're all comments his comments!&lt;br /&gt;&lt;br /&gt;If I like the word? Yes, I do! :)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lesson of the day: Fingerprints don't like saws&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Totally unrelated matter: &lt;a href="http://software.ericsink.com/entries/Technology_Dependence.html"&gt;Eric Sink teaches us&lt;/a&gt; that's you'd rather pay attention to your fingers if you rely on fingerprint reader to enter your password. Interesting (who said scary!) reading.</description><link>http://www.apptranslator.com/blog/2007/01/word-of-day-unicodality.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116553033078924781</guid><pubDate>Thu, 07 Dec 2006 22:22:00 +0000</pubDate><atom:updated>2006-12-07T23:25:30.840+01:00</atom:updated><title>Strong passwords policy = Security weakness?</title><description>Interesting point by &lt;a href="http://portal.spidynamics.com/blogs/msutton/archive/2006/12/06/Good-Intentions-Equal-Bad-Security.aspx"&gt;Michael Sutton&lt;/a&gt;: Forcing people to use passwords they can't remember leads to them writing their password on sticky notes. Sticked where? On their monitor of course!</description><link>http://www.apptranslator.com/blog/2006/12/strong-passwords-policy-security.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116518480063944191</guid><pubDate>Sun, 03 Dec 2006 22:20:00 +0000</pubDate><atom:updated>2006-12-05T14:12:57.086+01:00</atom:updated><title>The Twelve Networking Truths</title><description>&lt;a href="http://www.ietf.org/rfc/rfc1925.txt"&gt;RFC 1925&lt;/a&gt; (&lt;em&gt;The Twelve Networking Truths) &lt;/em&gt;is a short yet interesting reading. I believe it applies to Software Engineering in general and not only to Networking in particular.&lt;br /&gt;&lt;br /&gt;Rule #3 is probably the most instructive:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is hard to be sure where they are going to land, and it could be dangerous sitting under them as they fly overhead.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;[Edit Dec 5th: Updated link]&lt;/span&gt;</description><link>http://www.apptranslator.com/blog/2006/12/twelve-networking-truths.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116474024815385454</guid><pubDate>Tue, 28 Nov 2006 18:46:00 +0000</pubDate><atom:updated>2006-11-28T19:57:28.183+01:00</atom:updated><title>appTranslator 2.1 is released</title><description>I already mentioned the new features in this release in the &lt;a href="http://www.apptranslator.com/blog/2006/11/apptranslator-21-beta-version.html"&gt;beta announcement post&lt;/a&gt;.&lt;br /&gt;Here is a short reminder subjectively sorted by descending importance.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.apptranslator.com/blog/images/wordcount.png"&gt;Word count&lt;/a&gt;&lt;a href="http://www.apptranslator.com/blog/2006/10/pseudo-localization.html"&gt; &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.apptranslator.com/blog/2006/10/pseudo-localization.html"&gt;Pseudo-localization&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.apptranslator.com/blog/2005/05/did-i-eat-my-own-dogfood.html"&gt;French version&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;CLanguageSupport&lt;/em&gt; class and sample code&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Feel free to &lt;a href="http://www.apptranslator.com/download.html"&gt;download&lt;/a&gt;!&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Note: The demo version contains some restrictions (documented in the download page) regarding word count and pseudo-localization.&lt;/span&gt;&lt;/p&gt;</description><link>http://www.apptranslator.com/blog/2006/11/apptranslator-21-is-released.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116430156057520180</guid><pubDate>Thu, 23 Nov 2006 16:55:00 +0000</pubDate><atom:updated>2006-11-23T18:06:01.000+01:00</atom:updated><title>New EU Airports Security Rules</title><description>Security rules about carry-on luggage in airplaces have become fairly confusing lately.&lt;br /&gt;Here is a &lt;a href="http://www.carlsonwagonlit.com/en/countries/ch/news/cwt_info/security_advise.html"&gt;summary&lt;/a&gt; of what you can or cannot take aboard.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;You may take your &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:Wikiraz.jpg"&gt;&lt;span style="font-size:85%;"&gt;razor&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; (not &lt;/span&gt;&lt;a href="http://www.en.nassrasur.com/razorcentral/"&gt;&lt;span style="font-size:85%;"&gt;this kind&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;) but you may not take your shaving gel or aftershave. Yes Sir! I experienced it in London recently :-(&lt;/span&gt;</description><link>http://www.apptranslator.com/blog/2006/11/new-eu-airports-security-rules.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116377041096244693</guid><pubDate>Fri, 17 Nov 2006 13:01:00 +0000</pubDate><atom:updated>2006-11-17T14:37:34.423+01:00</atom:updated><title>HTML Tables Import into Excel</title><description>Some of the software applications we use daily involve really smart engineering. Take word processors: The algorithms and computation involved in positioning every word of your text according to the justification, font, size, bidirectional alignment, embedded pictures,... It's a really tough problem requiring smart people to solve it. (D)HTML rendering and spreadsheet updates are other example of hard computational problems that are so difficult to solve yet we take it for granted that these programs just work. And let's not even speak about games!&lt;br /&gt;&lt;br /&gt;What usually amazes us is not these smart pieces of codes but slick ones. Such as HTML tabular data import into Excel! Let's say you have this nice HTML report produced by someone else and you want to get it back into Excel:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.apptranslator.com/blog/images/table.png" /&gt;&lt;br /&gt;&lt;br /&gt;Don't try to copy/paste it from your browser, there's much better: The Web Query dialog.&lt;br /&gt;In the main menu (Excel 2003. Don't know for earlier versions. Excel 2007 is coming tonight to a computer near me), choose Data / Import External Data / New Web Query and type the URL in the address bar. The dialog opens the page and puts a small black on yellow arrow in front of each HTML table in the page.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.apptranslator.com/blog/images/webquery.png" /&gt;&lt;br /&gt;&lt;br /&gt;Click the arrow to select a table and click &lt;em&gt;Import&lt;/em&gt;. And here you go: Your table is now in Excel!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.apptranslator.com/blog/images/exceltable.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Being smart doesn't pay off. Be slick! &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There's no rocket science in there: Just a DHTML script to inject the arrow heads and some code to parse the table layout and contents. But it's damn slick if you want my opinion.&lt;br /&gt;&lt;br /&gt;So if you want to impress people with your software: No need to be smart. "Just" be slick!</description><link>http://www.apptranslator.com/blog/2006/11/html-tables-import-into-excel.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116308834061015882</guid><pubDate>Thu, 09 Nov 2006 15:35:00 +0000</pubDate><atom:updated>2006-11-09T17:09:51.843+01:00</atom:updated><title>appTranslator 2.1 beta version</title><description>I just posted a beta version of v2.1. (&lt;a href="http://www.apptranslator.com/download.html"&gt;Download&lt;/a&gt;). Here's the main new stuff:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pseudo-Localization&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I already &lt;a href="http://www.apptranslator.com/blog/2006/10/pseudo-localization.html"&gt;blogged about it&lt;/a&gt;. Remember: Pseudo-localization is limited to menus in the demo version.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;French Version&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Several people asked me why I didn't translate my own software! Well, I have been &lt;a href="http://www.apptranslator.com/blog/2005/05/did-i-eat-my-own-dogfood.html"&gt;eating my own dog food for long&lt;/a&gt; but for some reason that I fail to find, I've never included that French version in the package. This mistake is now fixed. (BTW, German version will follow in a few weeks, as soon as my favorite &lt;a href="http://www.proz.com/profile/37432"&gt;German translator&lt;/a&gt; can find some time).&lt;br /&gt;If you are French, chances are &lt;a href="http://www.apptranslator.com/download.html"&gt;appTranslator 2.1&lt;/a&gt; will automatically start in French. If it doesn't (or if you want to switch back to English, point to View/Language/whatever).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Word Count&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A very missing feature so far. Word Count is important when you work with external translators: It helps them make a quotation by providing a count of source words. It helps you check translators' bills by giving you the amount of words translated when you import a TE or XLIFF file back into the main project.&lt;br /&gt;Point to Translations/Word Count and here's what you get:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.apptranslator.com/blog/images/wordcount.png"&gt;&lt;img src="http://www.apptranslator.com/blog/images/wordcount_small.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[&lt;/span&gt;&lt;a href="http://www.apptranslator.com/blog/images/wordcount.png"&gt;&lt;span style="font-size:85%;"&gt;enlarge&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;] &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;CLanguageSupport class and Sample Code&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;An article (in the online help. Includes detailed step-by-step how-to) and ready-to-use MFC code to implement satellite DLLs support and a &lt;em&gt;Language&lt;/em&gt; sub-menu for your application.&lt;/p&gt;&lt;p&gt;It's not new really: It's a copy of an article and code I published last year on codeproject.com.&lt;/p&gt;</description><link>http://www.apptranslator.com/blog/2006/11/apptranslator-21-beta-version.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116293927613246512</guid><pubDate>Tue, 07 Nov 2006 22:06:00 +0000</pubDate><atom:updated>2006-11-10T12:09:20.870+01:00</atom:updated><title>Input Validation: What is an alpha-num character?</title><description>A few days ago, &lt;a href="http://www.apptranslator.com/blog/2006/11/ok-we-must-care-about-sql-injections.html"&gt;I wrote&lt;/a&gt; that I didn't agree with &lt;a href="http://blogs.msdn.com/ericlippert/archive/2006/11/01/how-do-i-mitigate-a-sql-injection-vuln.aspx"&gt;Eric Lippert&lt;/a&gt; about using a regex to filter alphanumerical input. Let's take a registration system using such validation. It would rule out my daughter Iséa because of the accented é (It would also rule out all text using non-latin scripts such as Greek, Russian, Japanese,...).&lt;br /&gt;I said I would post some code to do such alphanum validation.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Unicode Categories&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The idea is behind such code is to loop on all chars in the string and examine their &lt;a href="http://msdn2.microsoft.com/en-us/library/system.globalization.unicodecategory.aspx"&gt;Unicode Categories&lt;/a&gt;: Must match &lt;a href="http://msdn2.microsoft.com/en-us/library/system.char.isletter.aspx"&gt;Char.IsLetter()&lt;/a&gt; and/or &lt;a href="http://msdn2.microsoft.com/en-us/library/system.char.isnumber.aspx"&gt;Char.IsNumber()&lt;/a&gt;. Which means Greek letters, accented French letters, Japanese ideograms et al are accepted (Yes, the docs for IsLetter() say &lt;em&gt;alphabetical&lt;/em&gt;. But it includes ideograms). Even Myanmar digits actually.&lt;br /&gt;&lt;br /&gt;That's much better than a simple regex. But not enough though. The input might include composite characters: The letter and its diacritic mark(s) are coded using two (or&lt;a href="http://blogs.msdn.com/michkap/archive/2006/02/17/533929.aspx"&gt; more&lt;/a&gt;) separate characters. For example, é is either &lt;a href="http://www.fileformat.info/info/unicode/char/00e9/index.htm"&gt;U+00E9&lt;/a&gt; or the pair &lt;a href="http://www.fileformat.info/info/unicode/char/0065/index.htm"&gt;U+0065&lt;/a&gt; &lt;a href="http://www.fileformat.info/info/unicode/char/0301/index.htm"&gt;U+0301&lt;/a&gt;. Hence our check should include the &lt;a href="http://www.fileformat.info/info/unicode/category/Mn/index.htm"&gt;NonSpacingMark&lt;/a&gt; Unicode category.&lt;br /&gt;&lt;br /&gt;Writing such a little routine in a ASP.NET-compatible language is left as an exercice to the reader, given the links in the paragraph above. I admit that I don't how it would look like in PHP even though I have some non negligeable experience in that language.&lt;br /&gt;&lt;br /&gt;Want to make similar checks in your C++ Win32 apps? &lt;a href="http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/strings/stringreference/stringfunctions/getstringtypew.asp?frame=true"&gt;GetStringTypeW&lt;/a&gt; is your friend.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Inclusion Set vs Exclusion Set &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;But the more I think about it, the more I wonder if such alphanumerical checks are a good idea at all. Unless you want to validate input for a very specific format (&lt;a href="http://www.apptranslator.com/blog/2006/11/input-validation-what-is-alpha-num.html#c116315639368717426"&gt;&lt;strike&gt;i.e.&lt;/strike&gt; e.g.&lt;/a&gt; a Belgian car license number), validation consisting in checking if all chars are within a given set is flawed by design: In most cases, you just can't define the acceptable set. Example: alphanumerical chars are not enough for first names validation: One needs the "-" as well (such as in &lt;a href="http://movies.yahoo.com/movie/contributor/1800103359"&gt;Jean-Pierre&lt;/a&gt;). It's actually easier to work the other way around: Check if all characters are out of a given set of unacceptable characters, such as apostrophes which are SQL string delimiters.&lt;br /&gt;&lt;br /&gt;The problem with my suggestion is that you let slip some unacceptable chars that you're not aware of. Security zealots would tell me that they prefer to force me write Isea instead of Iséa rather than taking the risk of leaving a door opened.&lt;br /&gt;&lt;br /&gt;I agree with them. BTW, is it true that there was once a vulnerability in Windows based on the use of the Turkish &lt;a href="http://www.fileformat.info/info/unicode/char/0131/index.htm"&gt;dotless i&lt;/a&gt; ? That would prove that even though a regex is far too restrictive, using an exclusion set is asking for security holes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why exclude characters at all? &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;What to do then. Well, we can usually rely on our programming platform (language, DB driver author, whatever...) to provide such safety checks for us. Better yet, this check shouldn't reject unacceptable data. It should rather escape it in a way that the DB will be happy. Which will allow &lt;a href="http://www.actl.be"&gt;company names with an apostrophe&lt;/a&gt; to be typed correctly.&lt;br /&gt;&lt;br /&gt;Great, we're back to another security measure enumerated by Eric: Use your DB API to escape input. Of course, pay attention to escaping it for HTML/WML/whatever rendering as well. It is obviously a little more difficult than simply accepting US-ASCII alphanum chars only. But security tradeoffs should not become an excuse for promoting incompetence: We must do our homework!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Short Version&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;All this to say that input validation is sometimes not a good idea: You'd rather be able to make sure you safely accept all input.&lt;br /&gt;And Unicode categories are cool ;-)</description><link>http://www.apptranslator.com/blog/2006/11/input-validation-what-is-alpha-num.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116293103349331019</guid><pubDate>Tue, 07 Nov 2006 20:10:00 +0000</pubDate><atom:updated>2006-11-07T21:23:53.553+01:00</atom:updated><title>Before you decide to get started with WPF...</title><description>...you may want to follow &lt;a href="http://blogs.msdn.com/ericgu"&gt;Eric Gunnerson&lt;/a&gt;'s &lt;a href="http://blogs.msdn.com/ericgu/archive/2006/10/10/Getting-started-with-Windows-Presentation-Framework-_2800_aka-Avalon_2900_.aspx"&gt;check-list&lt;/a&gt;.&lt;br /&gt;It looks like it should save you time, tears and a handful of hair!&lt;br /&gt;&lt;br /&gt;And if you're looking for a WPF book, here's a &lt;a href="http://neopoleon.com/home/blogs/neo/archive/2006/01/09/18453.aspx"&gt;list of authors&lt;/a&gt; ;-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(WPF=Windows Presentation Framework, formerly known as Avalon)&lt;/span&gt;</description><link>http://www.apptranslator.com/blog/2006/11/before-you-decide-to-get-started-with.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116259554049174770</guid><pubDate>Fri, 03 Nov 2006 23:02:00 +0000</pubDate><atom:updated>2006-11-04T00:12:20.516+01:00</atom:updated><title>Irritating games - Jeux chiants</title><description>Or "&lt;a href="http://www.zanorg.com/prodperso/jeuxchiants/index_eng.htm"&gt;How to waste your time at work&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Kek is a French Flash specialist. He makes games. Irritating games. IRRITATING GAAAAMES!!! If you see what I mean. You don't? Make yourself an opinion.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://www.zanorg.com/prodperso/jeuxchiants/index_eng.htm"&gt;English&lt;/a&gt; or in &lt;a href="http://www.zanorg.com/prodperso/jeuxchiants/index.htm"&gt;French&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Note: Part of the fun is in the wording of the &lt;em&gt;congratulations&lt;/em&gt; at the end of the games but you'll want to choose the French version to truly enjoy that part.&lt;br /&gt;&lt;br /&gt;If you read French and want to learn Flash, consider buying Kek's book: &lt;a href="http://www.zanorg.com/flash8.htm"&gt;Flash Professional 8, le guide complet&lt;/a&gt;.</description><link>http://www.apptranslator.com/blog/2006/11/irritating-games-jeux-chiants.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116245495017622068</guid><pubDate>Thu, 02 Nov 2006 07:51:00 +0000</pubDate><atom:updated>2006-11-02T09:09:10.296+01:00</atom:updated><title>OK, we must care about SQL injections. But how?</title><description>"&lt;em&gt;For Joel's proposed attack to succeed, everything has to go wrong. The server has to fail to validate input, then use it in an insecure way, then connect to the database as an administrator. Regrettably, many server-side web apps leave themselves wide open to these sorts of attacks. &lt;strong&gt;Eliminate all of these problems&lt;/strong&gt;, not just the string concatenation.&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;Very nice &lt;a href="http://blogs.msdn.com/ericlippert/archive/2006/11/01/how-do-i-mitigate-a-sql-injection-vuln.aspx"&gt;HowTo&lt;/a&gt; written by &lt;a href="http://blogs.msdn.com/ericlippert"&gt;Eric Lippert&lt;/a&gt; in response to &lt;a href="http://www.joelonsoftware.com/items/2006/11/01.html"&gt;Joel's post&lt;/a&gt; about SQL injections.&lt;br /&gt;&lt;br /&gt;I have an objection though: Using a regex to validate alphanumerical input is a neon sign saying "This site is for Americans only!". Because your regex will hardly take accented letters into account. Let's not even speak of letters and digits in non-Latin scripts!&lt;br /&gt;&lt;br /&gt;I'll post some code to do such validation correctly. Stay tune...</description><link>http://www.apptranslator.com/blog/2006/11/ok-we-must-care-about-sql-injections.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116219668879168195</guid><pubDate>Mon, 30 Oct 2006 08:08:00 +0000</pubDate><atom:updated>2006-10-30T09:29:24.070+01:00</atom:updated><title>DST is a nightmare</title><description>In my non-professional life, I'm a fan of Daylight Saving Time: I love longer evenings 7 month a year and frankly, I don't care when it's dark until 6:30AM instead of 5:30AM because I'm rarely up before 7:00AM anyway!&lt;br /&gt;&lt;br /&gt;But as a software engineer, I've hated DST during most of my career. Before starting up &lt;a href="http://www.apptranslator.com"&gt;appTrans Software&lt;/a&gt;, I was involved in &lt;a href="http://tbox.biz"&gt;industrial data logging and telemetry&lt;/a&gt;. You know: Recording pressures, flows, uptimes, downtimes, whatever, all day long (and other things such as automation, alarming and so on). A pretty simple job. If it weren't about DST.&lt;br /&gt;&lt;br /&gt;The problem is that data logging devices record timestamps based on their internal clock, which knows nothing about DST. Why? Because the device doesn't know in which country it's sitting hence which rules it should apply.&lt;br /&gt;Even if it knew, it wouldn't be happy anyway because it doesn't want to know how to store a yearly one-hour time hole in its table which is a simple array of numbers corresponding to 15-minutes recording intervals. Let's not even speak about the other yearly hour where the clocks rewinds to replay the last hour. Oh! and don't expect users to set the time after each transition: If they do it in the morning when showing up on duty, it's too late: There's already a few hours of mis-timestamped data. And I won't speak about the companies who have a policy for never setting DST in these devices for simplicity until someone notices a device is not on time and &lt;em&gt;fixes&lt;/em&gt; it, using DST...&lt;br /&gt;&lt;br /&gt;So it's up to the data analysis software running on a PC to figure out. And that's why I used to hate it: My team was in charge of writing such software!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UTC: The Ultimate Timestamp&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Yeah, I know, there's &lt;em&gt;Universal Time Coordinated&lt;/em&gt;: Time at Greenwich (the one in UK, not the one in NYC!), ignoring DST.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;BTW, should be UCT, no? You won't believe it yet it's true: It's an IEC invention. IEC has two official languages: French and English. The committee couldn't decide between English UCT and French TUC. Hence the subtle(!) compromise: UTC. A bit like Mom who's fed up about you and your brother fighting for a toy: It will be for none of you!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's true, UTC is a blessing. If the device knows it and nobody will change it (such as user reading incorrect time on the front panel). Or the device must display human-readable (a.k.a. local time, including possible DST) to passing-by human readers.&lt;br /&gt;It's a blessing simply because we can now assume that the logged data uses a well-known time scale, based on an absolute reference. In &lt;a href="http://en.wikipedia.org/wiki/Time_t"&gt;C parlance&lt;/a&gt;, it's the amount of seconds between now and the moment where the Greenwhich people's watches said &lt;em&gt;Jan 1st 1970, 12:00AM&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;The idea is that DBs should contain UTC timestamps. All timestamped data providers must store UTC timestamps to the DB. All timestamped data consumers must convert UTC data from the DB back to their users' local time.&lt;br /&gt;Sounds easy, doesn't it? Well, it should. If DST weren't in to make the &lt;em&gt;convert UTC data from the DB back to their users' local time&lt;/em&gt; part a nightmare.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DST is a nightmare&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;First, you can't use that nice off-the-shelf charting package because it was designed to display calendar data. Hence its programmers didn't even figure they should display the time axis with a double 2:00AM - 3:00AM section some time in Spring (if you're in the Northern hemisphere) and without the said section some time in Autumn. So you have to re-implement the whole charting module yourself.&lt;br /&gt;Also, converting historical data is everything but pleasant: The CRT functions will at best rely on the OS to perform the conversion. And Windows makes a bad job at converting historical timestamps: &lt;a href="http://msdn.microsoft.com/library/en-us/sysinfo/base/filetimetolocalfiletime.asp?frame=true"&gt;FileTimeToLocalFileTime()&lt;/a&gt; is wrong 50% of the time. It uses the &lt;strong&gt;current&lt;/strong&gt; value of DST rather than computing the value for the given timestamp. (&lt;a href="http://blogs.msdn.com/oldnewthing/archive/2003/10/24/55413.aspx#55416"&gt;I don't agree&lt;/a&gt; with the &lt;a href="http://blogs.msdn.com/oldnewthing/archive/2003/10/24/55413.aspx"&gt;rationale behind this behaviour&lt;/a&gt;).&lt;br /&gt;So if you are really really serious about it, you craft your own function that converts UTC to local time, based on the &lt;a href="http://msdn.microsoft.com/library/en-us/sysinfo/base/gettimezoneinformation.asp?frame=true"&gt;GetTimeZoneInformation()&lt;/a&gt; info.&lt;br /&gt;Until someone at the US Congress ruins your day (more than a single day actually) by changing the rule...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The very reason why MS waited until November 2006 to ship Vista :-)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I just learned from &lt;a href="http://www.hanselman.com/blog/DaylightSavingsTimeAndWindows.aspx"&gt;Scott Hanselman&lt;/a&gt; that the US will change DST switch dates as of next spring. Which introduces one more frustration: Windows does a very good job at keeping an accurate list of time zones and their switch dates rules. But it doesn't push the desire for precision up to keeping an history of rules changes. Which means that in late March 2007 (DST), when you'll want to give a look at the data from one year before (Late March 2006 - ), you'll wonder why the graphs are shifted by one hour :-(&lt;br /&gt;&lt;br /&gt;A bad time for the guys at my &lt;a href="http://tbox.biz"&gt;previous company&lt;/a&gt; as well: Their devices are parameterized with the switch dates in the current time zone for the next 30 years. So they can both make UTC data logging AND use local times for the tasks that require it (Of course it's smart: It was my proposal :-)). Now, all US users will have to dial-in all their &lt;a href="http://www.tbox.biz/uk/tbox_lp.php"&gt;devices&lt;/a&gt; (they are usually used in the wild) and send new DST settings.&lt;br /&gt;With &lt;a href="http://www.internetnews.com/security/article.php/3640646"&gt;Vista shipping&lt;/a&gt; after the 1st Sunday of Nov 2006 (DST switch date as of 2007), MS could simply make the change in the RTM version. Had it shipped before that date, they would have to keep the current DST switch date for now and post an update next year.&lt;br /&gt;&lt;br /&gt;Oh my! I'm sooo glad I don't have to deal with these issues anymore...</description><link>http://www.apptranslator.com/blog/2006/10/dst-is-nightmare.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116204103455523174</guid><pubDate>Sat, 28 Oct 2006 12:54:00 +0000</pubDate><atom:updated>2006-10-28T17:21:01.373+02:00</atom:updated><title>Pseudo-Localization</title><description>You are about to make your program translated. But are you sure it will work well after translation? For example, does your program support accented characters as found in French or German? Can it display Japanese ideograms? Want to have an idea of the look in Russian (Cyrillic)? What will your German dialogs look like (most German texts are significantly wider than their English source) ?&lt;br /&gt;&lt;br /&gt;Pseudo-Localization helps you answer these questions without having to wait for translators to complete their job: it builds a translated executable where untranslated texts are modified to use characteristics of the target language. For instance, pseudo-localization to French will randomly add accents on top of vowels, such as found in French. Pseudo-localization to Russian turns your Latin script-based texts to Cyrillic,...&lt;br /&gt;&lt;br /&gt;e.g.: &lt;strong&gt;Hello world&lt;/strong&gt; might become &lt;strong&gt;Héèllò wörlld&lt;/strong&gt; in French pseudo-localization. The text remain fairly readable but it shows the reaction of your program to unusual characters.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.apptranslator.com/blog/images/pseudoloc-ansi-annotated.png"&gt;&lt;img alt="ANSI pseudo-localization to French" src="http://www.apptranslator.com/blog/images/pseudoloc-ansi-annotated-small.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;appTranslator pseudo-localized itself to French (&lt;/span&gt;&lt;a href="http://www.apptranslator.com/blog/images/pseudoloc-ansi-annotated.png"&gt;&lt;span style="font-size:85%;"&gt;Enlarge&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And if your application is Unicode-based, appTranslator will randomly turn convert texts to other scripts such (Greek, Cyrillic and Japanese) to help you check that your app can simultaneously display texts in different scripts.&lt;br /&gt;&lt;br /&gt;&lt;img alt="Unicode pseudo-localization to French" src="http://www.apptranslator.com/blog/images/pseudoloc-unicode-annotated-small.png" /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Unicode-aware pseudo-localization uses multiple scripts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Want to give it a try? Easy: Just &lt;a href="http://www.apptranslator.com/_beta/appTranslatorProSetupDemo.exe"&gt;download the beta demo&lt;/a&gt; version.&lt;br /&gt;For more info, look up &lt;em&gt;Pseudo-Localization&lt;/em&gt; in appTranslator's Help Index.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Important Notes&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;1. In this DEMO beta version, only the menus are pseudo-localized. (You are a registered appTranslator user and you'd like a non-limited beta version? please &lt;a href="http://www.apptranslator.com/contact.html"&gt;contact me&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;2. In order to prevent breaking the project file in this beta version, pseudo-localization settings are saved in a separate file: &lt;em&gt;project&lt;myproject&gt;&lt;myproject&gt;&lt;/em&gt;.apt.ini.&lt;br /&gt;&lt;br /&gt;3. Hint for your Document/View-based MFC apps: In the String Table, make sure you set your document template string(s) (usually string #128) as &lt;em&gt;'do not translate'&lt;/em&gt; (or you translate it manually): pseudo-localizing it is not a good idea since it contains not so localizable info such as your file extension and file type registry info.&lt;br /&gt;&lt;br /&gt;4. If you take pseudo-localization very seriously, you'll want to test pseudo-localized input as well.</description><link>http://www.apptranslator.com/blog/2006/10/pseudo-localization.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116168346679146856</guid><pubDate>Tue, 24 Oct 2006 09:43:00 +0000</pubDate><atom:updated>2006-10-24T11:51:06.816+02:00</atom:updated><title>XPath Examples</title><description>I find &lt;a href="http://www.w3schools.com/xpath/default.asp"&gt;XPath&lt;/a&gt; is great when it comes to programmatically look up data in an XML file. But since such queries are not part of my everyday job, I'm no expert and I love to have a list of examples to help me do the job.&lt;br /&gt;&lt;br /&gt;If you're like me, you may find this &lt;a href="http://msdn2.microsoft.com/en-us/library/ms256086.aspx"&gt;XPath Examples&lt;/a&gt; page useful.</description><link>http://www.apptranslator.com/blog/2006/10/xpath-examples.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116108025635722722</guid><pubDate>Tue, 17 Oct 2006 09:12:00 +0000</pubDate><atom:updated>2006-10-18T17:28:32.566+02:00</atom:updated><title>IntelliCAD chooses appTranslator</title><description>I'm just back from the &lt;a href="http://intellicad.org/WorldMeeting2006/default.asp"&gt;ITC World Meeting&lt;/a&gt; in beautiful &lt;a href="http://www.city.kelowna.bc.ca/"&gt;Kelowna&lt;/a&gt; (BC, Canada).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;IntelliCAD, an AutoCAD alternative&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.intellicad.org"&gt;ITC&lt;/a&gt; is a company founded by former Visio employees to develop IntelliCAD, an alternative to AutoCAD. From what I could see, it's a huge piece of work and the IntelliCAD developers are doing an amazing job. I was very impressed by the effectiveness of their development process: They have few developers but all of them seem excellent, which is much rarer than one could think. These guys are spread all around the planet (yes, the company doesn't have offices!). Their development roadmap is very accurate with part of the team working on the next (not so) minor release and another part working on the next major release. And their QA dpmt... Wow! It's not just testers, it's professional QA. When was last time you saw &lt;em&gt;professional&lt;/em&gt; QA in a small company! I'm not just speaking of testers &lt;em&gt;playing&lt;/em&gt; with the product. Or developers executing predefined test cases and filling checkboxes on a result sheet. Boy, even customers can submit automated test scripts as part of their bug reports. As Development Director Dave Lorenzo says: &lt;em&gt;It's the best way to get us fix bugs since we'll face them at least 5 times a day in result sheets!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ITC chooses appTranslator&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I was invited to this World Meeting by &lt;a href="http://www.microsurvey.com/"&gt;MicroSurvey&lt;/a&gt;'s CEO Darcy Detlor. Darcy happens to be the secretary &amp; treasurer of the ITC. His company uses &lt;a href="http://www.apptranslator.com"&gt;appTranslator&lt;/a&gt; to localize some of their products.&lt;br /&gt;I presented appTranslator to the consortium members (they are basically the IntelliCAD distributors). These guys need to translate IntelliCAD (and their own add-ons and customizations of the product) to their own language in order to sell it on their domestic markets. The presentation was a big success. Both members and IntelliCAD developers were very impressed and showed great interest into the product.&lt;br /&gt;&lt;br /&gt;The IntelliCAD lead developers told me they want to list appTranslator in their &lt;em&gt;Recommended Tools and Procedures&lt;/em&gt; list. And it's not just a matter of demo: IntelliCAD member and appTranslator user &lt;a href="http://www.dp-cad.com/English/index.htm"&gt;Cedric Desbordes&lt;/a&gt; showed them their product in French and praised the ease of use (Showing someone their program in a language they don't understand is always the best way to impress people ;-).&lt;br /&gt;&lt;br /&gt;This means that not only the members of the ITC will receive a pointer as to where to start translating IntelliCAD intheir own language, but also a community of users is created, thereby accelerating the appTranslator adoption momentum.&lt;br /&gt;&lt;br /&gt;This is of course all good news for both IntelliCAD and appTranslator.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Globalization vs Localization&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The ITC is the perfect type of organization to setup an i18n/l10n process:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The IntelliCAD developers do the globalization job, in order to make sure their product can be easily localized.&lt;/li&gt;&lt;li&gt;The members/distributors do the localization job, each in their own language.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In order to improve ITC's globalization effort, I'll add pseudo-localization capabilities to appTranslator. This will help them make pre-localization test and possibly solve problems before their distributors hit them. More about that soon.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I confess I somewhat hesitated when Darcy invited me: It's a 16-hours/8000 km trip to Kelowna, just to visit a few tenths of people. When the money comes out of your own pocket, you think twice about it. But there's no doubt the net result will be very positive. It was all worth the &lt;a href="http://www.apptranslator.com/blog/images/heathrow.kmz"&gt;trouble&lt;/a&gt; of flying through the &lt;a href="http://www.heathrowairport.com/"&gt;worst-airport-ever&lt;/a&gt; ;-)&lt;/p&gt;</description><link>http://www.apptranslator.com/blog/2006/10/intellicad-chooses-apptranslator.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116051551880077452</guid><pubDate>Tue, 10 Oct 2006 21:16:00 +0000</pubDate><atom:updated>2006-10-10T23:25:18.826+02:00</atom:updated><title>Michel Daerden, roi de YouTube</title><description>Google a visiblement fait un bon investissement. Il est maintenant le promoteur de la nouvelle star mondiale que le monde nous envie: Michel Daerden.&lt;br /&gt;&lt;br /&gt;Ah propos, Michel a gagné les élections. Il est content. Et il a fêté ça! Sacré Michel... J'avoue que si j'étais Ansois, moi aussi je ferais comme mes 4500 voisins et je voterais pour Michel. Rien que pour le plaisir de le voir si heureux:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=0dguKikz7Ec"&gt;http://www.youtube.com/watch?v=0dguKikz7Ec&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Du pur bonheur!</description><link>http://www.apptranslator.com/blog/2006/10/michel-daerden-roi-de-youtube.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-116017375293794008</guid><pubDate>Fri, 06 Oct 2006 22:04:00 +0000</pubDate><atom:updated>2006-10-07T00:31:20.790+02:00</atom:updated><title>New MUI Meat in Vista</title><description>&lt;a href="http://blogs.msdn.com/michkap"&gt;Michael&lt;/a&gt;, you write faster than I can read! So I miss stuff. Such as &lt;a href="http://blogs.msdn.com/michkap/archive/2006/05/30/610605.aspx"&gt;4 months ago&lt;/a&gt; when you mentioned the whole new SDK docs chapter about &lt;a href="http://msdn.microsoft.com/library/en-us/intl/mui_entry.asp"&gt;MUI support in Vista&lt;/a&gt;. I only found about it today through the links in your &lt;a href="http://blogs.msdn.com/michkap/archive/2006/10/06/796078.aspx"&gt;ultimate fallback&lt;/a&gt; post. Of course, feel free to setup a list of your writings on the subject that I've missed since then. And feel free to &lt;a href="http://www.apptranslator.com/blog/2006/09/pay-attention-to-bold-and-italic-fonts.html#c115855310171764082"&gt;blame me&lt;/a&gt;. ;-)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MUI Functionality Exposed&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Up to now, the way MUI was implemented was not very documented. Of course, it's easy to find out about the satellite DLLs in c:\Windows\MUI\FallBack. And there is &lt;a href="http://msdn.microsoft.com/library/en-us/intl/nls_5c85.asp?frame=true"&gt;GetUserDefaultUILanguage()&lt;/a&gt; which is probably the most important. But that's pretty much it.&lt;br /&gt;&lt;br /&gt;I haven't read the new docs chapter yet but will do very soon: I'm curious to see how we can improve our apps by integrating them with &lt;a href="http://www.apptranslator.com/blog/2005/04/choose-your-windows-ui-language.html"&gt;Windows MUI&lt;/a&gt;.</description><link>http://www.apptranslator.com/blog/2006/10/new-mui-meat-in-vista.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-115983057175071022</guid><pubDate>Mon, 02 Oct 2006 22:33:00 +0000</pubDate><atom:updated>2006-10-03T01:09:39.906+02:00</atom:updated><title>Single Worldwide Binary: What's the Problem?</title><description>It is commonly accepted that the best strategy to provide support multiple languages with one single EXE is to use resource DLLs (a.k.a. Satellite DLLs). By the way, generating such resource DLLs with &lt;a href="http://www.apptranslator.com"&gt;appTranslator&lt;/a&gt; is as easy as filling one checkbox!&lt;br /&gt;But why do we have to bother playing with a whole set of DLLs? After all, several translations of one given resource (such as a string or a menu) can easily be stored in a single EXE. And if you call &lt;a href="http://msdn.microsoft.com/library/en-us/intl/nls_52lh.asp?frame=true"&gt;SetThreadLocale()&lt;/a&gt; to select your language, voilà, your resources will be loaded in the expected language. Not!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SetThreadLocale() is not the solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Once upon a time, there was Windows NT4 (and even, 3.51, 3.5,...). In these times, the single worldwide binary was a realistic option... as long as you didn't have to target Win9x, under which SetThreadLocale() was a no-no!Then came Windows 2000 and its vastly improved support for internationalization. Paradoxically, the single worldwide binary was no longer an option. Because one could no longer rely on SetThreadLocale() to globally select the language for resources, &lt;a href="http://msdn.microsoft.com/library/en-us/intl/nls_52lh.asp?frame=true"&gt;as the docs say&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;em&gt;Windows 2000/XP: Do not use SetThreadLocale to select a UI language. To select the proper resource that is defined with a LANGUAGE statement, use FindResourceEx.&lt;/em&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;Docs say '&lt;em&gt;don't touch!&lt;/em&gt;' but they don't say why. And if you try to look further, you won't find much info. As always, Michel Kaplan's blog is a &lt;a href="http://blogs.msdn.com/michkap/archive/2005/08/22/454360.aspx"&gt;good place to look up&lt;/a&gt;, even if it's to get confirmation that there's not much to find out.&lt;br /&gt;&lt;p&gt;Well, there are a few lines somewhere: &lt;a href="http://www.microsoft.com/globaldev/handson/dev/muiapp.mspx"&gt;This article&lt;/a&gt; briefly explains that when &lt;a href="http://www.apptranslator.com/blog/2005/04/choose-your-windows-ui-language.html"&gt;MUI&lt;/a&gt; was first introduced back in Windows 2000, the Microsofties had to modify the way resources are loaded (If you know why, please let me know). Actually, they modified the default language selection algorithm used to load resources :&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;em&gt;The catch here is that if the thread locale is the same as the currently selected user locale, system’s resource loader will by default use the language ID 0 (neutral). If the desired resource is defined as a neutral language, then this value will be returned. Otherwise, all of the language resources will be enumerated (in language ID order) and the first matching resource ID – regardless of its language – will be returned.&lt;/em&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;In other words, Windows will not load resources the way you expect if you happen to ask for the same language as the user preference (user default locale)! Yikes! You don't believe me? Fair enough, me neither! :-) Let's make a test.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sample Program&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The program contains a String Table with a string in German, French (Belgium) and English.&lt;/li&gt;&lt;li&gt;The program selects German as its default UI language : SetThreadLocale(&lt;em&gt;German&lt;/em&gt;)&lt;/li&gt;&lt;li&gt;It then loads a string from the String Table(displayed in the message box title).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;(&lt;a href="http://www.apptranslator.com/blog/images/WinApp.zip"&gt;Download source&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;You expect the loaded string to be "&lt;em&gt;German string&lt;/em&gt;". Play with you user locale and you'll see that the docs are unfortunately right. &lt;/p&gt;&lt;p&gt;Here is what I get with User Locale = &lt;em&gt;French (Belgium)&lt;/em&gt;: The german string is correctly loaded. &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.apptranslator.com/blog/images/409-80C.png" /&gt; &lt;/p&gt;&lt;p&gt;Then I modify my user locale and select German:&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.apptranslator.com/blog/images/cp.png" /&gt; &lt;/p&gt;&lt;p&gt;When I re-run the program, I still expect "German String" but I get something else :-( &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.apptranslator.com/blog/images/409-407.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What language does it pick then?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you look carefully at the screenshots above, you might notice something weird: The docs (quoted above) say that in case of &lt;em&gt;ThreadLocale==UserLocale&lt;/em&gt;, the language picked should be the first one in ID order, which for my program is... German! (German=0x407, French-Belgium =0x80C and English=0x409).So in this case, German should have been picked, as a side effect. But it was not: English was picked. How come? &lt;/p&gt;&lt;p&gt;I made further tests and it appears that when &lt;em&gt;UserLocale==ThreadLocale&lt;/em&gt;, Windows tries to load the resources in its own UI language (even if it's different from User/Thread Locale). Anyway, this irrelevant since we just demonstrated that SetThreadLocale() cannot be trust to achieve the Single Worldwide Binary dream. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;BTW, why would FindResourceEx help?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Remember the remark in the docs? Use resource DLLs or use FindResourceEx().&lt;/p&gt;&lt;p&gt;The reason &lt;em&gt;FindResourceEx()&lt;/em&gt; would help is simply because it takes an explicit langiuage ID, as opposed to the most usual resource-loading APIs such as &lt;em&gt;LoadString(), CreateDialog()&lt;/em&gt; et al. But it's not a realistic solution because it would mean that you must re-implement your own &lt;em&gt;LoadString()&lt;/em&gt; et al using &lt;em&gt;FindResourceEx()&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;No, you don't want to do that! So we'll keep with resource DLLs.&lt;/p&gt;</description><link>http://www.apptranslator.com/blog/2006/10/single-worldwide-binary-whats-problem.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-115979225987974436</guid><pubDate>Mon, 02 Oct 2006 11:52:00 +0000</pubDate><atom:updated>2006-10-02T14:38:06.453+02:00</atom:updated><title>I want a Sony Reader</title><description>I spend so many evenings reading stuff on my computer monitor. You know, articles, books, feeds...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Readings on a monitor is just not comfortable&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I already spent the whole day sitting on that office chair. And I'll tell you what: Spending the evening as well on it is not pleasant. I'd rather be sitting in my sofa or in my bed. And don't get me started about how my wife would find me more sociable!&lt;br /&gt;Also, I never found long readings particularly comfortable (hence productive) on a computer screen. Therefore taking my laptop in my sofa or my bed is not a more satisfying experience. Not to mention using a laptop in a plane :-(&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;I want to read a book&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;What I want is to be able to read all that contents from a book.&lt;br /&gt;Do you remember eBook Readers? These devices showed up a few years ago but vanished as soon as they appeared. The idea was that they are no computers, they are, well..., electronic books: Their screen is not LCD/TFT-like. They use so-called electronic ink, some new kind of display that make it look like a book: no backlight, black &amp; white but as comfortable and readable as paper.&lt;br /&gt;&lt;br /&gt;For some reason, everyone thinks these devices should be used only to download novels from a book library. Hell, no! I want to load them with all articles and contents available from my computer.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sony tries again : Sony Reader PRS500&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Even though all these devices seem to be stored on the deep shelves of electronics History, Sony is just about to &lt;a href="http://www.sony.com/reader"&gt;try again&lt;/a&gt;: They will release a new eBook reader in a couple of weeks from now. The&lt;br /&gt;All reviewers rave about the device's quality (including the &lt;a href="http://www.pcmag.com/article2/0,1895,1983663,00.asp"&gt;PCMag video review&lt;/a&gt;):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wonderful screen&lt;/li&gt;&lt;li&gt;ultra portable: 6" inch screen, 250g (9 ounce), thinner than a book.&lt;/li&gt;&lt;li&gt;Battery lifetime... oh boy! 7500 pages. Yes, pages, not minutes or hours: The device consumes power only when you turn the pages!&lt;/li&gt;&lt;/ul&gt;Cons mostly consist in:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sony eBook catalog. WTF! I don't want to read novels, I want to transfer contents from my computer.&lt;/li&gt;&lt;li&gt;Price: $350. To read novels. Nooo! not novels! Why are you obsessed with novels. You know, i'm not a gadget fan. Not at all. But I won't hesitate a single minute to shell out such an amount for a device that can get me unstuck from my computer.&lt;/li&gt;&lt;li&gt;DRM constraints for purchased eBooks. Then again, if you want to read novels...&lt;/li&gt;&lt;li&gt;Not many file formats supported. Ouch, that one is worrying: The device basically supports only PDF and BBeB (Sony's proprietary eBook format). But after all, converting any device to PDF is as easy as invoking the Print command. Also, they say that the device comes with software that makes documents conversion to BBeB very easy.&lt;/li&gt;&lt;li&gt;Slashdot readers will of course not forget to mention rootkits ;-)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I'm impatient to get my hand of such a device. But before i buy, I'll want to make sure reading PDFs formatted in A4/letter size will be easy to read on a 6" inch screen. This is actually my only concern.&lt;/p&gt;&lt;p&gt;Oh! And if they could have added a true USB port to let me plug my USB memory key, rather than a Sony Memory Stick or SD card, it would be perfect (The device does have USB connection but only through a mini-USB plug).&lt;/p&gt;More info (including picture and links) on &lt;a href="http://en.wikipedia.org/wiki/Sony_Reader"&gt;Wikipedia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[Edit: 250g. Not 4kg!]</description><link>http://www.apptranslator.com/blog/2006/10/i-want-sony-reader.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-115947645727827263</guid><pubDate>Thu, 28 Sep 2006 20:14:00 +0000</pubDate><atom:updated>2006-09-28T22:49:37.300+02:00</atom:updated><title>Total Nightmare!</title><description>We all fear it... We pray to prevent it from happening... But this time, it happened to me... Total and absolute nightmare:&lt;br /&gt;&lt;br /&gt;There is a bug in &lt;a href="http://www.apptranslator.com"&gt;appTranslator&lt;/a&gt; 2.0 released a couple of days ago :-(&lt;br /&gt;&lt;br /&gt;Not a major bug. I mean not one that crashes the app or corrupts user data. Still a non-negligeable one: When one exports a file to Translator Edition, appTranslator 2.0 happily (!) ignores your choice for 'Allow translators to use the Dialog Layout Mode'.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;appTranslator 2.0.1 fixes the bug&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I just published version 2.0.1 that fixes this bug. Boy, it hurts! Because it's a stupid trivial coding bug introduced when refactoring a function for the new XLIFF support. Unfortunately, none of the testers found the problem. Of course, I can't blame them. I can only blame _me_ because when you touch a piece of code, you know it must be thoroughly re-tested. I should have brought it to their attention:&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;em&gt;I reworked the code that manages the export to Translator Edition. So please don't test the XLIFF export only. Please thoroughly test the TE export as well.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;Of course, I should have checked myself as well.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The day I decided to start automated testing &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Obviously, this is the kind of thing that should be automated. I've always wanted to start automated testing. In my previous job, I eventually gave up because the tester was not smart enough to manage this kind of tool. And when I started up my company, I never found time enough and decided to rely on manual testing. Up to today.&lt;br /&gt;&lt;br /&gt;I remember &lt;a href="http://www.ericsink.com"&gt;Eric Sink&lt;/a&gt; praises &lt;a href="http://www.automatedqa.com/products/testcomplete/"&gt;TestComplete&lt;/a&gt;. So I'll start by giving a look at that one (The price looks very reasonable. Added to Eric's recommendation, it gives a good start ;-) )</description><link>http://www.apptranslator.com/blog/2006/09/total-nightmare.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-115943214444870013</guid><pubDate>Thu, 28 Sep 2006 08:17:00 +0000</pubDate><atom:updated>2006-09-28T18:26:26.423+02:00</atom:updated><title>Searchable Windows Settings</title><description>Earlier today, &lt;a href="http://msdn.blogs.com/michkap"&gt;Michael Kaplan&lt;/a&gt; shared his &lt;a href="http://blogs.msdn.com/michkap/comments/774885.aspx"&gt;experience&lt;/a&gt; trying to find a setting in Windows Vista. The point was that it's difficult to find a setting it is no longer in the same place as in XP.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;We've reached a point where organization is no longer enough &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I'm wondering: Why do we have to go up and down through a whole tree of applets, dialogs, tabs and pages? I agree that it's good to have settings listed and arranged that way (since it allows to find stuff you wouldn't have thought of, as Michael pointed).&lt;br /&gt;&lt;br /&gt;But let's admit it: With the amount of settings continuously growing, it becomes impossible to find anything that is not among the most basic and obvious ones.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Index and Find, anyone?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Why don't we have what Help has has for more than 10 years: Index and Find ? Isn't it obvious that the best solution to help people find what they are searching is... a Search button!&lt;br /&gt;I don't mean searching the Help to find where things are hidden. I mean a real 'Search setting' feature that would list settings matching your full-text criterias and allow you to modify them.&lt;br /&gt;&lt;br /&gt;Michael's search for the menu behaviour regarding underlined shortcuts (Alt or no Alt) would be easy:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;[menu alt underlined] [Search]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;would lead to:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[x] Underline keyboard shortcuts and access keys (explain)&lt;br /&gt;[Apply]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Boy, this would be cool!&lt;br /&gt;&lt;br /&gt;Update: BTW, in addition to the &lt;em&gt;explain&lt;/em&gt; link, a &lt;em&gt;locate&lt;/em&gt; link would be cool too.&lt;br /&gt;&lt;br /&gt;Update2: Er... Looks like the Microsofties didn't wait for me and my wonderful ideas ;-) Go to Control Panel. There's a search field (it gets the focus automatically). Type Underline and there you go! Thanks to martni (in MichKap comments).</description><link>http://www.apptranslator.com/blog/2006/09/searchable-windows-settings.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-115921147305655143</guid><pubDate>Mon, 25 Sep 2006 18:54:00 +0000</pubDate><atom:updated>2006-09-25T21:11:13.320+02:00</atom:updated><title>appTranslator 2.0 is released</title><description>Haaa... Releases... It's always good when you're done!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What's new in appTranslator 2.0 ?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I think I wrote about most of the main new features before:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;XLIFF Support: Makes collaboration with professional translators easier. More details in &lt;a href="http://www.apptranslator.com/blog/2006/06/working-with-professional-translators.html"&gt;this post&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Format Specifiers Checks: Translation errors in %s, %1 et al no longer remain undetected. Details &lt;a href="http://www.apptranslator.com/blog/2006/07/pay-attention-to-format-specifiers.html"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Global Analysis: Checks (such as CRLF and format specifiers consistency) that were performed only when one types a translation can now be run globally on demand. Very helpful for localization engineers to double-check translators' work.&lt;/li&gt;&lt;li&gt;Support for right-to-left languages (Arabic, Farsi, Hebrew...): appTranslator now provides automatic support for right-to-left dialog layouts and (optionally) mirroring.&lt;/li&gt;&lt;li&gt;Improved command line support. Helpful to improve continuous integration of appTranslator in your development process.&lt;/li&gt;&lt;li&gt;and &lt;a href="http://www.apptranslator.com/history.html"&gt;more&lt;/a&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you are a registered user with a valid support contract, you received news from me yesterday or earlier today.&lt;/p&gt;&lt;p&gt;If not, feel free to download the &lt;a href="http://www.apptranslator.com/download.html"&gt;demo version&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;And of course, don't hesitate to spread the word ;-)&lt;/p&gt;</description><link>http://www.apptranslator.com/blog/2006/09/apptranslator-20-is-released.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-115857321821432712</guid><pubDate>Mon, 18 Sep 2006 09:42:00 +0000</pubDate><atom:updated>2006-09-18T11:53:38.226+02:00</atom:updated><title>wired or wireless laptop : What's the IP?</title><description>My 2 main machines at home are my development desktop and my laptop. The laptop is usually connected using its wireless interface.&lt;br /&gt;However, I occasionally plug the ethernet cable, especially when I need to perform a large file transfer. The problem then is that the laptop's IP changes (it uses DHCP for both interfaces)... Which leads to my desktop not finding it by name anymore... Which is frustrating because I have to type IPCONFIG in the laptop and then type the IP in Windows Explorer on the other computer... And I'll have to do the same again when I switch back to wireless...&lt;br /&gt;&lt;br /&gt;If only I could erase the name cache in the other computer to force it find the laptop's new address!&lt;br /&gt;&lt;br /&gt;Well, you can:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;C:\windows\system32&gt;nbtstat -R&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note that the -R must be capital.</description><link>http://www.apptranslator.com/blog/2006/09/wired-or-wireless-laptop-whats-ip.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-115826674779619952</guid><pubDate>Thu, 14 Sep 2006 20:35:00 +0000</pubDate><atom:updated>2006-09-14T22:47:09.223+02:00</atom:updated><title>Pay attention to bold and italic fonts</title><description>&lt;a href="http://blogs.msdn.com/oldnewthing/archive/2006/09/14/754051.aspx"&gt;Interesting post&lt;/a&gt; by &lt;a href="http://blogs.msdn.com/oldnewthing"&gt;Raymond Chen&lt;/a&gt; regarding the use of font attributes (such as bold and italics) in UI and their disastrous effects in CJK languages (Chinese, Japanese, Korean) : Bold and italics ideograms are just plain unreadable.&lt;br /&gt;&lt;br /&gt;OK, but how do we emphasis items in our UIs then? Raymond's answer: &lt;blockquote&gt;&lt;em&gt;You should let the localizers choose how they want the emphasis to be performed by allowing them to specify the font face, size and attributes.&lt;/em&gt;&lt;/blockquote&gt;</description><link>http://www.apptranslator.com/blog/2006/09/pay-attention-to-bold-and-italic-fonts.html</link><author>Serge Wautier</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10523981.post-115645406383327034</guid><pubDate>Thu, 24 Aug 2006 20:59:00 +0000</pubDate><atom:updated>2006-08-24T23:14:23.886+02:00</atom:updated><title>Oops, they did it again!</title><description>In my &lt;a href="http://www.apptranslator.com/blog/2006/08/can-wikipedia-predict-future.html"&gt;previous post&lt;/a&gt;, I was observing how up-to-date Wikipedia is.&lt;br /&gt;It seems that Gregori Perelman and its Fields medal are not an exception: Today, one can read that &lt;a href="http://en.wikipedia.org/wiki/Pluto"&gt;Pluto&lt;/a&gt; &lt;em&gt;was&lt;/em&gt; reclassified as a dwarf planet on August 24&lt;sup&gt;th&lt;/sup&gt;, 2006.&lt;br /&gt;&lt;br /&gt;Now, it's for sure: The &lt;a href="http://www.sfsite.com/10b/ee91.htm"&gt;Eternity&lt;/a&gt; truly exists. The only remaining questions are what was the minimum necessary change performed by the Technicians to make astronomes vote against Pluto and why it was important to downgrade Pluto's status.&lt;br /&gt;&lt;br /&gt;What d'you say? You haven't read &lt;a href="http://en.wikipedia.org/wiki/The_End_of_Eternity"&gt;The End of the Eternity&lt;/a&gt;? Ouch! I'll tell you what: It's much more entertaining that this stupid little blog :-)</description><link>http://www.apptranslator.com/blog/2006/08/oops-they-did-it-again.html</link><author>Serge Wautier</author></item></channel></rss>