Blog Closed

This blog has moved to Github. This page will not be updated and is not open for comments. Please go to the new site for updated content.

Sunday, March 30, 2008

Assorted Stuff

So it turns out that my computer isn't in the bad shape that I thought it was. There was a problem with the Parrot SVN repository where two directories had the same name, but with different letter cases. This isn't a problem on Linux, but it causes a conflict on Windows. One of the committers fixed the problem, and now everything works as expected. I also went in and removed some old software, including an old version of Norton Antivirus. I had actually forgotten that I even had it, it's been on my computer for years now. Removing that has had a noticeable positive effect on system performance.

I still want to reformat my computer, but I'm not under the gun about it yet. I want to do it around the end of the semester, so I have some time to research it first. I do want to switch over to Linux for the work computer. It's an IBM laptop, and I hear there is good support for those now. I am also going to price out a solid-state HDD, since I'm worried about the health of my current drive.

I've been working to implement some of the basics of the Octave language, and trying to teach myself how to use the Parrot Compiler Tools in the process. However, I've reached the critical juncture where I need to add two of the most important components: matrices and subroutines. The problem is that in MATLAB/Octave, both subroutine calls and matrix indices use the same syntax: ident(args). This means we need to determine whether we are calling a subroutine or indexing a matrix when we see this construct. Here are the rules I've worked out for it so far:
  • If the index is an lvalue, like "x(a) = b", it must be a matrix. MATLAB/Octave does not support lvalue function calls, that I know of
  • Functions, as I've mentioned before, are located in similarly named files. That means that my interpreter isn't going to maintain a list of all defined functions, but will instead search the filesystem when a function is called. So, I can't test a list of defined functions when trying to differentiate between the two.
  • I will need to maintain a list of variables. When I see an rvalue with parenthesis, I check the list of variables to see if it is one, and then start searching the filesystem for a file/function with that name. If this fails, throw an exception.
Once I get these things set up properly, however, i will be in great shape.

Saturday, March 29, 2008

Borked Computer

Short update tonight, Dave and Alyssa are coming over in a bit, and we're going to try our hands at making a chocolate fondue.

Anyway, I think my laptop is totally borked. File accesses are slow, windows explorer seems buggy and obnoxious. SVN has stopped working entirely, giving me errors about how files are locked, or how it can't create a folder that already exists, or other garbage like that. I've been trying to avoid having to do a complete system reinstall until after the semester was over, but it's looking inevitable at this point. I only hope that these aren't symptoms of a larger hardware problem (old drive syndrom is a real possibility, I suppose). I could afford to replace the HDD if I needed to, but let's all hope it doesn't come to that.

I'm planning to do the reinstall, or at least to start serious planning for it, on Sunday night. I have to figure out what software I need to reinstall, what files I need to backup (and I need to find a reliable destination to back it up to). I know that I have current versions of my thesis backed up already, in several separate locations, so I'm not worried about losing that. However, i'm not looking forward to the multi-hour reinstall process for the design software that my thesis requires: MATLAB, Xilinx ISE, and Xilinx System Generator, among others. The last two in that list are only available as downloads, are over a gigabyte each (and the ISE requires an additional gigabyte update file, that also can only be downloaded), and that alone is going to take the better part of a day.

If it weren't for the fact that I needed MATLAB and Xilinx, I might have used this as an opportunity to make the switch to Linux. I'm decently sure that a MATLAB port for Linux is available (my thesis relies on functionality which is sadly not available in Octave), but I don't know if Xilinx is. I'll look into it, but I think that my timeline is too short right now to do the proper research.

Friday, March 28, 2008

My Day Home, a Timeline

circa 8:30: I slowly climb out of bed. I've been laying, awake but with my eyes closed, for at least an hour. Haven't gotten enough sleep, but can't make myself get any more. Throw on my pajama pants, yesterday's T-shirt, and walk out to the living room.

circa 8:34: Plop down in front of the computer, where I plan to spend most of my day. I need to set a timeline or I wont get any work done. I decide that I will start to work on my thesis at 10AM sharp, so I have an hour and a half to goof off.

9:00: I've finished reading my emails and all the blog posts that have piled up in my aggregator since I went to bed at 1AM. I have received an email from my advisor, it's a happy email. He's waiting for the next draft of my thesis. I send back a thoughtful reply.

9:10: Another email pops into my inbox, it's another email from my advisor. This email, about a class that I am teaching, is significantly less happy. I write most of an angry reply but thankfully, I do not send it.

9:15: I erase my first email, and draft a second one, much more calm this time. My students think they are all getting A's in my lab, and my professor is upset about this. All my students are not getting A's, and some of them are actually doing very poorly.

9:20. I want to do some work on my Octave implementation. Looking for answers to some questions I have, I start browsing the source for the NQP compiler.

9:40: This stuff is amazing! I'm still reading through all this source code, learning things that I would have never gotten from the documentation. "Oh crap! It's 9:40! I'm supposed to start working on my thesis in 20 minutes!". I close the NQP files and open up the Octave ones. There are a few things I want to try to do now, while it's still fresh in my head.

10:04: Done coding, but no time to do any quick tests. This annoys me, but a timeline is a timeline, and I'm already 4 minutes late. I open my thesis on one computer, and open up the Temple University "Dissertation and Thesis Handbook". The handbook is lousy. I look for the [edit] button so I can fix something. This isn't a wiki and I cannot find the button. I consider, briefly, sending an email to the webmaster to complain about the poor quality of this document. I decide not to waste the time.

10:10: I start my first pass of the document. At 100 pages and counting, this is no easy feat. My first task is to remove some sections which have been deprecated and information which is no-longer being included.

11:00:Finish my first pass, check Gmail and Google reader. Nothing good.

