Minor Front Page Redesign

Posted in Technical on February 23rd, 2006 by p14nd4

After leaving my front page (visually) the same for about two years now (you can check it out for yourself at archive.org), I recently felt somewhat compelled (obligated) to actually do something useful after receiving repeated praises from Josh about my site (though, to be honest, I’m not sure what makes my site particularly any better than his … whatever). The idea actually struck me around 4:30 AM, right after I had lain down for bed; I knew that if I didn’t get up immediately to get the idea down on paper, it would be forever forgotten by the time I awoke. While that same situation plagues me with relative frequency, I almost never actually get up to ensure the idea’s survival.

I missed my first (11:15 AM) class the next morning, but was on time to my 12:45 lecture, where I quickly went to work coding up the idea. The idea is by no means particularly complex, just efficient and elegant. With about six lines of xhtml constituting five objects, and maybe three css id’s, the layout worked perfectly in Opera and Firefox (both boasting W3C standards compliance), and the code was fully compliant to the xhtml 1.0 strict standard. Unfortunately, Internet Explorer was another story. (Duh.) Here was the original xhtml code:

<div id="title">
<h1>p14nd4.com</h1>
<a href="/resources/" title="resources">/resources</a>
<a href="/gallery2/" title="gallery">/gallery</a>
<a href="/blog/" title="blog">/blog</a>
</div>

And the CSS basically consisted of:

div#title { position: absolute; top: 40px; left: 40px; color/border stuff; }
div#title a { display: block; position: relative; bottom: 7px; right: 0px; float: right; margin-right: 15px; color/border stuff; }
div#title a:hover { color stuff; }

Internet Explorer didn’t render the <div id="title"> the correct height, aligned the h1 to the top instead of middle, and didn’t have the links in the correct place. I was able to fix the link placement with moderate ease, by enclosing them all inside another nested <div>, which had position: absolute; right: 0px; bottom: -9px; and then just did float: right; margin-right: 15px; for the <a> tags. I believe this fixed the main div’s vertical size rendering issue as well, in IE. Getting the <h1> to vertical-align: middle; within the main div was another story, though. I probably worked on that issue alone for another hour or more. I tried various combinations of nested elements and other css attributes without success, until I tried nesting the h1 inside a div, with a border enabled. I stumbled across this solution because I start putting borders on all my objects to debug where certain boxes are ending, beginning, hitting each other, etc. Regardless, I figured that just another nested div was the solution, so I immediately went to remove the testing borders, so the site would be suitable for public display (having half a dozen dashed red borders running through the header wasn’t particularly attractive). To my great confusion and horror, though, the h1 regressed to vertical-align: top after removing the borders. Sure enough, adding the border back onto the div re-fixed its alignment. I tried just setting a top border, so there wouldn’t be much visual evidence of this hack, but IE wouldn’t behave with just a top border; it needed all four. Eventually I conceded that it just wasn’t going to look quite right in IE, and moved on for the evening.

Today I finally got around to moving the new header to the main page, but again grew displeased with how it looked in IE. Another idea struck me, though, which managed to elude me yesterday evening. If you were to look at the code, you would again see an additional div containing only the <h1> element, with a style="border: 1px solid black; … which would normally result in an ugly visible border along the bottom of the header… I remedied this situation by overriding the border shorthand property immediately after declaring it, and eliminating the left, right, and bottom borders. In full, the code for that div tag reads as <div style="border: 1px solid black; border-bottom: 0; border-right: 0; border-left: 0;">. Don’t ask me why this happens to fix IE’s rendering, but I’ll live with it, I suppose.

‘Free’ University Services

Posted in General on February 20th, 2006 by p14nd4

Aaaaaaaaaaaaaahhhhhh!

Ok. Breathe. I’m cool now. If you haven’t figured it out by now, this post is basically going to be a rant about all the wonderful free services my university (and presumably many other universities … I can’t confirm that) is proud to offer its students. The most recent of these gracious gifts bestowed upon the student body by the ever-wise governing bodies was a school-wide subscription (partnership) with Ruckus (press release), a legal/licensed p2p download program. Normally this appears to cost $5.99 (USD) per month for an individual subscription to the service (a decent portion of which theoretically pays for the licensing agreements of the intellectual property (music, movies, etc.) available on the network for the given month), so using the press release’s figure, the starting bid for this service would be $305,490 per month, or $2,749,410 per academic year (9 months?). While I don’t doubt that a lower rate is offered to universities, since obviously not every student will use the service, I have no difficulty believing that the powers that be were willing to spend $2 million per year of my money for this. Mind you, this partnership comes alongside an announcement from the university’s Office of IT (OIT) that during the past year illegal music downloads appeared to decline at the University for the first time (Office of the General Counsel – Annual Report 2005 (pdf)). Would someone care to explain the logic behind spending two million dollars on a service that statistics indicate is of declining necessity?

