Wednesday, March 30, 2005

This site03:41 PM - Site should load a lot faster

The Modern Tales, Girlamatic, and Graphic Smash feeds were slowing everything down because their server wasn't responding, and apparently that's due to the hard drive bombing. So, since it'll be a longer term problem I commented out those sections. I'll bring them back when their sites load again.

whining no longer being accepted

Tuesday, March 29, 2005

Life08:08 PM - I passed!

My hip density was in the lower half of the normal range for my age, and my spine density was smack in the middle of the normal range. That's with having been on it for 9.5 years and 6+ of those years not taking calcium + vitamin D supplements and not getting all that much dietary calcium. Guess all that milk growing up stood me well. I just have to keep on those supplements and I should be good to go. :)

whining no longer being accepted

Life05:54 PM - Wish me luck!

I'm leaving for my bone density screening in a few minutes. If my bones have enough calcium I get to stay on Depo; if not, I have to pick something else (boo!).

whining no longer being accepted

Gardening Life10:59 AM - Quite useful three-day weekend

I decided that since Monday was forecast to be a beautiful day (and the weatherman did not disappoint), and that I didn't really get a weekened last weekend and J has all week off, that I'd take Monday off. I definitely needed that. I didn't get to play WoW as much as I wanted -- none at all Monday, in fact. But I did get to do lots of stuff, rest a lot, and generally get mentally renewed.

Saturday was pretty much spent playing WoW. My character, Brene, is now over halfway through level 38. She is doing much better now that her pet has growl rank 4 and that she has a much better bow and has trained a few more skills. Sunday early afternoon was spent playing more WoW, and me washing some pants I hadn't gotten around to washing in months along with a robe of a similar color and with the same washing instructions. Then we were off to my parents' to have Easter dinner with them, my grandfather, and my sister. That was fun. Afterwards we three "kids" got easter baskets, and each one had a little fuzzy chick that makes cheepy noises when you shake or jar them in some way. We had lots of fun tossing them around at each other. :)

Monday we got up at 9 so we could be at my parents' at 10. We all went to the Science Center to see the Omnimax show "Fighter Pilot: Operation Red Flag". Awesome show. Then we had lunch at the history museum restaurant. It was cool; since Boeing sponsored it, both my dad and I could show our badges to get a free ticket, so we got 6 tickets for the price of 4, which was neat. After that I decided I was late getting the blue forget-me-not seeds started in their little pots before grounding 'em, so I went to see about dirt for that. Ended up with some leaf mulch from my parents so I could turn it in with the dirt that's in the front of the house where (at least some of) the forget-me-nots will go once they're started; some instructions from him on things to put in our leaves to make them be much better mulch; and some things from the hardware store: potting soil to start the seeds, a small spading fork and a long handled larger one, some snapdragons to replace the ones the squirrels mercilessly killed late last summer after I separated them from the crowded pot that had them and a bunch of dusty miller, some stronger (and stinkier, eww!) mammal critter repellant, and some gypsum to add to the mulch. The gypsum only comes in 40lb bags, or at least that's all they had, so while I did manage to get it in the cart, and then into my trunk, I made J carry it out so I didn't hurt myself.

So... I planted lots of forget-me-nots. I didn't have any idea of how big the seeds in the little packets were, nor how many, but it didn't seem like much so I bought 2 packets. One of these is still not open, and won't be. They're tiny little seeds, so what didn't seem like much must've been a couple hundred seeds. Since I have limited areas to put them, I put two seeds in each little plastic pot, at opposite sides from each other. I had 42 pots, thus I have planted 84 forget-me-nots. I folded the packet over twice and put a paperclip over it, so they can't fall out, and told J to ask his grandmother if she wants them. (They're supposed to be 10" apart 'cause they bush out, so if you scatter seed the ground with 'em you have to trim them a bunch or transplant 'em elsewhere when they're 2" high so they're not too close together. Since I'm starting 'em inside anyway I figured I wouldn't plant too many.) I went through almost the whole 20lb bag of potting soil with all those little pots.

I also took the large pot full of (probably still decent) potting soil that had the dried snapdragons that I fruitlessly tried to save, threw away the dried snapdragons, then mixed in some of the new potting soil I had left over, then put in the snapdragons (6 of 'em). Then I watered to get all the soil moist since it was all bone dry save the slightly moist fresh stuff. I really need to show you our sun room (well... it'd be more of a sun room if it had a skylight, but those are $$$ to put in). The table for a while held just the snapdragon pot and the peace lily (I was too lazy between waterings to move it from the watering tray back into the basket). I took the basket off the stand the peace lily is supposed to sit on, then put the peace lily with its watering tray over on it instead. Then, I scooted the snapdragons over farther, and started carrying in all 42 little pots. I just managed to fit 'em all. Plus I still have my ivy in its pot on its stand, the rather ill looking hosta on its stand, and the two pots of dusty miller on on chairs. Fortunately most of this will be going outside after a couple weeks, since it seems all the freezes are long gone and hopefully the frosts will be gone shortly too. In the meantime... yeah. I really need to get those boxes sanded and painted this weekend, since it'll be really nice outside. I guess I won't get use out of them for their intended purpose (stood upside down to hold our big pots when they're inside for the winter, instead of on chairs), but they'll be ready for next winter, and pretty in the meantime.

We also hit Best Buy and bought a scanner. So now we have all the pieces our all-in-one Lexmark (pieceofshit) provided. We also got longer USB cables, so I should also take a pic of my desk now that everything's arranged better. I still don't have a dual monitor set up, but I'm working on it. :)

It's also getting ready to be allergy season. I think my body knows it, and has been giving me more fits already in spite of the fact that I don't think the trees are really blooming yet. Not sure what's up with that. But I will definitely be keeping that prescription's refills up-to-date. Speaking of which... *heads off to*

listening to: Tori Amos - Silent All These Years

