The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Tuesday, August 01, 2006

Ask a silly question …

I received the following from a mailing list, and I thought it amusing enough to post here.

From
XXX XX” <XXXXXXXXXXXXXXXXXX>
To
XXXXXXXXXXXXXXXXXXXXX
Subject
OT: Purina Diet
Date
Tue, 01 Aug 2006 17:35:56

Purina Diet

I was in Wal-Mart buying a large bag of Purina for my Labrador retriever and was in line to check out. A woman behind me asked if I had a dog? On impulse, I told her that no, I was starting The Purina Diet again, although I probably shouldn't because I'd ended up in the hospital last time. But that I'd lost 50 pounds before I awakened in an intensive care ward with tubes coming out of most of my orifices and IV's in both arms. I told her that it was essentially a perfect diet and that the way that it works is to load your pants pockets with Purina nuggets and simply eat one or two every time you feel hungry & that the food is nutritionally complete so I was going to try it again. I have to mention here that practically everyone in the line was by now enthralled with my story. Horrified, she asked if I'd been poisoned. I told her no, that I'd been sitting in the street licking my butt when a car hit me.

It also reminds me of monkey chow for some reason …

Wednesday, August 02, 2006

A clue-by-four in search of a victim

From
mr Ken Ahmed <kenahmedmd1@yahoo.co.uk>
To
info@frogs.fr, info@fsck.com, info@fsf.org, info@fsp.usp.br, info@ft.com, info@ftjh.tcc.edu.tw, info@ftstour.com.tw, info@fuelcellscn.com, info@fuelcellworld.org, info@fuji.com.tw, info@fulllifeonline.com, info@fun-lists.com, info@funcamp.unicamp.br, info@fundaj.gov.br, info@fundsinteractive.com, info@funredes.org, info@funsms.net, info@furg.br, info@fusebox.org, info@futures.jrc.es, info@futuro-group.org, info@fybus.com.tw, info@fygroup.com, info@fz20.com, info@g-vision.com, info@gadsdentimes.com, info@gaes.tc.edu.tw, info@galilee.com.tw, info@gallax.ru, info@galliver.com, info@galvnews.com, info@game186.com, info@games-networks.net, info@gamesgroup.com.tw, info@gamespot.net.cn, info@gangsofamerica.com, info@garfield.library.upenn.edu, info@gartner.com, info@gatetech.com.tw, info@gatoborracho.com, info@gattaca.cs.cornell.edu, info@gazetadolinux.com, info@gcolpart.com, info@gddj.com, info@gdesplac.free.fr, info@gdjh.tcc.edu.tw, info@gdsp.org.cn, info@g eappliances.com, info@geccom.bizland.com, info@gedanken.demon.co.uk, i@conman.org, nfo@geiko.net, info@gein.de, info@gemeenteamsterdam.info, info@genderline.de, info@geness.ufsc.br, info@geneve-tourisme.ch, info@genex.tie.cl, info@genicom.com, info@genomics.nl, info@gensource.com, info@geocities.com, info@geocities.yahoo.com.br, info@geodsoft.com, info@geog.okstate.edu, info@geohazards2003.eba.ca, info@geohohai.com, info@geometry.net, info@georouter.com, info@germany.polpred.ru, info@germanyauto.ru, info@getbirdbrains.tripod.com, info@getinfohere.com, info@getransportation.com, info@getty.edu, info@gfes.tcc.edu.tw, info@gfi-aerospace.com, info@gftours.com.tw, info@ggogo.com.tw, info@ggsd.com, info@gibradio.net, info@gifmaniac.net, info@gillgues.free.fr, info@gima-gmbh.de, info@ginac.de, info@gipi.kg, info@gissky.net, info@gita.org, info@gksoft.com, info@gles.tnc.edu.tw, info@globair.com.tw, info@global.lao.net, info@globalamphibians.org, info@globalarchive.ft.com, info@globa lideasbank.org, info@globalisationguide.org, info@globalknowledge.org, info@globalpsychics.com, info@globalpublicpolicy.net, info@g.area51.conman.org, lobalsight.com@conman.org, info@globe-pequot.com, info@globeedu.com, info@globeimmi.com, info@globosat.com.br, info@glucerna.com.tw, info@glyphweb.com, info@gm.com.fj, info@gmlets.u-net.com, info@gmts.com.tw, info@gnjykeovar.kpth.us, info@gnu.org, info@gnubis.com.br, info@gnulon.agatetepe.com.br, info@gnuteca.codigolivre.org.br, info@go-edinburgh.co.uk, info@godcanunlimited.com, info@goerie.com, info@gogreenbay.com, info@goheels.com, info@goinhell.skyblog.com, info@gokartrecords.com, info@gold-home.com, info@goldenmark.com.tw, info@goldwaterinstitute.org, info@golive.com, info@gomath.com, info@good35.com, info@google.com, info@google.com.ph, info@google.com.tw, info@google.fr, info@google.stanford.edu, info@gosdar.com, info@gotofcm.com, info@gots.com.tw, info@gouv.bj, info@gouv.mc, info@gov.ai, info@gov.bw, info@gov.cn, info @gov.harvard.edu, info@gov.si, info@government.gov.ru, info@govonline.gov.au, info@govspot.com, info@gpp.ks.edu.tw, info@grad.washington.edu, info@grants.nih.gov, info@grants1.nih.gov, info@grants2.nih.gov, info@gra.area51.conman.org, phicslink.demon.co.uk@conman.org, info@graphon.com, info@grasptax.com, info@gravityprobeb.com, info@greating.com.cn, info@greenedu.com.tw, info@greenguerillas.org, info@greens.org, info@grieflossrecovery.com, info@grmuseum.org, info@groups.google.com, info@gsanetwork.org, info@gsmweb.cz, info@gswd.gov.cn, info@gtz.de, info@guardian.co.uk, info@gvtour.com.tw, info@gwydiondylan.org, info@gwyn.tux.org, info@gwytb.gov.cn, info@gyes.chc.edu.tw, info@gzeryun.com, info@gzes.tc.edu.tw, info@gztransport.com, info@h000874e55879.ne.client2.attbi.com, info@h18000.www1.hp, info@h215.235.40.162.ip.alltel.net, info@h2sport.com.hk, info@h48.n219-68-201.adsl.giga.net.tw, info@ha.org.hk, info@habeas.com, info@hachina.com, info@hackologie.tk, info@hadassah.or g.il, info@haes.cy.edu.tw, info@hal2001.org, info@halhigdon.com, info@ham.kiev.ua, info@hamradio.hr, info@handa-cci.or.jp, info@handelsblatt.com, info@handicap-international.org, info@hantoy.co.kr, info@hao123.com, info@haodeli.com, info@haodeli.com.cn, info@hardeplasser.info, info@harmonyhousehk.org, info@harrassowitz.de, info@harts.org.hk, info@harvard.edu, info@haworthpress.com, info@hbbear.com, info@hboc.com, info@hboi.edu, info@hbsp.org.cn, info@hc2grc.org.ec, info@hces.tc.edu.tw, info@hcidhaka.org, info@hclist.de, info@hdw-inc.com, info@he.wikipedia.org, info@healthcarealternatives.net, info@healthopps.com, info@healthpromotionjournal.com, info@healthy.net, info@heartinfo.com, info@hechtdesign.com, info@heins.de, info@hellas.com.tw, info@henryford.cc.mi.us, info@herald-mail.com, info@herbalworld.biz, info@herc.com, info@heritage.edu, info@hermitagemuseum.org, info@herneed.com.tw, info@hero.loxa.edu.tw, info@heryen.com.tw, info@hess.com.tw, info@hf-gmbh.de, info@hf-inst .co.uk, info@hftravel.com.tw, info@hhgproject.org, info@hhof.com, info@hic.wayne.edu, info@hickoryfarms.com, info@hicss.hawaii.edu, info@highcountrygardens.com, info@highgrow.us, info@highwire.stanford.edu, info@hindawi.com, info@hini.quendi.free.fr, info@hintmag.com, info@hiphop.kralupy.net, info@hirondelle.org, info@hk-leather.com, info@hk.pg.photos.yahoo.com, info@hkairport.com, info@hkce.com, info@hkcfs.com, info@hkl-xray.com, info@hkmenshealth.com, info@hktk.com, info@hljh.tcc.edu.tw, info@hmcnet.harvard.edu, info@hoermann.de, info@hokia.com.tw, info@hollandtruck.ru, info@hollinger.com, info@home.csjh.tcc.edu.tw, info@home.globalcrossing.net, info@home.kimo.com.tw, info@home.pchome.com.tw, info@home.sou.edu, info@homebizedge.com, info@homeloansonline.com.au, info@homes.ukoln.ac.uk, info@hongsbearing.com, info@hopemag.com, info@horizons-dz.com, info@horse-service.com, info@horses-best-friend.de, info@host217-42-173-123.range217-42.btcentralplus.com, info@hosun.com, info@ hot-forum.org, info@hotel-tourism.gov.mm, info@hotfilm.com.cn, info@hottinger-kg.com, info@house.gov, info@housing.gov.kw, info@hovercarracer.com, info@howtopickupgirlsatfunerals.com, info@hpes.tc.edu.tw, info@hpfyu.biz, info@hpjh.tcc.edu.tw, info@hpl.hp.com, info@hrbhouse.com, info@hrmediji-online.com, info@hsc-online.de, info@hses.tc.edu.tw, info@hses.tyc.edu.tw, info@hsjh.chc.edu.tw, inf@conman.org, o@hsm.com.cn, info@hsph.harvard.edu, info@hsxy.com, info@ht88.com, info@htjh.chc.edu.tw, info@htmldoc.org, info@htmlprimer.com, info@htppa.com, info@httrack.com, info@hua.smes.tnc.edu.tw, info@huaou.com, info@huihwa.com.tw, info@hul.harvard.edu, info@hulu.com.tw, info@humantrafficking.org, info@humorsearch.com, info@hungchang.com.tw, info@hungcheng.com, info@hunter.com.tw, info@hwaming.tsis.com.tw, info@hwit.net, info@hycom.com.tw, info@hydrathallium.free.fr, info@hyes.tyc.edu.tw, info@hzes.mlc.edu.tw, info@hzky.com, info@i-cablecomm.com, info@i-rox.net.ph, info@iadb.org, in fo@iahf.com, info@iakm.kent.edu, info@iaks.info, info@iana.org, info@ias.berkeley.edu, info@ibaby.org, info@iberia.vassar.edu, info@ibict.br, info@ibict.br.cionline, info@ibope.com.br, info@ibphoenix.com, info@ibva.com, info@icamericas.net, info@icann.org, info@icarisk.gp, info@icde.org, info@icdrc.org, info@ici.ufba.br, info@icicic06.njtu.edu.cn, info@icie.zkm.de, info@icmc.usp.br, info@icmje.org, info@icoletiva.com.br, info@iconenet.com.br, info@icpla.edu, info@ics.mq.edu.au, info@icsep.info, info@icsti.org, info@icthus.net, info@idca.org, info@idcyber.com.tw, info@idea.int, info@ideadata.org, info@ideas.repec.org, info@idict.cu, info@idp.com, info@idra.org, info@idrc.ca, info@ids.ac.uk, info@idv.tw, info@iei.ie, info@iei.pi.cnr.it, info@iesalc.unesco.org.ve, info@if.sc.usp.br, info@ifcss.org, info@ifp.fr, info@ighawaii.com, info@ihc.net, info@ihlresearch.org, info@iia.net.au, info@iigov.org, info@iiisci.org, info@ijm.it, info@iksr.org, info@ilionacharts.bansidhegraphi cs.com, info@illc.uva.nl, info@ilmessaggero.it, info@ilo.org, info@ilslaunch.com, info@imageworks.com, info@imakenews.com, info@ime.usp.br, info@imfsite.org, info@imitrvl.network.com.tw, info@immed.org, info@immilink.com, info@immunosource.com, info@imo.hr, info@imp3.net, info@impress.co.kr, info@ims-gmbh.de, info@ims.usm.edu, info@inbar.int, info@incidentresponse.com, info@incom-creation.net, info@independent.co.uk, info@indiana.edu, info@indianajones.com, info@indianrail.gov.in, info@indiavotes.com, info@indigo-ne.area51.conman.org, t.com@conman.org, info@indivisible.org, info@industrystock.com, info@indy500.com, info@indymedia.nl, info@inep.gov.br, info@ineris.fr, info@inf.barddal.br, info@inf.puc-rio.br, info@inf.ufpr.br, info@infanthearing.org, info@info-books.co.uk, info@info-student.info, info@info.ba, info@info.com, info@info.croatiabiz.com, info@info.gov.hk, info@info.tuwien.ac.at, info@infoplease.com, info@inform.nu, info@infotoday.com, info@infototal.ind.br, info@ infowarrior.org, info@ingrambookgroup.com, info@inlightimes.com, info@inmetro.gov.br, info@innb.uscourts.gov, info@innerauto.com, info@innerbonding.com, info@innerchangemag.com, info@innerjourneyministries.org, info@innovapacific.com, info@innovations-schule.com, info@inrp.fr, info@inrs.fr, info@insa-rennes.fr, info@insightbio.com, info@insp.mx, info@inspiredliving.com, info@instantbookstore.com, info@insun.com.cn, info@int-evry.fr, info@intac.com, info@intellectualcapital.com, info@interactivated.com, info@intercom.org.br, info@interdetal.com, info@interex.org, info@interland.com.tw, info@inte.area51.conman.org, rlinkelec.com@conman.org, info@intermedica.se, info@international.qut.edu.au, info@internazionale.it, info@internet-at-work.com, info@internet-radar.net, info@internet.sacen.co.yu, info@interscience.wiley.com, info@interscope.com, info@intimal.edu.my, info@intio.or.jp, info@intojob.co.kr, info@intosd.com, info@intra1.jhsph.edu, info@intranets.com, info@intuitive-con nections.net, info@inventorfraud.com, info@invisiblelibrary.com, info@invisibleweb.com, info@inwent.org, info@inxight.com, info@io.com, info@iodbc.org, info@iol.ie, info@ioloso.it, info@ionic.be, info@ioyzikbvjw.gono.us, info@ip-wv-24-151-151-116.charterwv.net, info@ip-wv-24-151-156-225.charterwv.net, info@ip.pt, info@ipd.gov.kw, info@ipej.fr, info@ipen.br, info@ipgp.jussieu.fr, info@ipma.ch, info@iqtop.com.tw, info@ir.dcs.gla.ac, info@ira.is, info@iraqi-ars.org, info@irei.com, info@iris.sgdg.org, info@irts.ie, info@irvinghouse.com, info@is.lse.ac.uk, info@is.twi.tudelft.nl, info@isa-appraisers.org, info@isat.info, info@ischool.utexas.edu, info@iscsp.utl.pt, info@iseaweb.o, rg@conman.org
Subject
Good day.
Date
Wed, 2 Aug 2006 17:14:26 +0400 (MSD)

