2007-01-19
Dear Belkin, choice makes humans sad.
Which f5d7050 do I have? No idea.
As usual, the device has a huge STOP: Run the Installation CD-ROM FIRST. Inserting the CD and clicking "install" gets me:
---------------------------
Belkin Wireless USB Utility
---------------------------
Click on icon if you want to communicate directly to another wireless computer near you (Ad-Hoc).
---------------------------
OK
---------------------------
...and then disappears.
I decided, at random, to download the latest version of the drivers for Windows XP, ie. f5d7050-ver4.exe, a tiny 28MB, which do exactly the same as the CD.
A WinRAR extract of the download (eventually) yields a folder called Driver
containing the necessary Windows driver files for 98 thru XP. Total compressed size of the necessary parts of the Driver
folder that are needed for XP? 120kB. I don't even want to know what craplets were bundled along with the driver.
Result: A working wireless network card having completely ignored all of the warnings from the packaging, setup, installer, manual, etc. and only the final step, installing the (non-WHQL'd) driver, as Administrator.
And people wonder why it's the technically inept that have all the problems with their OSes...
2007-01-10
My name is Chris West. I live in London, UK.
I'm a developer. I love developing. And sysadmin. I'm currently interested in
mostly-remote, part-time contracts.
Hire me.
Please don't waste my time by sending me full time positions. I couldn't accept
one, even if I wanted to. Which I don't. Check back here to see if I've changed
my mind.
I've previously worked for a machine learning fintech startup, a major
British broadcasting corporation, a payroll company, and a JVM vendor.
I'm around the internet in various places as Faux or FauxFaux, mostly linked down the side.
Gpg key: 408A E4F1 4EA7 33EF 1265 82C1 B195 E1C4 779B A9B2.
2007-01-10
I've been playing with Adobe GIL, following it's inclusion into Boost, and I've been getting some fun compile errors in relation to <windows.h>
. Note that, even if you aren't including <windows.h>
, some of the boost headers do.
Here lies: What not to do, so you don't waste hours on it like I did.
Test-case:
int main()
{
::gil::rgb8_image_t a;
::gil::jpeg_read_and_convert_image("a", a);
}
Compiled with Visual Studio 2005 SP1, Boost 1.33.1 and JPEG 6b (27-Mar-1998):
cl /EHsc jpegio.cpp /I c:\sdk\libs /I c:\boost\include\boost-1_33_1
First attempt, <windows.h>
first:
#include <windows.h>
#include <gil/core/gil_all.hpp>
#include <gil/extension/io/jpeg_dynamic_io.hpp>
Error:
jpegio.cpp
c:\sdk\libs\gil\core\channel.hpp(90) : warning C4003: not enough actual paramete rs for macro 'min'
c:\sdk\libs\gil\core\channel.hpp(92) : warning C4003: not enough actual paramete rs for macro 'max'
c:\sdk\libs\jmorecfg.h(161) : error C2371: 'INT32' : redefinition; different bas ic types
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\basetsd.h(62) : see declaration of 'INT32'
c:\sdk\libs\jmorecfg.h(215) : warning C4005: 'FAR' : macro redefinition
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windef.h(145) : see previous definition of 'FAR'
Second attempt, other way around, Error:
jpegio.cpp
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\basetsd.h(62): error C2371: 'INT32' : redefinition; different basic types
c:\sdk\libs\jmorecfg.h(161) : see declaration of 'INT32'
Third attempt:
#include <windows.h>
#include <gil/core/gil_all.hpp>
#define XMD_H
#include <gil/extension/io/jpeg_dynamic_io.hpp>
#undef XMD_H
This should, in theory improve matters, as XMD_H being #defined stops <jmorecfg.h>
trying to redeclare INT32.
Oh no.
Error:
jpegio.cpp
c:\sdk\libs\gil\core\channel.hpp(90) : warning C4003: not enough actual parameters for macro 'min'
c:\sdk\libs\gil\core\channel.hpp(92) : warning C4003: not enough actual parameters for macro 'max'
c:\sdk\libs\jmorecfg.h(215) : warning C4005: 'FAR' : macro redefinition
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windef.h(145) : see previous definition of 'FAR'
c:\sdk\libs\gil\core\color_convert.hpp(148) : error C2589: '(' : illegal token on right side of '::'
c:\sdk\libs\gil\core\color_convert.hpp(221) : see reference to function template instantiation 'void gil::color_converter_default_impl<lt;T1,C1,T2,C2>::operator ()<lt;SrcP,DstP>(const P1 &,P2 &) const' being compiled
with
[
T1=SrcChannel,
C1=SrcColorSpace,
T2=DstChannel,
C2=DstColorSpace,
SrcP=gil::pixel<lt;gil::bits8,gil::cmyk_t>,
DstP=gil::pixel<lt;gil::bits8,gil::rgb_t>,
P1=gil::pixel<lt;gil::bits8,gil::cmyk_t>,
P2=gil::pixel<lt;gil::bits8,gil::rgb_t>
]
c:\sdk\libs\gil\extension\dynamic_image\../../core/image_view_factory.hpp(71) : see reference to function template instantiation 'void gil::default_color_converter::operator ()<lt;gil::pixel<lt;T,C>,gil::pixel<lt;T,gil::rgb_t>>(const SrcP &,DstP &) const' being compiled
with
[
T=gil::bits8,
C=gil::cmyk_t,
SrcP=gil::pixel<lt;gil::bits8,gil::cmyk_t>,
DstP=gil::pixel<lt;gil::bits8,gil::rgb_t>
]
c:\sdk\libs\gil\extension\dynamic_image\../../core/image_view_factory.hpp(69) : while compiling class template member function 'gil::pixel<lt;T,C> gil::color_convert_deref_fn<lt;SrcConstRefP,DstP,CC>::operator ()(gil::pixel<lt;T,gil::cmyk_t> &) const'
with
[
T=gil::bits8,
C=gil::rgb_t,
SrcConstRefP=gil::cmyk8_ref_t,
DstP=gil::pixel<lt;gil::bits8,gil::rgb_t>,
CC=gil::default_color_converter
]
c:\sdk\libs\gil\extension\io\jpeg_io_private.hpp(166) : see reference to class template instantiation 'gil::color_convert_deref_fn<lt;SrcConstRefP,DstP,CC>' being compiled
with
[
SrcConstRefP=gil::cmyk8_ref_t,
DstP=gil::pixel<lt;gil::bits8,gil::rgb_t>,
CC=gil::default_color_converter
]
c:\sdk\libs\gil\extension\io\jpeg_io_private.hpp(178) : see reference to function template instantiation 'void gil::detail::jpeg_reader_color_convert<lt;CC>::apply<lt;V2>(const View &)' being compiled
with
[
CC=gil::default_color_converter,
V2=gil::rgb8_view_t,
View=gil::rgb8_view_t
]
c:\sdk\libs\gil\extension\io\jpeg_io.hpp(147) : see reference to function template instantiation 'void gil::detail::jpeg_reader_color_convert<lt;CC>::read_image<lt;Image>(Image &)' being compiled
with
[
CC=gil::default_color_converter,
Image=gil::rgb8_image_t
]
jpegio.cpp(12) : see reference to function template instantiation 'void gil::jpeg_read_and_convert_image<lt;gil::rgb8_image_t>(const char *,Image &)' being compiled
with
[
Image=gil::rgb8_image_t
]
c:\sdk\libs\gil\core\color_convert.hpp(148) : error C2143: syntax error : missing ')' before '::'
c:\sdk\libs\gil\core\color_convert.hpp(148) : error C2780: 'T gil::channel_invert(T)' : expects 1 arguments - 0 provided
c:\sdk\libs\gil\core\channel.hpp(235) : see declaration of 'gil::channel_invert'
c:\sdk\libs\gil\core\color_convert.hpp(148) : error C2059: syntax error : ')'
c:\sdk\libs\gil\core\color_convert.hpp(149) : error C2589: '(' : illegal token on right side of '::'
c:\sdk\libs\gil\core\color_convert.hpp(149) : error C2143: syntax error : missing ')' before '::'
c:\sdk\libs\gil\core\color_convert.hpp(149) : error C2780: 'T gil::channel_invert(T)' : expects 1 arguments - 0 provided
c:\sdk\libs\gil\core\channel.hpp(235) : see declaration of 'gil::channel_invert'
c:\sdk\libs\gil\core\color_convert.hpp(149) : error C2059: syntax error : ')'
c:\sdk\libs\gil\core\color_convert.hpp(150) : error C2589: '(' : illegal token on right side of '::'
c:\sdk\libs\gil\core\color_convert.hpp(150) : error C2143: syntax error : missing ')' before '::'
c:\sdk\libs\gil\core\color_convert.hpp(150) : error C2780: 'T gil::channel_invert(T)' : expects 1 arguments - 0 provided
c:\sdk\libs\gil\core\channel.hpp(235) : see declaration of 'gil::channel_invert'
c:\sdk\libs\gil\core\color_convert.hpp(150) : error C2059: syntax error : ')'
...
Fourth attempt, the "right" way:
#include <gil/core/gil_all.hpp>
#define XMD_H
#include <gil/extension/io/jpeg_dynamic_io.hpp>
#undef XMD_H
#include <windows.h>
This works as intended.
Solutions?
Assuming that we're not going to get the JPEG code patched, the INT32 definition from <windows.h>
comes from <basetsd.h>
, which declares the BASETSD
_H header-guard macro.. it'd be nice if GIL issued an explanation of what was going to go horribly wrong, instead of that lovely template error in test three?
2007-01-06
... is a stunning monitor. Really, go buy one. Even better in portrait mode.
I've had two minor issues with mine (rev a03):
- The usb hub in the monitor turns off when you turn the monitor off, meaning that any devices you had plugged into it will be "unplugged", then re-plugged-in when you turn it back on.
This'll probably only affect you if you plug your mouse and keybard into the two ports in the back (that were so obviously designed for this purpose) as it might take a few seconds after powering on the monitor before you can use them.
- Flickering. Some images that have been crafted by scheming web-designers, when displayed on certain areas of the screen cause artefacts. I'm not sure if nobody has noticed this, or if it's a defect with my panel.
I've captured a few here. These need to be viewed as close to fullscreen as possible, without any scaling on. Try hitting F11 in your browser.
- A shot of a random Java6 documentation page (with all the boring bits removed) gets a row of randomly flickering (dead-looking) pixels to the left of the "J".
- A manipulated screenshot based on the background from the C++ pastebin on sourceforge. The vertical lines near both edges of get very jaggedy, and the colour-spectrum has random dead-pixels in, too. Assuming this happens on anyone else's monitor at all, if you look closely at the bottom-left, the lines are fine, as the "background" bit to the right has been tuned (read: waggled around madly) such that there's no flicker.
This effect is rather hard to reproduce by accident, but is very clear when it happens.
Anyone had anything similar?
2007-01-01
Alternately: This'd be a wish list but I'm a realist.
Developers:
- Better awareness of "unicode", especially the terminology (the word 'unicode' itself, encodings, etc.). Joel on Software's article on Unicode is a good start.
I'm going to blame the developers for user's inability to grasp "unicode", as it should be on by default, and should be very hard to break. - Better awareness of displays. There are a whole range of types of display, not all of them are 4:3.
There might even be more than one display present, I don't expect you to make use of both of them, but it'd be nice if you didn't assume that the primary one was the only one. - Better awareness of Limited User Accounts (also Least User Access). This applies equally to Windows developers (Vista will be very annoying when applications need elevated privileges, even if they are avaliable) and to those writing software to be packaged (or to manage packages) for linux distributions (desktops tend not to be multi-user machines, your old ethos is dead).
- Seperation of Content and Display (ie. MVC). Your application or website has something to offer it's users(/visitors), they want to be able to access it. Websites with 400kB of navigation, menus and (precious, precious) advertising; applications with wooooshy! buttons and pretty colours may be "cool", but they suck for people who want to get the Content out.
RSS, Google Sitemaps and various web-services are a good start, but they're not benifiting the end user (much) yet. - Integration, applications should look and feel alike. Microsoft are terrible at this (see Windows Media Player and Office 2007, for instance), and they're not helped by some libraries.
- I'd also like to see the GPL die a horrible, fiery death, but that's the subject of another rant.
Industries:
- The Music industry. Many people have argued this to death. You can't charge what you think you can charge (99p for a DRM'd, low-quality track, for history's sake) and expect people to care. DRM is fine, but it (significantly?) reduces the value (and hence the price) of your product. Go adopt AllOfMP3's business model where price has some relation to the quality of the product.
As a specific wish, I'd like the Ministry of Sound to put their archives up for sale under that model. They're not making you any money as it's currently impossible to buy most of the cds. - The Movie industry. With the release of Vista, and PCs (or XBoxen) moving under people's televisions, you have a whole range of media protection features, use them, and people's fast internet connections, and start renting us stuff.
£3 for a single play of a movie (in HD) five days after release would be both awesome, destroy piracy and really piss off the cinemas. Oh well. - All the others: Staggering releases around the world is lame (TV and Game industries, I'm looking at you).
The internet:
- Communities: Most community sites as of now are either dead (on the soul side), (ie. Slashdot, Digg, Reddit), or heading that way (Myspace, Facebook, Youtube). Can social communities exist on the internet? Evidence suggests not, oh well, we're not going to lose much.
Wish: Webmasters need to work out that their site is NOT a community site, before it's too late. You know who you are. Please?
Predictions on timescales for any of these, anyone? I've picked some that very few people care about, or that, in general, people disagree with me on, and I can't see any of the above happening in 2007.
We shall see.
2006-12-31
Alternately: Can I ask you a question?
Having read Skumby'sHi!! How are you?! I was thinking about how it extends to text-based conversation. Much of my human interaction currently is via. text-based mediums, such as MSN, SMS, Jabber, IRC and Sametime (although, luckily, not the version that's inflicted on the public :)).
Starting with IRC, specifically, support channels for various topics (ie. freenode's ##c++ and ##java), where people will go for help and support (from volunteers). In general, when a new body turns up, there are basically three things that happen:
- They get it right, ie. they don't do one of the below, this doesn't, however, necessarily mean that they're going to ask a "smart question".
< new> hi?
< new> ne1 have ne experience with {blank}?
or
< new> can i ask a question about {blank}?
Both of those questions are complete time-wasters (and would never get to "How are you?!"), the second set admittedly yields some information (maybe even enough for a no), but contains no information that wouldn't be in your "smart question" anyway. Grr.
On to MSN/Jabber/Sametime.
If someone contacts you, they want something. Three categories again:
- They're bored, and want you to share something interesting you've done.
- They've something absolutely positively awesome that they can't wait to share with/inflict on you.
- They want something non-social, ie. something physical, or help, ie. for you to actively do something.
All three of those will probably start with a "Conversation Header" ("Hi!" "Hey." "How're you?" "Fine thanks, you?" "I'm okay, thanks... say.."), which is of no value to me as the receiver.
Even worse: I leave myself connected to MSN/Jabber/Sametime(/IRC) 24/7 (or as close to as possible). Why? So people can contact me. I might not be sitting there reading what they write, as they write it, but I'll (almost) definitely read it at some point. How does the "Conversation Header" 'help' here? It stops them giving me even the slightest clue what they were wanting to talk about. Grrr.
On to SMS: the ultimate communication mechanism.
I love SMS. It fixes all of the above, everything:
- Charging per message.
- Limiting the length (160 chars on real phones).
- (according to reliable sources, my sister (no, I won't link to your myspace page)) makes it much easier to type properly, and complete hell to try and write txt spk, thanks to predictive text.
- No guarantees on reply times.
So, in conclusion, to make the (textual) world a better place, etc.:
Bah, humbug.