Wednesday, March 23, 2005

Technical This site09:07 AM - What I've been playing with that I learned at the symposium

Okay, so I said I'd get to this next. I had started it in the last post, and decided that would make it far, far too long. So, here it is:

There's one thing I've been messing with, namely stuff discussed in "Creating Next-Gen Web Apps". The big thing we discussed is JavaScript's capability of making requests to the server and processing them, without reloading the page. Specifically, this tech is available by using the XMLHttpRequest object. It's instantiated differently by IE than anything else that uses it (a custom ActiveX way, anyone surprised?). That's what Google Maps uses to drive the ability to zoom in or out, move around on a map, and put pushpins on the map, all without reloading the frame. (It does use an iframe on the side to keep track of your pushpins on the side though.) Basically, you make a request with it, and if it's actually XML formatted stuff you send back (you can use PHP, Perl CGI, Java servlets or JSPs if your web host has them, ASP, etc., to be what is requested and hands back this data), you can store the responseXML property and then parse it using DOM functions, or if you really just want to send back some text to write into the page, or a single number as a return code, you can skip that part and use responseText instead.

One caveat in Mozilla browsers, is that if you make a request to a remote file not on the same server as the page, you first have to ask permission to do so. (You check the permission, which in turn puts up a dialog box to the user.) This is because JS was never supposed to be able to reach outside the box that way (heck, you could parse anything from anywhere that way, and that's not nice and is a potential security risk). IE doesn't give a shit. But, say you're wanting to use this to parse out RSS feeds, that's legit but technically remote. What you could do, is have a script on your local file system that reads the feed and then spits it back out whole (or even do some processing with it first, if you want to filter some of the stuff out to make things easier on the JS that will be parsing it). Then, your JavaScript just makes the request to the script on your server, which is a-OK.

What I'm trying this with, is to see if I can change the themes page so that it doesn't have to be a regular request that does the cookies & such and then has to forward the page back to what it was before. In other words, I added a few extra functions to the PHP file that does all the theme work like creating the list of <link> elements in the head of the page that have all the stylesheets (all but the first listed as alternates, of course). I added a function that will do the preference cookie but not do a forward, I added a function that would get just the URL of the stylesheet, and I added one that lists the stylesheets similarly to how they're listed on the change themes page but with only links, and the links changed. Those links point to a new file that I created that sends back XML to the Javascript, and have an onclick that invokes the JS to make the call. (Only problem: no JS means right now you go to that page instead, and just see XML which really is useless to the user. So to use this for real I would have to figure out some way to detect for that in that script, and do things the current way when that happens. What I should probably do, is have the JS function tack on a parameter to the URL like "JS=1" or something, and check for that parameter.)

The PHP script that does the cookie set and gives the JS some XML returns a few things. First, it always returns a status tag. If something goes wrong, it sticks "err" in there, and also sends back a message tag with the error. If things run right as far as it knows, it sends a status of "ok". If that's the case, it sticks a few more tags in there: title, quotebox, and textcolor. The first is the title of the CSS file that's used in listing the stylesheets in the head of the page: that's what the JS uses in order to set which one you're supposed to be using (I finally found the Javascript that does this after poking around to find sites that let you switch styles on the page without reloading the page -- the only difference is that it uses JS to get/set the cookie, and I use PHP to do it). The second is a small piece of what shows the correctly styled quotebox image at the bottom (the one that says what I'm listening to -- the program should learn how to detect a paused state and act accordingly, but that's a different topic -- and a random quote, so long as I have SigX running on the PC). The whole image URL is the same except for that part of the string, so I can just have a pattern for that. The third and final tag is the color of text that I use to show the imood images. Imood lets you set the foreground and background colors on the image, as well as whether the background should be transparent. I decided long ago that I would have the foreground be set based on what theme you're on, and to always be transparent. So, other than that color, the URL for those images stay the same as well.

Finally, I have to have a JS that parses all this XML and then makes changes to the page based on it. The whole JS file can be found here if you want the code. There is a function for each change it has to make.

Basically, what it does to set the stylesheet, is it relies on the list of stylesheets already provided. It uses the document.getElementsByTagName function to get a list of link tags. It loops through them, and takes a look at the title of any it finds that have "stylesheet" in the rel attribute. If the title is the same as the one we got from the XML, that's the stylesheet that should be enabled. It's disabled property is set false, and the rest have their disabled property set to true.

To change the quotebox, I already have an id of quotebox set on the div element that holds it, so I don't have to loop through images or set an ID on them or anything. I use document.getElementById to get the quotebox div. Then, I use getElementsByTagName again to get the img inside it. (That function returns an array, so I use [0] as there's only one.) Finally, I use its setAttribute method to set the src attribute to the new image I build based on the XML I got.

Finally, I also change the imood images. This actually requires looping, since there are two images I want to change in the "imood" div. I grab a handle on the div, then I loop through the array returned by getElementsByTagName. Since the two mood images, one for me and one for "the internet" (I guess they use whatever mood has the most people using it at any given time), have different URLs, it's easy to distinguish between the two. Mine has the word "display" in it, and theirs doesn't. So if the src attribute has "display" I set it using one string, otherwise I use the other. The other way I could do it, would be to figure out how to do regular expressions in Javascript, and do a lookup on "[some other crap]fg=(color to replace)&[some other crap]" and save all of it except the color, putting in the new one instead. But... I was too lazy to look that up, and I got to test faster doing it the way I thought of first.

After all that, I have my test page. It includes the theme functions file, writes out headers much like my regular header does, includes the JavaScript file in script tags, then in the body uses my theme functions file to build the list of available themes as links, all of which lead to the PHP file I made to do the stylechange and write back XML, taking care of the cookie switch too so the choice persists.

