Archive for the 'netspace' Category
Does this make me an “Interesting Person”?
Note: This isn’t by any means important, but I’m grasping for things to post here at the present.
I’ve been lurking on Dave Farber’s Interesting People mailing list for some time, but a post made on Friday about aviation prompted me to write a response which was posted this morning. So, yay, I got an email posted by Dave. I’ve reproduced both posts below.
Tomorrow I’m flying to Sedona with Chris and my former flight instructor, Jason. I promised Jason from week #1 that, once I was a private pilot, I would buy him lunch in Sedona (at the Sedona Airport Restaurant, whose Flash-based website sucks!) so I’m going to make good on my promise. I’ve planned out a flight path which avoids high terrain as much as possible and provides plenty of emergency landing locations and practiced flying it it in both MS Flight Simulator and the newly-discovered Google Earth Flight Simulator (which is damn cool, if simple).
Oh yes, while I missed the eclipse on Monday, Chris, Amy and myself were out on our balcony at 4:30 am this morning watching the Aurigid meteor shower. Just as reported in 1994, many of the meteors we saw were bright blue. I’d ask if anyone else watched, but they were apparently only visible to viewers on the western side of the Rockies.
Read on if you’d like to see the pair of mailing list posts I mentioned above without clicking off-site.
3 commentsProgramming Contest Results
First, I must berate my readers. My last post was a gambit to cause a flurry of comments on my blog. I remarked to Odette as I was posting it, “I’m going to have 10 comments on this post by the time I wake up tomorrow.” I can’t believe you people - where were the mass posts of “BURN HER!?” Gosh, I even quoted the scene number as the title - it should have at least been obvious to Carmen if no one else. You’ve disappointed me. What have I done to earn your indifference?
Anyway…
This weekend was the culmination of several hundred hours of coding practice this semester: the southeast regional semifinal of the ACM international collegiate programming contest (see last year or the year before). Preparing UF’s teams for this contest has been a massive time drain for me since the semester started and has been a primary reason for not updating this blog much. So, results… While standings aren’t available on the contest website yet, UF’s top teams scored 5th and 9th. Our 5th place team was UF 127.0.0.1 solving 7 of the 10 problems in the 5 hour time period. My team, UF: A Series of Tubes, scored 9th overall solving 5 problems in the time allotted. UF Slinky+Escalator=InfiniteFun also did well, solving two problems officially while having nearly-complete solutions for several more as the time expired.
I’m very happy with the way things turned out and I’m proud of UF. We’ve made huge headway in the last two years. Heck, for the first 3 and a half hours of the contest my team was #2 or #3 on the leader-board - I heard some mentions from the #1 team (who was seated adjacent to us) about their surprise at this. Muwahaha. I know that I did the best I could have done; in particular, I solved the top-tier problems. See, in each problem-set there tend to be a few problems which only the absolute best teams solve. I solved those three and solved two of them first… But that was my role, solve the subjectively hard-looking problems which would take a while. ![]()
Despite not winning a trip to Japan for any of our teams, I’m labeling this a success! Even better, we have a great core group of committed coders sticking around this year, and of course they are only going to get better. At the end of the day I just hope my legacy persists in a better light than that of Kevin (who previously ‘led’ the group)… but I like to think it will. ![]()
Finally, for some random craziness look at the Uncyclopedia entry for Chess, especially if you’re Tempest or easily amused. Definitely look at the “Pieces” section.
Other random updates: I’ve interviewed with Harris Corporation in Melbourne, FL. Monday evening I have a phone interview with Google in Phoenix and then the end of this week I’m interviewing with General Dynamics C4 Systems Group in Phoenix. In the mean time I have a midterm and some projects going on. But I’m just a little busy this time, not crazy busy like before.
5 commentsSimplified Network Protocol Design using Serializable Objects presentation for GatorLUG
I gave a presentation to the GatorLUG tonight about a LUG project (Ninja Sudoku) and how to do very simple network protocol design using Serializable objects in your favorite Object Oriented language. It’s here:
Really, this entry is entirely too geeky and starved of information to be of any worth to any one, but I’m leaving it up ’cause I can. Nyah.
No commentsCompiling *anything* with OGRE is a PITA
One of my two classes this summer is actually doing “research” with Dr. Fishwick. In reality, what I’m supposed to do is put together a 3D library, a Physics library and maybe a networking library to get a collection of tools for making 3D simulations. He wants this so that he can give it to students in his undergraduate Computer Simulation class next fall and let them create more interesting 3D projects than what is possible with Processing, the current tool they use.
I’ve got until the second week of August to put together two things:
- A cross-platform tool-kit consisting of at least a 3D library and a physics library with class-tailored usage instructions and examples
- and a version of SCHUA remade with this tool-kit as a “large” example.
Unfortunately, I haven’t been spending enough time on this yet. I originally intended to be done with all of the serious coding by the first of June and, hell, I haven’t even started. After spending all morning and some of this afternoon working on remedying this I have rediscovered my problem from late April: I can’t even get demo applications for my candidate 3D and Physics libraries to compile (e.g., turn from source code into executable binary code).
You know, I’m not all that inexperienced with programming. I’ve written a few applications, held a few jobs, captained the UF Programming Team, etc. I’m not all the unfamiliar with Linux, either, but ye gods, getting [OGRE and GangstaWrapper] or [Ogre and OgreNewt] or [Yake] to compile together is driving me batty.
For my own sanity I’m going to vent for a moment. Don’t take any of this as gospel, these are opinions with possibly nothing but an emotional foundation:
- OGRE compiles very easily.
- GangstaWrapper sounds like a great OGRE physics middle-ware. Too bad you have to read 16 pages of forum posts to find out that no one has touched it in over a year so it doesn’t compile cleanly.
- OgreNewt sounds like a great Newton Game Dynamics Library. Too bad it doesn’t compile cleanly in Linux. Oh wait, there’s a specific out-of-date source distribution for Linux the main author won’t host. Too bad its server is flaky and generally down. Including now.
- The Newton Game Dynamics Library is a professionally-packaged product produced by a real company. Too bad its demos don’t even compile out of the box on my system.
- Yake sounds great. Wow, its build instructions for Linux both look complicated and possibly compromised. I don’t much like the idea of having to SSH into a random box with a guest account to acquire source code…
I’m getting rather annoyed, but I think I’m going to tough it out and try to just make Yake compile. With Yake, at least, if I can get it to work it comes with its own wrappers for physics, networking and all that other stuff.
If I can just make it work… gah.
Other news: I’ve switched to Opera. I’ve decided I don’t have enough RAM to run Firefox anymore - the memory sieves are just too large. This might be short-lived, we’ll see…
8 commentsEnvelope Maker, a Gtk2 frontend to “envelope.pl”