11:05:Time to start the second pass. This time, I'm focusing on formatting issues: properly indenting paragraphs, properly labeling figures. Updating text styles for my section headers, combining small paragraphs and separating up large paragraphs. This is going to take a while.

1:15: Finished the second pass. I'm hungry and my fingers hurt. I haven't eaten anything since I woke up today, although I did drink half a glass of water. I get up to go make food. We have left-over meatballs, and I consider making a meatball sandwich. I also consider making myself a fried egg sandwich, which is something of a specialty of mine. I look around for some chips, and some other stuff to eat too. I decide that I'm going to eat some yogurt and fruit, have a sandwich, a glass of orange juice, some chips, and maybe a bowl of cereal. I'm very hungry.

1:20: My appetite was much bigger then my motivation to prepare food. I eat two slices of toast with butter.

1:25: I decide to take a break from work and write a quick blog post. I'm too frazzled for complete sentences so I opt to write a timeline instead. I say things which are very funny to me, but in retrospect are not funny to anybody else. I publish the blog post anyway.

1:35: Time to get back to work. Third pass. I need to fix section numbering, figure numbering, and table numbering. I need to manually create a table of contents because the one in Microsoft Word doesnt do what I want it to do. I need to fix tables which spread onto multiple pages.

circa 4:00: Go crazy. Take off all my clothes, dance outside, and shout swear words at the sun. Try to climb a tree and hurt myself. Cry, laugh, and then cry again. Tell my thesis that I hate it and that I won't work on it anymore. The thesis talks back. We reach an understanding.

circa 4:15: Fourth pass. This time I need to try to fix my references and bibliography.

Thursday, March 27, 2008

Octave update

I've had a little bit of down-time today to work on my octave port, and while I haven't made a lot of progress I'm happy with what is working now. I've spent an inordinate amount of time tracking down bugs which were completely trivial. I don't have the time now to do it, but eventually I want to try to hack in some more descriptive error messages for this thing.

My implementation is small and horribly incomplete, but there are a few things that can be done with it already.

1) I can do simple expressions, assigning to simple scalar variables, etc. Plus, I have (mostly) implemented that particular quirk of MATLAB/Octave where omitting a semicolon at the end of a line causes the result of that expression to be printed. So, if I type "5 + 2", it will print the answer 7. However, if I type "5 + 2;" (notice the semicolon at the end), it won't print anything. This behavior works the way you would expect in most cases, although I need to check for many more corner cases here.
2) Another "feature" of MATLAB (i dont know if this is the same in Octave, although I assume it would be) is that "!" creates a system command. So typing "! echo hello" passes the command "echo hello" to the shell, which prints out "Hello" on the console. Implementing a series of file and directory management operations is going to be a simple extension of this concept, but I haven't bothered to do all that yet
3) Simple built-in functions work as expected. I have not yet implemented a capability to define custom functions in M yet. This is probably the next thing I will work on, although I don't know if I will have time in the next few weeks to do it. I have written a few simple functions like sum() and average() that do things like would be expected. These functions will all have to be rewritten anyway once I implement matrices.

What I haven't done yet is implement control structures like IF, WHILE, and FOR. FOR loops, especially, are dependent on the MATLAB/Octave vector data type, and operate more like the way we would expect a FOREACH loop to work. I have also not yet implemented any kind of exception handleing TRY/CATCH features, because everything raises an exception at this point and there is no point to it. Some of the next few things on my list to do (and again, this is long-term wishing at this point) are:
  1. Polish up what I have currently
  2. Implement functions
  3. Implement conditional operators (I left these out for simplicity, and they shouldn't be too too hard to hack in). With these, I can implement IF and WHILE loops easily.
  4. Implement matrices. This is a doozy because there are no multidimensional datatypes that I can hijack subclass for this purpose. That means i'm going to have to write a custom PMC to do the job. On the bright side, if I do make such a class, we can probably add it to the parrot core so everybody can use it.
  5. Start working on libraries. These can be a combination of PIR and M functions. I also want to try to incorporate the ideosyncratic way that MATLAB searches through the path to find files, and how files are assumed to be named the same as the functions they contain. In short, this means that searching for function "X" is reduced to searching for file "X.m".
After that, I'll have a good portion of the core language implemented, and I can start getting more creative.

After this, it's thesis thesis thesis until the dragon is slain. Ideally, that will be within two weeks. Here's hoping.

Wednesday, March 26, 2008

Updates on All Things

Talked to my advisor yesterday (and by "talked", I mean "exchanged emails") and I think that I'm on schedule to be done the thesis within two weeks. That schedule gives me an additional two weeks of emergency holy-crap-there-are-errors-to-debug-last-minute time, in case I need it. Murphy's Law seems to indicate that I will. The unforseen variable at this point is using the Xilinx System Generator to synthesize the processor models, and have them loaded onto the FPGA hardware. I know that the process should work, in theory, but I don't know if the system will work properly on a model that is so large and complex as my processors.

I got back the first 40 pages of my first draft from my advisor today, covered in the expected red ink. I asked him what he thought of the project, if I was going in the right direction, and whether I needed to make an emergency change of course between now and the deadline. He said "Frankly, you're doing too much work". That's refreshing to hear, I suppose, I was trying to be a little bit ambitious. He said that instead of creating three separate processor models, that I should focus my energies and only create one. That's fine, I'm mostly finished with the first one anyway, and I can mention my efforts on the other two models in my conclusion.

I've been speaking with Jerry Gay in preparation for applying to the Google Summer of Code. He's the contact for the Parrot-related projects, so we've been talking a lot. I should have put in the application yesterday, but I got stopped up over a few details. I hope to have it in by today or tomorrow at the latest. I think that I'm settled on trying to implement the new tricolor incremental garbage collector for Parrot, although I found out yesterday from Jerry that previous GSOC projects have tried to implement other Garbage collectors as well, although I don't think previous projects tried to implement the same kind of GC as I am interested in. It surprises me that something so esoteric as a garbage collector would seem to draw so much attention from new contributors, you would think people would want to work on something more sexy like a new language or a scheme of tree optimizations or something.

Speaking of new languages, my octave clone (which I am currently calling "poctave", for simplicity) is coming along well. I haven't had as much time recently as I would have liked to really get this project moving, but the ease of using the compiler tools is helping to make my time more productive. I've got basic statements up and running, my grammar is about 75% complete, depending on all the features that I try to implement, and I'm laying the ground work for some of the necessary matrix and cell-array PMCs for it. There is a long way to go before i get anything that's both usable and resembles Octave syntax, but I'm making progress. Once I get the basics done, I really want to move on to my wishlist of features to add to it. Eventually, I want to try and get the language added to the Parrot SVN respository, so that maybe some more people can help work on it. Maybe I should create a project for it on sourceforge instead.

I created my book today on Parrot: [[Parrot Virtual Machine]]. This book is still in those precious early infancy moments, so it's not much to look at yet. However, I'm trying to be very comprehensive in my coverage, and hopefully it will turn into a great resource. Once I get a little bit more ground work done, I want to announce it on the Parrot mailing list or somewhere else, and try to attract more contributors that way. The book will be, I think, a great resource because a lot of Parrot documentation at the moment is fragmented, incomplete or ad hoc ("check the source, the source is the documentation"). Pulling together stuff from existing documentation and lessons that i've learned the hard way will create an excellent resource, I think. It won't be long till I start preparing for the Perl 6 book that I want to write as well.

Monday, March 24, 2008


I've handed in my first full draft of the thesis proposal to my advisor (full with the omission of source code, frontmatter, and a complete bibliography), and am waiting anxiously for his feedback on that. I have a little bit more to do in the way of implementation, such as finalizing my processor models and verifying their operations, but I'm hesitant to do that last bit until I've received the final go-ahead.

In the mean time, I'm already trying to divvy up all the free time I expect to have after the thesis is finalized, but before the semester proper has come to an end. Plus, I'm looking at the very real possibility that I'm not going to walk directly into a job as soon as I graduate (since I haven't even managed to get invited to a single interview yet). Keeping busy helps me to avoid the depression that would accompany such poor prospects otherwise.