FROM THE DESK OF KEN AHMED,
UNION BANK OF NIGERIA

Good day,

I am KEN AHMED, Bank Manager of the UNION BANK OF NIGERIA PLC,ikeja branch, nigeria. I have an urgent and very confidential business proposition for you.

So confidential that you need to send it to over 500 honest and truthworthy people? Smooth move there, KEN AHMED.

Thursday, August 03, 2006

WARNING: metablogging ahead!

I've been working on the blog the past few days, mostly background programming stuff. A bunch of little things here and there that you might notice if you actually view the site at http://boston.conman.org/ (such as changing the search engine I use to Clusty, which is returning better results than Google (please! Stop with the Las Vegas ads!) for the searches I'm doing) but the biggest change has been adding support for Atom, a better defined site syndication format than RSS (so those of you reading me through my RSS feed might want to switch over to my Atom feed, but I'll keep both around for now).

There was also a problem with the Obligatory Email Notification that prevented anyone from signing up that I had to fix (webserver configuration issues than an actual programming issue) so anyone trying to sign up for email notifications (like that's a real common occurance) should be able to now.

Friday, August 04, 2006

Code filled with cobwebs

Well, I misspoke. The Obligatory Email Notification still wasn't functioning properly (the actual notifications are sent fine—it's just signing up that was borked). And I suspect it's been broken since it was moved to this server (or even broken on the server previous to this one). The code was written when this site was running on tower.

It took a bit to find the actual source code (since it was written a long time ago) and I decided to update the code while I was at it (it was compiled against an older version of a library I wrote). Then it was a rather painful process of debugging the program, which mostly had to deal with typos and permission problems.

Sigh.

But it's now working properly.


Clusty

I mentioned I switched to Clusty, but I want to go into depth as to why I switched to Clusty.

I actually found Google to be rather poor at finding particular entries. I try to do a search for “tower” and Google would maybe return a entry or two, but almost never the one I was looking for. When I did a test at Clusty though—it returned a plethora of results, much better than Google (although now Google is returning more results, they still aren't as good as Clusty).

Google is also loosing its appeal to me. What with the poor results of AdSense, its inability to search my site properly, and … well … I like the way Clusty clusters results (hense the name). And if that means Google kicks me out of Google AdSense, oh well … it wasn't paying that much anyway.

Saturday, August 05, 2006

The cooking god that is Alton

Today was pretty much an Alton day. I've introduced Bunny to the wonders of Alton Brown and his show Good Eats. We made his very basic bread (which ended up a bit dense—I think due to not finding the right type of yeast) which ended up very good (despite the wrong type of yeast) and his hamburger recipe which was, as Bunny put it, “the best hamburger I've ever tasted” (and it's a very simple recipe).

We also watched his new show Feasting on Asphalt, which is a very interesting look at American restaurants off the main Interstate highway (and by god I want the soundtrack to that show—the main theme has earwormed its way into my brain in in this case, that's not a bad thing). Just watching Alton's reaction of pickeled pigs feet or a brain sandwich is just priceless (“Amazing thing about [the pickeled pigs feet]—I'm no longer hungry!”).

Sunday, August 06, 2006

I never pegged Gregory as the NASCAR type

When Gregory invited us out to see Talladega Nights: The Ballad of Ricky Bobby I was a bit leary. I wasn't much in the mood to watch a movie, much less a Will Ferrell vehicle (pun intended). But the movie had its moments, which to me, is all the comment the movie is worth.

Monday, August 07, 2006

Lost pictures

Man, am I pissed.

I'm copying the pictures I took yesterday off the digital camera:

[spc]marvin:/Volumes/NO NAME/DCIM/100OLYMP>scp * \
	/Volumes/WORKGROUP\;LINUS/images/2006/0806/

And as I always do after transfering the images (I had assumed the pictures copied okay):

[spc]marvin:/Volumes/NO NAME/DCIM/100OLYMP>delete *

(in this case, delete is an alias for /bin/rm and rm is an alias for echo "This command doesn't exist"—don't ask).

Only the copy didn't work out as expected (okay, who's bright idea was to include semicolons in Mac OS-X mounted volumes? Especially for those of us who like working at the command line?). I ended up with one (1) picture, named /Volumes/WORKGROUP. The last picture on the camera, which was of the cheeseburger I had yesterday after the movie (should have used cp but mistyped).

Lost: pictures of the 50s decorated Denny's. Those of Gregory, Spring, The Kids, Wlofie, some random customers at said Denny's. And two reserved spots in a parking garage protected by two of those automated arms that go up and down.

Sigh.

Tuesday, August 08, 2006

A long, slightly rambling, but deeply technical, entry follows, so if you aren't interested in software internationalization, character sets and variable type systems, you might want to skip this entry entirely; you have been warned.

how could Planet RDF do things better?

Danny, you can see the problem above.

Is the Planet RDF code available? I would gladly provide a patch.

The problem is not in your input feed. You contain the following code: &#8217;. Planet RDF converts that into binary, which I will express in hex: xC3A2C280C299. The correct formulation would be xE28099. I've got a good idea about what is going on under the covers as

In other words, for some reason, RDF Planet is effectively doing a iso-8859-1 to utf-8 conversion, on utf-8 data.

Sam Ruby

It's a mess.

Part of the problem I'm sure is that not many programmers are used to i18n. And part of it is not many programmers are aware of what data is in what format at what part of the processing. And that is related to variable types in programming.

The first problem is i18n. I won't say it's trivial, but it does take some forethought to handle it. Thirty years ago it was simple—you use the character set of whatever country you were in and that was that. Since computers work with numbers, a “character set” is just a mapping of values (say, 1) to a visual representation of a character, a “glyph” (say, “A”). Here in the US, we used ASCII, where in this case, the character “A” is internally represented with the value 65 (and the lower case “a” by a different value, 97 since technically, it is a different glyph). The character “A” in say, Freedonia might be stored as the value 193.

No problem. Well, unless your software was sold internationally, then you had a problem of handing different character sets. And there are a lot of them.

So a solution (and it's a pretty good solution) is to use some internal representation of every possible character set as the programming is running (say, Unicode, which was defined to handle pretty much any written language) and do any conversions on input and output to the locally defined character set (I've found the GNU iconv library to be pretty easy to use and it can handle a ton of different character sets). Yes, there are some really obscure corner cases doing this, but for the most part, it'll handle perhaps 95% of all i18n issues.

But web based documents—or rather, documents based upon HTML/XML—present a wrinkle. HTML/XML use the “<” character (value of 60) to start the beginning of tag, like <P> (in this case, this particular tag denotes the start of a paragraph). But what if the content (that is, non-tag portion) actually requires a literal “<”? What then? Well, HTML/XM use another character, “&”, to encode characters that you would otherwise be unable to use. So, to get a “<” you would write it (or “encode it”) as &lt;, which means that to use a “&” in your document, you need to write it as &amp;.

But you can use this form, called “entities” (or HTML entities) to include other characters that might otherwise not be part of your local character set, such as the much nicer typographical quotes “” (compare to the computerish ""), or even the star in the middle of Wal★Mart.

Now, most of these entities, like &amp; are named, such as &ldquo; for the nice looking opening double quotes, or &rarr; for a right arrow. But a lot don't have names, like the star in the middle of Wal★Mart. To get those, you need to use a numeric value, like &#9733;.

But, where do you get these values?

Well, they're Unicode values.

So, even if you're writing your page in a Slavic langauge (using for instance, the character set defined as ISO-8859-5), the “á” can still be encoded as &#225;, using the Unicode value for “á” (since ISO-8859-5 doesn't contain that glyph). To further confound things (and seeing how for this example, we're using ISO-8859-5) the character “Љ” can be inserted as a character with value 169 (whereas if viewed as an ISO-8859-1 character, it would be “©”) or as &#1033; (which would work reguardless of the character set you are using for your document).

Got it?

If not, you're in good company with lots of other programmers out there. And that's even before we get to the issue of submitting text to a CGI script (I'll get to that later).

And that leads to the second problem, where programmers don't know what's what where in their program. And that's related to variable types. Or rather, the lack of variable types. Or rather, the rather lackadaisical approach to typing most modern computer languages have today (Python? Perl? I'm looking at you).

In today's modern languages, unlike slightly older languages like C or Pascal, you don't really need to declare your variables before you use them—you can just use them. Sure, you can predeclare them (and if you are smart, you do) but you don't have to, and even when you do, you just declare that foobar is a variable, not what it can hold (well, granted, in Perl, you have to tell it if the variable can contain a single value, or a list of values, or a table of values). As Lisp programmers are wont to say: “a variable doesn't have a type, values do.”

Now, why is that such a problem?

Well, other than muddle headed thinking, there's overhead at runtime in determining if the operation is permitted on the type of the value held in a variable and if not, what can we do with the value in the variable to make it the right type for the operation in question. So, in the following Perl code:

$result = $a + $b;

at run time the computer has to determine the types of the values of the variables $a and $b—if numeric it can just add them; if strings, it has to convert the strings to a numeric value and then add them. And what if $a contains the string “one” and $b contains the string “two”? $result will have the numeric value of 0 because “one” and “two” do not convert to numeric values (the ol “Garbage in, garbage out” saying in Computer Science; oh, you were expecting maybe “onetwo”? That's a different operator altogether).

But even if we just stick with strings (and HTML processing is a lot of string handling) we're not really out of the woods. Even if we were to use a computer language with stonger typing (say, Ada) that wouldn't even help us because the type systems of any language today just aren't up to it.

For instance, given a simple HTML form that accepts input, we can feed it the following:

“This—is–a★test”

Now, when the data is submitted, the browser will encode the data in yet another encoding scheme (application/x-www-form-urlencoded to be precise), which can contain HTML encoded entities (see above) in any number of character sets (although, unless otherwise stated, in the same character set the browser thinks the page that has the form uses). Using the latest version of Firefox (1.5 as of this writing), if instructed to send the data using charset US-ASCII the data I get is:

%26%238220%3BThis%26%238212%3Bis%26%238211%3Ba%26%239733%3Btest%26%238221%3B

Which, when decoded, is:

&#8220;This&#8212;is&#8211;a&#9733;test&#8221;

But, if the data is sent as charset ISO-8859-1:

%93This%97is%96a%26%239733%3Btest%94

Which, when decoded, is:

“This—is–a&#9733;test”

The quotes and dashes (the “mdash” and “ndash” respectively) are single characters but the star is still sent as an HTML entity. Yet if the browser is told to send the data as UTF-8:

%E2%80%9CThis%E2%80%94is%E2%80%93a%E2%98%85test%E2%80%9D

Which, when decoded, is:

“This—is–a★test”

So, what does all this have to do with variable types and the weakness of typechecking even in a language like Ada?

Well, if we could declare our variables with not only the type (in this case, “string”) but with additional clarifications on said type (say, “charset ISO-8859-5 with HTML entities” or “charset UTF-8 encoded as application/x-www-form-urlencoded”) it would clarify the data flow through a lot of web based software and prevent stupid mistakes (and yes, it would piss off a lot of muddle-headed programmers but this would at least force them to think for once).

Update a few moments after posting

All this talk about encoding issues, and I still blew it and had to manually fix some encoding issues on this page.

Sigh.

Wednesday, August 09, 2006

Musings on typechecking

I was thinking a bit more about yesterdays post on variable types and character sets. I mean, yes, one could conceivably make subtypes of strings with specific character sets:

class String { /* ... */ } ;
class StringISO8859d1 : public String { /* ... */ } ;
class StringISO8859d5 : public String { /* ... */ } ;
class StringUTFd8     : public String { /* ... */ } ;

String          foo = "Hello";	// perhaps a warning here
StringISO8859d1 bar = "Hello";
StringISOUTFd8  baz = "Wal★Mart";

bar = baz;	// two things could happen here
		// 1. compiler spits out a warning
		// or error because you are trying
		// to store a variable of one type
		// into another without an explicit
		// conversion step, or
		// 2. The compiler does the conversion
		// for you, much like an int &rarr; double
		// conversion.  Problem here is what if the
		// source string has characters not
		// representable in the destination string.

But that doesn't work that well when you want to determine if the string has been converted to HTML entities or not, as it gets unwieldy fast:

StringISO8859d1NoEntities foo;
StringISO8859d1Entities   bar;
StringISO8859d5NoEntities baz;
StringUTFd8Entities       fubar; // Silliness!  Silliness I say!

And even more importantly, what if you don't know the character set of the data until runtime? In that sense, the character set and the encoding is a type of attribute of the string, or a sub-type of the string.

Yes, such information could be added to the base String class with appropriate methods to check and set this sub-type (or attribute-like) information, but I'd still like to get compile time checks whenever and where ever I can. For instance:

StringEntity   foo = "Johnson & Co.";
StringNoEntity bar = "American Telegraph & Telephone";
String         baz;

baz = foo + bar;	// now what?  We're adding a string where
			// "&" is encoded as "&amp;" to a string
			// where the "&" appears as is.  Do we
			// 'de-entify' foo or 'entify' bar?  And
			// what is the programer expectation?
			// Probably not much, given this piece
			// of code.

I hope you can see where I'm trying to go with this, and track a form of intent throughout the code. Variable types are more than just annoying muddled headed programmers and producing fast code—it's also a statement of what we (or at least I, as a programmer) can do to the variable—what methods of manipulation we want done and having the computer find that at compile time where it's certainly cheaper and easier to fix than at the customer site.

I think what I'm aiming for is a way of annotating a variable with more than just type information and having those annotations checked and enforced by the compiler. Another example might be unit tracking. Say, making sure that you add a LENGTH to a LENGTH but that a LENGTH times a LENGTH is an AREA, and you can't add LENGTH to an AREA. Or that this variable is in inches, that in millimeters, and have the computer keep track of multiplying or dividing by 25.4 as the value moves from one variable to another (I think there are some specialized computer languages that can do this, but I don't know of any general computer language supporting this).

Thursday, August 10, 2006

“And the difference between Vox and LiveJournal is … ?”

How is Vox different from … LiveJournal?

LiveJournal has grown to be an amazing community of fiercely independent bloggers. Over the past seven years, that community has developed in both its scope and its need for powerful customization. We think that Vox will be a great choice for bloggers looking for a more turnkey environment that balances community and privacy.

VOX—See it. Hear it. Vox it.

But notice how they don't actually answer the question. How does Vox differ from LiveJournal? Not even LiveJournal has an answer.

And both are owned by Six Apart.

So why would Six Apart offer yet another blogging/journaling service when they have Livejournal and Typepad? A couple of reasons. One, despite what they're saying, they're probably trying to buy into the MySpace realm of website while it's still a hot market to get into (“What's hot? MySpace. What's not? LiveJournal.”).

Two, anyone can snag the source code that runs LiveJournal and set up your own service (like DeadJournal or InsaneJournal—although both don't have the mindshare of LiveJournal). You can even download the code for Moveable Type (which is what they use for Typepad) and while you aren't exactly free to do anything with the code, you can still (with appropriate licensing) set up a comparable service (although I don't know of any off the top of my head). And there's still nothing from letting you download either codebases and doing your own personal thing with them. With Vox, I doubt you'll ever see the source code.

You don't get to see the code that runs Google. You don't get to see the code that runs MySpace. You don't get to see the code that runs Flickr. It seems that all the cool Web 2.0 kids are into services and not into sharing code (granted, you can use their services through a web based API they provide, but that's not the same as sharing the actual code).

Now, why don't you get to see the code to Vox? (and this is pure speculation on my part—who knows? When they formally launch Vox they might provide the source code, but I'm doubting it). Because I suspect that Six Apart are planning on going public soon (reason three). They've been receiving funding from vulture venture capitalists over the past few years, building themselves up and my guess would be that the investors feels it's a harder deal to go public when the core of your business, your product, is available for free for anyone to set up competition using your own product!

I would not be surprised at all to hear Six Apart announce (at the same time, or shortly after, they announce Vox) they're planning on going public.

And that, in my opinion, is how Vox is different from LiveJournal.


Obligatory Cat Blogging

[Mama always told me not to look into the eyes of the sun / But mama, that's where the fun is]

Spodie, curious as to what I was holding in my hands, leared the hard way what a “flash bulb” is.

He didn't like it very much.

Friday, August 11, 2006

Day 10

Some days you're the windshield.

And some days you're the bug.

Today, I felt like the bug.

Oh, I've had worse days. It's just that today wasn't all that great. Smirk called as I was heading into work to warn me that one of our servers was dead. The one that wasn't backed up because we kept meaning to move sites off that server because we knew it would fail at some point in time (but we got it working later in the day and backed up).

P was still recoving from having done an upgrade on another server; he broke the cardinal rule: “if it ain't broke—don't fix it!” Although all he was trying to do was upgrade to PHP 5 but well, Insipid, the control panel didn't like that one bit—at least, on that version of the control panel on that version of the operating system.

Which meant I couldn't turn the server that overheated a little over a week ago back on (I kept it off until I was sure the A/C wouldn't fail), since I needed the crash cart, and P was too busy using that to recover from the upgrade.

[At least the guard rail was down this time]

R (I manage a few servers for him) called a few times about the lack of email. His ISP is The Monopolistic Phone Company, and they will, at the drop of a hat, refuse to accept email from the outside, and since his email address is through his domain, hosted on his server, all this lovely spam gets directed through his server towards The Monopolistic Phone Company, which doesn't like that very much (this has only happened about a bazillion times this month alone).

Then there was the new customer circuit. It sounded promising at first—they have a Cisco router and don't need us to manage it. And it's an ethernet connection (they're in the same building, just down the hall) so it's nothing terribly complicated—I have them some IP addresses (earlier this week) and truthfully, wasn't expecting much problem.

Only they weren't as clueful as I expected—it's Ethernet, not a T-1, connection. Which necessitated a rethink on the IP routing (I have them two small blocks thinking they'd be routing through their Cisco, but since they couldn't use it, they wanted a single larger block), and all this at around 5:30 pm (of course!).

The whole day at the office was like this—small problems that just wouldn't go away.

Smirk calls such days “Day 10,” as in “they only happen every ten days or so.”

I hate Day 10.

Saturday, August 12, 2006

An otherwise lazy Saturday that was punctuated by a visit to The Office

Since I didn't get a chance yesterday, I headed into the office today to bring the offline server (which overheated) back online. Thankfully, everything went according to plan and I was only there for half an hour or so.

Sunday, August 13, 2006

Dive into Accessibility indeed

Validated XHTML

This ensures that the code that we have used on this site validates against the W3C's strict standard. As more and more assistive technology (such as a Braille reader, a screen reader, TTY, etc.) is using this standard to build against, we can be sure of making our site accessible to the widest audience.

Validated CSS

Again, by validating our style sheets against the W3C gold standard, we can make our site accessible to everybody with a DDA compliant browser or other assistive technology.

W3C Web Content Accessibility Guidelines 1.0

All pages have been validated against standard using “Bobby.” This service allows us to test web pages and help expose and repair barriers to accessibility and encourage compliance with existing accessibility guidelines, such as Section 508 and the W3C's WCAG.

Section 508 Guidelines

The Section 508 guidelines have been reviewed and implemented. All pages are in compliance.

All pages on this site use structured semantic markup. H2 tags are used for main titles, H3 tags for subtitles. For example, on this page, JAWS users can skip to the next section within the accessibility statement by pressing ALT+INSERT+3.

Via Mark Pilgrim, Accessibility Statement @ SoundsDirty.com (not safe for work)

I'm not sure why I found it surprising that a porn site (need I even bother mentioning this isn't work safe?) would bother with web accessibility standards, but I did. Porn sites in general have always pushed the limits of web technology (they were early adoptors of micropayment schemes, web subscriptions, flash, Java Applets) and I suppose that making a site accessible to everyone is just an opportunity to make more money (Playboy in braille anyone?).

So if a porn site can be accessible, then gosh darn it! So will my site! So I've been playing around with accessibility validator and adding some more markup to make my site here a bit more accessible.

Why not?


None are worthy to park in this spot

Last week I lost some pictures, including a few of some heavily protected parking spots in a parking garage. Well, tonight Spring and I went back to City Place (where the aformentioned parking garage is located) for some window shopping (“Would you just look at the contents of that store? What hideous furniture!”) and this time, I got the picture:

[None shall pass!]

I also got this lovely shot of the warning sticker clearly saying that pedestrians are not allowed to stand in the space, and of course, the only way to see such warning was to stand in the disallowed space.

[It can slice!  It can dice!  It can even julienne!]

Figures.

Monday, August 14, 2006

Timesink

I don't play computer games all that much (heck, I don't play regular games all that much) but sometimes … sometimes there's a game (via kisrael.com) that just sucks me in.

There are no rules presented, but if you've played Risk you should be able to figure out the game play. Oops, gotta go, being attacked on my left flank by green …


Vertical writing

Spring was able to drag me away from my game long enough to take me to Scibal Night, a class held by members of the SCA, which involves calligraphy.

[I don't think it was originally written in a Gothic script]

The main problem I have with calligraphy is that the fonts are right handed and I'm not (I had the same problem with the Chinese Calligraphy class I took in college, but at least there, it's a brush and it's not as difficult getting the strokes looking “right”). The methods I can use are:

  1. Use a special left-handed nib (tried, didn't really care for it, and it's expensive)
  2. “Hook” my left hand (such that it's pointing back at me). I don't normally use a “hook” when writing and it feels very uncomfortable.
  3. Write backwards. Da Vinci did this. I am no Da Vinci. And besides, the script is still backwards.
  4. Write vertically—that is, turn the paper 90° clockwise and pen the letters sideways, working down the paper. I used this method almost exclusively (I did try a few left-handed nibs—didn't care for them).

Writing vertically wasn't that weird (although some strokes are still difficult to do) and given that this was pretty much my first time at western calligraphy, I don't think I did half bad (certainly close with some of the samples that were passed around the table).

I promised Spring I'd go at least one more time to see if I'm interested in keeping up with this. But under no cirsumstances am I dressing up in 14th Century garb (or any garb other than what can be found today).

Tuesday, August 15, 2006

“Robots other than the ones in Star Wars?”

I'm not sure how the topic of conversation came up, but Wlofie asked me to “name a robot that wasn't in Star Wars,” and you know what?

It's harder than it looks.

Wednesday, August 16, 2006

Renumbering

For several reasons we need to consolidate a large portion of our IP addresses so that Smirk can transfer a sufficiently sized block to the new Charlotte, North Carolina data center we're moving into. It's never easy to renumber, and I knew this was coming up, but I didn't realize that Smirk would require it done today.

We had already reassigned a block to a customer, leaving us with The Office machines, and the DSL units to renumber. The Office would be trivial compared to renumber the DSL units.

Renumbering the DSL units.

Which includes one particularly annoying unit, who had to have their DSL unit reconfigured twice!

Sigh.

Now, unlike residential DSL, we manage both sides of the connection. Also, we give out static IP addresses (and blocks of IP addresses, although the larger block of IP addresses per DSL customer isn't changing, it's the IP address of the individual DSL unit that is). So it's not like we can call our customers and say “just power cycle your DSL unit.”

On our end, not only do I have to reconfigure the DSL unit, but change some routing entries on our DSL router, and make changes to the radius database (which customers get which IP addresses) and make sure to do the changes in the correct order or else I'll have to end up talking to the customer at the far end, trying to talk them (invariably non-computer literate) through the steps to change the DSL configuration.

I manged to do it, but it wasn't smooth (mostly loosing connection to the far end, which is an occupational hazzard when you are trying to do this remotely). And I ended up talking to all the customers (and even visiting the site of that one particularlly annoying unit) and now we have a bunch of IP addresses to assign to the Charlotte, North Carolina site.


One Classic Car

While out to dinner with my friend Bunny, we came across a 1962 (well, it had a 1962 Florida license plate) Chevrolet Corvair 95.

[Nice grillwork] [Nice colors too] [Roomy interior] [The Corvair 95]

The Big Three certainly made some nice looking vehicles in the 60s.


Oh.

“I neglected to mention this earlier,” said Smirk. He had called me on my cell phone. “But we're leaving for North Carolina on Saturday.”

Oh.

So that's why whole renumbering thang earlier today.

Thursday, August 17, 2006

Hypertext editing, Part III

Nearly three years later and it still hasn't gotten any easier.

Yesterday at dinner Bunny and I had a conversation about the difficulty I have in writing these entries—mostly about the time it takes and how the writing process gets interrupted by the editing process of adding links and tags and acronym expansions and what not.

Like today, which has been “catch-up” day. Sunday's entry not only required the usual hand-made markup, but it required the transfer of the images to my laptop where I have the image manipuation program (my normal desktop Linux system chokes on the large images, and the Mac mini doesn't have any image manipulation programs at all) for the cropping and resizing, then sending the results to the web server.

In other words, the work flow for producing entries here sucks, which partially explains why I fall behind on the entries as much as I do.


Notes on a program

This entry is less a polished entry and more just notes on a project I've been given. If it seems somewhat random and hard to fathom, that's why.

Smirk is drowning in email. As such, he's looking for a filtering solution whereby he can run a job daily that scans his email (using IMAP) and shuffles email to different folders. The criteria is something like “I've read it and it's older than seven days, move to this folder. If it's unread and older than three days, move to this other folder. If I've read it and replied to it, move it to yet another folder.”

procmail won't really handle that, as it's meant more for initial delivery and filtering of email. He also rejected sieve as it apparently doesn't handle date parsing that well (or something like that). So he asked me if I could write such a program, preferrably using PHP since he knows that language (and since I equally hate Perl and PHP, it's six of one, half dozen the other, and I would prefer C, but that's me).

So, the design of the program. Given some input file describing the filtering to do on email:

account imap://alice:zahg34!@mail.example.net/
{
  mailbox INBOX
  {
    foreach message
    {
      if (header.subject =~ /[Vv][Ii1][Aa@][Gg][Rr][Aa]/)
	moveto Trash;
      if (status = REPLIED) moveto Replied;
      if (header.date ~ "3 days ago" && status = UNREAD)
        moveto Archive;
      if (header.date ~ "7 days ago" && status != UNREAD)
        moveto ReadArchive;
    }
  }

  mailbox Archive
  {
    if (messages > 5000)
      sendmail("Yo!  There are too many messages in the archive!");

    if ((messages > 3000) 
    || (message[1].header.date >~ "6 months ago"))
      sendmail("Yo!  Check your archive!");
  }
}

Okay, maybe nothing quite so grandiose, but some file to explain the rule sets for moving messages from one box to another, run as a job periodically (a cron job).

We need to retrieve information via IMAP. We need to parse the email headers. We'll need regular expressions, as well as date processing utilities (“3 days ago,” “less than 5 hours,” etc). We'll need to read and parse the rules file (using whatever syntax I come up with). Oh, I would like to translate all the text to some intermediary character set so we can filter consistently, which means using iconv (and parsing MIME specific headers and MIME-encoded headers).

So the main program flow for processing each message would look something like:

get headers for next message
convert to consistent character set (probably UTF-8)
for each rule to check again
	check conditions of rule against message
	if all conditions apply, apply action

The hardest parts appear to be getting a version of PHP with all the required exentions installed. Next would be defining the input file and parsing that into some internal format for processing. The rest pretty much just falls into place.

Most of the time will be spent in building the required version of PHP, and in playing with the various modules to figure out how they work and what exactly one gets. I would also need to set up a play IMAP account to test the program against (there's no way I want to run this on my email account, or on Smirk's for that matter).

Friday, August 18, 2006

Equipment preparations

In preparation for the upcoming North Carolina jaunt, I found some new equipment on my desk for testing and configuration.

[Power strip controllers and terminal servers] [Inside the unit] [Swapping cards around]

The plan is to load up and leave tomarrow around 1:00 pm, placing us in the Charlotte, North Carolina area about twelve hours later. Sunday is installing the equipment and if there is time left over (hopefully, there will be) drive around the area taking in the local atmosphere. Monday I'll get the credentials to enter the data center (since Smirk is adament about not running one, we're renting space in an existing place) then return home. We should be back late Monday night.


Expendability

[Expendability: Kirk, Spock, McCoy, and Ensign Ricky are beaming down to the planet.  Guess who's not coming back.]

Star Trek Inspirational Posters (link via Sean Tevis).

Go. You know you want to.

Saturday, August 19, 2006

I can wait to get on the road again …

I'm packed and ready to go.

I'm just now waiting for Smirk to pick me up.


On the road again

Smirk says high to all the readers out there.

Well, we're finally on the road. The plan: pick me up around 1:00 pm, get the SUV, then go to the office, pick up the equipment (which ended up being six servers, four 1000′ spools of CAT-5 cable, a bunch of tools, adaptors, cables and what not, plus our laptops and, unlike my last trip, I have an unlimited data connection via Smirk's laptop, so the posts will be much better (while the keyboard sucks on the laptop, at least it's a keyboard)). But Smirk was running a bit late, having to drive back from Orlando this morning (it's best not to ask about that).

The clerk at the car rental agency was a hoot—he chided Smirk for making two reservations (even going so far as slapping Smirk's wrist) and then launching into an extended rant about the virtues of Clint Eastwood's western films. Quite amusing.

By the time we got to The Office we were running about an hour late, but in gathering the equipment we ran into some snags (one of the servers we're taking wasn't booting up properly), then after loading, we had to stop by Smirk's storage unit for some rack shelving and then a stop by Radio Shack for some cable strippers.

So we're running about 3½ hours behind schedule.

But we're on our way.


On the road again, II

Two notes (at 7:45 pm):

  1. Wow, very heavy rain, very light visibility.
  2. Two, need to adjust the web form a bit—preview mode resets one of the fields, and another field isn't set to the correct value.

Anyway, back to talking to Smirk and checking out Google Maps.


On the road again, III

In our quest to find a Starbucks (hey, Smirks wants a Venti® White Chocolate Mocha Frappuccino® Blended Coffee, what can I say?) we found ourselves driving through downtown Daytona, Florida (who needs a GPS when you have Google Maps?) in heavy traffic.

We finally found one, and while there, I managed to take a picture of the local fauna (and yes Smirk, I'll post the picture when I get a chance to download it from the camera and we have broadband access) while Smirk was obtaining his Venti® White Chocolate Mocha Frappuccino® Blended Coffee.

By 10:00 pm we were on our way again, headed north from Daytona.

Update at 11:59 pm

[The Fauna of Daytona]

The aformentioned picture of fauna in Daytona

Sunday, August 20, 2006

Off the road

Oy.

It's 7:00 am.

We're here.

Where to begin.

When we last left off, I had just uploaded a picture of the local fauna found in Daytona, Florida. Around Jacksonville, the connection was fast enough to download the Gimp and necessary files to install it on Smirk's laptop (as we were travelling 80mph—the bits where slamming into us), get the pictures off the camera (which involved some extreme contortions on my part to get the cable out of my laptop bag in the back) and upload said pictures to my home computer. By the time that finished, the connection had slacked off (the bits were now having to catch up with us) but I was still able to get the picture of the local fauna uploaded.

About halfway through Georgia we lost the connection at about the same time we almost lost the SUV—it suddenly dropped speed and all sorts of engine lights flared up and klaxtons went off.

It wasn't a pretty sight.

Thinking we overtaxed the battery (laptop, iPod) we shut the electrical equipment and pulled off at the next exit, stopped the car, let it rest for a few moments. When started, only one warning light remained lit, so we drove it, hoping to make it to Charlotte (about 3½ hours away). The laptop remained off (partly explaining the lack of posts).

Once into South Carolina, I took over driving (further explaining the lack of posts) and at the next refueling stop (first exit in South Carolina) all the warning lights remained off. Smirk then took this opportunity to use the laptop, but a solid connection remained elusive.

The plan: Arrive at the data center. Unload the servers into our cabinet (just dump them there), hit the hotel. Sleep. Drive around the area and in the early evening, set the servers up. Hit the hotel. Sleep. Hit the data center one last time to get my access to the data center set up. Drive home.

At 4:30 am we arrived at the data center. Mayhem ensues as we try to gain entry. Smirk realized the PIN contains an extra zero. Gain entry. Forgets which finger to give the next set of doors. Finally gain entry. Forget combination to the cabinet. I stand there trying each combination while Smirk calls to get the combination. Help finally arrives and we find out we were doing it wrong. Servers dropped off.

At 5:30 we arrive at the hotel. Get our keys. Go to car. Nearly get accosted by a drunk trying to scam some money from us. Dump stuff in room. Both of us are hungry and tired. Hunger wins. We walk next door to the IHOP. No signal for the laptop there (more reason for the lack of posts).

At 6:30 head back to our room. The A/C barely works, and the wireless access barely exists. Now it's the start of musical rooms. This one too wireless. This one too hot. This one just right.

At 7:15 I crash.


Observations about a room at a Howard Johnson

Actually, I didn't get to sleep until 8:00 am. One of our servers had crashed and we had to remotely reboot it. Anyway, it's now 12:45 pm and the 4½ hours of sleep really did wonders, and now I'm cognizant enough to give you some observations about our room here at Howard Johnson:

Anyway, time for the shower.


Scufflaws

Long day today (and no links for this entry—I'm too tired to even consider links right now; do your own XXXX searching).

After leaving the hotel, we drove around the state a bit, including Lincolnton, where Smirk is thinking of moving to soon. After that (and a very cool antique store with the Obligatory Velveteen picture of Our True Lord and Savior Elvis Aaron Presley and old tin advertising signs) we headed out to Brevard.

Yup, the town I grew up in.

It hasn't changed a bit, yet everything is different. The old drug store on the corner of Main and Broad St. where I used to buy my Uncle Scrooge comics is now an upscale toy store (not the Porche type toy store, but a train set and teddy bear toy store—back in 1988 when I last visited it, it had split into a two stores, one being a Hallmark store). Yet the townhome we lived in was still called “Shepards Square” and was still the same redwood color (although the actual townhome that I called “home” now had an access walkway across the lawn).

We then drove out to Connestee Falls. At first we couldn't find it since the area had built up in the past few decades. We stopped at a realty office specializing in Connestee Falls realestate (not only is it named for a spectacular waterfall, but a housing development in the same area) but found it closed. I then walked to a nearby house and asked the very friendly resident were the falls were. He pointed out that they were still about two miles further down the road.

Two miles later we found the falls. What had once been a series of octagonal shaped buildings holding the sales offices and restaurant is now long gone (only one lone octagonal building is still there and it was the home to some other local business) with the paths leading to Connestee Falls long gone into disrepair.

The only portion still “open” was the upper observational deck, with the semi-natural stairs that lead to the base of the main falls closed off with a no trespressing warning sign. We found the rements of a path that lead around the gate and being the scufflaws that we were, made a very careful descent down to the base of the main falls.

Connestee Falls is rare among falls in that two falls, nearly opposite each other, meet and run off into a perpendicular stream. The path we followed down looked like it hadn't been maintained since my last visit to the falls in the summer of 1988, and we only made it to the base of the main falls (and were about twenty feet away from the lower observational deck that was otherwise behind unreachable forest.

The weather in Brevard was drizzly, but that made it all the more vibrant around Connestee Falls, the rain bringing out deep greens and browns of the forest. Very beautiful and very tranquil setting, making me wish I had a house overlooking the falls.

After an indeterminate amount of time, we relunctantly made our way back up the trail to our vehicle and made our way back to the data center to finish setting up our equipment.

By the time we got back from Brevard (and dinner) it was after 10:00 pm when we headed directly into the data center. We mounted the servers, reran the power cables and were about to make the actual network cables when we found one of our servers DOA. By then it was after 2:30 am (okay, I'm backdating this entry a bit) when we figured we'd call it a day.

We cleaned up, and left one server backing up another one since we need to reinstall the operating system. We have a full day ahead of us tomorrow and it's expected we might not make it back on Monday.

It's now almost 4:30am and I'm getting ready to crash.

Monday, August 21, 2006

Oh, one more thing …

The Howard Johnson we're staying at can't configure their wireless network.

[spc]darkstar:~>netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.8.1     0.0.0.0         255.255.255.255 UH        0 0          0 eth0
192.168.255.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.8.1     0.0.0.0         UG        0 0          0 eth0
[spc]darkstar:~>

Yes, I was assigned an IP of 192.168.255.101 (with a netmask of 255.255.255.0) yet my gateway was defined as 192.168.8.1.

No XXXXXXX wonder I couldn't connect out. I just reassigned myself the IP of 192.168.8.240 (netmask of 255.255.255.0) and it worked just fine.

Sheesh!


On the road again, IV

[Always seems to happen—I travel, and for the first day or so I manage to keep up making posts then suddenly I drop off the face of the earth for a week or so. Sigh. Anyway, what follows will be a rather quick recap of the Hellish nightmare that was last week.]

So, where was I?

Ah, yes. Charlotte.

We checkout out of our hotel, then proceed to the data center (after making our obligatory stop at Starbucks that's just around the corner from the data center) with a full day's plan ahead of us, only to have it shot down mere seconds after walking inside.

Now, let me explain a bit about the setup of the data center in Charlotte. You walk in the main lobby. You then have two data centers, one ahead (data center #2) and one to the left (data center #1). Each data center has a keypad on the door that you wave a featureless white card at, then enter your PIN. This leads into a waiting area—the data center #1 vestibule (as this waiting area is called) has cubes set up for work, as well as a work table, while the vestibule in data center #2 (where our cabinet is stored) is just a large featureless room. Nonetheless, there's another set of doors in each vestibule with a small cylinder vertically mounted by the doors. You wave your card in front of this, then place your finger on the top of the cylinder, then you can enter the data center proper.

Our plan had been to set up a cable assembly line in vestibule #1 since we had a large number of networking cables to make. Smirk was also planning on checking the dead server in this area and see if he could get it working.

Well …

The table was in use in the lobby for a blood drive. And all the cubes in vestibule #1 were in use by another customer (or customers). Not a good start. An hour goes by as Smirk talks to the various employees there about where we can set up. We're told that we can snag the table at 2:30 pm and take it into data center #2 where we can work. So we have to wait around until 2:30 to get the table …

So we're running late.

2:30 comes, we set up the table in the data center, and I proceed to manufacture cables while Smirk checks up on the dead server, which turns out is dead because of defective memory. Smirk then goes out hunting computer memory while I stay behind making cables.

And cables.

And more cables.

Smirk returns, puts the new memory in the server, and it works. He then helps me make cables.

We made a lot of cables.

And spent quite a bit of time hooking up said cables.

And doing some quick tests.

We finally get out of the data center around 10:00 pm. The plan now? To drive until we can't drive any futher, get a hotel room, then resume travelling tomorrow.

On the way through Columbia, South Carolina, we stop by and visit an old friend of Smirk's who just recently moved to the area.

The apartment I lived in in Boca? The one I jokingly refered to as “The Facility in the Middle of Nowhere?”

Smirk's friend, J—his house is in the freaking “Middle of Nowhere!” We must have driven about 40 or so minutes through dark winding back country roads that met at odd angles until we reached J's house. And for being in the freaking “Middle of Nowhere” it was a nice house. A house like that down here, with that much land, would probably be in the half million dollar range easy.

Cheap up there though.

Tuesday, August 22, 2006

On the road again, V

We left J's house around 2:00 am and I immediately fell asleep in the car (fortunately, I was not the one driving). Some time later I awoke to find ourselves at a hotel, some no name hotel Smirk found along I-95 somewhere in South Carolina. He was hungry, and right next to the hotel was a Huddle House, which is a chain of diners through this part of the country. I wasn't all that hungry, but I did join Smirk and had some shrimp and a salad.

Shortly thereafter we were both asleep.

The hotel we stayed at was much nicer than the Howard Johnson we stayed in. No epileptic light fixtures. Working A/C (if it did appear to be a bit on the small side). We didn't check for wireless access, but since neither one of us were in a state to really care, we let that slide.

Our wake-up call was at 10:30 am.

And I woke up sick.

I felt horrible, and wanted nothing more than to climb back into bed and sleep (well, that's what I feel like doing every morning, but this morning I had a pounding headache and was feeling quite nauseated).

And at 10:40 am, we got a call from P (who was still holding down The Office in Boca Raton)—we had a customer T1 down. Worse, the backup circuit, a wireless shot between them and us, was also down. Needless to say, the trip back wasn't all that great.

I was on the phone with the Monopolistic Phome Company for maybe four hours, trying to get the T1 back up and running. The initial conversation went like this:

“Hello, the Monopolistic Phone Company Business Repair Unit. Can we have the circuit ID of the connection?”

“Yes, it's eight zero Whiskey Tango Foxtrot niner niner two four zero sixer. It's currently down and we need it back up.”

“Are you sure that's the circuit ID? I'm not finding it in our database.”

“I'm sure, but I'll double check.”

I call P. I have him read off the circuit ID from The Monopolistic Phone Company box on the wall, as well as the tag attached to said line, plus the number recorded in our database: eight zero Whiskey Tango Foxtrot niner niner two four zero sixer. Smirk calls the customer and has them read off the circuit ID off the invoice: eight zero Whiskey Tango Foxtrot niner niner two four zero sixer. So I call back.

“Hello, the Monopolistic Phone Company Business Repair Unit. Can we have the circuit ID of the connection?”

“Yes, it's eight zero Whiskey Tango Foxtrot niner niner two four zero sixer. It's currently down and we need it back up.”

“Are you sure that's the circuit ID? I'm not finding it in our database.”

“Yes, I'm sure. It's written on the box from you, on the tag from you, in our database, and on the invoice sent to our customer.”

“That's wierd,” said The Monopolistic Phone Company Represenative (and that would be the first of many said Monopolistic Phone Company Represenatives that said that very thing). “Let me transfer you over to billing to double check.”

“Billing. How can I help you?”

“Do you have circuit ID eight zero Whiskey Tango Foxtrot niner niner two four zero sixer?”

“Yes we do.”

“Okay, thanks. Can you transfer me back to Technical—hello? Hello?”

I never did talk to the same Monopolistic Phone Company Represenative twice, but towards the end my conversations with them would start:

“Yes, I can give you the circuit ID, but let me preface this with the fact that you will be unable to find said circuit ID in your database. Yes, I am sure that the circuit ID I am about to read to you is indeed the correct one, since it's on the box, on the tag, in our database, and according to your billing department, that indeed, is the circuit ID. It's eight zero Whiskey Tango Foxtrot niner niner two four zero sixer.”

“That's wierd, I can't find it in our database.”

Aaaaaaaaaaaah!

About an hour later, my conversations started with: “You guys can't find the circuit ID. I want to talk to your manager. Now.”

“But he's in a meeting right—”

“I don't care. Get him! Now! On the phone!”

“Can he call you—”

“Look, I've been on the phone with you guys for over three hours now. You lost or otherwise misplaced a circuit ID within your database. We have our customer screaming at us to get the T-1 up and running, and now, I'm screaming at you. Get. Your. Manager. On. This. Phone. Right. Now!”

“But sir—”

“Do. You. Want. Me. To. Continue. With. This. William. Shatner. Impersonation?”

“But sir—”

“Khaaaaaaaaaaaaaaaannnnnnnnnnnnnnnnn!”

All of this with a screaming headache and wanting to throw up at any second.

Meanwhile, Smirk was trying to get a hold of our wireless guy, and when both our cell phones weren't dying on us, we did manage to our wireless guy out to the site and the wireless connection going. And with G's help (he's our Cisco consultant and knows which people to talk to at The Monopolistic Phone Company) we got some techs to look at the down T-1 line.

Like I said, it wasn't a good day at The Office, even if The Office was screaming down I-95 at 105mph.

[As it turns out, we were giving The Monopolistic Phone Company the wrong circuit ID. Incredible that P mixed two different circuit IDs and have it match the one off the invoice and have the Billing Department verify it is just too much. Sigh.]

Wednesday, August 23, 2006

Home again

I got home around 6:30 pm yesterday, finished up some last minute details with the new wireless shot we got going, and then crashed.

I woke up today feeling much better. Went to The Office and spend the day making lists of what still needs to be done to the servers in Charlotte, plus notes on what needs fixing next time we're there (the serial console port on the router isn't working, nor is the serial console port to one of the servers; simple stuff that would be nice if they worked but aren't that much of a concern).

Thursday, August 24, 2006

Busy beaver

It was a very busy day today, finishing up installing and configuring the servers up in Charlotte. Just look at what I've been doing over the past two days:

set up resolving name server on lumbergh [this is our management server—bonus points for figuring out why it's named “lumbergh”]
" P
" SP
" SH
" R
clean up startup scripts P [shutting off scripts that we don't need stated at boot time]
" SP
" SH
" R
check port descriptions
reset up VLANs
set up reverse DNS in IPs
set up reverse DNS on private network
set up hosts file for critical machines lumbergh
" ns8
" ns2
" P
" SP
" SH
" R
set up DNS for CTL [“CTL” is the airport code for Charlotte] private network
set up DNS for CTL
save configuration for U (router)
" T (router)
" E (router)
" A (router)
" S (router)
" W (router)
update network map for BCT [and “BCT” is the airport code for Boca Raton]
create network map for CTL
create VLAN for 225 block
configure eth0 for P [All this refers to making sure the port settings, like speed and duplex, are set correctly for each server, not what the IP it has]
" eth1 " P
" eth0 " SP
" eth1 " SP
" eth0 " SH
" eth1 " SH
" eth0 " R
" eth1 " R
" eth0 " lumbergh [can't do that for these servers, as I found out]
" eth1 " lumbergh
" eth2 " lumbergh
" eth0 " ns8
" eth1 " ns8
" eth0 " ns2
forward root mail lumbergh
" ns8
" ns2
" P
" SP
" SH
" R
set ns2 port auto negotiation
check version of sendmail on lumbergh
" ns8
" ns2
" P
" SP
" R
" SH
set ns8 port for auto negotiation
set ns8 private port for auto negotiation
set lumbergh private port for negotiation
set up NTP on lumbergh
" ns8
" ns2
" P
" SP
" R
" SH
set up SNMP on lumbergh
" ns8
" ns2
" P
" SP
" R
" SH
reconfigure sysconfig on lumbergh
set up Apache + PHP + MySQL on lumberg
set up Cacti on lumbergh
set up /etc/resolv.conf on lumbergh
" ns8
" ns2
" P
" SP
" R
" SH
" U (router)
" D (power controller)
" A (power controller)
disable SELinux for P
" SP
" R
" SH
update IPTables for SNMP P
" SP
" R
" SH
update IPTables for NTP P
" SP
" R
" SH

The order is in the order I wrote it down (on a small notepad—it's five pages long) and not the order I need to do these things on. It's quite hard to reorganize hand written notes like that. And the items not checked off can wait a bit for implementation (under the category of “it'd be nice, but it's not critical”).

But we're ready to start using the servers up in Charlotte.

Friday, August 25, 2006

Busy beaver II

Still busy with work. Now that the majority of the Charlotte build out has been completed, we're now catching up on some loose ends that frayed during our trip out there.

[Attempting to configure a long range wireless access point] [To get inside only required removing a bazillion screws] [And my desk is getting a bit … messy]

One of the big projects today was trying to configure some long range wireless access points we have. I initially thought one of the units was defective, but it turns out that the serial adaptor, even though it's keyed, has to be plugged in very carefully, because the keying is worthless (and it's way too easy to plug the cable in wrong).

It also required removing about a bazillion screws to get inside the thing.

And there were also a zillion other smaller projects problems issues that kept cropping up today.

Saturday, August 26, 2006

“But they all ate organic rice!”

“What we're learning now is that natural traditional saturated fats like butter, lard, the fats in beef or chocolate, don't do anything bad for you—in fact—the main thing they do is raise HDL, which is the so-called good cholesterol.”

“In fact, I lost 25lbs going from a no-fat, vegan diet—beans and rice and vegetables—to real foods, fish, poultry and butter and so on.”

Via Instapundit, Nina Planck on “Real” Foods—YES!

Catching up on some websites, I came across an page about real food and it doesn't surprise me. I was my slimmest when my Great Aunt Freddie (yes, her real name) lived with us, and she fed us what could be considered “country food,” which meant heavy meats, fried chicken, real butter (and none of this “margarine” crap), cream, gravies (thick brown gravy, milk gravy (made with full milk—none of this “skim” or “2%” crap) and what not), mashed potatoes (not this “smashed” crap) and vegetables cooked with saltpork.

Mmmmmmmmmmmmmmmmmmmmmm.

And it reminds me of this bit from the movie Sleeper:

Dr. Melik: [puzzling over list of items sold at Miles' old health-food store ] … wheat germ, organic honey and … tiger's milk.

Dr. Aragon: Oh, yes. Those are the charmed substances that some years ago where thought to contain life-preserving properties.

Dr. Melik: You mean there was no deep fat? No steak or cream pies or … hot fudge?

Dr. Aragon: [chuckling ] Those were thought to be unhealty … precisely the opposite of what we now know to be true.

Dr. Melik: Incredible!

Sunday, August 27, 2006

“It has begun!”

Sigh.

It had to happen sometime

Monday, August 28, 2006

Tiny Bubbles

Proof that the housing bubble has burst in this area, or that the past few hurricane seasons have scared people away from moving to this state.

[McMansion for sale!  Quick!  Hurry!  I'm hemoraging money here!]

 

[The hurricanes!  They won't stop!  Get me out of here!]

 

Tuesday, August 29, 2006

Bad weather

Still frightfully busy at work (we moved a bunch of sites to the Charlotte data center and broke email in the process—sigh) but on the plus side, Tropical Storm Ernesto will probably remain Tropical Storm Ernesto and not get any stronger. It's also passing a bit west of us (still over Florida, but up through the middle of the state) so we'll probably get little more than a bad storm here.

In any case, Spring, The Kids and Wlofie are staying at Negiyo (her workplace, and hurricane shelter rated) while I'm going to stay here at Casa New Jersey and hold down the fort (and had Ernesto been a Class-3 monster I probably wouldn't stick around here myself).

Update a few minutes later

Turns out the email issue was a firewall issue, in that the POP and IMAP services were being blocked.

Sigh.

So much for my checklist.


Perhaps this cellphone wants to meet Mr. Hammer?

I went back to my old cell phone because my new one developed a bad display. Unfortunately, it seems that my old cell phone is now exhibiting odd display behavior itself.

[I think I have Da Vinci's phone here]

The display is wont to cut out entirely, or the bottom half appears at the top, and the top half appears at the bottom, or (as in the case in the photo above) upsidedown and reversed.

Powercycling the phone fixes it for a while, but it's becoming more and more common.

Sigh.

Wednesday, August 30, 2006

Still bad weather

With the non-event that is Tropical Storm Ernesto, Spring & Co. came back to Casa New Jersey instead of roughing it at Negiyo.

I think we're just going to get a ton of rain, that's all.


Amusing electric ham-like food product, Frontpage, Frontpage extensions, Frontpage hate, Frontpage sucks

Still busy with work as we're now in the process of moving sites to the servers in Charlotte and breaking tons of stuff in the process (“ooh, the firewall is blocking all FTP traffic, and for the life of me, if I have to reinstall Frontpage extensions one more time …”) so some of the posts I want to write will have to wait a bit.

Meanwhile, I've received a ton of spam (“So, like, what else is new?”) and some of it just tickled my fancy. I received one that had:

Subject
Standard Input:

Seems like these spammers didn't understand how to run their software properly, along with the difficulty these people have:

From
modifying HTML

(Clue-by-four, people! Look it up!) Then there's this one I received (and mind you, I do no filtering of my email—none—so this is exactly how they sent it):

Subject
[spam] (100) Restore your PayPal account access !

I wish all spam came conveniently pre-labled as such. But it seems some spammers are tailoring the subject lines to the domain, because I received this one:

Subject
DC Replacement of Cisco Routers- stay tuned

Which had nothing to do with Cisco routers, but given that I've talked about Cisco routers, they probably felt it would get me to open it. But my favorite one so far, is this one:

From
Pancakes
Subject
Spaghetti Wonton

I don't know—something about pancakes sending spaghetti wontons at me just struck me as being cute. Or something.

Thursday, August 31, 2006

The First Noel

Last year it was early Sempember.

This year late August (I had meant to blog about this last week, but alas, forgot. I happened to be going to Costco today, and remembered to bring the camera).

[Aw come on!  It's not even September yet!] [What are these?  Christmas onions you put on the tree?] [I suppose it's something for the Linux lover in your family] [And the obligatory Santa crap]

I give it another five years before there's Christmas items being sold year round.

Obligatory Picture

[Here I am, enjoying my vacaton in a rain forest.]

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site: http://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

http://boston.conman.org/2000/08/01

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2017 by Sean Conner. All Rights Reserved.