Friday, August 27, 2004 |
|
|
“These are good changes that will enable Microsoft to deliver a compelling “Longhorn” release in 2006 and to increase our investments in managed code, the .NET Framework, and WinFX. In particular, because we now plan to deliver “Avalon” and “Indigo” to Windows XP and Windows Server 2003, we will greatly increase the reach of these two technologies and will make them even more compelling as developer technologies.”
Outstanding! |
8/27/2004 11:11:13 PM (Pacific Daylight Time, UTC-07:00) | | Windows
|
|
|
|
Thursday, August 26, 2004 |
|
|
I can’t fairly review Thinking Visually, by Malcolm Craig, because I’m not really his target audience, and I didn’t manage to read the book cover to cover. I did read Part One, though, and it reminded me that I really should take more notes, and that I should do it graphically. It’s a shame when you’re trying to think coherently about a subject, but you can’t remember the things that have already been thought about. Simple notes might help, but drawing diagrams is faster and more useful than linear note taking.
From the summary of chapter two: “The main purpose of diagramming is to help simplify everyday tasks such as problem solving, writing reports, making changes, and coping with information overload.”
The book describes a number of types of diagrams. Browse through a copy if you aren’t familiar with them:
- Algorithm
- Control
- Fishbone
- Flow
- Force-Field
- Influence
- Input-Output
- Mind Map
- Multiple-Cause
- Relationship
- Ring
- Sign
- Tree
- Window
My favorite diagram is the “mind map” – in fact, I use MindManager at work to help me keep a handle on the various projects that we have going on. It’s no more than a glorified outline, but I find it easier to manage the information when it is in “mind map” format. |
8/26/2004 4:20:52 PM (Pacific Daylight Time, UTC-07:00) | | Books
|
|
|
|
Monday, August 23, 2004 |
|
|
I've been a fairly faithful user of SharpReader ever since I started watching RSS feeds, but I have heard enough good things about RSS Bandit that I try it out now and again.
I’ve been running them both for a few days now. Here's why I'd like to switch to RSS Bandit:
- it doesn’t crash when it is left open while the computer is shutting down
- it exits when closed and hides when minimized
- it supports custom output styles – in fact, I created my own that mimics the look of SharpReader
- it remembers my preferred sort order (oldest to newest)
- it doesn’t give false taskbar notifications of new unread items like SharpReader does
- it doesn’t mistakenly mark items as changed as often as SharpReader does
I’m going to stick with SharpReader, though. Here’s why I’m uninstalling RSS Bandit (again):
- it fails to download feeds more often than SharpReader
- once a feed fails, that feed doesn't succeed again without a refresh or a restart
- it doesn't show the Author field in the list view
- double-clicking on an item doesn’t jump to its link
- it's harder to change feed properties, particularly for multiple feeds
- Alt+Space doesn’t open the System menu
- it doesn't preserve the look of the category tree between sessions
- it doesn’t refresh feeds right away on startup after it’s been closed for a while; the “force download feeds on startup” option seems like overkill
- I’m not fond of the happy face icon
- hovering over the taskbar notification icon should show the application name in addition to any other useful information
Some of those are nits, but they all add up to a less enjoyable experience for me. If it keeps improving, I'm sure I'll give it another chance down the road... |
8/23/2004 9:16:14 AM (Pacific Daylight Time, UTC-07:00) | | Tools
|
|
|
|
Friday, August 20, 2004 |
|
|
If you want to write exceptional C++, you must read Herb Sutter’s books, and Exceptional C++ Style is no exception. (Har!) Like its predecessors, Exceptional C++ and More Exceptional C++, the book is organized into items, each of which has a few questions followed by detailed answers that present the most up-to-date ideas for writing good C++ code. I like Herb Sutter’s writing style – and, of course, his expertise – so I had no trouble reading this book from start to finish.
The book can also be skimmed fairly easily, since each item has a nice summary at the end, as well as highlighted guidelines throughout. The most interesting stuff from my perspective:
- I always forget about vector<>::at(). In particular, I forget that it is bounds-checked. Of course, that explains why I never use it – very few STL functions are bounds-checked in any way, so it’s good to get into the habit of realizing that, if you do something wrong, you’re going to crash, not get a nice exception. It’s speed over safety in the STL.
- Avoid template specialization of function templates. (That’s an oversimplification; read item 7 for how to do this the “right way.”)
- Never use protected data members. It’s tempting, but there’s always a better way.
- “The most important thing to get right is the interface. Everything else can be fixed later.” I totally agree.
- “Prefer to make interfaces nonvirtual.” That is, try to avoid public virtual functions. In fact, “prefer to make virtual functions private” unless “derived classes need to invoke the base implementation of a virtual function,” in which case they can be protected. Absolutely.
- “A base class destructor should be either public and virtual, or protected and nonvirtual.” This isn’t instinctive to me yet, but I believe it.
- “There’s often little point in checking for new failure anyway.” It’s about time somebody admitted that allocations never fail – and if they do, you’re not going to be able to recover.
- Nearly useless keywords: inline, auto, register.
- “Remember that floating-point math is weird and deeply strange.” I understand the pitfalls of integer arithmetic, but almost nobody really understands floating-point math.
- “Avoid macros.” Common C++ knowledge for ages, yet I still find them being used when an inline function would do just fine. Stop it!
- “Prefer writing functions as nonmember nonfriends.” The true C++ guru provides only the absolute minimum number of member functions for a class; the rest of the functionality is provided by nonmember functions. Unfortunately, STL fails this guideline, so we don’t have a good example to follow.
I have loved C++ ever since I first started using it. I hope that C++/CLI will enable me to productively use C++ far into the future; C# is cool, but not as cool as C++. If you are a C++ guru, or aspire to be one, this book and its predecessors come highly recommended. |
8/20/2004 9:10:53 AM (Pacific Daylight Time, UTC-07:00) | | Books
|
|
|
|
Monday, August 09, 2004 |
|
|
My experience with the latest mouse from Microsoft motivated me to give Logitech a chance, so I picked up the Logitech MX 700 Cordless Optical Mouse. I vaguely remember that my past experiences with Logitech mice were poor, but it has been a long time, so they deserve another chance. Fortunately for me and them, I really like this mouse!
What’s not wrong with this mouse? Well, everything I mentioned about the Microsoft mouse! The scroll wheel clicks traditionally, doesn’t turn when brushed against, and is easy to click. The side buttons are pretty easy to click with my thumb, and though they are a little small, they stick out nicely so that they’re easy to find without looking. The software has great support for changing the button assignments, including the ability to set a mouse button to any keystroke combination.
As with all cordless mice, it uses batteries, which are a minor pain to replace every so often. Not so with this mouse, though; it has a recharging cradle!
Another cool feature of this mouse is the extra buttons; not only are there two side buttons, but there are “cruise control” buttons above and below the scroll wheel, and a “window-switching” button below those. As you click and hold a “cruise control” button, the window under the mouse cursor is quickly scrolled up or down. The “window-switching” button displays a little window that makes it easy to switch among applications. The best part is that they’re easy to click intentionally and hard to click accidentally!
I will admit that the orientation has taken me a little getting used to, but it doesn’t feel nearly as awkward as the Microsoft mouse, and I’m confident that I’ll be perfectly comfortable with it soon. (Unfortunately, there’s no software support for adjusting the orientation.)
All in all, I’d say that this is a great mouse. Read on if you’re interested in how (and why) I changed the software settings.
I didn’t change the left and right mouse buttons, of course, but I did change almost everything else. The middle button is assigned by default to Universal Scroll, which doesn’t work well enough for me to use, so I just assigned it to Middle Button. This ensures that all of my applications will work as expected – particularly Mozilla Firefox, which uses middle-click to open links in a new tab. Applications that natively support middle-click scrolling continue to do so.
I changed the big side button to double-click. I don’t really have any trouble with the dexterity required to double-click, but it’s still a small reduction in effort. Double-click is generally a different function than single-click, so it makes sense for it to have its own button, especially when I have so many to spare!
The little side button I changed to the Ctrl key. It’s great for one-handed multiple selection!
I didn’t end up liking the “cruise control” feature, so I changed the button assignments. I changed the top button to “Alt+F4” (which I found to work better than “Close Application”) to make it easy to close the active window. It's easier than clicking the little X, and I close a lot of windows in a day! I changed the bottom button to “Minimize” and the “window-switching” button to “Minimize All”.
I changed the scrolling size of the scroll wheel to the traditional 3 lines. The default, 1 line, is just too slow for my taste.
I found that the mouse cursor moved a little too quickly for me with the default motion settings, so I slowed the cursor way down and used “low” acceleration.
That’s it for the settings. Hopefully this will be a mouse I can use for years to come.
Update: I changed my button assignments, so I thought I'd reflect that here. |
8/9/2004 4:41:47 PM (Pacific Daylight Time, UTC-07:00) | | Hardware
|
|
|
|
|
|
|
| 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) |
|
|
|
|