Here are some of the projects that I would like to work on, or have already started working on.
  1. My port of Octave to Parrot. It's actually coming along reasonably well, and progress is going remarkably quick. I have gotten a little bit ambitious (as I always tend to do), and would like to actually create two versions: The first will be "standards" mode, which will try to duplicate the Octave/Matlab syntax directly, and the second will be my "dream" mode, which will incorporate my wishlist of improvements. I'm tinkering on this part-time, and will post updates as they come.
  2. "Parrot Virtual Machine", a Wikibook about Parrot. I'm in the design phase right now, but I want to create the book soon while the iron is hot. I'll post more information about this later.
  3. Parrot. I really want to get more involved in this project, and when I have more time I'm definitely going to try. I am planning to apply for the Google Summer of Code (GSOC) program and work on this stuff, but if I don't get accepted into it I will probably still try to help out anyway. I want to work on the Garbage Collector (I've been doing a lot of reading on this recently), or do some serious work with the Compiler Tools. I have a few sub-ideas here, some of which might be stupid. I'll post them later.
  4. Wikibooks Book Author GUI. I want to create some tools, probably in JavaScript, that will help to automate a number of common tasks on Wikibooks. By making things graphical, with checkboxes and text areas, and whatever, it will make it easier for new authors to get involved. I want to update a number of my existing scripts to be more user-friendly, update my library to do better error detection and correction, and help to create new automation tools (I have a lot of ideas for these, that I can post later).
These are some of the major ideas. I'll post more information about these as I get working on them.

Friday, March 21, 2008

Parroting And Blogs

I spent a good amount of time this morning doing some Parrot work, and even managed to get a few patches submitted and applied. These are all small things, I mostly focus my effort on tracking down and fixing compile-time warnings. Most such warnings are as easy to fix as adding a single type cast, so I don't want to claim that I'm some kind of Parrot super-hacker (which I'm clearly not).

I've also been doing a lot of reading lately, blog posts and tutorials and all. I'm sort of prepping myself because I want to enter the GSOC and actually get paid to work on Parrot this summer. I've also been seriously contemplating a switch of my major from EE to CompSci, and this kind of stuff is really going to get me into the mode for that.

I've been reading a few blog posts and other pages here and there, and I want to save some links here, mostly for my own convenience.

First, this post by Chromatic actually made me laugh out loud. I mean, I laughed so hard I startled the dog. I doubt most people will find it as funny as I did.

Next, there's a great set of PCT tutorials out there on ParrotBlog. For convenience, I'm going to post links to all of them:
I've been using these tutorials to start setting up the ground work for my Octave port.

Random Socks

Some people are going to read the title of this blog and assume I am talking about networking sockets, or sock puppets on wikimedia projects. I would like, instead, to talk about something a little bit less serious: feet socks. The socks that you wear between your feet and your shoes. If yours are anything like mine, they are probably made of a combination of cotton and something stretchy. At least, they start out stretchy, but by the end of the day they are worn out and tired.

I have a particular dislike for putting on dirty socks. It happens on occasion, when you need to be dressed before you've had time to get ready, and rather then putting a whole set of clean clothes on your dirty self, you opt instead to wear yesterday's clothes. This occasionally manifests itself in the form of yard work, where we tend to do it early in the morning before people have showered, and in the interests of frugality we decide not to create a second set of dirty clothes to be washed (we have a perfectly good set of dirty clothes from yesterday, just lying around).

Anyway, as I mentioned above, I have a particular dislike of putting on dirty socks, and when it happens, I tend to make a mental note of it. When you wear a pair of socks for a day, it tends to stretch in predictable ways. In my case, I notice that the big toe tends to stretch one corner of the sock a little further out then the rest of the front-end and so I can tell, when I put the same socks on again, whether I have put them on the same feet as they came off, or if I am putting them on the opposite feet. If a sock is put back on the wrong foot, the asymmetrical stretching from the previous day tends to make it ever so slightly less comfortable then it would be otherwise. This, in turn, increases my dislike of the entire situation. I definitely take a mental note when I've put a dirty sock on the wrong foot.

Here is where I try to get to the point. Though I am only taking mental notes and not written ones, it seems to me that I tend to put socks back on to the wrong feet significantly more often then I happen to put them on the right ones. If I take the socks off and throw them randomly into a pile on the floor, and then pick them up randomly in the morning, I would assume that my odds of getting it right are about 50%. This isn't the case, and I seem to be in the middle of a very long streak of getting it wrong. Of course, if something that should be random appears to be biased towards good or bad, we all say that it must be luck. In my case, I was convinced for a while that I was simply in the middle of a statistically possible, but improbable, streak of bad luck.

Despite the fact that it was my first reaction to think that somehow my socks were out to get me, or that I was suffering some kind of bad luck or whatever, I knew deep down that there had to be some kind of rational explanation for the whole thing. There must be some kind of reason why my socks kept ending up on the wrong feet. So I started taking mental note of more then the when of sock reuse, but also the how. I started paying closer attention to the way I took my socks off at night, and the way I put them back on in the morning.

What I found should not come as a surprise to any rational readers (assuming, of course, that anybody besides myself is reading this nonsense). When I took my socks off at night, I put them on the floor not in a random pile, but in a pretty regular order. From where I was sitting, I tended to put my right sock on the left, and the left sock on the right. In the morning, because I am right-handed, I would grab the sock that was on the right first and put it on my right foot. Follow in turn with the left, and suddenly my streak of bad luck is nothing more then a very subtle pattern that stems directly from my subconscious behavior. A process that I assumed to be random because I wasn't consciously manipulating it turned out to be completely deterministic.

Thursday, March 20, 2008

Home Sweet Home

Our flight landed around 12:15AM in Baltimore. I picked up our luggage relatively quickly, got to our car, and got on the road. It was raining, which always makes driving more annoying, and the fact that my left windshield wiper is busted doesn't help matters. The windshield wiper isn't so much of a problem since it clears most of my view. However, it makes a thumping or banging noise with each stroke, and that starts to wear on my patience.

I-95 was shut down through Philadelphia, so we had to take a detour through the city. This only added about 10 minutes to our total drive, and we managed to pull into the driveway at Dana's place around 3:10. After that it was sleep immediately (we didn't even unpack the car).

This morning I drove back to my house, and have been trying to catch up on my emails and work ever since. I've been through over 200 emails, I've read over 100 news items (many of which were skimmed quickly and deleted), and I've been working to upload my presentation files to the necessary places on the internet. Once this is all complete, all information including links will be available from my page on meta.

I have plenty of ideas for new topics to blog about, but I'm trying hard to keep to an average of about 1 post per day.

Wednesday, March 19, 2008

Travel Musings and Ramblings

We're stuck at the Denver airport now on a long layover, so I have a little bit of time to myself to muse about cross-country travel. This post may be long and annoying, so I suggest that nobody reads it. I'm going to itemize some of the stops on our trip.

Baltimore Washington Airport (BWI) It's a two hour drive from Dana's house (about the same from mine since it's a less direct route), but the fares were cheaper then if we had booked directly out of PHL. We got there very early because we over-estimated the length of the drive, and we gave two hours for passing through security. However at 6AM, the security checkpoint is a breeze. Parking also was very fast and efficient, so the time we estimated to waste on that was overkill. During the security check, I got patted down by one of the guards, and I distinctly remember him saying "you don't need to get all zombified about it, this is routine". I don't feel like I was acting particularly "zombified" at the time. I wonder how many other travelers have heard that same exact line? With everything moving much faster then we anticipated, we got to the gate over 2 hours before the plane departed. This was annoying.

Minneapolis Airport. I didn't get the call letters for the airport, but we had a short layover in Minneapolis. All the shops in Minneapolis Airport were "rugged". What I mean by that is that all the stainless-steel-and-flourescent-light shop fronts were covered in well-lacquered white pine veneer. It was this commercial bastardization of the romantic image that most people see when they think of Minneapolis. The pilot in our plane into Minneapolis kept giving us the ground temperature in Fahrenheit and "the Canadian system". This amused me, but it didn't appear to amuse anybody else. The airport bathrooms, at least the few that I saw in our short layover, were very very small. The men's room had only two urinals, and there was a line. Read this again: there was a line for the men's room. This is unheard of, and I can only imagine the kind of shitstorm that the woman's bathroom must have been. The flight to Portland was long, but otherwise not memorable.

Portland International Airport (PDX). PDX was a nice-looking airport, and we were able to get through it pretty quickly. Tired and desperate for food and rest, we decided to hail a cab instead of waiting for a shuttle or trying to find the "MAX Light Rail" or whatever. Cab: 34$, Shuttle: 28$, Rail: 4$, Limousine: 50$. I mention the price of the limo because, for a small additional charge, we could have been riding in style. We didn't, and instead were stuck in the back of a grungy dirty Taxi cab.

Hilton Portland & The Executive Towers. This was our hotel, and for the most part it was a nice one. The rooms for the conference were all very nice, and I can see why they chose to hold the conference there. The rooms, however, were small and a little disappointing. Now, I don't intend this blog to be some kind of vigilante consumer-reports kind of resource, but I feel that there are a few things that I can say about the hotel room here. The room itself was nice. The bed was large and comfortable. There was wired internet access available, although it was a little touchy at first. There was a large TV, although the TV was so large that the walkway between the bed and the TV was relatively small. The real problem that I had with the room was that the bathroom was lousy. The toilet was small, and the seat was phenominaly uncomfortable. I mean, I can't even really describe how uncomfortable the seat was. The shower was nice looking, but it echoed uncontrollably, it leaked water out onto the bathroom floor, and the nozzle had a very thin spray. The water temperature was very difficult to control as well, although I find this to be a problem with most faucets in most showers. Leaving the hotel was painless, and instead of waiting for the shuttle or hailing a cab, we opted to take a town car to the airport. We paid a little bit more then we would have for the taxi (I think it was about 5$ more), but the car was clean, the driver was skilled (and very friendly), and the ride was significantly more pleasant. That is 5$ that I don't regret spending at all.

PDX, Again. We got to the airport a little earlier then we had intended, because the town car was much quicker then the shuttle was supposed to be. Again, we had left ourselves two hours for security, and this time it wasn't as big of an over-estimation. When we got to the airport, we found out that Continental had overbooked our flight, so we opted to change to a flight by Frontier Airlines to Denver, instead of the Continental flight to Houston. The benefits: Shorter total time in the air, 200$ each in coupons for flights (which will be good for the honeymoon), and vouchers for a free lunch at Denver. The downside: A long layover in Denver airport, and a later arrival time in BWI. Denver is a nice airport, it has free WiFi access, and there are little areas where there is free wired internet access as well. Dana and I grabbed a cubical, put down our bags, plugged in our computers, and started surfing the web (this is where I am right now). We have a little bit more time here before our flight is set to leave, but Dana is getting restless. She can't just sit on the computer and surf the internet for long periods like I can, apparently. So, in a few minutes we're going to pick all our stuff up again and meander through the airport.

I obviously can't write anything about the next flight, our second visit to BWI or the long commute home. I'll probably post about these things tomorrow, if they are worth posting about.

Tuesday, March 18, 2008

WritersUA Conference, Presentation Postscript

Well, the presentation is over now, and I think it went about as well as it could have possibly gone. I started precisely at 2:45, and finished answering the last question at exactly 3:59. I was worried that my presentation would only last for 30 minutes, but I paced myself and threw in some ad libs, and was able to fill the time well.

I was also expecting--perhaps it's the pessimist in me--that I was going to present to an empty room. Not only was I wrong, but I was very wrong, not only was the room full to capacity, but the divider was taken out and the room was doubled in size. I filled two rooms, and presented about Wikibooks on two separate projector screens. It was quite impressive.

I talked rapidly at first, but I knew that was going to happen in advance. I talk more quickly when I'm nervous, but I settled in quickly.

Dana, in characteristic fashion, said that the presentation was good, but that there were some places where it was evident I hadn't practiced as well as others. She suggested that I could take a public speaking class at school. Overall it was good, she said. Frankly, I'm happy with the honesty.

I got a standing ovation, and a few compliments after the fact. That's always good. I also noticed that a few of the attendees were furiously taking notes, and many people asked questions. Most of the people were very attentive, following along with what I said, and chuckling quietly at the little jokes I was making. This is good. I'm glad to see that so many people were interested in this. With any luck, maybe I've attracted a few new volunteers.

We're out to dinner tonight, and are hopping on the plane tomorrow at noon. We will be landing (if all goes well) around 11:30PM local time, and should be getting home about 2 hours after that. I probably won't post any updates until after we are home.

WritersUA Conference, Morning Day 2

It's tuesday, the day of my big presentation. It's about 11:30 now, and my presentation is in about three hours from now. I'm not particularly nervous or anything, I just hope that all the technology runs properly. My computer seems to be operating fine, and there is a presentation going on in the room right now that seems to be working without a hitch, so I'm hopeful that last-minute hardware failure won't turn my presentation into garbage.

Dana is looking at the gift store right now, I'm on the free computers that have been set up for the conference goers. We have internet access in our room, although it's not always the best option.

We've been really trying to experience Portland as best as possible, although our schedule here is awfully tight. We've been trying to get a good sample of local restaraunts, and to a large degree I think we've succeeded. We've been eating out a lot, and have the heft receipts to show for it, but then again this is vacation and there is no reason not to splurge a little bit. If this were a week-long vacation we would do a better job of budgeting and stretching, but we only have two days here and we need to make them count. The next time I'm on vacation will be the honeymoon, and who knows when that's going to happen or where we are going to go.

One of the things that I've been trying to accomplish at this conference is to try and find software that could help us with some of our common problems at Wikibooks. One of the biggest problems we've had, and one for which there really aren't any good solutions so far, is the issue of converting to/from LaTeX format. We've received several book donations in the past that are provided in LaTeX format, and translating them so far has been a gigantic problem. We were lucky that the UNDP-APDIP books were also available in the XML-ish DOCBOOK format, otherwise none of them would have ever gotten uploaded. The Linear Algebra book, which I've been working on for a few days now (and will get back to work on diligently once I get home) was in LaTeX format, and conversion of that was terrible. So far, however, none of the companies I've talked to have products that can convert LaTeX. Many of the companies have never even heard of LaTeX to begin with. I have talked to a few other companies, especially companies that deal with information publishing programs, that might be willing to donate some software for use by Wikibooks or Wikibookians. These are leads that I'll try to pursue once I get back home, and will provide more details if anything develops.

I've been doing a lot of networking, and there are a few job opportunities that I'm going to try to pursue. I'm not a "technical writer" by training, but all my years of wikibooking, and my recent foray into blogging seem to show that I'm not a terrible writer. Maybe this is my future career path, or maybe it's just a first step on what promises to be a long and storied life. Who knows?

The presentation is in three hours, I'll try to post an update tonight about it.

Monday, March 17, 2008

WritersUA Conference. Day 1

The plane trip yesterday was a long one, but we made it through with no major problems. No delays, no lost luggage, nothing. It was a long trip though, and one that I'm not interested in repeating any time soon.

Portland is a nice place, and I was pleasantly surprised about how nice the city is. It's nicer then Philadelphia, cleaner, quieter, less traffic. I hear tell that the traffic can get much worse around rush hour, but that's to be expected anywhere. I wouldn't mind living or working around here, if such an opportunity arose. I doubt Dana shares that sentiment with me.

The WritersUA conference hoopla started yesterday, if you want to get technical, so that would actually make this Day 2. I don't want to get technical, however, so I'm calling this Day 1. I've seen the room that I'm going to be presenting in. It's a relatively small room, probably only 50 chairs or so. I guess I wasn't expecting to fill the entire grand ballroom or anything, and I don't mind presenting to a small crowd. I just hope that I don't end up presenting to an empty room.

I met llywrch (Geoff) and his small family the other day, and it was a fun evening out. I had meant to ask him how to properly pronounce his username, but I forgot to. We talked a little bit about wiki. He offered to introduce me to Ward Cunningham, which would have been wonderful to do if I wasn't so pressed for time. His wife was charming, his little baby was absolutely adorable, and the whole experience was one to remember. I love meeting Wikimedians, and Geoff was no exception.

I met some people and saw a few product demonstrations, and it amazes me how much some of these professional software applications seem to emulate wikis, or even borrow features of wikis. I had a long conversation with the CEO of Author-It, a company that sells a distributed authoring application which seems remarkably like a wiki to me. Of course, they have a lot more features and polish then our humble software has, but that's to be expected. Nobody would buy a piece of software if the free alternatives were much better.

Dana and I went out to a nice restaurant for lunch, Jake's Famous Crabhouse Restaurant, and while it was a little bit pricey, the food and service were fantastic. This is our vacation, after all, so spending a little bit of money on good local fare is just one of those things that needs to get done.

I'm doing some networking and exploring this afternoon, and Dana is already looking around for a dinner destination. I'll probably post again tomorrow when I have more to talk about.

Friday, March 14, 2008

Heading out West

Today is basically the day. I'm packing, checking, double-checking. i'm leaving my house in about half an hour to go to Dana's house for Saturday. Very early Sunday morning, or perhaps late on Saturday night, we're heading down to Balitmore to catch our plane which is set to depart at 8:30am. It's almost a straight shot down 95 all the way from her house to the airport. Google Maps puts the length of the trip at 2 and a half hours, and if we travel late enough in the night that might actually be an overestimate.

We take a plane to Minneapolis, where we have a layover for less then an hour. That's just long enough to hit the bathroom, grab some lousy airport food, and then run to our departure terminal. If you live in Minneapolis and want to get together, you're out of luck: There just won't be enough time.

From there we hit Portland, and should get in to town relatively early in the afternoon. I have to sign-in to the conference, maybe talk to a few people, and then we're probably going out to dinner with a fellow Wikimedian.

My presentation is Tuesday at 2:45 PST, and is scheduled to last about 75 minutes. I planned to speak for 60 minutes and then answer questions for the last 15, but I'm decently confident that there will be some time to spare. When we get back, hopefully I'll have some video to post up, and I'll also upload my presentation to meta.

The return trip departs wednesday morning, and takes us back to Baltimore with a layover in Houston. Again, no time to dilly-dally here either.

I think this is going to be a good trip. I get to stand up on stage and talk about things that I really love. Plus, hopefully there will be plenty of good networking opportunities for me. Networking is something that I don't feel I've ever been particularly proficient at, so at the very least this will be good practice for me on that front.

I should have internet access while I'm there, and should be able to check my emails and possibly make a blog post or two. If not, I'm sure I'll have plenty of stories to tell when I get back home.

Tuesday, March 11, 2008

FireFox 3 Beta 4

I downloaded the new beta of FireFox 3 this morning, and I'm pretty impressed by it. It's a good browser, and I haven't found any serious bugs in it yet. Of course, I'm not logging memory usage or anything, but it seems to work well enough for my needs. A few points that I've noticed:
  1. The javascript engine is noticably faster then FF2 or IE7. I don't need to be using all sorts of superlatives and adjectives like "blinding" to describe it. However, by my perception, scripts are executing faster, dynamic webpages are being set up faster, etc.
  2. There are some small differences on some pages in regards to formatting. These are generally small. I assume that FF3 is rendering things to a higher standard then FF2 or IE7 are. So this might not be a "bug", but instead it could be a "feature". I'm sure web users and web developers will have different opinions on this behavior.
  3. Pages seem to load a little more quickly. Page rendering is fast. Again, I'm not benchmarking anything, I'm just speaking from my own perception.
  4. The interface is "nice". I'm not into ultra-modern user interfaces (I've had to extensively modify IE7 to make it more "traditional"). FireFox 3's interface is fancy in some places, but isn't too far a departure from what people should be comfortable with.
This is all I have for now, just some of my initial impressions of the browser. I haven't even dug into any of the menus or options or features yet, so my impression could change easily as I use it more.

Sunday, March 9, 2008

Weekend Recap

I'm coming off another nice weekend. It was boring for the most part, but sometimes what you need most is just a little bit of rest and relaxation.

We went out to "TJ's Everyday", the bar that Geoff likes because it has such a huge beer selection. Beer, as he is quick to point out, can be just as subtle and sophisticated as wine can be. I still can't drink more then a glass per night, not even when i order the fancy imported stuff. Dana and I also went out for sushi today, at a new* restaurant. I say "new*" with the asterisk because I don't think the restaurant is new, I think it's just a rebranding of an old restaurant that I never thought looked good enough for us to try. The food there was alright, although I may be a little biased. I've become very used to the sushi at the place near Dana's house, and while the sushi today may have been superior to the trained connoisseur, it wasn't what I was accustomed to, and so I felt a little disappointed by it. But, at least I'm out trying new things, so that's a plus.

Geoff got Super Smash Brothers Brawl this moring, and he's been playing it all day. I haven't gotten to play it as much as I probably would have liked. It is a very fun game, and I expect to waste a little bit of time on it in the coming week.

I got a phone call from 10 years ago. Mike called out of the blue, and asked if i knew the name of a videogame we used to play together. The answer was "Pax Imperia", a relatively unpopular space-empire builder sim. Mike says he may be down in the area sometime soon, and will call me to hang out.

In Wikimedia news (and I almost hate to even mention it, since all this drama lately is so pathetic), another set of allegations have been made about Jimmy Wales, this time from a new source. The source, "Mr. Merkley" claims to have a large collection of emails and other correspondences which he has forwarded to the Associated Press that detail some kinds of bad goings-on. Part of me wants to completely ignore all this recent nonsense, and toe the "party line" here, but I suppose I've become a little bit tired of the trend of secrecy and closed-door dealings that seems to have become the norm here in the WMF. These allegations today were followed by the response from Jimmy, "Consider the source". When asked for an explanation, we got the two word reply "It's nonsense". Danny Wool posted a timeline on his blog that also raises a few interesting questions. These are questions which could easily have very legitimate answers, but for which no answers have been given. Canned PR statements or--worse--silence in the face of serious questions or accusations of impropriety are so much worse then a straight answer. This is so even if the truth is slightly unsavory or even self-incriminating. There is forgiveness to be had if people come clean with their mistakes, but there is none if people try to sweep the dirt under the rug. I'm certainly not taking sides, I don't know any of the players in this game well enough to judge who might be telling the truth, or who might be just fishing for a reaction. I do know that far more questions are being raised then there are answers given. We can't expect every accusation to be given the time of day, but--again--you can't ignore them all.

Anyway, that's my weekend so far. Spring break starts tomorrow, although I'm probably going on to campus to tie up some loose ends. I should have plenty of time to write new updates this week.

Thursday, March 6, 2008

Bloggers' Code of Conduct

I've been reading a lot of blog posts recently about the Bloggers' Code of Conduct, and was even emailed a link by one considerate soul. A lot of this comes on the coattails of the allegations of impropriety that have been spreading recently about Jimmy Wales and other members of the WMF board of trustees. The idea being that by adhering to a higher standard on my blog then those making the allegations do, we can all rise above such pettiness. I'm completely in favor of pushing forward, and not being trapped under the weight of endless drama. In the end, the books are really the most important part, and all the politics are just a time-wasting diversion. However, in this particular case, I'm at least partially interested to see how things play out. I don't need to get involved in the disputes myself, but I don't think they should necessarily be ignored either (although if everybody involved could try to act a little more professional about it, that certainly wouldn't hurt things).

Anyway, I'm considering applying at least part of the bloggers' code of conduct to this blog, and most definitely planning to apply parts of it to my other blogs as well since they are mostly news blogs and not personal opinion ones. I'll give a brief rundown of some of the points in the code:

Responsibility for our own words

This provision is completely fine by me. Since my real name is attached to this blog, and since I know that you know that I know that what we say on the internet can follow us around for a long time, it's certainly in my best interest to stay on my best behavior. I do take full responsibility for my own words, and there are many many things which I don't post here (even though I may want to at first) because I know that after a second glance they aren't as appropriate anymore.

Nothing we wouldn't say in person

I often find myself criticizing other people who write in the same way that they talk, with the same mannerisms and colloquialisms. That said, I still find myself inserting commas where I would have added a pause or stopped to take a short breath had the particular sentence been spoken and not written. However, even if the the quality and tone of my communications change between different mediums, the subjects don't. It's important to remember that I'm not anonymous here online, and I can't hide behind the pseudo-protection that such anonymity affords. Plus, a lot of people I know read this blog, and if I don't want those people to hear me say something, then I certainly don't want them to read me say that same thing either. This point is a good one.

Connect privately first

I've done this on occasion, and while it's a good idea in theory, I've never gotten satisfactory results from it. Few people, if they are bold enough to say something ignorant in a public place, are going to break down and apologize if confronted in person. Now, genuine misunderstanding between reasonable people are a different matter entirely. The jury is out on this one.

Take action against attacks

It's not my job to police somebody else's blog. However, I do have control over the comments on my blog, and I am free to delete the ones that are completely inappropriate. Criticism of the topic is fine, criticism of this blog in general is fine. Criticism of my person can be tolerated, but ad hominem attacks, trolling, or other nonsense has no place here.

a) No anonymous comments OR b) No pseudonymous comments