I tried changing the favicon as well, but the browser doesn't pick up that change dynamically (well, maybe Opera does, I didn't bother testing that), so I gave up and figure next time another page is loaded it'll pick up the change then. Also, I haven't figured out the delete cookie thing yet. What I'll probably do, if I want to have a default, is to stick a parameter on the URL called default, and if I get it I delete the cookie and look up the default stylesheet, and use its title to pick the right one.

Writing XML is easy, by the way, if you're not trying to do anything uber complex like namespaces or defining your own DTD. You just have to have the required <?xml version="1.0" encoding="ISO-8859-1"?> (you can change the character encoding; the one I copied was using UTF-8), then have some kind of container tag for all your other tags, named however you want so long as it's all alphabetical characters, then stick your other container tags inside (you can nest as deeply as makes sense for you). Of course, you have to remember to close all your tags, and don't forget that they're case sensitive. Other than that it's pretty simple.

Remember, if you're wanting to use this technique but only have one thing to return and don't feel like using XML formatting to do it, you don't have to. However, you want to use responseText instead of responseXML, and of course you can't use things like getElementsByTagName on the response text like you can if you use responseXML since there's no guarantee of any tag structure. So any string parsing would have to be done by hand, which means if you were going to do "a=1|b=2" etc you'd be better off with XML instead.

whining no longer being accepted

Technical08:07 AM - Gotta give these guys a mention

As most of you probably didn't know, I went to a Java/.NET (primarily Java, which is why members of our team went) Software Symposium this weekend. It's put on by the guys at No Fluff Just Stuff. The idea is that they take a bunch of speakers and travel all over the country giving these things. The reason is that, for starters, most people can't get to the "big ones" like the Sun 1 conference given by Sun Microsystems in San Francisco, due to distance and cost (they cost a lot more for the entry fee, plus there's the flying and accomodations if you don't live there). Also, those conference, despite having lots of people who can't go, also have lots of people who do go, making them much larger, and making the format not conducive to the give and take between audience and speaker that really helps learn the topics. So these guys decided they'd come up with different sessions to teach, and take it on the road. They offer several sessions per time period to choose from, and they give many, many sessions. (The only drawback, is that no sessions are repeated in order to provide lots of material, which means if you have 2 or 3 you're interested in for one time slot, you do have to pick only one.) More info about how they got started and why can be found on their "about" section.

The great thing about this, is that all these guys really know their stuff (many of them intimidatingly smart), and they're also great speakers who encourage discussion and questions throughout their presentations.

If you're not a programmer in the least, you're really not going to care about any of this, but if you're a coder, particularly in Java or .NET (I have the impression that was really added later on, since it's a primarily Java Symposium, and there are relatively few of these sessions), and are writing or interested in writing all manner of web apps or front end applications, it's a great learning experience to attend. They not only discuss things you can do with vanilla Java, they also talk about various frameworks and other packages available, including Open Source stuff. Plus, they discuss other technologies that are related to web applications: the first session I attended Friday was a CSS session that discussed not so much the "prettying up" aspect of CSS, but the ability to use it to make pages more accessible, and its viability to make whole pages smaller and easier to maintain.

In case you're curious, here's a list of the topics I personally attended while at the symposium, which were mostly geared to stuff that might be useful at work with the system I'm on:

  • Friday:
    1. Cascading Style Sheets: a Programmer's Perspective
    2. Advanced Version Control
    3. eXtreme Struts
  • Saturday:
    1. Java Regular Expressions
    2. Introduction to Java Reflection
    3. Creating Next-Generation, Highly Dynamic, Off-line Capable Web Applications with HTML and JavaScript
    4. Creating Killer Graphics and Professional PDFs with XML
  • Sunday:
    1. Effective Enterprise Java: Security
    2. Under the Hood of Java Memory Management
    3. JavaScript Exposed: There's a Real Programming Language In There!

A complete session listing, if you want to see what I missed as well, can be found in this PDF.

Next up: what I've been messing with that I got from this conference.

whining no longer being accepted

Sunday, March 20, 2005

Web Quizzes09:23 PM - There's no way in hell I actually know that much about booze

There were at least 3 answers, 2 of which were on the last page where questions were added later, that I just picked an answer 'cause I didn't have the slightest idea, plus a few I made educated guesses about but don't know if I was right.

I am Bacardi 151...

Bacardi 151

Congratulations! You're 134 proof, with specific scores in beer (60), wine (133), and liquor (86).

All right. No more messing around. Your knowledge of alcohol is so high that you have drinking and getting plastered down to a science. Sure, you could get wasted drinking beer, but who needs all those trips to the bathroom? You head straight for the bar and pick up that which is most efficient.

My test tracked 4 variables. How you compared to other people in your age and gender:

You scored higher than 70% on proof
You scored higher than 87% on beer index
You scored higher than 97% on wine index
You scored higher than 92% on liquor index

Link: The Alcohol Knowledge Test written by hoppersplit on Ok Cupid

Wednesday, March 16, 2005

This site03:30 PM - New wishlist

I finally got off my rear and started managing my catalog wishlist with MovableType. I have to do delimited-text to get all the fields, but it's still easier than rewriting my maintenance facility (it's broken somehow) so I can add or remove stuff, or doing it by hand in the database. Plus I decided on a list format for each item rather than a table format for each catalog.

It's in a new location, too, so if you bookmarked the old one now's the time to switch.

