For some reason I keep wanting to apologize, presumably to myself, whenever I don't blog for a day.  But I've been so heads-down on some really fun ASP.NET stuff.  Plus, this is my last big term before my graduation on June 6th (anyone want to come?).  I'm taking classes from 6pm to 10pm most days.  This week was crazy...I worked M-F, went to school, T, Th, F, and Weds I drove up to Redmond to meet with COM+ folks and drove back in the same day.  I tell ya, it's always 3hours up from Portland and 5 hours down.  Traffic on I5 is unbelievable.  Anyway, all this plus an interesting programming project I'm obsessed with, and PPTs for at least 6 different presentations.  Then, the PCC Engineering folks call me to do a lunch seminar tommorow, and what do I do? I say YES.  :)  Madness.

At any rate, today I was localizing an eFinance application to Spanish, Chinese, and Arabic, and I noticed that after these lines:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(strCulture);
Thread.CurrentThread.CurrentUICulture= Thread.CurrentThread.CurrentCulture;

all the currencies were formatted as the Locales currency, when I wanted to format them in the Banks currency, which of course is different than the "preferred language."  So, rather than messing with CultureInfo every time I wanted to format a currency, I really just want to override the NumberFormat for the CurrentThread's Culture, so number format strings like {0:C} would just "do the right thing."  So...

Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol = "$";

Actually I do a bunch of other stuff for the sake of being generic, storing a Default CurrentCulture away and querying it for it's CurrencySymbol...but you get the idea.  Overall I'm very impressed by the Globalization Namespace.  It's certainly more well thoughout for WinForms than WebForms, but with some thought (the devil's  in the details) I'm localizing everything on the page, the grids, column headers, menus, etc without a significant perf hit.

One interesting note...while changing to RTL (Right To Left) for Arabic, I've noted that when you switch to WebForm Design Mode in Visual Studio 2002 it YANKS the runat="server" attribute from my HTML tag!  What's THAT about?



Ever want to catch Ctrl-C from a .NET Console Application and perform some crucial cleanup?  Well, you can...

using System;
using
System.Runtime.InteropServices;
using
System.Text;
using
System.Threading;

namespace Testing
{
/// <summary>
///
Class to catch console control events (ie CTRL-C) in C#.
///
Calls SetConsoleCtrlHandler() in Win32 API
/// </summary>
public class ConsoleCtrl: IDisposable
{
/// <summary>
///
The event that occurred.
/// </summary>
public enum ConsoleEvent
{
CtrlC = 0,CtrlBreak = 1,CtrlClose = 2,CtrlLogoff = 5,CtrlShutdown =
6
}

/// <summary>
///
Handler to be called when a console event occurs.
/// </summary>
public delegate void ControlEventHandler(ConsoleEvent consoleEvent);

/// <summary>
///
Event fired when a console event occurs
/// </summary>
public event ControlEventHandler ControlEvent;

ControlEventHandler eventHandler;

public ConsoleCtrl()
{
// save this to a private var so the GC doesn't collect it...
eventHandler = new ControlEventHandler(Handler);
SetConsoleCtrlHandler
(eventHandler, true);
}

~ConsoleCtrl()
{
Dispose
(false);}

public void Dispose()
{
Dispose
(true);
GC.SuppressFinalize
(this);
}

void Dispose(bool disposing)
{
 if
(eventHandler != null)
 {
  SetConsoleCtrlHandler
(eventHandler, false);
  eventHandler = null
;
 }
}

private void Handler(ConsoleEvent consoleEvent)
{
if
(ControlEvent != null)
 
ControlEvent
(consoleEvent);
}

[DllImport("kernel32.dll")]
static extern bool SetConsoleCtrlHandler
(ControlEventHandler e, bool add);
}

}

using System;
using
System.Reflection;
using
System.Diagnostics;

namespace
.Testing
{
class Test
{
public
static void inputHandler(ConsoleCtrl.ConsoleEvent consoleEvent)
{
if
(consoleEvent == ConsoleCtrl.ConsoleEvent.CtrlC)
{
Console.WriteLine
("Stopping due to user input");
// Cleanup code here.
System.Environment.Exit(-1);
}
}

[STAThread]
static void Main
(string[] args)
{

ConsoleCtrl cc = new ConsoleCtrl();
cc.ControlEvent += new
ConsoleCtrl.ControlEventHandler(inputHandler);
for
( ;; )
{
Console.WriteLine
("Press any key...");
Console.ReadLine
();
}
}
}
}



Steve [Swartz] and Clemens [Vasters] all over Europe.