The obvious counter-argument against this specific instance is: But p14nd4, you argue that it’s costing two million dollars, but that’s split up between 51,000 students! It only really costs you $39! Ignoring the larger picture for a moment, while perhaps this single instance is true, that’s still $39 that I would not have otherwise spent on Ruckus, and would very much enjoyed spending on four trips to Perkins, or nine orders of pizza, or 218 cans of Mountain Dew, or a birthday present for someone. I pay the university for an education, not for a download service. While the university may have saved a few dollars off the subscription fees that a handful of students would have paid on their own, it is not their place to do so, and simultaneously force the rest of us into paying for a service we don’t desire.

Unfortunately, it doesn’t end with this $39 loss. You have no idea how glad I would be, if $39 was all I lost to paying for ridiculous services through the university. My previous favorite instance of this was the university’s announcement that it has reached an arrangement with Microsoft to offer Windows XP Professional (Upgrade) and Microsoft Office 2003 Professional for free to all students. That’s 51,000 Windows licenses, and 51,000 Office 2003 Professional licenses… Again, I don’t have specifics on how much money the university gave Microsoft for this free service,, but Windows XP Professional OEM sells for $139.95 on Newegg.com, and Office 2k3 Pro runs at $314.95. I’m sure the University paid less than these figures, but since they’re all we have for estimates, that figure (a ceiling, if you will) would run $7,137,450 for Windows, and $16,062,450, for a total of $23,199,900 spent by the university in order to offer this free service.

Anyway, I’m cutting this post short, in favor of getting some work done. If I get ambitious (annoyed) again, I hope to complete this post with some addition related areas I feel deserve some mention. These other topics I hope to cover in a later edit include:

  1. Run-away / use-it-or-lose-it budgets
  2. Get an auditor, dammit!
  3. Eliminate half of the student employment positions
  4. Bottom line: spend on my education (not elite research facilities, not stadiums, not $400 office chairs, not thousands of dollars towards rebranding a building)

BSD Bootloader ‘Read Error’

Posted in Technical on February 17th, 2006 by p14nd4

As part of my home network, I have been using an HP Vectra VL5/166 Series 5 DT Pentium 166 MHz computer as my NAT router for several years now. I used IPCop (Linux-based) since its 1.3 release, followed by 1.4 for quite a while, and then decided I should give m0n0wall (BSD-based) a try, starting at the 1.2b9 release. m0n0wall was originally designed to run on embedded / SBC systems, especially Soekris boards, which boot off a CF card. It was later [easily] adapted to run on generic PCs, though there’s no real method provided to install it, other than performing a ~5 MiB disk image copy to the hard drive. I tried this (using Knoppix textmode, wget the image, then dd), but was plagued by a Read error after loading the BIOS. I worked on trying to fix this for quite a while, to no avail. Eventually I conceded defeat and just used the m0n0wall LiveCD to boot the system, and stored the configuration on a floppy disk. I later experimented with pfSense very briefly, which is a modification of m0n0wall with a somewhat different target audience and different goals in mind. Of particular interest to me was the fact that after booting from the LiveCD, it provides an actual [optional] installer, which I hoped would avoid the problems I ran into with m0n0wall. Long story short, after about 6 attempted installs, it still didn’t work, so once again, I conceded defeat, and kept on truckin’ with the m0n0wall LiveCD.

Fast forward about five months…

m0n0wall (1.2b9, LiveCD + floppy for config) was very stable … no lockups or reboots (planned or unplanned) for the whole time. One night, I decided to reboot all my computers including the m0n0wall router. Anyway, after it booted back up, it was acting strange … and then started telling me errors like no XML object found, etc. I pulled out the floppy disk, and checked it in my desktop, which spent about 10 minutes trying to read the ~12 KiB file, and later chkdisk confirmed that there were 512 bytes in bad sectors. Crap. Rather than just rebuilding my configuration, though, I decided to go all out and try the new pfSense Beta (finally out of alpha), which put me back in the situation of fixing the Read error once the system actually hit the BSD bootloader.

Read error THIS, bitches!

I googled briefly, and came across a page Why does FreeBSD’s boot loader display Read error and stop after the BIOS screen? Well, that seemed to capture the essense of my problem fairly well, so I gave it a go. There was some confusion to this issue, though, as my BIOS initially reported the disk was 16,383 cylinders, whereas the BSD bootloader installer [correctly] recognized that it was 39,703 cylinders. I tried various combinations of either using the BIOS’s wrong value in the bootloader installer, or entering the right value in the bios and bootloader, or entering a third value in both (somewhere between what the BIOS thought and what the hard drive thought); none of these approaches worked. I also tried most of these combinations without the default ‘packet mode’ selected when installing the bootloader; again, no success. I even tried partitioning the disk into ~1 GiB partitions, in case the issue was with using a partition sized greater than a 32bit address; still no luck. Eventually, I pulled out my trusty Ultimate Boot CD (UBCD), and started going through the boot loaders provided on there. I didn’t make it through the whole list, because when I got to GAG, I was easily able to go into setup -> add operating system -> select FreeBSD from the list and name it/pick an icon, then configure Boot timer to ~2 seconds (so that it will boot without my interaction, since the router is almost always headless / keyboardless), and pick the OS that I just added as the default choice. Lastly, selecting Save in Hard disk immediately installed the bootloader to the drive, and I was able to boot like a charm! It’s frustrating how quickly and easily GAG worked after I spent hours trying more complicated solutions…