(Note: This is not me hinting for people to buy me stuff. Notice no mailing address anywhere to be found. I keep this mostly for anyone who already buys me birthday and Christmas stuff and likes to shop online, so I can just point 'em to that. I'll have to tell my mom to update her bookmark though, if she still has one, 'cause she never visits here in spite of my occasional attempts to mention it.)

whining no longer being accepted

Life10:31 AM - So tired

I hate it when I get a bug to do something. After 10:30 at night.

Yeeeah... yesterday afternoon I was straightening and organizing stuff in the computer room, 'cause it sorely needed it. Well, we hadn't opened the color printer yet, and it was still in its box. We hadn't figured out a place to put it yet, and we didn't have a USB cable for it anyway. I had ended up pushing the box half in front of the doorway, which I decided at 10:30 was no good. Instead of putting it elsewhere in the room, even on the floor, I decided right then to figure out how big it actually is to get a better idea of where to put it. I had planned on sticking it on top of my cubby shelves, since it's narrower than the b&w laser printer, but it turns out it's too long so I can't put the lamp up there. (It's up there 'cause desk lamps aren't very effective at spreading light around unless they're up above whatever they're supposed to be shedding light on.)

Long story short, I ended up rearranging my whole desk area. Much bitchiness happened ("TOO MANY DAMN CORDS!!!!1" and falling things and such), and it took me over an hour.

I'd already moved my tower onto the part of the shorter, and closer to the desk, file cabinet that wasn't under the desk a bit, and put the printer on the desk directly, instead of having the tower on the desk and this metal shelf thing that had one side sitting on the right end of the desk and the other side sitting on the taller file cabinet that's the same height, with the printer on top. That I'd done this past weekend some time, with J's help moving the tower. First, I figured I'd move the cubby unit from the left end of the desk, facing sideways, to the right side facing out, with the b&w in front of it. I rearranged the stuff in the cubbies so the bottom row was empty and managed to hoist it up with my hands in the outermost top cubbies. That was fun. It was rather heavy, and it was really hard keeping it from tipping forward and dumping stuff (including the shelves, which are not attached, merely crossing each other with slots up them to hold them together). Plus I was trying not to set it on the mass of computer wires that run across the back of the desk because they won't all dip under the level of it. Then as I was moving it, I decided I wanted the laser printer on top of it after all, since it really isn't too deep, and it's a lot narrower so the lamp will have plenty of room on it, so I went to all that trouble. For a little thing, that printer's kinda heavy.

With all that done, I realized all too late that put my monitor, keyboard, and mouse area even farther from the tower, making it even harder to reach to put something in one of the CD trays or whatever, rare though that is. So... I decided to keep the cubbies facing out, but slide it over to the left as far as I reasonably can. The USB cable actually had another 30" or so of slack in it that wasn't being used. However, just sliding it behind the monitor isn't that simple; there's cords & stuff. So, the printer came off the cubby again. Also, all the random crap that was still on my desk, in front of my monitor at that point, was either moved wayyyy to the left side of the desk or onto the floor so I could slide the monitor (thank god it's a flat panel) and speakers forward. Keyboard went on the floor (go go wireless keyboard!). All that done, I slide the cubbies over a bit, then stuck the monitor and speakers on top. Then, I slid it about a foot, then set the monitor and speakers down on the right side and finished sliding the cubbies over. Finally came the fun of setting the printer back up there and plugging the USB cable back in (it kept being in the way plugged in). Then also wondering why the power cord had even less slack than before, yet the part of the printer it plugs into was closer to where it plugs into the wall than it had been. Wires, of course. Unplugging the printer and pulling that cord out from all the rest was... fun in a dental surgery sort of way.

Bleh. All that, and then I still hadn't found a spot for the color printer. However, not only is it narrower front to back than the b&w, it's also not as tall, so I finally stuck it in front of the cubby unit. After that all I really needed to do to satisfy the bug was to rearrange the mouse docking station, keyboard, mouse & pad, and how USB things were plugged in.

Bleh. It was a quarter to midnight when I got done, and my alarm for work in the morning is at 5:30am. Yea.

I'm still not done. First off, we need a USB cable for the color printer. After looking at where the cubby unit now rests, it's quite close to where it was originally (urgh, I hate wasting energy). The only thing keeping it from sitting back where it was, is the lack of USB cable slack for the b&w printer. So, I figure we'll just get 2 10' USB cables (or whatever "standard" length is close to that), then I'll slide it back over there, side-facing again. That will finally, finally give me the room I need for a dual monitor setup with my 17" Viewsonic CRT that's still perfectly good, plus probably enable me to put the color printer facing normally instead of in front of the whole cubby unit, and a flatbed scanner in front of it TBPL*.

I also need to rearrange the stuff under the desk. Sitting to the left meant stuff went under it on the right; sitting to the right means moving that stuff so I don't have to have my legs perfectly straight down to the floor.

I guess I should've taken before/after pics, huh? But when one gets a bug to reorganize things like that don't really get thought about until smack in the middle or later, when it's really too late. I guess once I'm all the way done with that room, i.e. shredding all that needs shredding, filing all that needs filing, vacuuming, etc., I could take pictures of how nice it now looks, including my crafting station... that I haven't had time to use since it was set up.

*To Be Purchased Later

whining no longer being accepted

Saturday, March 12, 2005

Life03:20 PM - Good time last night

First, Mark had decided to make Lebanese chicken and potatoes, which was immensely good. The chicken dried out a touch in the oven, but it could be it was just in a little too long or needed to be in bigger pieces, not sure. Still super yummy. This were accompanied fried potatoes and fried cauliflower, also super good. Talk about a satisfying meal.

Then, a fellow forumite, "aformist", aka Kas, was flying in from New York, and so Mark went with John and Karen to the airport to pick him up, then they came back to our house. Awesome! Kas is awesome. :) Much fun was had. We all watched a really, realy batshit crazy, parody-of-lots-of-anime anime called Puni Puni Poemy... I just couldn't stop raising an eyebrow and laughing my ass off. And... a little alcohol made it all the more amusing.

