Older blog entries for jrennie (starting at number 7)

Wow. Been over a year since I've written anything here. Life has been pretty good of late. Helen and I have bought a condo in Belmont (Boston area) and moved in. I love all the extra space. The other members of the condo association could be more pleasant to deal with. One lady has been downright rude. She has no communicaiton skills and becomes enraged over the simplest things. Happily, she appointed her sister to take her place. We can at least talk and argue in a reasonable manner with her sister. Things are much better than they were before. Since the new lady was appointed, we agreed to replace the roof which is about 30 years old and has been leaking into our bathroom ever since we moved it. I can't wait until the roofers begin work. Now that the association is easier to deal with, Helen and I have been having fun buying furniture and planning projects to make our place even nicer. We want to add a closet in the hallway and add shelves in two existing closets. I want to make a wine rack in the basement. Right now, I just store wine bottles in the boxes I get from Wine & Cheese Cask.

I'm working for the summer. Consulting for a cool company called ITA Software. Btw, if you're reading this, are a good lisp or C++ hacker or are an XML expert and wouldn't mind working in Cambridge, MA, send your resume to alex@itasoftware.com. ITA is revolutionizing the airline ticketing industry. Many airlines still use mainframes and (get this) assembly code to process tickets, find flights for customers, etc. Most airlines would have trouble finding you their cheapest ticket from Boston to L.A. simply because there are so many options (combinations of flights, booking codes, etc.) and because their software isn't meant to actually search for a low price ticket. ITA has written a collosal library of software for dealing with the day-to-day aspects of airline ticketing. A big application is low-fare searching. See beta.itasoftware.com for a sample. There are also tons of other aspects for which airlines and airline-related companies need software.

Anyway, I'm working on a machine learning-related project for them. It has to do with Poisson processes, something which I learned a lot about in a class I took in the spring. I've also been coding a lot. I'm becoming pretty familiar with all of the ++ aspects of C++. It's amazing that gcc still has a ways to go before it is compliant with the standard. readsome() will be a nice function to have. I'm surprised at how easy C++ is to deal with once you know most of the ins-and-outs of the standard libraries. 'map' has made my life a whole lot easier. 'string's are nice, although they'd be nicer if everything used string's rather than char*'s. I'm surprised that there isn't a resizing-vector in the standard library, though. Well, at least it's easy enough to derive such a class. Anyway, after spending the first month or so hating every bit of C++, I now mostly enjoy using it. The project that I'm working on is coming well. I'm nearly finished with a protype that will probably go into use RSN. I just need to evaluate it and make sure that it does better than what was used before.

On the school side, I've been working on my master's thesis. I've been learning a bit about Bayesian statistics and how to determine the probability of a new object from training data by integrating over all possible parameters rather than estimating a "best" parameter (via MAP or ML). I also think that I've been learning how to do research. In the past, I've tended to think up a "cool" idea, phiosophize about it, analyze it, draw conclusions about it and then do experiments with the idea. I've learned that it's better to first test the idea. Once you get the idea, you should immediately implement it and play with it. See what it does. Try to think of ways to further and expound on your original idea. Once you've seen the idea in action, then it is time to philosophize and to draw conclusions. The same is true for programming. When I write code, I often try to scrutinize it to try to catch bugs before I run the code once. I do find bugs this way sometimes, but I spend (waste) a lot of time looking over code. Occasionally, I tell myself to write and immediately test once the code compiles. I find that I more quickly find and fix bugs this way and I end up with working code more quickly. I guess I'm just re-learning what Microsoft learned long ago: testing is a necessary evil---the quicker you begin testing and the more you do, the better the end product.

Anyway, the master's thesis is coming along. I have most of it written. I need to fill in the content holes and compile a full first draft this weekend. I'll be spending the next few weeks polishing up the writing and presentation.

Master's thesis and ITA have kept me quite busy of late. It's almost like having two full-time jobs. The fall should be nice. I plan to slack off and take it easy for at least a few weeks. Everyone needs their down-time :)

Y'know, it is somewhat strange the way the front-page "Recent diary entries" list works. Every time I edit a diary entry, my diary appears on top of the list, even if the change is as minor as a spelling change. It seems to me that my diary should not be at the top of the list unless I add a new entry. I don't see edits as generally being very interesting...

codic

