I'm presently missing this month's OCLUG meeting - I was working
late and forgot. I'm planning on going to the pub though.
At work I produced a graph of our RPM dependancies using dot
and stayed late to print it. Unfortunately, even on 32
letter size sheets, it's too cluttered to be readable.
Well, it looks neat IMO.

I got a working board etched and assembled for the EEPROM
burner. Kinda neat, for about $10 in parts you can build a
small, serially-accessible storage device for up to 64
kibibytes. I'm now working on the layout for the USB
controller, but intermittantly. I like designing circuits
in general, but laying them out in a physically creatable
form gets a little dull.

I researched airfares last week for a possible trip to N.
Ireland, and have concluded that ITA software are
right about the current state
of fare-search software. Unfortunately, their database only
contains North American flights, so I couldn't try it, but
Travelocity is
terrible! I searched for flights from Toronto to Belfast
and came up with several, but most of the top hits had 18
hours travel time. After a few pointless search tweaks, I
searched Toronto to London, picked a flight that looked
reasonable, and found a London to Belfast flight that left
London 1.5 hours later. This cut the travel time to around
10 hours, and was $20 cheaper! I've decided not to
actually make the trip until late August, but now I know how
to search for fares. Sigh.

My Western Digital
drive went from intermittantly bad to intermittantly good,
so I replaced it with a venerable Quantum 850Mb that has
been in almost continuous use for the past 5 years. Sadly,
the software I use every day consumes more than 850Mb, and
NFS mounting the drive in my server was just too slow, so I
bought a new Maxtor 160Gb. This was a completely ridiculous
purchase considering that I barely used the 10Gb capacity of
the drive that died, but with things like CRPM and the CBDTPA
looming, I thought I should get the largest drive I could
afford while unrestricted drives are available. So that's
in the server and the server's 60Gb drive is in my desktop.
The kernel only sees 137Gb of the drive's capacity -
apparently I need a new controller to see the entire 160Gb.
Sigh.

Work has been interesting lately, with talk of a merger with
"a medium sized Montreal computer services firm". I know
the name of the firm but it hasn't been released publically.
This has led to a good deal of Fear and Uncertainty at work.

I am currently trying to eliminate the need to restart X
between users for our software.
This is required to disconnect all X clients and generate a
new MIT-MAGIC-COOKIE-1 key for the new user. Killing all X
clients without restarting is easy, but generating a new key
seems to be impossible. The documentation led me to believe
that you could delete the key from the .Xauthority file,
shared between client and server, then add a new one, but
doing so does NOT
remove it from the server's access list, which seems to only
get read at startup. X11R6 defines a security
extension that allows you to generate and remove keys.
But generating a key does not add it to the X
server's list, and you can't even do so manually, so the
XSecurityGenerateAuthorization
function seems nothing more than a cumbersome
PRNG. Ah, but with the ..RemoveAuthorization function I
could generate a few thousand keys before the Xserver
starts, dole them out one at a time to users, and revoke old
keys when the user logs out, right? Well yes, except that
Revoke requires an auth_in identifier for the key
that is only available from Generate, which generates keys
I can't use! Finally, I thought of a
kludge: X has an -audit option that prints a message when
clients connect and disconnect. I could watch for "invalid"
clients and kill them. Sadly, an exhausive search of the X
documentation reveals no way to translate the number -audit
prints into something actually useful, like a Window XID.
If I am wrong about any of this, please let me
know, but after a lot of experimentation it really
looks that way.

My USB DAC project is progressing slowly. I need to etch a
circuit board for the USB
controller since it's surface mount. For practice, I
have been trying to etch
a 24Cxx EEPROM programmer, but many of the traces end up
being too thin. For something as simple as the programmer,
I can retouch them with a resist pen, but the USB controller
board is too complex for that. Also, PCB is
possibly the most user-surly application I have ever used.
Very few commands work as documented, and many don't work at
all. Several times, I have been reduced to randomly
pressing function keys until I select the tool I want to
use. If there was a suitable Free vector graphics program I
would use that instead, but I haven't been able to find one.

On a sadder note, I haven't worked on the
Polegame in so long that it should be
declared legally dead. For now.

I am now fully annoyed at Western Digital. One of my hard
drives has failed, which I thought would be covered by the 3
year warranty. But apparently they mean 3 years from
manufacture date, which was in September, and won't
replace it. So I registered www.nowarranty.com as a
protest site..