It may come to this eventually, but for now, I have no problem allowing anonymous posters to comment on my blog.

Ignore the trolls

...delete their posts too.

Encourage enforcement of terms of service

This isn't my job to do. If people are violating Blogger's TOS, and they are trolling or personally attacking me, I can certainly alert Blogger to that. Otherwise, people can take gambles and see what they can get away with on their own.

Keep our sources private

This isn't a newsblog, I'm not a journalist, I don't have sources.

Discretion to delete comments

Yes, this is probably how I'll enforce a few of the other points that have been listed.

Do no harm

This is relative. Harm to one person may be good to many. The point, I'm sure, is a reciprocal one: I shouldn't tolerate crap from other people, and I shouldn't be dishing it out myself. That's fair, I have better things to do with my time then gossip or sling mud.

Think twice - post once

This is up there with the old handyman's adage "measure twice, cut once". The goal of this is not to actually pull out your tape measure on two separate occasions (or worse, to pull out two separate tape measures), but instead to double-check yourself before you do something irreparable. A better maxim would be "wait 30 minutes before clicking 'SAVE'". How many emails in this world are written in the heat of a passion, and regretted as soon as they are sent? How many drunken phone calls to exes make sense at the time, and lead to an awkward series of explanations in the morning? If you have something charged to say, write it up and sit on it for 30 minutes. Go grab lunch, check your email, edit wikibooks (hopefully), and then decide if you still want to post it. You don't need to think about it twice, but you do need to make double-sure that it's what you want to say.