Hi codic. Hopefully you get a chance to read this. First I'll comment on the C/C++ thing :-) I'll be the first to admit that I know C better than I know C++, but I feel that I am a fairly competent C++ coder and am comfortable writing from a C++-mindset (as opposed to a C-mindset). Feel free to quiz me about C++. I'm actually in the middle of a C++ project (the xbattle stuff that I mention in my diary). I could send you code if you are interested...

Concerning the rating system, one of the points that I tried to get across in my diary entry is that I don't think that Advogato's rating system is set up to handle a negative rating. EBay can deal with a negative rating because of the way in which people are allowed to rate each other.

codic said:
I also feel that a rating system that allowed negative ratings would be most effective if everyone could rate users, but the weighting of a user's rating (I can't help but notice that that rhymes) should be proportional to their status (i.e., a rating coming from a Master should mean much more than a rating coming from an Outcast).

I would have to diagree. If I'm not mistaken, this was exactly the case when Advogato brought in the Dimwit rating. A Master could demote an Observer with one click, but a whole swarm of Observers couldn't touch a Master's rating.

By only allowing positive ratings, one encourages people to value their account---switching to a new account wouldn't do anything productive. If one wants to create a real "community," an important thing is to make people value their accounts. The "community" can become very artificial if people frequently change accounts to avoid negative ratings.

Does Observer status not allow one to reply to an article? I guess I have to relegate my comments to my diary...

So, I was just reading over the "Outcast" Certification patch: AIms and Assessement [sic] article. At first glance, the idea of having a negative rating to discourage spam might seem like a good one, but it is a flawed idea, particularly in the case of Advogato since 1) such negative ratings can be handed out freely and 2) it is trivial to sign up for an account without a negative rating associated with it. An "outcast" rating does nothing to restrict the efforts of a spammer. Advogato has implemented an effective way to reduce spam at the article level: only let people post who have the respect of some number of Advogato members. One way to reduce spam in the diary domain would be to set a minimum time window between advertising diary entries on the front page. One might have Master diary entries advertised up to once a day, Journey diary entries advertised up to once every two days, etc. As with the articles, members that have not achieved the respect of other members would not be allowed to advertise their views quite as frequently or as strongly.

There are systems that deal with negative ratings well. EBay is one of them. When you make a transaction with another person, you have the opportunity to rate him/her based on the interaction. Three ratings are offered: Positive, Neutral and Negative. People generally give Positive ratings unless they have something serious to complain about. The major advantage of this is that sellers are able to easily build a good reputation for themselves if they treat their buyers well. The system doesn't eliminate corruption; many sellers complain of bounced checks and often require a credit card or money order. It does, however, produce more reliable sellers. Those with a large number of sales seem to only rarely get a negative rating.

What can Advogato draw from EBay's rating system? One useful conclustion is that ratings work well when 1) ratings cannot be made on a whim and 2) ratings are based on equal-level, trust-based interactions. From the recent rash of namecalling that we saw on Advogato, one can infer that people are willing to give a negative rating based on a minimal amount of interaction; few are willing to give out a positive rating so quickly. Also, when a Master deems an Observer to be a Dimwit or an Outcast he/she has little worry of losing the Master rating as a result. The so-named Dimwit/Outcast doesn't have any flow to "fight" with. Since EBay allows everyone equal rating power, people are more careful about handing out negative ratings. I'm not suggesting that we switch to a rating system like EBay's---Advogato's system works well for restricting article posting. Rather, because Advogato does not have the qualities of EBay's system, Advogato's rating system cannot deal well with negative ratings.

Getting back to basics, there are certain Advogato "privileges" that one may want to restrict. As I see it, there are exactly two such privileges, posting diary entries and posting articles. I see no reason to restrict the posting of diary entries. One may want to restrict the way they are advertised on the front page: allow more advertisement for Master diaries, less for Observers. There is already asystem for restricting article posting. lkcl claims that we need a class that gives people no privileges. I don't see any reason for this. Everyone should be allowed some method of communication, however restricted it may be. lckl also wants many certification grades. Again, I don't see a point. Apprentice/Journeyer/Master divide up the spectrum pretty well. More classes will cause confusion without providing any benefit.

Anyway, that's all for now. If you write a reply in your diary and want me to hear about it, give me a rating (there's always Observer if you don't think me worth of Apprentice) and I'll take a look at your diary. It be nice if there were an easier way to reply...