zhaoway just mentioned Scheme, which is
interesting to me because I'm learning it. I was writing a
program for a local
programming contest in Scheme, but didn't have time to
complete it for the deadline. I would like to finish it
this weekend, but maybe I'll do my taxes instead (they owe
me money :).

At work, we're selling a 1.0 version of our product, now
called HomeBase, which you probably saw on
slashdot in January. We're currently extremely close
to a 1.1 release. The pop machine at work is 65dB, 1m from
the back and 61dB 1m from the front. Even in an office
filled with computers, that's loud.

Work got a pop machine on
Wednesday. So now instead of
buying pop at the supermarket next door at
39 cents a can and giving it to us, they buy it from the
vending company at 65 cents a can and sell it to us for 25
cents. You do the math :) The problem with the machine is
that it is incredibly loud. It has two modes: "quiet" mode,
where a fan sound is accompanied by a dull 60Hz "throbbing",
and "jet airplane" mode where the above two sounds are
combined with a whiny compressor and an even louder fan. I
moved desks to get away from it. I can still hear it, but
the sounds has dropped to an "ignorable" level.

In other work-related news, Real Networks and Macromedia are
bastards. They both offer free as in beer plugins for
download on their websites, but to distribute those with our
software, they want vast sums of money. An NDA prevents me
from disclosing the amounts requested, but it really reminds
me of l0pht's
demands for advance copies of BO2K. So I'd like to take
this opportunity to plug the GPL Flash
Library and pray for someone to reverse engineer Real's
proprietary protocols.

I actually worked on Polegame
on Sunday. At this rate I might still finish
porting the game in less time than it took Rob to
write it.

chakie: I have found that Tremclad rust
paint will stick to pretty well anything. And if you paint
the inside of plexiglass, it looks really cool, but
not exactly non-glossy :)

A friend pointed out that I have not written here in almost
a
year. I decided to do something about that, but I thought
it would be neat if I wrote a new entry on the one year
anniversary of my previous entry :)

Let's see, I have a job working for OEone, a Linux startup in
Hull, Quebec. Hull is adjacent to Ottawa where I live but
has better tax breaks for startups. We are developing an
"operating environment" for simplified computers mainly
intended for home users and Internet access. I wish I had
some screenshots I could link to; it's a really nice UI.
I'm personally working on the backend infrastructure that
supports all this UI, mainly the software updates
mechanism. I also work on packaging (RPMs), Makefiles,
distributions...

As for the project that I originally posted here about, I
haven't found time to work on Polegame
since my
last entry here. If I ever find time to work on it again, I
will likely switch it to SDL
over ClanLib since it
is a lot
closer to the Windows graphics calls I am porting from. Or
maybe not. It's unlikely I will find time to work on it
soon.

My main problem is that I spend most of my time at work on
coding or related activities, so it's generally the last
thing I want to do when I get home. Which is too bad since
there are many things I would like to work on. Apart from
finishing Polegame, I'd like to put some time into getting a
really good DVD player: I think that with enough work (and a
good external DAC) I could create a system that rivals a
high end THX
decoder, all with free software. Even some little changes
(like being to set a
delay on sound going to the rear speakers) would go a long
way toward improving things.

I'm sometimes a bit depressed
at work, and I can't really figure out why. I mostly like
what I'm working on, but I just don't get the feeling that
I'm getting anywhere. Oh well, maybe it will pass.

Started work on my guides for the impatient today. First
up: email
encryption. The guides are intended to give a brief
introduction to a topic, but cover everything you
need to know to use it effectively. They are not
intended "for dummies": if I don't explain a technical
detail, it's because I don't think one needs to know it.
Note that the PGP guide is a work in progress and is not
intended for public consumption yet, but please let me know
what you think.

Judas: If you don't hate CVS, you're not
trying hard enough :) Subversion
seems to be the most promising replacement, but it's not
ready yet.

jmason: I agree that recentlog scales
poorly. I think that ideally it should present entries in
chronological order, starting from your last recentlog view
or to
an arbitrary date. I currently read diaries chronologically
to avoid being confused by backreferences, but I'm wearing
out my arrow keys :)

Harbinger: Thursday's early morning bike ride ended
on an unpleasant note as I rode up the Rideau Canal to
discover that a cyclist had fallen into a drained section of
the canal at Hartwell's Locks. Pretty serious fall, several
meters.. I don't know if they're alright or not, there was a
news team there but I haven't seen anything reported..