Anyway, I’m glad it works. I’ve mostly reconfigured my router with pfSense installed to the hard drive now, and it seems to be working fairly well. I haven’t checked out the Beta1 known bugs yet, but the first bug I’ve observed seems too obvious to even imagine someone hasn’t posted. I guess the pfSense logo is set as a background image (css, presumably … I haven’t actually looked at the code), so they use a transparent image statically placed above it for the actual linking (to the main page). For me, this image (http://arvin.local:446/themes/pfsense/images/transparent.gif) is missing (404 – Not Found) in each of the three themes provided with pfSense, so I get a nice little rectangle with the word Transparent (the alt text) above the pfSense logo. Aside from that, everything else has been sweet like candy. There’s rumor that I can even get more info than just traffic stats from SNMP (for use on my cacti box), but I haven’t looked into that very much yet. Anyway, I hope this can help someone else with a similar problem to mine. I don’t just write these technical posts because I like to regale myself with stories of grueling troubleshooting and frustration ;). Good luck, and have fun.

Programming Assignments

Posted in Technical on February 16th, 2006 by p14nd4

Well, my final full semester has started, which includes a fairly grueling schedule totaling 20 credits of 4000-5000 level csci courses. Crazy? Yes. Am I going to do well in all my classes? No. Am I going to take a year or two off my life through sleep deprivation? Probably. Regardless, I’m taking some classes that are finally of potential interest to me. The University of Minnesota B.S. Computer Science program requires that students declare an upper division emphasis, which I kind of made up on a whim the night I realized I had to register for my classes. If you clicked the link above, you know that three of my classes are network and/or internet programming (which happens to probably be my area of most interest), so my emphasis was named something along the lines of Internet/Information Services.

Anyway, the two network programming courses I’m in have just released their [first] big programming assignments for the semester, both of which are kind of interesting, and I dare say I might even be excited to work on them. If you counted, you’ll notice that still leaves me with four other classes about which I have not expressed any excitement. Three of those aren’t bad per se, just not necessarily exciting to me. The fourth is Data Mining. My feelings on that class can be easily summarized as follows:

:-(

…But I digress. Getting back to my main motivation for this post, which was to talk about these two programming assignments.

Csci4211 – Introduction to Computer Networks

The full assignment is defined here, if you’re eager enough to actually read about it yourself. The assignment is titled Peer-to-Peer (P2P) File Sharing System with Messaging, which is fairly self explanatory. To understate the situation, it’s not going to wipe out Kazaa or BitTorrent any time soon, as it will be written for a command-line/console interface (no GUI), and (based on my brief scan of the assignment) can only actually exchange files between directly connected nodes (there’s no central server).

Inet4021 – Network Programming

Dammit. I hibernated my computer and lost the paragraph I’d already written about this assignment. Surely this time around will be less exciting than the first; I apologize. That said, I’ll proceed. The assignment is only available in .doc format here, which you probalby don’t want to go to the trouble of downloading and opening, so I’ll summarize. The assignment is boringly titled Lab #3, which isn’t of much use to you, but the primary objective is: Based on RFC 1945, you will need to write an HTTP client that meets the 1.0 specification. For the less technically oriented individuals out there, an HTTP client is more commonly known as a web browser (such as Internet Explorer). This ain’t yo’ momma’s web browser, though… Don’t expect pretty graphics, flash animations, or anything fun like that … a closer comparison would be wget, though this is even less advanced than that. I think a more fitting description would be a URL document grabber. It’s approximately equivilent to going to Start -> Run -> cmd, and typing:

telnet www.umn.edu 80
GET / HTTP/1.0

[Press enter twice]

This returns the following, which is approximately what I understand this program is supposed to output:

HTTP/1.1 302 Found
Date: Fri, 17 Feb 2006 00:23:25 GMT
Server: Apache/1.3.33 (Unix) mod_fastcgi/2.2.12 mod_ssl/2.8.23 OpenSSL/0.9.7g
Location: http://www1.umn.edu/twincities/index.php
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC -//IETF//DTD HTML 2.0//EN>
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF=http://www1.umn.edu/twincities/index.php>here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.33 Server at www.umn.edu Port 80</ADDRESS>
</BODY></HTML>

To continue my line of reference from aboive, this client certainly isn’t going to blow Internet Explorer out of the water. Considering my dream job (take that very lightly) is working for Opera Software ASA, this project is of particular interest to me. I actually kind of wish it was a more extensive project (though, don’t quote me on that in three weeks when it’s due, and I haven’t started yet).