05/30/2008 01:12 PM -
note: i've added a legend page to serve as a base reference as to who these people are.
i've been sitting on my ass for about seven months now, doing work as it comes in. for the most part, i haven't had to do any consistent development work since we deployed project newgood in november 2007. recently we've been ramping up for project convergence 2, due to launch in october 2008, january 2009, or march 2009, depending on the day, who you ask, and the polar alignment of jupiter.
there's been a huge stir-up lately in the upper corporate ranks about offshoring. an official mandate was put down that said that no domestic contracts were to be extended (that's me - meaning no more contract extensions). vb1 has insisted that due to myriad kudos from the directer level and above, he'd be able to get my contract extended with no problem. today i was informed otherwise.
the powers that be love the work we've been doing. they talk about it, they've seen it, they're convinced that it will be of great service to the government customer base it was aimed at. unfortunately, these same powers don't seem to understand that it's great work because of the developers doing the work! as a result, i've been told today that my contract will almost certainly not be extended, and i'll be out of work in a month. needless to say, i'm updating my résumé on dice. since j left the company a few months ago, this will leave the team with no white developers.
our project group has a team of argenteneans in buenes aires, and the company plans to increase their numbers from 4 to 20. once i leave the team, all my projects will be thrust upon them. we can derive some useful statistics out of these numbers:
2 = initial number of white, american developers
20 = number of argenteneans hired to replace us
10 = number of argenteneans required to equal one white developer.
$35 = white, american developer's hourly pay rate
10 = number of argenteneans per white, american developer
$3.50 = maximum hourly rate the company can pay out without taking a net loss (per argentenean)
note: you get what you pay for.
so it takes 10 of them to equal one of us (which means that in order to save money, the company can to pay them a maximum of $3.50/hr). obviously, this number doesn't account for increased telecommuting costs (long distance line usage, additional time wasted translating to spanish and back, etc), diminished code quality, laws regarding exporting private customer data overseas, etc.
it's good to get all that off my chest - but i digress. let's get back to the point at hand: my future.
vb1 is trying to sell j and i down the river, figuratively speaking. there's another group under a major telecom core (i work at a major telecom, another subsidiary of the a major telecom empire) whose director has expressed an interest in our work. vb1 is trying to get me transferred there, and j hired back on there. unfortunately, vb1 and vb2 will remain where they are, with nothing but 20 argenteneans to mung our pristine code. i'm considering setting up a backup environment for project newgood on my personal webserver, to display to potential employers, in case the argenteneans manage to break my perfect product. i should point out that the other sub-company does not currently have the same anti-american sympathies.
hopefully but doubtfully, the transfer will go through smoothly. vb1 also wants to enlist our assistance for a few side projects, each of which could potentially evolve into a small company.
vb1 admits that the anti-citizen decision to offshore all technical work was the decision of the vp, and hypothesizes that it's largely due to political motivations. depending on who wins the upcoming presidential election (i predict mccain, but i digress), he expects the lawmakers to be shifted around and eventually enact some sort of law limiting the maximum offshoring numbers to 5-10% of the workforce. vb1 further predicts that this will help us get away with a higher percentile by being
05/28/2008 04:06 PM -
remember the house we wanted to rent? the boss contacted his buddy to start purchasing negotiations, but apparently someone already got it. the boss is hopeful that the people who got it will cancel, which seems fairly likely based on that house's track record. regardless, we've got to find a place to live where we don't have to deal with neighbors who complain when the grass is too wet.
05/28/2008 11:12 AM -
minor site improvements have been added recently:e-mail on new entry: if you wish to be e-mailed when a new entry is posted, open the sidebar "navigation" section and click "preferences". enter a valid e-mail address and check the "email me" box.made sidebar skinnierremoved video panel since i wasn't using it anymore
if you receive an e-mail as stated above, it will look like this:
from: firstname.lastname@example.org [mailto:email@example.com]
sent: wednesday, may 28, 2008 12:01 pm
subject: new entry posted on zi255
you are recieving this message because our records indicate you wish to be notified of new entries as they are posted at http://www.zi255.com . such a new entry has been posted. please click the link below to read the entry. if you do not wish to receive these messages, please log onto the website, click navigation >
05/27/2008 04:06 PM -
i'd like to discuss the most recent abomination to our national education system: the no child left behind act - perhaps you've heard of it. this atrocity aims to allow unfit children to proceed to higher grade levels and graduate, whether they're qualified or not. as a result, generation y and the global generation will be released into the workforce under circumstances that i can only describe as "dangerously unqualified". the more research i conduct into this disgrace of a law, the more appalled i am by its utter content for the sanctity of education.
before we dive into details, i'd like to point out that i do not have children, nor do i want them. however, i did go through the public school system k-12, so i think i can speak out of experience. i've reviewed some summarization information online, and have begun to form opinions around such material. while the act does have several redeeming values, i just can't support any law that lets kids get a high school diploma they haven't earned.
america has gotten to the point where everyone is afraid of speaking their mind for fear of being subsequently persecuted. liberalism, mass media, and political correctness have mixed and flung us into an utter abyss from which there is no return. people need to speak up - as this blog provides me a forum to do so with instantaneous published status, it's one of the key points behind my having authored it.
disclaimers aside, i'll move right into the pro and con arguments:
students of english as a second language are generally exempted from testing during their first year in an american school. after that, they must participate in the assessment process -- either in english or in their native language, at the sole discretion of the individual state -- for the next three to five years. after five years, students are expected to be sufficiently proficient in english to take the test in english.1
i'm a strong proponent of using the native tongue of the land. in the case of america, that language is english. this stipulation, while slow-moving, should help to increase the percentile of students who are proficient in english. now all we have to do is ensure the immigrants go through this process. eventually, the only non-english speakers in the country will be those who migrated in adulthood, or those who never bothered to go to school.
seeks to narrow class and racial gaps in school performance by creating common expectations for all. 1
wait a minute, we didn't have that before? what special expectations were minorities held to previously? i'm greatly in favor of holding everyone to the same standard, and providing everyone the same resources. not the same opportunities (they'll have to make those themselves) - but this way they'll all have the same potential for opportunities, personal capabilities notwithstanding.
provides information for parents by requiring states and school districts to give parents detailed report cards on schools and districts explaining the school's ayp performance. schools must also inform parents when their child is being taught by a teacher or para-professional who does not meet "highly qualified" requirements. 1
good. this will improve parent involvement and help assure them that their children are in good hands.
critics of the nclb requirement for "one high, challenging standard" claim that some students are simply unable to perform at the level for their age, no matter how good the teacher is. while statewide standards reduce the educational inequality between privileged and underprivileged districts in a state, they still impose a "one size fits all" standard on individual students. particularly in states with high standards, schools can be punished for not being able to dramatically raise the achievement of a student who has below-average capabilities.1
good. students who have below-average capabilities should fail the tests. if it is determined that the student simply cannot pass the tests under any cir
05/26/2008 09:38 PM -
every once in awhile, you have to treat yourself. lately, i've been living mostly on fast food. today i treated myself to texas roadhouse and was confronted with a sudden realization: even in slow-moving, sit-down restaurants, i still feel like it's a fast food joint. i literally ate in less time than i waited to be seated. i walked up to the building with the expectation to be helped immediately. i was wrong. 20 minutes later, i finally got seated and expect the waitress not to be caught off-guard by the fact that i was ready to order. i was wrong.
the sad part is that i've eaten at nice restaurants often enough to know how it works. i suppose in our increasingly industrialized and commercialized world, it seems unusual every time i come across a slow-moving experience.
05/23/2008 11:02 PM -
yesterday i received a formal complaint from the landlord, which had been filed by my next-door neighbor. the complaint included the following points:my car is loud, and i tend to leave the house late at nighti was parking in visitor parkingour trash can was sitting outside
this isn't the first time he's complained, but it's the first time he was formal. he's also complained about the tv making noise and leaving old furniture in the garage while we wait to throw it out.
i can understand the parking in visitor parking spaces as being a legitimate complaint; but not from him. he has plenty of driveway space for visitors, and space in his garage for another vehicle. we have three cars, a two-car garage, and a driveway two feet long on a steep hill.
i can understand the noise, as i have to apply gas to get up the hill and exit the complex. unfortunately, my car does have an unusually high exhaust volume.
the trash can was sitting against the house in a covered area, away from the street and public view - certainly not in view from his house. it was there because we didn't have space for it in the garage, and it's frankly none of his damned business.
j and d upgraded to a king size bed several months ago, and left their old futon frame in the garage. somehow the association has a rule about that sort of thing; though as we keep the garage closed i don't see why anyone should care.
so we've come to a two decisions: first: since we can't move the neighbor out, we'd rather move us out than live next to neighbors who can't stand us; and second: associations suck, be they for renters or homeowners. to these ends, we have decided to move out - but where would we go?
that brings me back to a conversation we had with the boss several weeks ago in which he disclosed his desire to purchase the house across the street from his and rent it out. upon making the decision, we immediately called the boss and informed him of our desire to look at the house and look into renting it.
we looked around the exterior and as much of the interior as we could see; the boss is currently trying to contact the realtor. current estimates are that the house will cost him $150-185k in $858/mo increments. before he saw the price, he had estimated that he would charge us ~$1300/mo, which seems reasonable compared to the $1000/mo we pay now, considering the following differences:the house has an additional 150 sq ftthe landlord would be a friend, as well as the boss. this provides security on the job front, rental front, and social front.it's a house. we live in a townhouse now.about 150 feet away from the nearest building. right now our nearest neighbor is inside the same physical structure.ample space next to the driveway and on the street right in front of the house. we could park a dozen cars there if we really wanted to.i already know several of the neighbors there and they seem like good people. having lived in the townhouse for two years, i don't know a single one of my current neighbors personally. based on the complaints, i don't think i want to.about four times closer to work
05/23/2008 12:13 PM -
recently i've been working on a bug report for project convergence (not pc2, that hasn't started yet). how i let myself get suckered into working on their ancient vb4-style code still eludes me, but i've finished.
the bug is related to an issue in sql server where if you change the definition of a view, the view isn't updated until you query it. in the meantime, it lives in a state of limbo where its definition is divergent from its stored/cached data.
the fix was simple, in theory: after you've changed the view definition, query the view and silently fail. that is, the first time you query the view, you'll throw a sqlexception because the definition is still in limbo. however, the query starts the rebuilding process. roughly 30-45 seconds later, the view is once again ready for querying.
the complication, of course, is that the codepage i was working on (the one that changes the view definition) doesn't actually know what view it's altering. it actually modifies a series of other tables and views (which update the target view as a subsequent trigger), making it very difficult to query the target view.
therefore, i had to spend some time studying the ludicrous data structure inherent to the feature i was debugging. eventually, i discovered an integer that linked to the unique id field of a related table (one of many extraneous tables, but so be it). the related table linked through a couple other tables and views, but eventually returned the dynamic part of the target view name as a string. i simply added the [appstaticreference_ ... ] and viola, i had my view name.
finally, the easy part: i concatenated a simple sqlcommand (select top 1 * from [appstaticreference_obscureviewname]), made a call to query the view (i used sqldataadapter.fill(new datatable()) because a simple executenonquery didn't work, and i didn't need the returned data). the query silently failed, the view rebuilt, and the ir was resolved.
one of the more amusing parts was my communication with team awful regarding the work i was doing on their codebase. i quote from the e-mail:
i've added a couple code blocks that seem to alleviate the issue with [feature] (attached). my code is marked with (initials) comments. it works for me; but can we get this pushed through to test just in case?
the code i added can likely be simplified somewhat. i added what i could based on my limited understanding of the [project name] architecture. just finding a connectionstring was interesting. i also added a couple basic comments in there that were needed imho. it is also of note that rebuilding the view takes about 30-45 seconds on the sql server.
functionname1(): after renaming a field in a structure, now finds the view it was based on and calls that view to reconstruct it.
functionname2(): used this to bypass the "on error" handling, as the call to the view will always result in an exception because the view definition has changed and it hasn't been rebuilt yet. the key is that it rebuilds the view.
oh yeah, hehe, the connection string :) problem is also that this code was not designed for [this version of project convergence] with .net mentality. [fired foreigner] pretty much cut and pasted the [previous version] code that was written in vb6. nice job on the comments, those are indeed direly needed.
bah! confirmation that they're using archaic coding style! do these people not understand the principle behind a "total rewrite"? how did this thing take two years to build if they weren't even starting from scratch?
05/23/2008 09:50 AM -
for the past few days, i've been spending some of my free time adding categories (see "categories" sidebar section) and recategorizing previous entries. i wanted to finish the administration "categorization" section first, but i hadn't gotten around to it and this felt important to do now.
05/22/2008 09:28 AM -
if you're not familiar with project convergence, you may want to catch up on some old entries: project convergence introinstallshield 1do it yourselfinstallshield 2installshield 3second project moves forwardcode mysteries: the case of the repeated with blocks
we have a committee of half a dozen people who are assigned to "map" the data fields among project convergence, project oldgood, a legacy version of project convergence, and the company's primary data format, which we've been calling standard one.
they have been tasked to determine which fields do not exist in the standard one layout, but which do exist in one or more of the other systems. then they have to get those fields added to standard one. we need this mapping project to be completed before project convergence 2 can move forward.
today we found out that they don't expect to be able to accomplish the field additions to standard one until around march 2009. we've been asking them to do so since september 2007. that's 1.5 years just to notify a few source billing systems to make a few downstream changes and notify the standard one people to prepare for incoming upstream changes. 18 months for that?
needless to say, this notification took some pressure off me. so far, the push date for project convergence 2 was slated for october 2008, and we haven't even been given the go-ahead to start development. keep in mind we're supposed to cram two months of development and six weeks of testing into that timeframe. it was getting cramped, until i heard this news.
so now all i have to do is make a few unrelated changes to the october release of project convergence, and i seem to be off the hook for awhile. still coming in and getting paid my $35/hr, but with no real work for the forseeable future. i love being me.
05/21/2008 10:58 AM -
i have two nerf mavericks in my cubicle - j and i used to conduct cubicle warfare with them. one day, we printed out a picture of steve jobs and pinned it to the cubicle wall, so we could have a suitable scapegoat to take out all our anger upon. any time a particularly bad happenstance would occur, we'd shoot steve.
today i have added linus torvalds to the wall, and hencely dubbed it the wall of shame. i shall target linus for all anger derived from the open source umbrella (linux / unix / free as in software / hippies). today i targeted him for my recent frustrations with openssh. hippies.
05/21/2008 09:51 AM -
so i finished configuring the sftp (ftp over ssh) server at work. the target client tried to connect and got this:
$ sftp username@servername
connecting to servername...
@ warning: remote host identification has changed! @
it is possible that someone is doing something nasty!
someone could be eavesdropping on you right now (man-in-the-middle attack)!
it is also possible that the rsa host key has just been changed.
the fingerprint for the rsa key sent by the remote host is
please contact your system administrator.
add correct host key in /clientname/.ssh/known_hosts to get rid of this message.
offending key in /clientname/.ssh/known_hosts:40
rsa host key for servername has changed and you have requested strict checking.
host key verification failed.
how professional. error messages like this and we not only call this enterprise-grade software, but require it in production on top of that? so allow me to add a step to the server configuration process:
if your clients have previously attempted to connect to your sftp server on a previous software package (i.e. you changed from freeftpd to openssh):
- notify your clients that your rsa key has changed and that they'll have to edit the .ssh/known_hosts2 file to exclude your rsa crypographic key; or
- notify your clients to replace their rsa key with the one displayed above masked; or
- change your server rsa key to match the one you had before.
05/20/2008 03:57 PM -
christ, i hate this hippie shit. another team has to ftp data to us, but they'll only connect to a "secure" server, meaning they require us to configure an sftp server. i tried filezilla, freeftpd, and now finally openssh. this one looks more promising, but it was a huge pain in the ass. in order to help prevent you from going through the same day-long ordeal, allow me to guide you through the process:
1. if you arrived here as a last recourse and therefore have other sftp servers installed, ensure their uis and services are stopped or closed.
2. install ssh for windows. it comes with a sftp server and client. the installer will exit suddenly and leave you with the feeling that you should have been presented with a ui of some kind. this is not the case; you're okay.
3. create a local windows user on the server.
4. open your local security policy (from administrative tools). navigate to local polies > user right assignment. add your new user to "allow log on locally" and ensure they aren't in "deny log on locally". close the msc. if you get unwarranted password errors, it's because you forgot to do this step.
5. ensure windows firewall is not running, or poke a few holes.
6. open a command prompt.
-- navigate to c:\progra~1\openssh\bin
-- issue command: mkgroup -l >> ..\etc\group
-- issue command: mkpasswd -l -u username >> ..\etc\passwd
7. if you wish to set your users' home directory, do so. open c:\progra~1\openssh\etc\passwd in wordpad (not notepad; they use unicode encoding and notepad won't recognize it).
-- change /home/username to cygdrive/d/path, where d/path is the path to the target home directory but with the erroneous forward-slashes so evident when dealing with this hippie linux backwardsness.
8. start the service from your cmd window: net start openssh
you are done. if you want to configure virtual directories, server tokens, and other high-level stuff, i leave that up to you. my responsibilities ended, and i got out of dodge.
when i was instructed to configure an ftp server, thanks to iis, i had one up within two minutes, including time taken to connect to the server and test it. if you include the other sftp solutions i tried to configure, i've wasted about 16 hours.
take a lesson, linux hippies and gnu fans: make it simple. make it "just work". give me a ui. it doesn't have to be a gui, but a ui of some kind. now if you'll excuse me, i have to shoot a few nerf darts at my picture of linus torvaldis (which i printed out for this express purpose).
05/20/2008 11:02 AM -
in usaf tech school, there is a concept known as remedial military training (rmt). this is a pseudo-punishment (called a "training exercise" for political reasons) in which some airmen need to be reminded of the fact that they're in the military. when this occurs, they are assigned to rmt. rmt is performed on saturday mornings, when most airmen are allowed to sleep in or complete whatever duties they have fallen behind on or want to get ahead on (i.e. studies, dorm cleaning, etc).
when an airman has fallen into a state of apathy, failure to wear the uniform properly, poor performance, etc, they are labeled as "dirtbag airmen", or dbas. part of my job as a red rope was to oversee some aspects of rmt.
i should actually qualify that - generally, it was put on a dba rope who had committed some sort of infraction that required rmt, but wasn't bad enough to warrant losing their rope. every saturday, 30 minutes before rmt formation, i would appear at cq and volunteer to perform the training myself. i took it personally when someone in my air force had decided they wanted to act like a civilian. no offense.
rmt was essentially two to twelve hours of details, marching and various inspections. the duration and type of training assigned was at the discretion of the mtls (blue ropes), but the rope would get to carry out the training - under mtl supervision.
it was here, in rmt, that i garnered an attitude from the dbas. they didn't like me because i did my job, and i did it well. i'd march them in circles around the parking lot for hours on end - performing column movements, flanks, the works. the idea was that they didn't like doing it. sometimes, in extended training sessions, i'd throw in a few obliques and march them around in a figure-8 formation. the key was to keep them alert, lest they be corrected by extending the training session by 30 minutes per mistake. for the entire formation. it wasn't my decision, but i was happy to carry it out.
rmt was where i began calling out cadences (jodies), i think because i got hardly any exposure to them in basic training (bmt). i cleared it with the mtl and threw one out every half hour or so. it lightened the seriousness of the training, but was an effective reward when the formation was in proper inspection order. eventually, the airmen realized that the better they performed, the more jodies and the less open ranks they would receive. funny how people learn through the same punishment and reward system as animals, don't you agree?
i shall share some of my favorite jodies in future entries. i'm sure some people will be coming here looking for them.
for instances where airmen have committed serious breaches of military bearing, details were assigned - generally, cleaning. the rmt detail was assigned to clean up the area around the squadron; if some of their infractions were related to interior cleaning details not being done properly, the whole detail would go in and watch as those airmen re-did those sections. then we'd go march some more. it was highly effective.
05/20/2008 10:15 AM -
today's story goes back to mid-2003, when i was in technical training. if you already know the basic tenents of usaf tech school, you can skip the intro:
air force tech schools have groups of students which have been selected to act as leaders within the student community. they attend a short leadership training course, and wear a rope around their shoulder. there are three levels of ropes:green rope - a green rope is the lowest of the airman leaders. he may lead a flight (28 airmen) in formation and is in charge of the cleanup detail on one dormitory hallway.yellow rope - a yellow rope has displayed an ability to lead leaders and is charged with greater responsibility. he may lead a squadron (up to 8 flights) in formation and assign commands to the flight commanders (green ropes). a yellow rope is in charge of the cleanup detail on a full floor, overseeing the green ropes and their leadership abilities.
one yellow rope, dubbed "senior yellow", is assigned to train alongside the red rope, in preparations to replace him when he leaves.red rope - the red rope is the top dog of all student airmen. he supervises the yellow ropes directly, trains the senior yellow to replace him, and is in charge of cleanup detail for the entire dormitory (in my case, six floors plus common areas such as cq). the red rope gets to stand up on the podium at revilee and retreat ceremonies with the senior yellow and all the mtls (blue ropes), while the other ropes manage the formation itself.blue ropes - permanent party ncos. these guys are stationed here, their permanent duty station. needless to say, this is where the real chain of command starts; but it's fun to play along sometimes.
i was training for 2a3x3a, tactical aircraft maintenance. therefore, my tech school was at the 362nd training squadron, sheppard air force base, witchita falls, tx (362trs, safb). of my six months in training, i was a green rope for a month, yellow rope for three months (two of them i was senior yellow), and red rope for two months.
now that the background info is out of the way, i shall begin publishing some stories from my tech school days. due to the length of this entry, i'll be starting with a new one.
05/19/2008 10:55 PM -
recently my incoming e-mail spam has become more highly targeted. looks like they're doing whois lookups now to find the administrative contacts. i've gotten this one six times, and each time it was an exact cookie-cutter copy:
from: travis [mailto:firstname.lastname@example.org]
sent: monday, may 19, 2008 5:50 pm
subject: suggestion re: zi255.com
dear business owner,
we are the recognized world leader in generating top rankings for our clients on the internet. if you partner with us we will help you achieve your internet marketing objectives and more by:
* generating top organic rankings
* custom solutions for your website
* timely quantifiable metrics to evaluate your progress.
* guaranteeing an ongoing maintenance program that will keep you positioned in the forefront of your industry on the internet.
with your permission, i would like to send you a detailed proposal describing how we can assist your company in reaching your internet sales goals.
1560 newbury rd, ste 1 stagecoach plaza
newbury park, ca 91320-3448 - usa
to opt out please reply to this message with the word opt out in the subject line
i've responded to six of them with six "opt out"'s in the subject line. today i got sick of it and wrote a personal response, which i doubt will ever be read. i was sure to cc email@example.com, for all the good that will do. my response follows:
this is at least the sixth spam i’ve gotten from you re: zi255.com. i’m a professional web developer, and a damned good one at that. i happen to know my way around seo, i code my own solutions, i have tracking systems that rival the uk cctv project, and i maintain it myself. that’s the way it is, and that’s the way i want it.
had you done your research (i.e. spend more than 30 seconds on the site), you would quickly realize zi255.com is my personal blog. there is no company associated with it, it’s just a guy who wrote his own blogging engine. the least you could do is draft your own personal canned e-mail templates instead of having each of your accounts use the same one.
go away. tell your employers to stop spamming me. i don’t want to have to start forwarding these to the respective abuse departments.
05/17/2008 02:49 PM -
first, you must know what a "9-guy" is. the 9 guy is the the official mascot of channel9, a popular microsoft developers' forum appropriately hosted on msdn.
to get one, you can employ two methods:
1. leave an e-mail via c9's "contact us" button
2. send a postcard with return address to:
one microsoft way
redmond, wa 98052
so, i guess it kinda goes without saying that i got mine today, having been on the waiting list for six months. w00t!
05/15/2008 08:43 AM -
remember the mechanic telling me i had to get the steering system rack replaced to alleviate the creaking while steering? remember that i just told them to replace the struts anyway? the creaking is gone, and the handling is much improved. hah!
the lesson: listen to your mechanic, but only some of the time.
05/14/2008 03:41 PM -
yes! if i didn't want to move or copy the files, i never would have told you to. no amount of disabling uac and useless services will eliminate this kind of stupid questions from the operating system. why isn't there a "don't bug me again" checkbox? the world may never know.
as windows moves forward, it trusts the user less and less. dammit, give me options! there's already a clause in the eula that says it's my fault if i screw it up; use it. stop bugging me about stupid little things like the fact that i'm running an installer that i downloaded from the internet. where else would it have come from?
end rant; begin solution:
1. goto control panel >
05/14/2008 03:17 PM -
first, i noticed a squeaking noise when i turn the wheels or sit on the car near the front right wheel.
then, i took it to a mechanic who said i had a bad strut and should replace the pair.
now they're telling me that the actual squeaking is coming from the rack in my rack and pinon steering - apparently the steering system is leaking from two places. i already knew about the leak from the power steering pump, which they were kind enough to fix for free (two simple gaskets / seals on a hydraulic line mount). they agreed that it was likely caused by the struts' inability to absorb shock.
the mechanic tells me the car is safe to drive this way, but it will continue to squeak and lose power steering fluid from the undercarriage. i can live with that - i told them to go ahead and replace the strut as planned (so as to prevent further damage), but the squeak will have to wait until the car gets its next owner.
besides, i can tell where sound is coming from. the noise i've been hearing comes from the front-right wheel. i'm confident that it will at least be reduced in the process.
05/14/2008 09:42 AM -
i've seen these images all over the internet - error messages on pos equipment and kiosks that we aren't even supposed to know have an operating system. imagine my suprise when i saw this one in real life and happened to have my camera available.
05/13/2008 08:45 PM -
i'll bet the title to this entry threw most of you for a loop.
my blog database is made up of several tables. three of them are:
in that order, they appear as such:
today i was perusing through these tables, looking at recent attack attempts (which, of course, were thwarted on-site and corrected by battlebot). entirely at a whim, i performed a sql query that i never expected to work:
select top 50
inner join activity on substring(servicejobs.job,18,10) = activity.id
inner join ips on activity.ip = ips.ip
where comments like '%attack%'
order by servicejobs.datetime desc
see what i did there? servicejob 35830 was assigned to 'process activity 239076'. this servicejob is handled by the battlebot back-end windows service, and the processing is basically attack detection/handling, search query parsing, etc. i took the '239076' out of the servicejob's 'job' column and used it as a key for an inner join. as a result, i was able to perform the above query and get a great deal of information about attackers that battlebot has flagged. here's a quick pull of the top 20:
as you can see, most of the detected attacks are coming from overseas (.ch = czech republic; .it = italy; .ar = argentina (bastards), .hu = hungary; .de = germany; .ca = canada; .fr = france). here at my fingertips is a wealth of information about some of my attackers.
now, with my reignited excitement for my personally-custom-written blogging engine, i have come up with a way to determine problematic portions of the internet. this will likely be how battlebot handles some of the wider-area attacks from places like eastern europe, western asia, and sopooristan. i had set upon a way to determine the first two octets of all banned ips and group them.
well, first, i'm gonna need a way to find the first two octets of all users with a banlevel greater than zero. this will tell me who all the bad guys are. so here's how i figured this one out:
select distinct top 100
-- index of first '.'
-- substring beyond first '.'
-- index of second '.'
, z=(charindex('.',ip) + charindex('.',substring(ip,charindex('.',ip)+1,15)))
-- first two octets
, range = substring(ip,0,(charindex('.',ip) + charindex('.',substring(ip,charindex('.',ip)+1,15))))
where banlevel > 0
which yielded a result like this:
i now had everything i needed to formulate my group by clause, which would become the key to the detection of international spammers of all kinds. with my key substring(ip,0,(charindex('.',ip) + charindex('.',substring(ip,charindex('.',ip)+1,15)))) i could finally finish my query.
select distinct top 100
qty=count(substring(ip,0,(charindex('.',ip) + charindex('.',substring(ip,charindex('.',ip)+1,15))))),
range = substring(ip,0,(charindex('.',ip) + charindex('.',substring(ip,charindex('.',ip)+1,15))))
where banlevel > 0
group by substring(ip,0,(charindex('.',ip) + charindex('.',substring(ip,charindex('.',ip)+1,15))))
order by qty desc
success! my query had successfully returned in exactly the way i had initially hoped. i can now target battlebot to detect any groups where (qty > 3) and add a 'problematic internet segment' section to my daily report.
05/13/2008 11:37 AM -
my 1990 mitsubishi eclipse gs has been diagnosed with a bad strut, not a cracked cv joint as i had previously hypothesized. the repair is about $100 more than it would have been for the whole axle replacement, but at least this way i get new struts. the car needed them anyway, so i guess maybe it worked out for the best. at least i can scratch one thing off my list.
05/13/2008 11:27 AM -
on error goto errhandler
select case menmmode
select case err.number
'(error logging code)
in this case, dev has chosen to use the archaic vb6-style error handling. okay, sure, fine; i'll let them get away with it. it's less graceful and much harder to diagnose, but at least it's handled.
the mystery here is: why would someone create a switch or select block with only one case member, when an if condition would surely be just as good and easier to read? further, why would anyone create such a block with a mere "case else"? surely a catch-all that will always be called may as well just cut to the chase and go right into the error handling code.
i'm not even going to go into the repeated "exit sub" calls, which in my mind are half a step above using gotos. oh, wait, they did that too. how elegant.
i've rewritten this in the proper manner below. you'll notice it makes proper use of a try/catch block and eschews extraneous obfuscation.
if menmmode = myenum.new then
'(error logging code)
'(error logging code)
05/12/2008 03:37 PM -
today's second code mystery comes straight from the bowels of project convergence:
.commandtext = " -- some sql query"
.connection = mysqlconnection
.commandtext = " -- some other query"
.connection = mysqlconnection
minus the (irrelevant here) query itself, this is exactly how it appears in the code. i have to wonder why not just try it this simpler way:
'relevant comment for block
'relevant comment for this query
.commandtext = " -- some sql query"
.connection = mysqlconnection
'relevant comment for this query
.commandtext = " -- some other query"
.connection = mysqlconnection
of course, when you're a domestic citizen developer like me, and when you've performed as much sql i/o as i have, you've probably built your own sql access method with several overloads... like i have. using it, this whole mess could have been reduced to:
05/12/2008 03:13 PM -
i've added two new categories to the blog: code magic, and code mysteries. code magic will be for posts like programmatically download file from remote location to user through server, in which i explain how to solve a particularly uncommon problem. code mysteries, which i want to go into now, will be home to oddysies found within code which make me want to cry.
today we have two examples from my workplace, obfuscated for security and anonyminity:
select top 1 * from mytable where 1=0
this was an obvious attempt to get a table definition. this simple sql query will return zero rows every time, but with column headers. so what's wrong with that?
every time you add a where clause, the sql server has to go back through every line in the result set and compare it against your condition. in this case, it returns a few hundred rows; which then get filtered to none because 1 will never equal 0 - but it could have just as easily been a few million rows, which would take minutes to execute and still return nothing.
the proper way to do this would have been one of these:
select top 0 * from mytable
in this case, we still get the same results with column headers, but the sql server doesn't have to run any comparisons. the query executes in 0.2 seconds instead of 0.7. ask any dba or senior developer how significant this half-second can be with 10,000 users.
another alternative would be:
select column_name from information_schema.columns where table_name = 'mytable'
this will work just as well, but it's considered bad form to query information_schema directly.
05/12/2008 09:16 AM -
great. my 1990 mitsubishi eclipse gs (related: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) is making creaking noises from the right wheel when i turn or sit on it. it sounds to me like the cv joint is going out; possibly cracked as a result of all those dip impacts that i would have avoided if i had good shocks.
i've had a cv joint go out before, on a previous car. that time, the story ended with the wheel falling off during a tight turn. the damage was so great i had to get a new axle, and couldn't get the core deposit back. it must be fixed before it gets to that point, which i expect to be soon.
so today after work, i'm going to have a mechanic look at it. fortunately, i expect the cost to be relatively low, compared to previous work.
05/10/2008 02:52 PM -
a couple weeks ago, the boss invited me to a party that's tonight. i don't know how he talked me into going; i hate parties. there will be a pot luck dinner and live music.
why do i hate going to parties?you've seen that guy standing in the corner nursing a drink. he looks around at the people enjoying themselves, wondering why he isn't enjoying himself. he looks like he wishes he were somewhere else. i'm that guy.the drink of choice at parties is usually beer. they offer other drinks, but if you don't drink the beer you're "that guy who won't drink the beer". i can hold my liquor, but beer makes me puke every time... unless i sip it, in which case i still get "bitter beer face", looking as if i had just taken a swig of lemon juice. it doesn't matter if the beer is bitter, i can't taste the difference.i could be blogging, playing computer games, working on personal projects, out for a drive, or sleeping - all things i enjoy. instead i'm stuck here listening to mediocre music and worrying about how i'm getting home.at most parties, i have zero in common with anyone there. socially awkward as i am (and as the word "awkward" is), i don't know what to do. do i introduce myself to random people? what if i get stuck in a conversation about bob jackass's in-laws or the six different stitching patterns employed by a basket weaver? okay, i know, that's a stretch - but the point is the same.
somehow, my boss managed to convince me to go. not only that, but it's a pot luck so everyone has to bring something. i don't know how to cook, so i'm bring a bottle of 43. it's a disturbingly smooth liquor that my boss introduced me to (j and i have been known to have drinks with the boss... did i fail to mention that?).
so the hope is that i can get away with just doing shots and possibly some smirnoff ice. call it a cheer beer or whatever you like; but at least i can drink and not get sick.
so many politics to consider; and you wonder why i usually just stay home. did i mention i don't like parties?
05/08/2008 07:23 PM -
yesterday i attended my first computer user group in about 10 years (since i was a member of cugg; i was even their member at large for a brief while). the colorado springs windows user group met for the first time ever at a library at the west end of town, and i was fairly suprised by a few things.
first, i was impressed by the distinct youth of the people there - nearly every person who showed up seemed to be under 50. i'm not sure whether this is because greeley is full of old people, or because colorado springs has more tech jobs (most of which seem to be taken by people in their 30's or 40's); but i didn't see a single gray hair there... with the exception of the presenter and group administrators.
they actually seem to be targeting i.t. professionals, with the help of a recruiter from tek systems. he seems to have e-mailed every contact he has to bring them together, and about a dozen or so showed up. there were snacks and refreshments, but i didn't realize it was the day of the meeting until about 15 minutes before they started - so i missed the meet-and-greet.
yesterday's meeting was their first ever, and the presentation was regarding what's new and improved in windows server 2008 (which i've been playing with on and off since february (although i did download the june ctp back in august 2007)).
the presentation was informative, though it didn't contain anything i could have found on google in 30 seconds - i suppose an argument could be made in favor of having a presenter to bounce questions off.
there was a brief moment of comedy that made the whole trip worthwhile. the presenter (greg shields, mcse) was fumbling with his control panel, trying to figure out how to put vista into 640x480 so his desktop would stop scrolling and he could finish his presentation. i shouted out the instructions to access the display adapter's "list all modes" box. apparently, i went too fast, and led him to the window step-by-step. once he finally pulled up the window, i asked "aren't you an mcse?". the entire room busted up laughing. i wonder if he became an mcse back before microsoft started biannual retests to retain certification. nonetheless, i digress; he seemed to know his way around the rest of the os.
so, based on the following factors, i do believe i'll give them a chance and see what other presentation topics they cover:targeting i.t. professionals like me - this means a lack of beginner topics such as how to drag an icon to the quick launch bara distinct lack of seniors - this means a lack of senior topics, like geaneology software and an insulating strip that prevents your arms from hitting the hot metal in the oven (this kinda stuff is what made me stop going; come on, guys - this is supposed to be a "computer users' group"!).i haven't been to a users' group in 10 yearsi've been saturated by content. sites like digg and gizmodo are bringing all the information to me automatically and free. a nearly complete compendium of the wealth of human knowledge, a few keystrokes away; and i'm getting bored with it. time to try something new.i'm not unsociable, i just find very few people that i consider worth socializing with. hopefully in an group of i.t. professionals, i can find one or two.
05/05/2008 09:07 PM -
project convergence 2 has finally moved into the analysis & design phase, where we analyze the requirements and design the product. it will be made available in two phases: a secure web application (https), and a client application for local installs.
it seems that i can recycle alot of project newgood's code for the website, which is good. however, the requirements dictate the client application be written in wpf, which goes hand in hand with the microsoft .net framework 3.5. because of that, it is unlikely i'll be able to use almost any of project newgood's front-end code; though the dal (compiled dll) should work fine after a project upgrade from 2.0 to 3.5.
fortunately, plans seem to be to deploy the website first. our staff includes a mainframe guy (cobol / perl developer, knows sql) - we'll call him "old man river". old man river seems to have some interesting and possibly delusional ideas about how to provide my application with the data, but it requires some background.
project convergence gets its data from a specific industry standard, and in a specific format, which we'll call standard one. project newgood gets its data in another standard and format, which we'll call standard two. the two are incredibly different in structure, syntax, and delivery methodology. the truth is, the two standards were written by two different companies. there's some history there i won't go into now, but let's just say one company bought the other, and as a result, we have two totally different corporate standards sets and somehow we have to switch to standard one, but provide the same exact data, despite the fact that it comes through entirely different processes. i just hope the data started in the same place.
project convergence 2 will continue using standard one, as per requirements, and because that's the only place where its data comes from. however, in order to maximize compatibility and reuse of old code, old man river thinks he can intercept the data mid-stream and somehow convert it to standard two. the success of project convergence 2 is entirely dependent on his ability to do so.
j wrote a windows service for project newgood, which takes the incoming data in standard two format and puts it into a sql database for project newgood to use. this service operates flawlessly, so long as the data is perfectly formatted and the sql database structure never changes.
the boss and old man river seem to be under the impression that this windows service will work as long as the data is in the same format, and the database on the other end is configured in a similar manner. in the very likely event that old man river fails at his task of reformatting the data mid-stream, this service will be rendered useless, and i'll have to spend an additional month or so writing a new one.
tangent / rant:
why will i have to write it when j is the midrange data guy? because j left again - his contract extension didn't get approved before the contract ended. it's possible the contract will reopen, and it's possible j will take it; but i can't operate under that assumption. he didn't quit - his contract just ended again. that's the great thing about being a contractor - once your term ends, you just leave. my contract ends at the end of june - i'll be sure to have a few future employers lined up, just in case.
so i'm finally at the point where i'm doing the official planning and preliminary documentation for project convergence 2. unfortunately, old man river can't get his act together and work on one project at a time, so i literally have no idea what to expect from him. he'll probably end up finishing or giving up about 3-4 months down the road, by which time i'll likely be gone...
... but if old man river finishes or gives up when i'm there, i'll have been doing my analysis, design, and development just like i should have been - under the assumption that he'll be able to do what he says he can, and under the assumption that j's windows service will work. if either of these ends up not being th
05/01/2008 05:38 PM -
you likely don't know this yet, but j started working at a new company about a month or two ago. he quit and came back to the telecomm, so today i had to bring him up to denver to return his company laptop. the commute north was fairly uneventful - simple white-out conditions with 100' visibility. took maybe an hour and a half.
the trip back, on the other hand, took significantly longer. once we got south of castle rock, we rounded a curve on i-25, only to be greeted with a wall of non-moving vehicles. we were stuck in traffic on a freeway.
we sat there for about 10 minutes without moving. then we inched forward a few feet at 1-2mph, and waited another 10 minutes. this continued for about 45 minutes. eventually, we saw an offramp up ahead. i pushed my way through the seemingly-neverending line of cars in the right lane, and over to the shoulder about 500' before the exit lane began. we had begun the (detour ).
yeah, i had no idea where i was going; who ever exits around the tiny town of greenland, co? so i followed the roads that looked like they would be helpful.
so i kept going and got to the corner of e best rd, andrews rd, and the frontage road; and realized i had just doubled back on the same intersection i had tried so hard to avoid. fortunately, traffic on i-25 was moving so slowly, i hadn't lost any time by that point. but i wasn't about to sit through another three hours of gridlock, so i made a quick u-turn onto andrews rd.
unfortunately, i got stuck behind an awd subaru... just to add to the rant, how does an all-wheel drive subaru get stuck in the mud at 25mph? i was right behind him for about three miles, and when he finally pulled over, i passed his bitc-ass like i was in a hemi pickup. in thick mud, in my front wheel drive, stock 1990 mitsubishi eclipse gs. yeah, i guess he just didn't want to drive.
so i finally merged back onto i-25 at county line road, and had moved forward three full vehicle positions. that's right; the semi i was looking at was now two cars behind me. at least it helped feed the illusion of progress.