Unpleasantness: I have so far made a point of not
talking about my job search here, but shortly after getting
home I discovered a certain company I had interviewed with
had
decided not to offer me a job. Quite disappointing as I
liked the company and position, even if it wasn't free
software. But what annoys me the most is that they ignored
all my phone messages and emails asking what was going on.
During my second interview, they told me that a decision
would probably be made within a few days, but after a week
of waiting, I started calling them. It took a furthur week
before I could get ahold of someone, who told me that they'd
sent me a letter, which still hasn't arrived. All
our other communications have been email or phone.. why send
a letter in this day and age?

On a complete tangent, I've noticed that a significant
number of people here live
in Ottawa or are moving here: zeevon,
Skud, cmacd,
dyork.. Anyone else? Show of hands? :)
I've only been here for about a month, but it seems nice.

I'm still trying to get a 2.4 kernel running properly. I
need 2.4 so I can access my (USB-impaired) friend's Canon
S100 (USB only) digital camera. Even 2.4.0-test9 doesn't
work with gphoto2, so I tried test10-pre4 (which doesn't
compile.. yes with 2.7.2.3) and then test10-pre3, which
panics on boot. I don't have the right kind of cable here
to connect a serial console, so it looks like a trip to
Radio Shack tomorrow if I want to see where it's
panicing.

I'm also going the other way, to see what kernel breaks
support for my DE205 network card. I started with 2.3.1
and am patching, grepping for ewrk3, and compiling if the
driver has changed. I've made it to 2.3.15 and so far it
works. In 2.3.45, the driver was marked obsolete with no
indication of what replaces it. In 2.3.44, the driver is
present but won't compile.

Hacking: Finished the Gnapster modifications, but
before I make a patch I want to see if I can avoid making
Gnapster require libxmms. I would imagine this is possible,
and would make my patch more likely to be accepted. On
Polegame, I modified the timer code (fairly critical to
gameflow) to run under Linux.. time.h allows much cleaner
code than the Windows stuff I'm porting!

Annoyance: I finally compiled one of the 2.4.0
test
kernels (test 9) to get USB support working for my friend's
new
toy.. Unfortunately my network card (DE205 / Etherworks
3) is no longer supported. Some digging reveals that back
in 2.3.45, a bunch of new code was accepted into the driver
(ewrk3.c), but at the same time, Config.in was changed so
that you never see the option to compile it in. Manually
editing .config (wow, just like the old days) allows me to
get it in, but it doesn't compile. I have no idea what to
do about this.

Life: My sister was in town last weekend, so we
went
out for various meals and activities. Unfortunately she
sprained her ankle on Friday night so on Saturday we went to
the hospital.. It's apparently much better now. Also went
to Alia's birthday party on Saturday night.

Spent the afternoon playing with Gnapster,
so that downloaded .mp3's would automatically queue in
xmms. That much was fairly easy, but I decided to add an
option to Preferences. This was more challenging, given
that I've never done any gtk programming. The gtk part
isn't working yet.. I'm going to wait until Kevin gets home and
ask him what I'm doing wrong :)

Oh yeah that reminds me, it's Thanksgiving weekend in
Canada.. and I have nowhere to go :( Not only that, but the
guys I'm staying with have both gone home for the weekend.
(Home for me is Newfoundland, the other side of the
country..)

I finally did some polegame in the evening. Decided to
try
compiling Gameloop.cpp (which is where all the fun
happens). I turned up a whole stack of problems, and am now
working on them. One fun thing I discovered: there is
another way for the game to end: If the direct draw
init fails, DestroyWindow is called. Not sure how to
port this. Probably just exit(1). I also commented
out a lot of sound initialization code.. I'm going to
comment out all sound for now. I'd rather just get the game
working first.

After completing Gameloop.cpp, I moved on to Layers.cpp.
There, I discovered a rather interesting piece of code:
#define dSCROLLACCELERATION = 1;
[...]
nScrollVelocity +=dSCROLLACCELERATION;

I had to stare at it for a while before I realized what
was
wrong, but now a larger question: why did it compile
correctly under Visual C++?

I finished Layers.cpp and tried to compile the rest of
the
.cpp's in control/ . The only one left that won't compile
is Timer.cpp, and I'll work on that tomorrow. It seems to
do a couple of Windows-specific things.