This going to be great fun! I will be doing a speaking tour with my friend Steve Swartz (who was/is the architect of most of the new things in Windows Server 2003's COM+ 1.5). The topic is scalable application architectures and we have given it the unmarketable title "Scale, extend, stay running and don't forget to lock the door".

It's 7 cities (Warsaw, Bukarest, Moscow, Copenhagen, Oslo, Paris, Lisbon) in two weeks. The party starts April 22 in Warsaw. At most Microsoft subsidiaries the event will unfortunately be "invite only" due to organizational (space) constraints, but at least in Denmark, everyone can apparently sign up.

Expect us talking, discussing, agreeing and disagreeing about layers, tiers, process models, transactions, patterns, anti-patterns, security, Enterprise Services and other interesting things and expect the one or the other hint at the future of Web Services....[Clemens Vasters]

Not to kiss these two guys' collective asses any more than I would ordinarily, but this may be the greatest meeting of the minds (at least in the vertical world of Scalable Systems) in recent memory.  I'm tempted to head to Europe, crash the party and check them out.  I saw Steve speak on Throughput Design Patterns a few years back and I was inspired.  And of course, Clemens is always inspired and a fun speaker (with startlingly good englesh! :), who according to Tomas is IM'ing the planet (see Comments). 

It's gonna be a great summer of presenting and travelling.  I'm speaking at the Visual Studio 2003/Windows Server 2003 Launches in four Northwest cities, including Seattle and Portland.  If you see me, come say Hi!  I'm also at TechEd 2003 in Dallas in June and my wife and I are at TechEd Asia Pacific - Malaysia in August.  Looking forward to Singapore Airlines, too!



NewsGator 1.1 - Run, Don't Walk

Posted 2003-03-30 03:22 PM in Web Services | Bugs.

NewsGator 1.1 Released!.

NewsGator 1.1 has been released! This is a significant release; many of the most-requested features have been added, and a few bugs have been fixed. You can download 1.1 here. And it's a free upgrade for licensed 1.0 users. :-)

New message notification (task tray bubble) on Windows 2000 and later

[Greg Reinacker's Weblog]

I love the tray bubble...



If your life sucks so badly that you have to support Netscape 4.x, you might want to remember that Netscape 4 never handled Unicode/UTF-8 very well.  Since UTF-8 is ASP.NET's default Response Encoding, you'll often see the Evil Black Squares  "" ©2003 displayed instead of your text.  

Easily fixed though, change the following line in the Web.config file from

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

to:

<globalization requestEncoding="utf-8" responseEncoding="ascii" />




Contact

Sponsors

Hosting By

Hot Topics

Tags

Calendar

Archives

February, 2010 (8)
January, 2010 (13)
December, 2009 (13)
November, 2009 (7)
October, 2009 (19)
September, 2009 (11)
August, 2009 (12)
July, 2009 (21)
June, 2009 (26)
May, 2009 (16)
April, 2009 (13)
March, 2009 (17)
February, 2009 (17)
January, 2009 (18)
December, 2008 (32)
November, 2008 (17)
October, 2008 (22)
September, 2008 (16)
August, 2008 (14)
July, 2008 (25)
June, 2008 (19)
May, 2008 (17)
April, 2008 (17)
March, 2008 (26)
February, 2008 (21)
January, 2008 (28)
December, 2007 (19)
November, 2007 (17)
October, 2007 (31)
September, 2007 (39)
August, 2007 (37)
July, 2007 (43)
June, 2007 (37)
May, 2007 (32)
April, 2007 (38)
March, 2007 (29)
February, 2007 (46)
January, 2007 (31)
December, 2006 (27)
November, 2006 (31)
October, 2006 (32)
September, 2006 (39)
August, 2006 (34)
July, 2006 (40)
June, 2006 (18)
May, 2006 (31)
April, 2006 (34)
March, 2006 (30)
February, 2006 (38)
January, 2006 (44)
December, 2005 (19)
November, 2005 (34)
October, 2005 (24)
September, 2005 (37)
August, 2005 (20)
July, 2005 (24)
June, 2005 (33)
May, 2005 (16)
April, 2005 (22)
March, 2005 (34)
February, 2005 (15)
January, 2005 (37)
December, 2004 (28)
November, 2004 (30)
October, 2004 (34)
September, 2004 (22)
August, 2004 (34)
July, 2004 (18)
June, 2004 (64)
May, 2004 (49)
April, 2004 (21)
March, 2004 (29)
February, 2004 (29)
January, 2004 (36)
December, 2003 (25)
November, 2003 (24)
October, 2003 (59)
September, 2003 (42)
August, 2003 (24)
July, 2003 (44)
June, 2003 (29)
May, 2003 (21)
April, 2003 (30)
March, 2003 (27)
February, 2003 (47)
January, 2003 (50)
December, 2002 (31)
November, 2002 (38)
October, 2002 (44)
September, 2002 (15)
May, 2002 (2)
April, 2002 (4)

Google Ads