| Justin 的个人资料Various Technical Topics照片日志 | 帮助 |
|
7月29日 NOT the Worlds Most Advanced MouseI thought I'd share my experience with a recent consumer electronics purchase. Maybe I can save you some pain and trouble, and salvage something from my own wasted effort. The ProblemI started the search for a new mouse, because I am occasionally annoyed by the cord on my other mice, and I was hoping that wireless mouse technology was finally at a usable point. I first tried cordless mice two years ago using a Christmas gift certificate to purchase the top-of-the-line Microsoft solution. (Wireless Laser 6000). However, I found this to be completely unusable, because of it's penchant for missing clicks, and poor tracking. The Solution?So, I plunked down $100 last Wednesday to purchase a Logitech MX Revolution, which claims to be "The Worlds Most Advanced Mouse". I was disappointed to find that this mouse shares many of the flaws the MS Wireless mouse, and even manages to bring back some problems I thought we'd left behind with the old ball mice, and has upped the ante with a product design that is so flawed that at first could not believe it. But first… What I Want In a Mouse5 ButtonsI routinely make use of 5 buttons while using a mouse. I use the obvious left button to click and double-click my way through GUI interfaces. I use the right button to pull up context menus. I use the middle button to open browser links in separate tabs and to close those tabs with a single click. And I use the back and forward button to retrace my steps through browser-style interfaces. Any other buttons are more likely to be accidentally pressed than activated on purpose, and should be minimal and unobtrusive, or better yet, absent. Scroll WheelI constantly use the scroll wheel (if I'm using the mouse at all) for anything with a document-like interface. However, I'm skeptical of the value of side-to-side scrolling found on many newer mice. This might be useful for working with large pictures or something, but I don't see any value for me, and would always choose to disable the feature. Still, the scroll wheel has a lot of room for improvement. For me, it often scrolls too much with each step. Even the default Windows mouse driver assumes that the scroll wheel should scroll one or more lines at minimum. What I really want is something more precise, which I can currently only get by clicking and dragging the scroll bar "puck" or "thumb". This is an area where the MX Revolution really had a chance to innovate to fix one of my major gripes with current scroll wheel implementations. PrecisionMany people don't notice the precision of their mouse, but the quickest way I know to grasp the concept is to either a) Try to write your name using a paint program, or b) try to play a game. Under these and similar scenarios, differences in mouse tracking become very apparent. When I'm playing Age Of Empires III, I only have so much time to click all the little guys to tell them where to attack. If my mouse causes me to miss, or makes it difficult to select the right units in the heat of battle, then it makes me upset. Of course, if you're observant you can readilly notice the difference between a good mouse and a poor one when using any GUI. A good mouse makes it much easier to click on the myriad buttons, hyperlinks, and other elements of the modern graphical interface. ClickingThis should go without saying, but the mouse buttons should respond as expected when clicked. Both of the wireless mice I've used have occasionally failed to register a click the first time I've pressed a button. This could be a driver issue, or a problem related to RF interference, or any number of things, but it's definitely unacceptable. The ReviewI went with the Logitech, because I've been extremely happy with a MX518 wireless gaming mouse, which is, to date, the best mouse I've ever owned. My hope was that they would essentially provide an MX518 in wireless form, perhaps with fixes for my only few gripes with the wired version (Doesn't remember my DPI setting between reboots, and I occasionally accidentally hit the dpi and property buttons. ) Gimmick One, A New WheelThe coolest thing about the new mouse, is the idea for a new scroll wheel. They installed this nice heavy wheel in the center which works in one of two software-controlled modes. In the first mode it behaves like any other scroll wheel, clicking as you spin it, and scrolling N lines for each click. The second mode, disengages something internally, allowing the wheel to freely spin. This could have been so cool had it been implemented correctly. What I expected was that the scroll wheel would finally give the illusion of a physical connection to the document. If I moved it the tiniest amount, then the document should scroll by a single pixel or less. If I were to spin it, then the document should scroll at the speed of the wheel until it lost momentum or I stopped the spinning manually. This is NOT what happened. Instead, the free-spinning mode seemed to simply control the same N-line scroll wheel mechanism as before. Perhaps a driver update could fix this issue, by tying the free spinning mode to sub-pixel manipulation of the scroll thumb instead of hooking into the scroll wheel mechanism. This wouldn't quite be the right effect for long documents, because you'd want to limit the maximum speed, but it would be better, and I'm not sure if perfection can be achieved without specific software support. The scroll wheel also supports the ubiquitous horizontal scrolling feature that I dislike, but I can't remember if it was possible to disable it. No Middle ButtonWhen using the Logitech mouse driver, pushing the scroll wheel either switches scrolling modes between free-spinning and "clicking", or can be disabled entirely. There is no provision at all for supporting a middle button, which I personally find totally unacceptable, especially considering the uselessness of their scroll wheel feature. Gimmick Two, SearchLogitech added a new button behind the scroll wheel, which can only be used for their new search feature. When clicked on a highlighted word, presumably it will pull up the word the word in the search engine of your choice. I tried the feature only a few times, and never accepted the default Yahoo service. However, it rarely worked, and I was never quite sure what I was doing wrong, or if the feature is just buggy or non-intuitive. In any case, the only thing I really wanted to do was remap this button to control the scroll-wheel mode, and use the scroll wheel button for its usual middle-click duties. Of course, the Logitech software didn't support this. To be fair, clicking the search button on the mouse seemed to do the same thing as clicking the search button on my keyboard (MS Comfort Curve 2000. The best keyboard ever. I bought 3.). It brings up the new Vista search dialog, which I don't really like. Maybe there is simply some software conflict, or Logitech doesn't correctly support Vista. Gimmick Three, A Button On My ThumbLogitech added another strange feature to this mouse. There is a little toggle under your right thumb, which can be pressed forward or backward. When you do so, it will popup a very ugly window where you can choose between running applications. This seemed equivalent, but inferior, to the Alt-Tab switcher, or Flip3D found in Windows Vista. I wish I had thought to capture a picture so you could see just how poorly implemented this was. Once again, it was impossible to map these to more logical functions such as the usual forward/back buttons, which might have made sense. It also might have been cool to tie into Flip3D or the Alt-Tab switcher, but I probably would have mapped this feature to the buttons on the left of the mouse, as I would use it much less than browser forward/back navigation. The SoftwareStrangely this mouse seems to require more than the usual driver. To enable most of the advanced features you must run the SetPoint software in the system tray. If you exit this program, then the mouse reverts to normal MS mouse behavior. This does re-enable the middle button, but the thumb button and search button are disabled. If I were forced to keep this mouse, then this is probably the way I would try use it. The biggest problem with the software is the lack of useful customizability. As mentioned above, most features were hardcoded to specific buttons, and could only be disabled rather than reassigned. There were several sliders for controlling the scroll wheel speed and acceleration, but I could find no setting that made this feature usable, or in any way better than any other scroll wheel. Precision ProblemsThe most notable problems with this mouse had nothing to do with the flawed or missing features detailed above, but instead reflect my previous experience with a wireless mouse. Can't ClickSeveral times while using my computer, I would click on a link while web browsing, or click a Settler in AOE3, only to find that the click didn't register. At the time, I blamed myself or even Windows Vista. I thought that perhaps I'd moved slightly, and the game thought I'd dragged rather than clicked. However, over time, and with back to back comparison with a MX518 wired mouse, it became apparent that the mouse was just occasionally missing clicks. Maybe I have too much interference. I do have a Wireless-G network and 2.4Ghz portable phones. However, I don't really think that's any excuse for Logitech here, because this sort of an environment is commonplace among the user base for this product. Can't MoveIf you've used a mouse before 1998 or so, then you probably remember ball mice, and all the problems associated with them. Somehow Logitech has managed to recreate the experience of using one of these. This probably has the same root cause as my click problem above, but frequently when using this mouse, the pointer would freeze to a spot on the screen, and I could get it to move only by quickly moving the mouse to get it going again. This only seemed to happen when I was moving the mouse slowly in the first place. For example, I might be trying to click on a AOE3 Settler or army unit to issue new orders. Lest you think that I'm just being picky, my girlfriend also noticed the same problems with both wireless mice while playing Age Of Empires, which was quickly remedied by reverting to an old Microsoft IntelliMouse Optical. These problems occurred with any software, it was just much more noticeable in a game, because you often need to move at a precise rate to click on a moving object. SummaryIn my first hardware review, I give Logitech MX Revolution a 0/10. Although many of the problems might be fixable by future driver, firmware, and software updates, I don't think many of the decisions such as the need to run a separate software program instead of just a driver, will likely ever be addressed. I know of other people who love this mouse, so feel free to experiment with it yourself, but I advise you to purchase from a local retailer with a forgiving return policy, and to hang on to your receipt. If your experience is anything like mine, then you'll probably regret the wasted effort. On Friday, I took the mouse back for a refund. In the end I'll probably just buy another Logitech MX518, but I'm still stuck with a wired mouse whose cable occasionally interferes with whatever I'm trying to do. Maybe I should just clean my desk. 7月27日 RAII For .NET and JavaOne of the complaints that many C++ developers have with Java and .NET is the lack of destructor semantics. I've even included this as a proposal for a Scoped keyword in my post about VB shortcomings. Basically, with C++ you can implement a special method on a class which will automatically be called when instances go out of scope. Note, that this really has absolutely nothing to do with freeing memory, although that was it's most common usage in older (pre-1990?) C++ code. These days this mechanism is much more common, and used for all kinds of things, mostly still involving release of resources. (Files, Mutexes, Database Connections, etc.) It's even become a best practice with its own acronym, RAII (Resource Acquisition Is Initialization). C# and VB have a similar general-purpose mechanism with Using Statements, but the semantics can get unweildy. Java and older versions of VB are stuck using try/finally (also available in C#). C++ void foo() { Connection a("1"); … Connection z("26"); // Do stuff } C# void Foo() { using (Connection a = new Connection("1") … using (Connection z = new Connection("26") { // Do stuff }
} VB Sub Foo Using a As New Connection("1") … … Using z As New Connection("26") VB (older versions) Sub Foo Try Dim a As New Connection("1") … Dim z As New Connection("26") // Do stuff Finally a.Dispose() … z.Dispose() End Try End Sub Java void foo() { try { Connection a = new Connection("1"); … Connection z = new Connection("26"); } finally { a.close(); … z.close(); } The C++ code is very clean, because the special destructor method is called to close each connection as they go out of scope at the bottom of the method. The C# code is much more verbose, but stacking the using statements at least alleviate the nesting problems of the VB version. The older VB and java versions are stuck manually closing everything in the finally block, which can be especially cumbersome when you have to check each instance for null. I think this is definitely an area where these languages need some more syntactic sugar. I think a Scoped keyword would be ideal. Here's how it could look in Java. void foo() { scoped Connection a = new Connection("1"); … scoped Connection z = new Connection("26"); // Do stuff } Each Connection object would be responsible for implementing a special method which would automatically be called when the references went out of scope. This could either tie into the Finalizer mechanism similar to how .NET does it, or it could use a new approach perhaps consisting of a compile-time annotation for the Connection class. (For more information on .NET IDisposable) C# and VB could really use something similar, because the Using syntax often remains too bitter for my taste. For C# and especially VB, we can probably do better using something like Scott McMaster's suggestion. Here we trade some efficiency for convenience. I would write it like so… void Foo() { using (ScopeManager scope = new ScopeManager()) { Connection a = new Connection("1"); scope.add(a); … Connection z = new Connection("26"); scope.add(z); } } Here we save ~26 lines of using statements, each possibly with its own nesting level. It's still not as nice as the C++ mechanism, but it's available now, and preferrable to any alternative I can think of at the moment. This could potentially be useful in Java too, but less so due to the lack of Using semantics.
|
|
|