Saturday, January 31, 2004 |
|
|
If you enjoy trolling for good technology deals, and you have an OfficeMax nearby, I would recommend checking out their in-store specials once a week. Presumably to entice you into the store to buy stuff that isn't so cheap, they do a pretty good job of pointing out the really good deals, which generally involve a combination of instant and mail-in rebates. Mail-in rebates aren't as nice as instant rebates of course -- not just because you have to mail them in, but because you have to pay sales tax on the higher price -- so always keep that in mind.
Anyway, an example of the deals this week, most amazing first:
- $50 for a 120GB Western Digital hard drive
- $40 for a 256MB USB Flash Drive
- $10 for a 64MB USB Flash Drive
- Free memory card reader
- Free 3-pack of VHS tapes
- Free CD/DVD/VHS tape rack
- Free 50-pack of CD-Rs
- Free caller-id telephone
- Free surge protector
- Free RCA remote control
- Free Ethernet card
- Free 100-pack of jewel cases
- Free 6-foot extension cord
- Free CD cleaning kit
- Free 10-piece tool kit
There's even more free stuff I didn't mention, and none of it is truly free, in that you have to send in your mail-in rebate and wait for it to arrive, and you don't get your sales tax back.
Now, I don't recommend you go out and get all of this stuff. But if you could use a 120GB hard drive, $50 is a pretty amazing deal (I bought the same drive from Circuit City a few months ago for $60 after rebates). If you don't have a USB Flash Drive yet, you really should grab the 64MB drive for $10; it's great for moving data from one machine to another without needing to burn a CD (I bought mine back when OfficeMax had a 128MB drive for $20). I'm tempted to get the memory card reader so that I don't have to plug my digital camera in to get pictures out... |
1/31/2004 12:33:33 PM (Pacific Standard Time, UTC-08:00) | | Misc
|
|
|
|
Friday, January 30, 2004 |
|
|
My most recent hack to my dasBlog theme caused at least one unfortunate side-effect in other pages due to the fact that the same auto-generated HTML element ID was being used for different purposes (on different pages, so I certainly can't blame ASP.NET for that).
Anyway, I fixed the hack to be a little more discriminating, so the “Description” label on my Edit page has been restored.
CustomDasBlogTheme.zip (3 KB)
Update: Welcome! I'm getting a few more referrals than normal to this post, so I thought I'd better update the zip file with the latest minor tweaks. This theme was designed for dasBlog 1.6, so it may need minor adjustment for other versions. Enjoy! (2005-07-12) |
1/30/2004 2:47:49 PM (Pacific Standard Time, UTC-08:00) | | Blogs
|
|
|
|
Thursday, January 29, 2004 |
|
|
Okay, so I didn't read every paragraph of the 1,579 page tome that is .NET and COM: The Complete Interoperability Guide, by Adam Nathan, but what I read was great. Most of the book is full of useful information that helped me understand how .NET/COM interop works and how to most effectively use it. As for the rest of the book, well, I'll never have to go that deep (I hope), but I'm glad that it's there. Dox Box says it best on the cover of the book: “This is the last book that should be written about COM programming. There is nothing left to say.” Amen.
If you plan on doing anything but the most rudimentary P/Invoke and/or .NET/COM interop, you must own this book. It is both a comprehensive reference and a usable guide, and I highly recommend it. It's so good, in fact, that you might have trouble finding it; as of this writing, it is out of stock at Amazon and other online booksellers! |
1/29/2004 10:13:23 AM (Pacific Standard Time, UTC-08:00) | | Books
|
|
|
|
|
I've made another change to my dasBlog theme. I was feeling paranoid about getting spam through my contact link, and dasBlog doesn't seem to appreciate mangled e-mail addresses, so I just removed the contact link from my theme.
I was also feeling paranoid about other people getting spam because of their comments. I know I didn't force them to enter their e-mail address when they left a comment, but the comment area does prompt them for one, so I decided to get rid of the prompt. Unfortunately, dasBlog doesn't make it easy to get rid of the e-mail prompt; I managed it with my theme, but it's a hack, probably dependent on how ASP.NET automatically generates element IDs. Well, it works for now. I also purged the comments database of any already-entered e-mail addresses, so my conscience is clear.
Commentators still have the option of leaving their home page. If they really want to leave their e-mail address, they can put it after their name, e.g., "Nobody (nobody@nowhere.com)".
CustomDasBlogTheme.zip (3 KB) |
1/29/2004 9:04:15 AM (Pacific Standard Time, UTC-08:00) | | Blogs
|
|
|
|
Wednesday, January 28, 2004 |
|
|
I've had a few comments (some off-line) about my last post, so I thought I'd write a little bit more.
First of all, some clarifications of the instructions for using the keyboard. A few warnings are generated when building the layout. The warnings can be ignored; they simply highlight the fact that a few characters can be generated by more than one key sequence. Also, you may need to reboot your machine after installing or changing your keyboard layouts; simply logging off might not be good enough. Finally, I should mention that keyboard layouts should work in Windows 2000 as well as Windows XP and beyond.
Eli provided more information about the shortcuts available in Word. To see the international character support in Word, search the help for "international characters". You'll find ways to type various accented characters, as well keys for '¿' and '¡'. Unfortunately, though some of these shortcuts work in some other Microsoft applications, some of them don't, and most non-Microsoft applications don't support any of them, so I prefer the consistency of my custom layout. But thanks for the info, Eli; I'm sure that these keyboard shortcuts are good enough for many people.
To explore any keyboard layout, you can, of course, use the Keyboard Layout Editor to import that layout. The user interface is pretty good; in particular, I like the way you can hover the mouse cursor over a "dead key" to see all of the possibilities.
If you want to play with your active keyboard in a slightly more user-friendly fashion, download the free Microsoft Visual Keyboard. (After you've installed it, find it under Start > Programs > Microsoft Office Tools.) It's not as visually appealing (if you ask me), but it does allow you to type directly into your application by clicking on the keyboard, and it has the option to stay on top of other windows.
If you're curious to know how I most frequently use my keyboard layout, these are a few of my favorite keys:
- AltGr+1 and AltGr+/: ¡ and ¿
- AltGr+[ and AltGr+]: « and » -- I sometimes use these instead of double-quotes in technical documentation.
- AltGr+' and AltGr+` and AltGr+~ and AltGr+^ and AltGr+": dead kêys för áçcèñts.
Some cool keys that I should get more familiar with:
- AltGr+c and AltGr+r: © and ®
- AltGr+C: ¢
- AltGr+:: °
- AltGr+9 and AltGr+0: smart ‘single quotes’
In fact, I'm motivated to add a few characters. The layout is updated below:
- AltGr+( and AltGr+): smart “double quotes”
- AltGr+.: bullet (•)
- AltGr+-: endash – (moved ¥ to AltGr+%)
- AltGr+_: emdash —
If you've already installed the previous version of my keyboard layout, you should probably uninstall it first (using the Add/Remove Programs control panel). And before you uninstall a keyboard layout, you should probably replace it with the standard "US" keyboard first. I apologize for not providing step-by-step procedures for all of this, but I'm sure you'll figure it out...
MyKeys.klc (16K) |
1/28/2004 4:55:18 PM (Pacific Standard Time, UTC-08:00) | | Keyboard
|
|
|
|
Tuesday, January 27, 2004 |
|
|
I think it is safe to say that most Windows XP users in the United States use the standard English "US" keyboard. (Raise your hand if you use "United States-Dvorak". I didn't think so...)
Unfortunately, the standard "US" keyboard has limitations. The word "résumé" is a perfectly valid English word, and yet there's no easy way to type an accented "e" with the "US" keyboard. If you happen to be running Microsoft Word, there's probably a keyboard shortcut, but there's not really any universal way to enter an accented "e" without using Character Map or memorizing an Alt+Number key sequence.
Enter the "United States-International" keyboard. It's a fun keyboard layout that supports all sorts of international characters. The right Alt key is now called "AltGr", and is used as an additional "shift key" to provide access to these characters. This layout also intuitively supports accented characters with the use of "dead keys". For example, if I hit the 'single-quote' key followed by the 'e' key, I get "é".
Unfortunately, this blessing is also a curse -- now I can't type a single-quote unless I hit the spacebar after it. Not good. So, I've been installing both the standard and international keyboards, assigning keyboard shortcuts to each of them, and switching between them as necessary. The trouble with this solution is that my active keyboard layout has a habit of switching without my knowledge. Perhaps I'm accidentally hitting the layout switching keystrokes, perhaps Windows is getting mixed up; I don't know, but it's annoying.
Thankfully, Microsoft provides the Microsoft Keyboard Layout Creator for free. I decided to create my own keyboard with the best of both worlds. I launched the Keyboard Layout Creator, loaded the "United States-International" keyboard, and restored the "dead keys" on the keyboard to their standard "US" keyboard behavior (specifically, the back-quote, single-quote, double-quote, tilde, and caret). So as to not lose the valuable functionality of these dead keys, I moved those code points to the same keys, but with the AltGr shift state. That is, instead of hitting 'single-quote' then 'e' to get é, I hit 'AltGr+single-quote' then 'e'.
So, I'm using my new keyboard exclusively. The only problem I have found with my solution is that the right Alt key, now AltGr, no longer functions as an Alt key. For example, if I try to hit Alt+F to get to the File menu, I have to use the left Alt key rather than the right. I can live with that.
If you'd like to try out my keyboard firsthand, download and install the Microsoft Keyboard Layout Creator, and open the attached keyboard layout file. You can play with the keyboard layout by selecting "Test Keyboard Layout" from the Project menu. Feel free to add your own keyboard code points; for example, AltGr+. might be a fun way to insert a bullet!
If you decide you want to use the keyboard, choose "Build DLL and Setup Package" under the Project menu, and install the keyboard with the generated installer. Reboot (or at least log out and back in), find the keyboard settings under the Regional and Language Options control panel, and replace your "US" keyboard with the "United States-International (MyKeys)" keyboard. You can always switch back later, but hopefully you'll be running Character Map a little less often from now on.
MyKeys.klc (16.37 KB)
Update: More information in my next post. |
1/27/2004 4:41:48 PM (Pacific Standard Time, UTC-08:00) | | Keyboard
|
|
|
|
|
Be sure to read Ian Griffiths' article on casting in C#. C# uses a C-style cast for two quite different operations -- to unbox a boxed value type, and to coerce a value from one type to another. One cast can't do both jobs, so, for example, if you have an object with an Int64 in it, you can't cast it directly to an Int32; you'll have to first cast it from an object to an Int64 and then to an Int32.
object longVal = 42L; int intVal = (int) ((long) longVal);
His last point resonates with me the most. Why did they choose to use the C-style cast? I've been well-trained by C++ gurus that the C-style cast is evil, and I cringe every time I have to use it in C#. Besides, it's horribly ugly, and produces far too many parentheses. The as keyword is far more beautiful, and I find myself wanting to use it even when I should use a cast (for one thing, as is slightly less efficient than a cast when you know that the object is the desired type).
Console.WriteLine(((Derived)(myArray[i])).DoSomething()); // vs. Console.WriteLine((myArray[i] as Derived).DoSomething());
So, how about a new keyword that works like as, but throws an exception if the cast fails? Separate keywords for casting and boxing? Any ideas?
Console.WriteLine((myArray[i] cast Derived).DoSomething());
|
1/27/2004 3:21:16 PM (Pacific Standard Time, UTC-08:00) | | Code
|
|
|
|
Thursday, January 15, 2004 |
|
|
Oops, one more business book review...
Purple Cow, by Seth Godin, is a short, easy read about the failure of traditional marketing in today's business world. Successful marketing is no longer "advertising" -- it's simply too hard to get people to care, because people in the U.S. already have everything they need, most of the things they want, and don't expect significant differences between brands.
Successful marketing must now be about "remarkable" products, products so new and exciting that "early adopters" will buy them and tell their friends. Designing and shipping such products requires creativity and boldness, but hopefully not as much money as a traditional product that has to compete with established competitors. Remarkable products are targeted directly at the people most likely to buy them, and don't attempt to appeal to everyone, so mass media advertising campaigns are unnecessary. In fact, criticism is a good sign that you've got a remarkable product -- as long as the criticism isn't coming from your target market! The book suggests that releasing potentially remarkable products in which few or none may succeed is less risk than releasing unremarkable products that seem safe but are bound to fail.
These remarkable products, or "purple cows", sound much like the "disruptive innovations" that target "non-consumers" as described in The Innovator's Solution, which makes that book a good follow-up to the basic ideas of this book. The Innovator's Solution certainly makes more compelling arguments for these concepts, and provides better strategies for getting them to work for your company. Of course, no book is going to tell you what the next remarkable product will be in your category, so start thinking!
|
1/15/2004 10:30:43 AM (Pacific Standard Time, UTC-08:00) | | Books
|
|
|
|
Wednesday, January 14, 2004 |
|
|
One last business book review...
The Innovator's Solution, by Clayton M. Christensen and Michael E. Raynor, is not an "easy read," at least for someone without a business background like myself. Despite my inability to understand everything they were saying, the business principles described by the book were compelling.
The goal of the book is to figure out how to create and sustain growth in a business. Much of the book is written for large, established, publicly traded companies with senior management teams, middle management, etc. Of course, smaller, newer, or privately owned companies should also benefit from the book; in fact, the book describes how these companies have some innate advantages over the larger companies when it comes to sustaining growth.
The premise of the book is that established companies can often accomplish "sustaining innovation," which improves products for existing customers, but have a more difficult time with "disruptive innovations," which target "low-end" consumers for which existing products are too complex or expensive, or target "non-consumers" who don't see a need for existing products at all. The book provides many examples of disruptive innovations; for example, "power tools" were too expensive for do-it-yourself homeowners until Black & Decker started selling power tools with plastic cases and short life spans for far less money.
New companies can accomplish disruptive innovations because they are their only chance to get into a market where there are established competitors. New companies that try to complete directly with those competitors tend to fail, because established companies are already good at sustaining innovation for their existing customers.
Established companies tend to continue sustaining innovation in response to new competitors with disruptive innovations because the latter often represents the least desirable segments of the market with the lowest profits. So the companies gladly give up that portion of the market so that they can focus more intently on the high-end market, where they can make great profits -- until the high-end products become better than they need to be. With no where else to go, the "low-end" competitors slowly make their way up to the high end, eventually eating up the market of the established company.
To counter this tendency, established companies can attempt disruptive innovations, but it tends to be difficult, primarily because of high expectations for growth. These expectations lead companies to pump money into these innovations to force them to grow as quickly as possible, at the expense of short-term profits, but fast growth is not generally possible for disruptive innovations. Established companies are better served if they create a separate group for the disruptive innovation. Management should be patient for growth but impatient for profit, as profit helps verify that the innovation is a good idea that will produce growth and profit in the long-term.
The book is really all about how established companies can successfully create and exploit disruptive innovations sooner and better than new competitors. I can't begin to list all of the theories and suggestions contained therein; any business would benefit from its management team reading and discussing this book. |
1/14/2004 1:52:54 PM (Pacific Standard Time, UTC-08:00) | | Books
|
|
|
|
Thursday, January 08, 2004 |
|
|
I finally read Eric Sink's article Make More Mistakes. It's a great article, and helps explain why an entrepreneur I'm not. I probably wouldn't “fold with four jacks when the opponent has a possible straight flush,” but you never know... I have great respect for entrepreneurs, though, and I'm particularly thankful for the risk-taker that pays my salary. |
1/8/2004 2:35:14 PM (Pacific Standard Time, UTC-08:00) | | Misc
|
|
|
|
Wednesday, January 07, 2004 |
|
|
Another business book review...
Making Dough , by Kirk Kazanjian and Amy Joyner, proves that there is only so much colorful language that can be used to describe the enjoyment of eating a Krispy Kreme doughnut. I'm a big fan of the company's hot product, but this book was almost too generous in its praise of the company and its pastries. My other problem with the book is that each chapter seemed too independent of the other, to the point of repeating the same stories with different words, and often leaving me with a strong sense of déjà vu.
Though it could be considered a business book, this book is really about one specific company and their success, not a blueprint for improving your own business. Taking the interesting facts, stories, and values of Krispy Kreme and applying them to your own company is left as an exercise for the reader. That being said, each of the 12 chapters does represent a worthy value for most any company, and we could certainly benefit from looking hard at each "secret ingredient" and figuring out if we could improve our own business by pursuing those values more directly. |
1/7/2004 11:51:40 AM (Pacific Standard Time, UTC-08:00) | | Books
|
|
|
|
Monday, January 05, 2004 |
|
|
As few readers as I have, even fewer of you (if any!) may be interested to know that I've started a personal blog, Ed at Home. It's primarily for keeping friends and family up-to-date on my home life, so if you're friend or family, feel free to check it out. |
1/5/2004 2:51:11 PM (Pacific Standard Time, UTC-08:00) | | Blogs
|
|
|
|
|
Volume 1 of Essential .NET, by Don Box, is a good book to read when you start to feel comfortable with the .NET Framework. You'll be cruising along with the first chapters, reading things that you already know, for the most part, with interesting new details here and there. Then you'll hit some stuff you really don't know much about, and you'll learn some really cool stuff about .NET. After that, you'll start skimming, because you'll arrive at stuff that you just don't care to know that much about yet, and you'll realize that you'll have to read the book again down the road.
At least, that's how it went for me. I cruised through the first six chapters, though there was certainly some new and interesting stuff in there that I didn't know, particularly near the end of the sixth chapter, where I finally learned how I'd do asynchronous programming with delegates. I started to bog down in chapter seven, though, and tread lightly over messages and domains. The stuff on security was interesting, but I'll definitely have to revisit that area a few times before I get cozy.
All in all, I enjoyed the book in much the same way that I enjoyed another of his books, Essential COM. He certainly does have a “terse writing style,” as he puts it, but it is quite readable considering the fountain of information that's being communicated. I quite recommend the book -- at least read it until you learn something new. |
1/5/2004 2:47:27 PM (Pacific Standard Time, UTC-08:00) | | Books
|
|
|
|
Friday, January 02, 2004 |
|
|
My company encourages us to read business books, occasionally giving a bit of incentive, so here's my review of a book that I wouldn't otherwise have read:
In his book Focus: The Future of Your Company Depends On It, Al Ries again and again insists that the secret to success in any company is focus. He has countless examples of companies gone bad and companies gone good, and in each case, the problem or the solution was focus. Unfortunately, to my mind, his logic is often over-simplified, especially after reading Good to Great last year, the conclusions of which were backed up with lots of hard data. Mr. Ries sometimes makes it sound like the future success of a company is easy to predict -- just figure out if they are focused.
The book is pretty old -- written in the mid-90's -- and I found myself wishing that I had a better idea of how the companies he mentions have done over the past eight years. From what little I know, many of his predictions seemed fairly accurate; in particular, his advice to IBM to go "open" with UNIX was spooky, since I had just seen a wacky television commercial where IBM promotes Linux… Still, any business book that predates the dot-com boom and bust can't help but seem outdated.
In any case, the book does give interesting arguments against diversification, line extensions, "broadening the base," etc., and for specialization, not overextending brands, and "deepening the ditch". He often suggests giving up business in order to bring narrow focus to a certain segment, and insists that bigger is not better. Rather, his indicator of success seems to be the ratio of profits to revenues, which seems reasonable, at least from a shareholder's point of view.
All in all, the book was a success in that it got me thinking about these issues. It's a very easy book to read, and was a good catalyst for my own thinking about how we could improve our focus here at my company. |
1/2/2004 10:41:45 AM (Pacific Standard Time, UTC-08:00) | | Books
|
|
|
|
|
Happy New Year! I won't bother making “more blogging” a resolution, though I do hope that this space will be occasionally useful to you.
Anyway, I've finally upgraded to dasBlog 1.5, which only seems to be available at the Releases section of the GotDotNet workspace. I finally managed to do the upgrade without a hitch, so I must be getting better at this! The coolest part of this new release has got to be the Search panel...
Also, I've made a few minor modifications to my theme, so here it is: CustomDasBlogTheme.zip (3 KB) |
1/2/2004 10:34:33 AM (Pacific Standard Time, UTC-08:00) | | Blogs
|
|
|
|
|
|
|
| Archive |
| March, 2008 (1) |
| January, 2008 (1) |
| September, 2007 (1) |
| July, 2007 (1) |
| June, 2007 (3) |
| May, 2007 (2) |
| January, 2007 (2) |
| December, 2006 (1) |
| November, 2006 (2) |
| August, 2006 (6) |
| July, 2006 (3) |
| May, 2006 (4) |
| April, 2006 (2) |
| March, 2006 (1) |
| February, 2006 (1) |
| January, 2006 (1) |
| December, 2005 (2) |
| November, 2005 (5) |
| October, 2005 (11) |
| September, 2005 (7) |
| August, 2005 (1) |
| July, 2005 (2) |
| June, 2005 (2) |
| April, 2005 (5) |
| March, 2005 (11) |
| February, 2005 (6) |
| January, 2005 (2) |
| December, 2004 (1) |
| November, 2004 (1) |
| October, 2004 (3) |
| September, 2004 (1) |
| August, 2004 (5) |
| July, 2004 (10) |
| June, 2004 (3) |
| May, 2004 (5) |
| April, 2004 (3) |
| March, 2004 (10) |
| February, 2004 (10) |
| January, 2004 (15) |
| December, 2003 (1) |
| November, 2003 (2) |
| October, 2003 (13) |
| September, 2003 (20) |
| August, 2003 (24) |
|
|
|
|