What is the point of the dimwit rating? All it allows for is name-calling. Say I just got into programming and am really excited about the idea of OSS. I find advogato, sign up for an account and then begin posting diaries (and possibly stories) that others consider to be irrelevant. As a result, I get demoted to a dimwit. I either 1) feel hurt, leave advogato and never return, or 2) sign up for a different advogato account and again achieve the Observer level. Of course, these aren't the only possibilities, but the point is that the dimwit rating doesn't do any good. It can cause general bad feelings and it doesn't improve the community. Allowing only ratings that "improve" one's position in the Advogato community encourages judgements that are based on longer-term observations. Allowing a negative rating encourages snap judgements based on minimal information.

Looks like the dimwit rating has been done away with. Yeah! :-)

Advogato could use more navigational features.

  • Say I want to see who has given me ratings. AFAIK, I have to click the People link from the front page, wait for it to load and then find myself in the long list of people. So, I just realized that there is a link to my Advogato page from my "Account" page. One down, one to go :-)
  • I occasionally want to reply to someone's diary. I can write my own diary entry and hope they read it, or I can magically discover their e-mail address and send them e-mail. It would be nice to be able to reply directly (one could have replies show up as links rather than full text in the diary).

I didn't think much of it when I began writing my WordNet perl module last summer, but it looks like people are starting to recognize it as a useful thing.

I was given the task of doing some experimenting with query expansion using WordNet and hence needed code that would process WordNet queries quickly. I found the C code that comes with WordNet to be too slow for my purposes, so I wrote a perl module that loads the indexing tables into memory upon startup. Queries then consist of a few fseeks and small amounts of in-memory processing.

It makes me happy to see that it is being used to a real degree. Someone at UToronto recently sent me mail saying that he's using it for a 60-student class that he is teaching (!) :-)

Even though I should realize that "back then," K&R-style function declarations were the right way to go, nowadays, it pisses me off to not see nice, ANSI C-style declarations.

As you might guess, I've been hacking on some old C code; namely, the war game xbattle. Xbattle is a pretty fun game; you and your opponent begin with blobs of stuff (your troops) occupying various cells around the board. You move this stuff around the board intending to destroy any and all enemy blobs in sight. If you're lucky, you have the whole board covered with your blobs in a matter of 2-3 minutes. It's a fast-paced, real-time game that can be pretty exciting---it's multiplayer fun in the sense of Doom or Quake. The graphics don't quite compare, but it's still fun :-)

Anyway, I'm currently taking this "Embodied Intelligence" grad course where they expect us to complete a project by the course's end. Lucky for me, "evolving some sort of creature in some sort of world" is an acceptable project. Two of my friends and I jumped at the chance to "evolve" xbattle players.

Xbattle is a bit dated. If you visit the web page, you'll see written in large letters, "There has been no work done on xbattle since 9/1/96." A good chunk of the code is not ANSI C compliant, include files are somewhat numerous and run up to three levels deep and the make system is based on xmkmf. Ick, ick, and double ick.

Giving xbattle a decent make system was my first priority. I broke out the autoconf info pages and had a GNU-style make system up-and-running in a matter of an hour or two. Not long after that, I decided that it would be nice to bring in C++ classes in order to define a player module. Since I was going to change a good bit of the code anyway, I decided it was time to give in and bring xbattle's coding style up to speed. I ended up combining most of the .h files into one, xbattle.h, rewriting every function header in ANSI C style and compiling a list of function declarations in xbattle.h (declarating functions to avoid compiler warnings must have been an unpopular thing in the early 90s...).

So, now I can look at the code and not scream in horror. I still don't dare to try to fix all of the bits that g++ will complain about given the -Wall argument. It was painful enough to fix all of the function headers. What I find to be very cool about the code is that it is almost to the point that it could be released to allow others to write xbattle players. I'm thinking about running a small computer-player xbattle competition here at MIT. I also need to go talk to the original authors---see if they'd be interested in releasing ANSI C code rather than the K&R-style that they currently put out.

Even though I'm complaining about the xbattle code, I do have to say that I am greatly indebted to the authors. It's quite an impressive and versitile bit of code; things are well documented and it wasn't too hard to get in and add a wholly-autonomous computer player. Cheers go to Steve Lehar and Greg Lesher for writing the thing in the first place :-)

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!