I did find out that falling down stairs is a bad thing, and I do not recommend the experience highly. I was coming down the carpeted stairs in my socks, and not paying enough attention to where I was putting my feet possibly because I was a bit tipsy, and stepped down with my heel on the edge of the stair... oops. I slipped and got to land on my left hip and left shoulder and slid down the couple steps to the landing at the end. Ouch. Nothing broken, just my pride and the places I hit were bruised and I was rather embarrassed. Both points are definitely tender (and of course Zephyr managed to stand for a moment on the hip one while I was in bed this morning... that didn't feel good), and I think I have a slight bit of muscle soreness from trying to twist and catch my fall without getting too hurt. But more of a "well, now I know what that's like... let's not do it again" thing than anything. Oh, and the power went out for about a half a minute. That was interesting.

So it was a heck of a good night overall, and yea! for getting to see friends and meet new ones.

Friday, March 11, 2005

This site07:26 AM - Tightened security at my host means no need for 777 permissions

(If you have never used a Unix/Linux-based system, and have never heard of CHMOD or what permissions are like, you may want to skip this.)

In a nutshell, PHP scripts used to run as a different userid than the ID I log in with. So, any time I wanted to write files with a PHP script, such as the cache files for RSS feeds I process, I needed a directory that had more than the default 755 permissions to put the files in. I needed an "other"-writable directory, in other words. I recently moved that directory out of the web structure entirely for security purposes.

However, CW, while implementing phpsu_exec (kinda like su_exec for Perl, but this being for PHP) as an added security measure, they also changed some things around. Scripts are no longer allowed to mess around with 666-permission files or in 777-permission folders. So even though they, in theory, have all the permission they need to write those files and to those folders, they are denied anyway. However, knowing that could really mess things up and essentially make it impossible for users to have any scripts to write any files at all, they also made it so added those permissions were no longer needed anyawy. Scripts now run under the same userid (and group id) as the actual owner of the account. This means that I can have a normal 755-permission directory (owner gets everything, group & "other" get read+execute only, which for a directory == read-only) and write files into it. Further, I can write to normal 644-permission files that I've created as well; it doesn't matter any longer whether I created them or the script did.

I didn't get around to checking things immediately after I found out about all these changes, which happened 3 or so days ago. I noticed that my feeds weren't getting refreshed (got booted temporarily from Slashdot, 'cause they block a domain for a day or two if it hits their RSS feed more often than every half hour, and since my cache file was >30 minutes old it would keep trying to hammer it every time someone looked at the site). So I figured everything out today, finally. The cache folder needed to be a normal 755, and I had to delete the old cached files 'cause they now had the wrong owner id attached to them. Once I did all that, everything got back to normal.

whining no longer being accepted

Thursday, March 10, 2005

Rants09:40 AM - Well that was rude

I was downstairs watching J play WoW, waiting to go with him to grab some dinner. Just before we went to head upstairs, I noticed a chair leg support was missing from one of the diningroom chairs that had been brought downstairs. You know how you have four chair legs, then two vertical braces, one each between the left set of legs and right set of legs, then (one or) two braces between those under the middle of the chair? It was the front of the two middle braces that was missing. I looked around a bit for it, and found it diagonal from the chair, all the way on the other side of the table from it. Oh, that's just great. It had been broken out of its holes. (These are glued in, but also have little nails driven, one at each end, into the sides of the pieces they fit into, that hold them in place in those holes before the glue sets. There was a tiny splintered slit from where those had ripped from the vertical braces they'd been in.) Worse yet, because of the lack of support pulling the legs together, the legs were sitting too wide apart with the back brace already ripped out of one of its holes as well.

And no one had said anything. The likely culprit is one of the guys who J has over every Saturday: the whole reason those extra chairs are down there in the first place. (We have my chairs, one of which is the broken one, upstairs with our main kitchen table. The diningroom table we "inherited" with the house, along with its old busted up chairs, are downstairs for them to game on. Some of the chairs in the kitchen get moved downstairs since there aren't enough of the old ones to go around.)

There's one of them I'm 100% sure it couldn't have been. Had it been he, we would've known about it that night, he's just that honest and has integrity seeping from his eyeballs. Great guy; often picks up soda for the group when we don't have time before everyone gets here, etc. There's another who I think would've had to get angry at something and break it on purpose; no way he could sit in it in any weird way and break it 'cause I don't think he weighs enough to break it; also, I'm mostly sure he would've said something as well. The rest... I really don't have a good enough read of them, and a couple I wouldn't be surprised at all that they would try to hide something like this. Like we'd never notice...

I've told J, and he completely agrees, that whoever did it needs to fess up and pay for a new chair. Otherwise they're not welcome anymore. (Except the one, whom he can tell privately that he's still 100% OK in our book, still welcome, and we're not upset with him at all.) Also, those chairs aren't going downstairs for that purpose anymore; they can make due with the old chairs (none of which seem to be any worse off than they were before), the bar stools, and the crappy metal folding chairs. And if whoever did it admits it but refuses to pay for a replacement he is no longer welcome in our house. (Not only do I say "he" as the general pronoun, but I say it specifically because almost everyone who comes over is male, often there are no other females, and last Saturday I think everyone who was over was male.)

If you break someone's stuff, you own up and offer to pay to fix or replace it, period. If the person whose stuff you broke turns you down for that offer, then fine. If you can't pay it all at once, usually owning up right away will make the other person be willing to work with you on paying them back for the cost of the item. I know I am; had it been pointed out that night, or if we'd been called by who did it the next day, we'd be plenty willing to work something out if it turns out he didn't have the cash for it all at once. But when you hide the broken item, or broken part of it, expect the person whose stuff you broke to be lots more pissed when he finds out about it than he would've been otherwise. It's rude and inconsiderate, not just to misuse stuff to where it breaks but moreso to hide it, and shows you not to be trustworthy.

We still have to go find a matching chair first, then find out how much it is before we can tell whoever broke it what it costs. But at this point, especially if he's reluctant to own up when J asks everyone, I'm not sure I'm ready to cut much slack. I'm thinking we should look for a matching chair before Saturday comes along so we already know how much it'll cost to replace. (I don't know if he'll be asking them as he calls each to let them know what time to come over, or if he'll wait until they're all there and mention it, or what. I'm not sure he knows yet either.) I'm just pissed. Those chairs are decent chairs, and don't break if you look crooked at them, and are less than 5 years old. So I doubt someone was just sitting in it normally and it fell apart; I'm quite sure that would've been noticed anyway. I doubt the breakage was deliberate, but it was probably from misuse, and hiding it was deliberate.

listening to: Tori Amos - Blood Roses
whining no longer being accepted

Wednesday, March 09, 2005

This site11:00 AM - Permissions issue

If you were getting "Forbidden" errors trying to view any pages on my site, including the main domain URL, something got screwed up through no known action of my own. My root web directory, as well as the public FTP directory (which no one uses or has access to) got its permissions changed to 750 instead of 755. I don't know what or who did it, or how long it was set that way (if you got this problem, feel free to mention when you first noticed it, as I only noticed it a few minutes ago), but obviously it's now fixed.

whining no longer being accepted

Tuesday, March 08, 2005

Web Quizzes01:31 PM - Silly little "what god are you" meme

(This one does not require an LJ account, like many of them do.)

What kind of God are you?
Favourite Color
You earthly time was spentraining torrents of blood while sailing over the prostrate masses in an iron chariot
Your throne isfashioned from thorns and human femurs, surrounded by writhing, howling servants, with a footstool of souls on the sizzling shores of the Lake of Fire
You weara humble tunic and robes, belying your inestimable supernatural powers just waiting to shatter the woes of Creation
Your Godly superpower isThe knowledge of and answer to all questions
This quiz by pelagicboreas - Taken 44465 Times.

Monday, March 07, 2005

Exercise09:00 PM - Well, that was pathetic, but I did it

We ate first, since my appointment didn't start till 5, and we were both kinda hungry. Then I took J's recommended 30 minutes from when we got home (we're only 2-3 minutes from where we ate, so effectively 30 min from eating time) before getting ready to work out.

I did all my stretches, including 2/3 heel spur exercises (foot on floor, push leg forward w/ heel on ground still, once with leg straight, once bent and pushing knee downwards, hold 15 sec repeat 5x each foot each exercise), and hopped on the treadmill. I managed to get .35 miles in before the bottom of my left foot developed a sharp ache just forward of the heel that didn't go away with slowing down my walk. :( That sucked super mega balls; I had only started to think about breaking a sweat by then.

So I did 10 pathetic crunches (stomach muscles suck, so I didn't come up very far), then 5 pushups, then 10 more crunches. And that's it. That's my measley pathetic workout. All added up, with stretches and everything, I doubt I spent a half hour at it. And while I could've done a few more pushups... what I really, really need is the cardio. The pushups may help with strength and a little muscle mass building, but they don't really burn fat unless you're to the point where you can do them really fast and for a really long time without stopping.

I'm definitely going to talk to J about getting that fitness center membership. They have a full size pool, so I could learn how to swim instead of just doggy/frog paddle and actually work out that way, and they have bike machines that would allow for serious cardio without any impact whatsoever to my joints. Then it's just a matter of getting off our asses and driving or even walking (during nice weather) down there to use it.

whining no longer being accepted

Exercise Life01:37 PM - Need to kick myself into gear, stat

Alright, I have a hair appointment @4:30, so I won't be home immediately after work. However, it's a quickie appointment, so I should be home by 5:30.

I absolutely must make myself exercise today when I get home.

The only exception would be to drill out the remaining two drawers while it's still daylight and can be done outside. That's it. (The false fronts have to be done inside anyway, and are not allowed to be an exception since they can be done after sundown anyway.) If we do get those drawers done, and I'd like to do them sooner rather than later since the other four are already done, then I go work out immediately after that. Period. Must!

I have got to start getting off my ass. Even if it means less computer play time and less reading time, I must stop the weight gain and start losing weight. I'm higher now than I've ever been and it's just sad. I can't walk as fast as I used to (and I can't attribute all of that to heel spurs), I'm winded more easily, and I'm just plain fat & out of shape. I've just about curtailed my diet as much as is realistic (I rarely snack -- and I mean rarely, most of the places we go for lunch I don't do the combo so I don't eat the fries, etc.), and even if I completely change my diet to eat precious little fat at all and get it down to a perfect science, that still won't help me lose much of the weight. Exercise is a must.

And remind me that I need to call our city hall to find out their hours and what we need to do to get resident cards (they are now picture IDs so they don't just send 'em in the mail). Then, I need to call the civic center and find out what their gym (including pool) hours are, and what we need to do to get a family membership. Then we both will have more variety than a treadmill and some free weights to get in shape. I do know it's only $95/year $85/year for a family membership, from my mom looking into it, I just don't know what all else is required besides (probably) proof of residence. Given that almost any other private gym is more like $60-90 per month, it's a great benefit to take advantage of. (I'd assume most of their costs come from property and/or sales taxes, etc., so we're paying some of it already anyway.) In the meantime, I need to get started with the treadmill.


Edit: That was insanely easy. I found our city's Rec office info online right away, called the number, and we don't even need to hit city hall. Their front desk is open from 9am to 8:30pm every day, and we can bring a bill or bank statement mailed to us (to prove the address) plus a photo ID, and get residency cards right there. Then we can just move right on into the recreation membership, and the fitness center at the civic center closest to us (there are 2) is open from 8am to 9pm every day. Woo! I think I may convince J to go with me to at least get residency cards tomorrow after dinner with my parents.

Games & Gaming Life09:56 AM - Heh, a real update for once

This weekend was semiproductive, which is a bit of a switch.

Friday night I was playing WoW, then J suggested he run me and a few other guildmates through BFD, which was fine except the server started getting rather bad. I wanted to make sure I had all the quests, so I checked Thottbot and found a few I figured I should have. First I couldn't find some guy in IF to get one of them, and by then I was running late trying to get there, so I flew to Menethil Harbor. Got on the boat that had just arrived instead of remembering I needed the other boat that was now not a boat but a dude that teleports you instead... no problem, it'll take me to Theramore and I can still get up to Astranaar, right? That's great until the boat disappears and everyone on it is dropped in deep water and given a fatigue bar... yeah, so everyone starts hearthing out. That sends me all the way back to Darkshire, which means I have to go through LagForge IF again. I was tempted to just go down to Booty Bay then over to Ratchet and walk. However, J convinced me to try again, so I went to SW then IF. I get to Menethil Harbor... and there are no NPCs. None. At all. So J says I'll have to hoof it through the Wetlands to Southshore. I'm not even halfway to Dun Modr and BAM! I get booted. By this point I'm just ready to scream. J tells me everyone in the guild on the eastern continent got booted at once, so probably everyone there got booted. Great. And of course I can't get back in, so I say the hell with it and go off to read. J said it came back up, but then shortly thereafter they announced a server shutdown for yet more emergency maintenance and then it (a) counted down way faster than that, and (b) booted everyone with 5 minutes left till shutdown anyway, then was down for 2 hours.

Then, Saturday we were going to meet J's parents for lunch in Wright City after his younger brother's DI contest was over. That didn't happen because they had to grab a quick lunch due to them not presenting until after lunch. So we played WoW, with me doing Wetlands quests since I was there anyway (it started me back at the harbor though before I got booted I had run up the road a ways). Then we finally went out to meet them in Wentzville (~10 miles east of Wright City, so a mite closer), leaving around 5:30 and getting there at 6:10. We had a good dinner with them all, which was nice, though our food was insanely slow to arrive, then we left the restaurant at about 8. J called his friends and they were still interested in coming out, so they did and I played more WoW and then hit the sack while they were still up and running.

Sunday was the most productive, though second most (after the WoW stuff of Friday night) frustrating.

I decided while J was still sleeping, to finally get around to replacing the drawer pulls in the kitchen. The old ones are these stupid ones that have a plate with a knob jammed in them. Since the knob isn't one piece, and is sort of snapped into place, and they're old, some of the knobs were missing and others were very, very loose. So way back in, I dunno, December? we bought drawer pulls. These are a standard 3" width (between screw holes) pulls, that are handles rather than plates with knobs. Much better for looping dish towels over, and all one piece so they don't stop being functional, and we even bought 2 for the false fronts under the sink specficially for dish towels. I started with the bottom, empty drawer. After removing the plate (no knob, it was long gone), there was a nice thick buildup of gunk around the edge where the plate used to be. GROSS! So I scraped most of it off with the screwdriver, then washed it with Dow and dried it. Then I look at the back, and that's where it gets disappointing.

First off, the holes are 3.5" apart, not 3. So I find out the holes are not a standard size apart and we'll need to drill new ones. Great. Then, I find worse. See, the front of the actual drawer box has an additional face attached to it that is actually what you attach the pull to, and what covers the drawer hole, and is what you see when it's closed (see figure 1). The front of the box itself has 3 counterbored holes in it (see figure 2), which is fine. Apparently, as you can see from that second image, they decided the screws weren't quite long enough, so they counterbored just a bit into the face as well. One of the problems with this, is that they didn't measure accurately on where to put the bores, so none of them line up with the counterbores in the drawer front. So the holes for the actual screws, which we have to cover up with our drawer pulls, are at the very top of the "real" counterbores. Plus, the screws that came with our new pulls are too long for the additional depth of the bores.

I wasn't sure what to do at this point, except that we needed to drill two new holes in each drawer, a quarter inch in from the old ones. However, I wasn't sure whether they'd still fit inside the counterbores in the drawer front. First, after telling J about the problem, I called my parents to talk to my dad. Mom answered, and suggested I call my grandfather since he has more extensive knowledge of the subject (he builds furniture as a hobby and has for several years), so I called him. I tried my best to explain the situation, and he ended up telling me to bring a drawer and a new pull, and he'd help figure it out. So I drove out there (first time in J's manual-transmission car by myself, wheee!). Initially he said we could use nuts to take up the extra length of the screw, which worked pretty well. Then he stuck it in a vice, measured for the new holes, and drilled them with me telling him first whether the drill was straight up since he has hardly any depth perception. Then, looking at the back, the holes were indeed still inside both counterbores, barely. The holes were drilled big enough for the screws not to bite into them since the screws only need to screw into the handle itself, so they slid smoothly. However, one was really close to the edge of the bore, so he used a hammer to push it all the way down into the hole. :) Then it was a matter of actually screwing the handle on. Woo! One drawer done.

He also figured out that since it needed 2 nuts, not 1, on each screw to take up the slack, they were an even quarter inch too long, which means I could buy 14 replacement screws instead of 28 nuts, since they sell screws in different lengths varying by a quarter inch. After heading home, I grabbed a screw to match it up, as well as a spare nut of the ones he had so I could use it to test the threads of the ones I'd be buying, then hit the hardware store. He also lent us a center punch to make the initial mark for the hole, plus a really slim drill bit to drill a starter hole and a larger one for the real thing. (One of the holes "walked" on him, with the drill going into the existing hole and making it difficult to drill the additional hole. A slimmer starter hole is to prevent that, what with drilling new holes so close to the old ones.)

J helped me with these. He took the pulls off the other main 3 drawers (we have 6 drawers + 2 false fronts), after emptying them, and I marked & punched the holes. Then, we took the drawers outside for him to drill while I held them up vertical on the stoop. After drilling the starter holes, he still had 2 holes walk on him but it wasn't a big deal. Then, I cleaned all the gunk off the faces and put the pulls on. I also ended up cleaning the front of the cabinets there under the sink, right by where the drawers go, along with the frame around the drawers.

So half of them are done. Two we will have to empty and drill; the false fronts will have to have their plates removed from underneath the sink, then the holes drilled with the fronts in place. I'm hoping we can do that today some time, at least the two other drawers.

Finally... how is it possible for new-grown skin to have nerve endings and no blood vessels, especially given how much faster the latter grow than the former? Specifically, I had to repierce one of my ear piercings a bit. I had noticed both of my second holes were starting to close up, and figured I should start back with keeping earrings in them at all times, at least for a while, so they'd stay. The right one was fine; a little tight, but manageable. The left one... I couldn't get the post through. I figured it was really tight, so I grabbed one of my french hook earrings, which has a slimmer bit of metal to go through. No dice. I found another pair, these french wires I think (only difference is the hook in the back, right?), which were even slimmer. In fact, they're the slimmest I have. It would not go through. Damn. I knew for a fact I still had, somewhere, my old starter posts that had been used to pierce my first set of holes, so I started looking. After an hour, the search had yielded many, many pairs of other earrings, which then got put on the earring stand (plastic thing with a ton of holes for hanging pierced earrings). Finally, I looked in the one likely place I hadn't checked yet, since it was only a slim chance. Bingo! Found 'em. Nice and pointy. After washing my hands, I announced to J (who knew what I was looking for), "I have good news and bad news. The good news is: I found them. The bad news is: I found them." Yep, this meant it was going to hurt if I wanted to keep my ear hole, and probably bleed like a stuck pig. I was half right -- hurt like a bitch.

I couldn't have done it myself. I was trying, but not getting anywhere. J came upstairs after he finished WoW for the night, and after checking to make sure it was lined up straight with the back of the hole, pushed it through for me. I asked him not to go too fast in order to make sure it didn't go off track, which is a good thing, but... YEEOOWWWW!!! I'm quite sure it's a good thing I mentioned to Mark I had a piercing closing up, otherwise I imagine he'd have been rather worried at my yowling in pain. :p

I couldn't have gotten it all the way through anyway, because as it turns out the membrane of skin that had grown back was very thin but very stretchy. J said when I was in the most pain (and the loudest) was when the earring had come through the hole, but that membrane hadn't pierced yet! It had followed the earring through the other side of the hole.

He told me it wasn't bleeding at all yet. I pulled that one out, because it wasn't hypoallergenic and I have real allergy issues to nickel & stuff, so I wanted a different earring in the hole. I was so sure when I pulled it out (oh did it burn and ache!), that out would come with the blood gushing. Nope... not a drop. Tried to get the original earring in, wouldn't go. Damn! Used the french wire to go in, then kinda move it around to try and widen the hole a bit. Ended up having to find a different pair of earrings to put in, which isn't easy 'cause most of my earrings are not ones that are good to wear to bed. During the entire time I was using the french wire, then when I put a normal earring through, it did not bleed one drop. Not one. Hurt, and was still hurting when I fell asleep, but did not bleed.

So how is it, that piercing this skin hurt so horribly, yet did not bleed at all? I mean, you know how ears are -- they have blood vessels everywhere. And nerve tissue is supposed to take forever to grow. So why did this hurt so damn much, and yet not bleed? I mean, I'm glad it didn't bleed, that's so messy, but... WTF??

whining no longer being accepted

Life08:34 AM - It is to laugh

Really, Bill O'Reilly is such a whiner (link content unnecessary for understanding of this post).

Apparently he has this rather odd idea that it's illegal to link to things without permission, and is attempting to bully people into taking their links to his articles down. More info to be found here and here.

So... yeah, I figured I'd hop on this bandwagon and link there just to piss him off. And if enough people take up Elorie's idea of a "googlebomb" and all link him with the text "whiner" (so that a search for "whiner" gives his article as a result), I think I would be ever so amused. What's the point of the internet if there are no links anywhere?

whining no longer being accepted

Thursday, March 03, 2005

This site01:25 PM - Doing some live testing

Update: All is well and fixed now. Opera interprets a toString on the location object differently than other browsers, and does not give back the full URL (specifically, it skips the anchor if it's specified). I had to switch to using this.location.href instead, which works fine. No more comments page weirdness now.

Apparently the script I stuck on the comments page to set the location to '#comments' if it doesn't already have an anchor in the URL is barfing, and always setting the location regardless... which means it just keeps reloading every time it finishes loading. I need to figure out why, and a simple test example didn't do it.

So if you don't want weirdness on the comments pages I would suggest not using them for a little bit, and if you don't mind it, don't complain if you use 'em anyway and get weirdness. :p (Said weirdness will probably be in the form of alert boxes that need you to click "OK" first.)

This site12:24 PM - "Remember me" actually works now

The "remember me" function of comments here actually works now, heh. You have the cookie; the Javascript that was supposed to get the cookie and put the info in wasn't working right, but now it is.

whining no longer being accepted

Tuesday, March 01, 2005

Web Quizzes07:32 AM - I guess I'm pretty good at correct spelling and grammar

The Commonly Confused Words Test


You scored 100% Beginner, 100% Intermediate, 93% Advanced, and 55% Expert!

You have an extremely good understanding of beginner, intermediate, and advanced level commonly confused English words, getting at least 75% of each of these three levels' questions correct. This is an exceptional score. Remember, these are commonly confused English words, which means most people don't use them properly. You got an extremely respectable score.

Test statistics:

  • Compared to users who took the test and are in your age group:
    • 100% had lower Beginner scores.
    • 100% had lower Intermediate scores.
    • 100% had lower Advanced scores.
    • 100% had lower Expert scores.
  • With respect to Beginner, users aged 55 to 59 scored the highest.
  • With respect to Intermediate, users aged 55 to 59 scored the highest.
  • With respect to Advanced, users aged 55 to 59 scored the highest.
  • With respect to Expert, users aged 55 to 59 scored the highest.