So, I decided that now that I have a proper laser printer I want to be able to print professional envelopes again in Linux. I define a professional envelope as having three parts: return address, to address and the delivery point postnet (that barcode-like thing in the bottom right corner). In reality, printing the delivery point postnet speeds up postal processing by a day since it guarantees no human being has to look at the envelope until it reaches the destination street, and I always am a fan of efficiency.
So, what’s a delivery point postnet? It’s 12 numbers, the 5-digit zip code, the 4 digit +4, the 2 digit delivery point code and one check digit, printed in a height-varying barcode-like symbol on the bottom right corner of an envelope. Those numbers, taken together, indicate a specific mailbox in the United States. Theoretically all you would need to get a letter from A to B would be a delivery point postnet and a return address. I might try that sometime…
Back on track, I decided I wanted to print these things in Linux so I went tracking down free software to do it for me. I found Gregory Spath’s useful perl script called “envelope”, available on his website. It works like a charm - I expended 10 envelopes getting the margin values set right in my ~/.enveloperc file, but from then on it worked like a charm. It even prints postnets in the bottom right corner of the envelope! The only problem with this is that in order to print a full delivery point postnet it requires that I provide said delivery point value, in addition to the zip+4. Well, that’s a pain!
So, armed with the determination of being lazy in the future, I sought out something to locate that delivery point value for me. After several non-starts I realized that the USPS had several tools on their website to provide this value. One of them is even made to be used by programs (it has its web-based API)! Oh, that’s too good to be true, I thought! Indeed it was, the USPS requires a lengthy registration procedure to be permitted to use this API. Luckily, there still is another tool: a web-based query intended to be used by human beings. Unfortunately, programming something to use a web page intended to be used by human beings is generally another serious pain. Fortunately for me I found that Gregor Purdy wrote a perl module called Scrape::USPS::ZipLookup to do just that for just this script. Unfortunately again, it was slightly out of date. Fortunately, I fixed it and have emailed the changes to Mr. Purdy for release.
So that leaves me with a tool that can take a provided address, ask the USPS to correct it and return the full zip+4+delivery point code. What could I do next? Oh, it’s obvious, I wrote a GUI.
So now I have a small Gtk2 frontend to “envelope.pl” which you can see to the right here. It’s fairly simple: the address fields and four buttons. In brief, here’s what they do:
- Fix: Lookup the address with the USPS and fill in / correct fields
- Cancel: Close
- Print Preview: Show a preview of the envelope in GGV, GV or whatever you’ve configured to show postscript
- Print: Print the envelope using LPR
If you notice in the first screenshot I’ve put in a somewhat incomplete address. After pressing the “fix” button the USPS filled in the rest of the information for me, and that’s visible in the second screenshot.
Once that’s done I clicked the Print Preview button and the Gtk GhostScript viewer (GGV) opened to show me vaguely what the envelope would look like once printed. That’s the third screenshot.
Finally, the last screenshot shows the envelope I printed by clicking the Print button.
Not bad for a lazy Sunday morning, eh?
Source is available here: http://downloads.pugsplace.net/tree/envelope-maker-0.1.tar.gz. It contains the updated Scrape::USPS::ZipLookup module and Gregory Spath’s envelope.pl. You’ll have to install Perl-gtk2 and the dependencies for Scrape::USPS::ZipLookup via CPAN, but that’s described in the included INSTALL file.
9 commentsGpremacy Update, Hiatus
Gpremacy
I spent most of this week’s free time working on Gpremacy. I’ve implemented Blind Bidding and Turn Randomization, the last major features standing in the way of Gpremacy being a really playable game. The changes are in CVS but they are not ready for serious use yet. For some reason the server-side logic keeps failing at keeping track of who’s playing when. There has to be a subtle problem in the StateManager class. It’s not that big of a class and its job is pretty darn straight-forward, so I’m perplexed at where the error lies. I intended to spend this morning line-by-line debugging it but I was distracted by E.
When I get back from my Spring Break I’ll either do the debugging or simply re-implement the class and see if I get it right next time.
On the plus side, the client code keeps getting better and better. I’ve fixed a number of holes which would cause clients to lock up when connecting to the server. In fact, the only bug I’ve found in the last few days regarding that is so weird that it don’t even throw a useful exception - it just deadlocks. Anyway, I’ll track that one down once I get the Blind Bidding (and probably Loans) fully working.
I’m gearing up to make a serious release very soon - Loans won’t take long at all, and once they’re out of the way the only things not implemented will be Winning Conditions (easy), L-Sat Clashes, Orbital Nuclear Bursts and Amphibious Warfare. Amazingly, these things should all be rather simple, especially in comparison to the Blind Bidding (which required a rewrite of a bunch of the game state management). By “serious release” I mean the following:
- Windows Installer
- Linux Installer (using Autopackage)
- Straight binary (just in case)
- User Manual (already partly written!)
- Turn walk-through (not yet written)
- New website (partly done)
- Developer documentation (just beginning)
I’m also going to bump up to a proper version number this time - the next release will be 0.4.0.
It’s going to be good, very good.
Spring Break
But before I can finish that up, I’ll be heading off to Phoenix and Las Vegas for Spring Break. Yes, Vegas again — we’ll see if Chris can capture another wacky image of me in front of the Paris casino. I’m sure I’ll still be checking my email and cell phone, so you’ll still be able to get in touch with me, just not as quickly.
Finally
My final project for Concurrent Programming is to implement a multiplayer Internet Boggle game using Java. I wrote up a frighteningly complete UML diagram and functionality outline during class today so I think I can say that I’ve a good head start. Don’t worry folks, you’ll get to play this one too.
I anticipate becoming very good at Boggle before this semester is complete…
2 commentsWell, that’s over.
Yesterday, Saturday, UCF drove up here for that Programming Contest I effectively organized. It went … fine, though it started late due to a series of printer problems. This was problematic since printer access during a competition is an absolute must: when you have three people using one computer, it’s highly useful to be able to print your buggy code and fix it on paper while another teammate is coding their solution to a different problem.
After moving everything into place and setting up the whole contest my brain was already mostly fried. This wasn’t helped any by my team’s handicap: My team, the most elite UF team, joined the most elite UCF team in attacking a different problem-set than the other 7 teams. In particular, we had to handle the 2004 ACM Collegiate World Finals problem set [PDF]. The other, less experienced teams luckily were given a problem-set containing some much easier problems (to keep them from being discouraged… like my team was!
). Unfortunately the world finals problems were very, very tough and we, the UF elite team, were very out of practice in comparison to UCF’s elite team (since they’re going to world finals in a month). So… we got stomped. But hell, that happens sometimes and I’m sure it was good for us anyway.
We had 28 UF students, 6 UCF students and 5 UCF faculty/staff there. I, as the organizer, had the fun of worrying about everything, setting up most of the technical stuff and then eventually giving the speech at the end, awarding prizes and shaking peoples’ hands. Yay.
The big thing for me is that it is OVER. Now all I have to do is get the school to reimburse me for all of the things I purchased with my own credit card (like all of the food)… Note to self: I’m never organizing another one of these.
Oh, and the other big thing is that in addition to being OVER, it seems to have served its purpose - most of the UF competitors were new to the sport and are now very interested in joining the team. That was the reason we did all of this, to inspire more people to join up. Here’s hoping that worked.
The rest of the weekend has been spent reading and then performing an aborted trip to the Osceola Gun Range which was, no joke, full. We couldn’t park. Ah well, we’re going to beat the crowd next weekend.
Tau - 11 days until Spring Break.
2 commentsChasing Jimbo, New ‘Top Music’ list, programming contests
Several topics to toss in tonight’s update, so I’ll go in order.
1. Chasing Jimbo Wales
A group I’m involved in here on campus (Florida Free Culture) has arranged and secured funding to bring Jimbo (Jimmy) Wales to UF on Wednesday, April 12 2006. Jimbo is the founder of Wikipedia (and the whole of Wikimedia’s offerings, actually). He’s The Man behind the open encyclopedia concept. Anyway, I’m helping in various small ways to make sure this thing happens. We’ve just kicked into super- ultra- mega- crazy organizing mode to do all of the invites, secure panelists for a panel about various free culture-ish topics to occur after Jimbo’s keynote speech, publicize and followup the event in a positive way.
This should end up being a really fun event. First, Jimbo will be giving a keynote about Wikipedia, research and higher education (among other things I’m sure). Then he’ll be sitting on a panel with four other persons addressing specifics about open access to research information, open file formats (instead of MS Word files, for example) among other topics. Hopefully it’ll attract plenty of influential people, and even some students.
Amusingly, it’s about 8 people (including E. and myself) who are managing this whole task.
2. New ‘Top Music’ list
Since I’ve somewhat stopped using IMMS my favorite music list was getting rather stale. I’ve changed it now to show the songs I’ve played the most in the last week. Might be more entertaining.
3. Programming Contests
The UF ACM Programming Team is hosting programming contests here this semester to get more explosure and generate more student interest. The first of these contests was last weekend - 10 students competed, what I’d call an excellent turnout for our first try. I assisted in judging, so I couldn’t win anything.
We’re planning at least two more, one of which is rather large, is in 10 days and is being put together by a large amount of sweat from my brow.
On February 25th the University of Central Florida is driving three teams and support personnel here to compete against seven UF programming teams in a full-scale 5 hour programming contest. I’ve reserved a computer lab and a classroom, garnered support from my department’s chairman, purchased $300 in prizes, had guest accounts created for computer access, acquired money to purchase food and drinks for competitors and advertised, advertised, advertised. Amazingly, a quick count in the RSVP account shows that we are only one person shy of our effective maximum number of UF students. So it looks like from a turnout aspect we’ll be success full!
My team consists of myself, Tim Smith and Justin Michalczak. We are “Team gump/tion zebra”, an ‘in’ joke, referring to the third line of the sample input of one of the problems Tim wrote for last weekend’s contest.
Oh, and last night I judged the “First Annual Codeslingers Shootout” at the Gator Linux Users Group meeting. The problem was selected by the LUG organizer, Clint, and was the classic Game Show problem:
Monty shows you three curtains.
Behind two of the curtains there is a silly gag prize. Behind one of the curtains is a really nice prize (like a new car). The prizes are randomly distributed before each game. But, there is always one nice prize and two silly prizes. Monty asks you to pick one of the curtains. Monty then opens one of the curtains that has a silly gag prize behind it. The audience has a good laugh.
Then Monty turns to you and says, “I’ll give you a choice. You may stick with your original selection or you can switch doors right now.”
What should you do? There are 3 possible answers: One, keep your original selection. Two, switch. Or, three, it doesn’t matter.
Your program will show either by algorithm or simulation the one correct answer from these 3.
The winner was Eric Lavigne, “Fastest Codeslinger 2006″, who wrote a correct solution in 9 minutes in ~12 lines of CLISP. I wrote two reference solutions in 15 minutes before the contest in both C++ and Java and they’re here, if you’re interested: [Java, C++]. Amusingly (and not at all obviously), the solution is to always switch doors. See basically, when you select one of the doors in the beginning you have a 1/3 chance of getting the grand prize. Then a door is removed, but your original selection still has a 1/3 chance of being right. The probability of your first choice does not improve. Which means that the remaining door has a 2/3 chance of being right. Since 2/3 > 1/3, you should always change doors.Edit: Correct fraction size. 1/3+1/2 did not = 1. Was tired, sorry.
People can debate this solution for hours because it does totally fly in the face of common sense, but programatically you can simulate (or calculate) exactly what happens to the probabilities and see that yes, you should always switch.
4. Class Notes
I noticed something which amused me today. Let me frame it in the form of a question: Those of you taking classes now, how many pages of notes have you taken for your courses so far this semester?
At present, 1.5 months into a 4 month term, I’ve taken the following volume of notes:
- Distributed Operating Systems: 3 lines, one of which is the name of the course (misspelled as “Distributed Oberoning Systems”
- Concurrent Programming: 2.2 pages, front and back
- Networking Security: 1 page, front and back
Now, I do write very small, but still… I realized today that I don’t kill nearly as many trees as the majority of the people in my classes. Yet I still learn the material. At some point in the last four years I figured out that no matter how detailed I make my notes, I never go back and re-read them so, well, why take heavy notes?
Anyway, I’d love to be amused by your experiences / utter hatred. Flame on.
5. Other news
James and I bought Sunkist last weekend. I’m sipping at one now. Orange soda is so underrated.
In addition to all of this, I’ve been playing Grand Theft Auto: Vice City (which I recieved at the end of January) and occasionally doing homework. I know, I should be working on Gpremacy. I will soon, I will…
8 commentsUF Programming Competition #1
Today was the first open UF programming competition my group has put together. We had 10 competitors and Tim and myself acting the part of Judges/Proctors. At the end of the 3 hour competition everyone there had solved at least one problem so that was a testament to UF having decent competitors. Really, there were only two Programming Team members competing there today and one of them is retired (since he’s attended too many competitions).
It went well, despite some initial hangups getting the contest environment to work properly.
This was sort of the rehearsal for the larger competition in two weeks I’m organizing. UCF in Orlando is sending up three teams (of three persons each) to compete with 7 more teams from UF. We’re assembling people right now. I’ve purchased the prizes, reserved the rooms and done most of the advertising, but it’s a lot of work. Hopefully it will turn out well.
Amusingly, on all of the advertisements I wrote as the tagline: “FOOD, PRIZES AND ETERNAL GLORY!”
Now off to see the California Guitar Trio perform, live.
No commentsRapid PDF Splitting/Joining
I had need this afternoon of a rapid way to take parts of preexisting PDF files and stitch them together without the possibility of quality loss. I found joinPDF, a tiny java program (and appropiate script) which does both of these things from the command line very, very fast.
All I ended up typing was:
./splitPDF Commendation.pdf
./splitPDF Resume.pdf
./joinPDF all.pdf Resume_page1.pdf Commendation_page2.pdf Resume_page2.pdf
and … bam! Resume PDF with a letter in between the body and the references.
I fiddled with LaTeX and GhostScript to do the same thing before finding joinPDF but the results I was getting were ugly, while textually correct. That’s my system’s fault, some font is not copied to a location where GhostScript could find. Rather than fix that I found joinPDF. So… enjoy.
No comments