All in all, these ideas aren't all bad and I'll probably adopt a few of them. Not that I think it really matters because I consider myself to be pretty level-headed. But then again, I'm sure everybody thinks of themselves that way, and we still have endless piles of garbage to sort through every day.

Monday, March 3, 2008

The Job Hunt

Hunting for jobs is really the most depressing and demoralizing experience of my life. There are a lot of reasons for this. Part of this is because the process is so impersonal. I go to a website, fill out a form, upload a Resume, copy+paste a cover letter into a little textbox and click "send". Invariably, I receive a message like this:

"Thank you for submitting your resume. Our hiring managers are examining your qualifications, and determining if you are a good fit for one or more current or future job openings. We will contact you if a suitable match is found".

And then...that it. Fewer then 50% of companies that I reply to even have the courtesy to send a confirmation email. Every confirmation email I have ever received has been uninformative, impersonal, and completely generic. I have never, ever, ever received an email that says "We're sorry, but after reviewing your resume we've decided that you're not a match for any of our open positions". Such an email would be so welcome, because then I wouldn't need to wait and worry, hoping all sorts of false hopes that my resume was still in a pile to be considered. A simple "no, thank you" would be so welcome.

A few years back I interviewed at a company called Agilent, which used to be the HP division for test and measurement equipment. It wasn't my best interview ever, and I didn't get the job. However, what stands out most about this experience (besides, possibly, the lavish interview process) was the call that I received at the end:

Them: "I'm sorry, but we've decided to hire somebody else for the position".
Me: "That's fine, Thanks for calling me. By the way, may I ask why I wasn't selected?"
Them: "One of the other candidates was more qualified"

I'm paraphrasing, of course, but the point is the same: They called me to inform me that I didn't get the job, and even went so far as to tell me why I didn't get it. That kind of information is invaluable. Because of this simple experience, I recommend that all good engineers I know apply to Agilent.

Tonight I also received a letter, typed and hand signed, from a company called J. F. Taylor Inc. to tell me that they've received my resume and are considering it. It may just be a confirmation letter, but receiving something that's not a computer-generated generic email is so reassuring. I start to think that maybe an actual human is actually reading and actually considering me for a position. It's the feignt glimmer of hope that I need to keep going.

Long Weekend

Had a long and eventful weekend.

Friday, my mother and I made an "award winning" macaroni and cheese recipe. It was decently good, but in characteristic fashion I had to modify the recipee a little bit before I could give it my stamp of approval. Cooking is my artistic venue, and so I make a conscious effort to not follow recipees or strict formulas. Engineering and computer programming tend to be more precise and in many cases more formulaic, so I try not to take that mindset with me into the kitchen.

Saturday we took a long roadtrip down to the farm in south Delaware to visit my grandparents. My grandfather's health is generally not-good, so I wanted to go down and see him, if only briefly. I don't need to get into all the details, but a surgeon performed a short procedure without first stoping his blood thinners. I'm not a medical professional, but I know enough to associate the words "gross negligence" with that kind of action. Dana, of course, was quick to point out that they should have replaced his cumadin with heparin (excuse the spelling, I'm not in Firefox right now, and I doubt it's spellchecker would cover drug brand names anyway). We were only there for a few hours on saturday before we headed back again.

The trips to and from the farm were interesting, if only because we got lost both times. I forgot that we needed to take DE rt 7 to get onto DE rt 1, so we missed the turn off and had to turn around later. On the way back up, we must have missed a sign somewhere because we were trying to get back onto 95, and we ended up on some state road that lead directly away from 95. I've made the claim before that roads in Delaware are often poorly marked, and I stand by that criticism now. Of course, the trip provided the necessary impetus for us to get a Garmin GPS navigational unit for the car. We bought it on Sunday morning, and we've been playing with it all weekend. Dana took it home this morning to play with it more during the week.

We stopped by Jason's house on Saturday night, on our way back home. As luck would have it, we were lost within miles of his apartment, so we decided to stop in for a while and then get our bearings from there. He has a nice place, but we didn't stay too long.

Mom went into the hospital today for her third, and hopefully final, ablasion procedure. She's a little nervous about it, and rightfully so. The doctors are putting a little probe and a little camera into her heart, finding a fault in the electrical circuitry, and "zapping" the fault. Trying to put things into my parlayance, they are going to find a faulty path in the circuit and break the connection. Of course, "the connection" is living heart muscle tissue, and "breaking" it involves killing that tissue with the probe. I dont know exactly how they kill the tissue, but I think I've heard that they freeze it with the probe.

Two months ago "The Institute", a newsletter for IEEE members, had a question about reliability in Wikipedia. I sent in a reply email, and this month I saw that they printed my email! I've already received a few emails from people about it, so replying to them in a professional way has been demanding of my time today. I'm giving my presentation on Wikibooks here on Wednesday, so I've also been trying to prepare for that.

There are a few more issues that are worth writing about, but I'll save them for a different post.