Wednesday, November 28, 2007

Fisher Space Pen Hacking

Last year the Fisher Space Pens were all the rage. An amazing pen, that writes in the cold, in heat, upside down, even under water. Only problem: it's $20...

Seeing as how my favorite batch of pens were purchased 20 for $2.50, paying $20 for a pen is quite a stretch for me. On top of that, I had heard some people grumble that it isn't really all it's cracked up to be, as far as being a pen is concerned.

So I head over to the local UC Davis bookstore and buy not the pen, but the $5 ink replacement for said $20 pen. One empty 13 cent pen, a bit of scotch tape, and some exacto knife-fo later, I have a $5.13 pen which writes the same as the $20 Fisher Space Pen.

My feeling:
I'm glad I didn't spend $20 on it. It is a rather nice pen, but even after getting the ink cartridge warmed up after a few days, it doesn't write as dark as I like. I'm just too much of a fan of the heavy black gel ink pens to like something this sophisticated. It is not worth $20, but was a very entertaining way to spend 20 minutes and $5 is acceptable. Supposedly, since the ink is pressurized, it does do well writing on surfaces other than paper, which I have yet to try out.

Saturday, November 24, 2007

Sunnyvale's Finest

So it sure seems like our family can't go a whole year without talking to the city police about something. Last year it was a stolen license plate, year before a drunk driver, year before that some guy getting chased by three others with baseball bats.

Tonight on the way home from Fry's, we were driving by my high school and on the left side of the street we spotted a column of smoke. At first I thought it was just someone putting out their fireplace with water, but once we got the chimney in view, we were able to see three feet of flames coming out of it. Kristina whips out the cell phone, calls Sunnyvale's seven digit 911 number (408-730-7100), and hands it to my dad.

The dispatcher authorized us to run the left turn red light to get over into the townhouse complex to find the house on fire. We speed over to it, and circle around the block, and can't find it. It couldn't have been ten minutes from when we called to when we had a full fire response and at least two police cruisers. Unfortunately, (actually, very fortunately) we just couldn't find the fire. The chimney had flared up, burned out, and died.

And so resets the timer until the next time we get to call the Sunnyvale Police and Fire (which are actually both in the same department, Public Safety). Let's hope we might actually make it to a year for once...

Friday, November 23, 2007

Wikipedia Gears Cache Script

The concept:
Combine Google Gears, Greasemonkey, and Wikipedia to make something very cool. It adds a box to the side of every Wikipedia page with a link to cache it, so you can then revisit it when you're not connected to the internet.

Google Gears:
Google Gears is a toolbox Google made to let you access websites offline. The first use I know of was the Google RSS reader, where you download all the news, then read it offline and sync back up the next time you're connected.

Greasemonkey:
This is a firefox plugin which lets you install scripts to change how web pages look. You can install one script that censors words, or changes the color of some outline of a website, or inserts extra useful links into websites (which is what this script does)


So all of this together comes together into the dream of every wikipedia junky like myself. Unfortunately there is one problem with the script. It lists every page you have cached, which is no good. I want to be caching like a fiend, without putting a huge ugly box on the side of every en.wikipedia.com page I visit. Thus, I edited it.

I think it's very impressive work, since I've never done anything with javascript before, and I did all of this sitting in a motel room near Fresno with no internet or reference material. There is still one problem:
  • The [ Cache Page ] and [ Show Cache ] links render next to each other. This problem isn't there when it's [ Page Cached ] and [ Show Cache ]
So to get started:
Get Firefox
Install Greasemonkey
Install Google Gears
Install WikipediaOffline script
Read the original project page
Apply my patch. There is a program to do it in unix, but most people will need to do it manually. If you're really interested, just email me and I'll send it to you.

My patch:
(edit: looks like blogger mangles all the whitespace, sorry guys. Just ask me to email it to you.)

[Code patch deleted by Kenneth]
I'm not going to claim any copyright on this since it's just moving stuff around. If you do want to repost it or use it in any way, just let me know in a comment, and link back here if appropriate.

Mad props to Ben Lisbakken for a great script to start with.

Thursday, November 1, 2007

Tip of the Day - November 1, 2007

Write down all your credit card numbers.

My girlfriend just lost her Visa card a few days ago. If she had had her card number written down somewhere, it would have been that much easier to call and cancel her card. Don't write it down on a piece of paper and leave it in your wallet, it'll probably end up getting stolen with your cards. Put it somewhere useful, like in your desk or in your cell phone.

If you want to be very clever, when you write it down, use an offset. Then you're not exposing yourself to any more risk. ie 2345 6789 could be written down as 4567 8901. When you lose your card and need to get it back, just subtract 2 from each digit, wrapping around, and you're good to go.

Wednesday, October 31, 2007

NaNoWriMo

National Novel Writing Month

Less than 10 hours until the madness that is NaNoWriMo begins on the west coast of the US. For those of you who haven't heard of this already, the concept is that you have 30 days (November 1-30) to bang out a 50,000 word novel (technically a novella). The mathematically inclined will quickly point out how that works out to be a little less than 1,667 words a day. Blows the mind.

I've been thinking pretty hard about doing it for the last few weeks. I started a mind map and framed out most of the protagonists and the majority of the plot. I don't think I'm going to do it though. The smart thing to do would be to not waste all my free time for the next week trying. I'm lucky if I can bang out the rough draft for a 1,000 word essay in a weekend, no less two of them in a day, every day, for a month.

But who knows. Maybe after the Halloween dance tonight, I'll get caught up in all the excitement and break down and open up Word and bang out a few sentences. My girlfriend got very excited when I mentioned it offhandedly a few weeks ago so she's definitely going to go for it. I think just getting someone else involved in the project should marginally offset the fact that I'm not actually going to do it, right?

If all else fails, I might try and do it in January or February. Next quarter is looking a little easier than now. No English classes, just math, chemistry, and programming.

Tip of the Day - October 31, 2007

Old cell phones can still call 911.

So that means when you get a new one, toss the old one in your car. Then when you're in the middle of nowhere and pretty much fucked, you can have a chance. Even without a plan, if you try and call 911 with a cell phone, any network will pick it up and connect you. Big fan of the not dying.

Tuesday, October 30, 2007

Tip of the Day - October 30, 2007

Don't waste your time on old pens.

It's just not worth it. I got a pack of 20 pens for $2.50 at Office Depot. About 5 of them aren't any good, so instead of sitting there making all kinds of pretty faded doodles on paper sitting on my desk, I take a deep breath and throw away 12 cents of defective ink and plastic.

Sunday, October 28, 2007

blog.gears

This is a test post using blog.gears.

Blog.gears is a tool that allows you to write posts for blogger offline, then have them sync when you get connected again. This is done using one of google's newest and coolest products: google gears.

Google gears is an offline service, which you install on your computer, that then lets you visit websites while not being online. The only other thing I use gears for, as of yet, is the google RSS reader, so if I know I'm going to be offline I can sync down all my RSS feeds, read them, then sync back up that they're all read. I'm still waiting and dreaming for when they have it for gmail. Then I would be very very happy.

So how to use this? Just visit this crazy URL:
http://gdata-javascript-client.googlecode.com/svn/trunk/samples/blogger/bloggears/bloggears.html
Bookmark it, allow it to always use google gears (which you've installed, btw), and then whenever you're offline, visit this website again and just start typing away. Granted you don't get any of the nice rich text editing stuff, but it's better than nothing...

Edit: Well that was fun. I can't say I'm really sold on using this instead of say... word, but I'll give it credit on the whole not then forgetting to post it thing.

College is pretty intense. I keep falling farther and farther behind in the homework. Luckily I'm in the special Integrated Studies Honors program so we get to sign up for classes before everyone else (tomorrow for Winter quarter) so I don't need to worry about any of my classes being full. This helps when you're trying to schedule 19 units (You're expected to take 15 per quarter).

Saturday, September 29, 2007

Rose Poster


This was one final piece I did while I still had access to my 40 rolls of duct tape before I moved out.

(I'm not dead, just at college. Sorry!)

Friday, September 21, 2007

1000 Blank White Cards Starter Kit


1000 blank index cards: $3.29
4 pens: $1
Games: 25
Price per game: 17 cents
Making a fool of yourself in public with your friends: Priceless

Thursday, September 20, 2007

Poster for Band Silent Auction

So every year the Fremont High School Band program holds a silent auction at their winter concert. They sell lots of average stuff like small appliances and baskets, but last year I was feeling good and wanted to give something back to the band seeing as how it was so important to my high school experience. So I took the poster I had made of the school mascot (Firebird) and framed it and put it in the auction with a starting bid of $15, expecting it to get to about $30, which wouldn't be that bad for the band. Turns out there was two Fremont alumni in the audience that REALLY wanted that poster, so it ended up going for more than $80!

So this year the band came to me and asked me to make them another one. Pictured above is what came of that request. The entire sheet is 8.5" x 11" and is all duct tape with the exception of my signature, which is sharpie. Let us hope it does pretty well in the auction this year. It will probably help that they know about it early; last year I showed up 30 minutes before the auction opened and plunked it down on a random table with a bid sheet, so many people I talked to never saw it.

Tuesday, September 18, 2007

Kubb


Kubb: an interesting yard game where you throw batons to try and knock down the other player's kubbs, then once they're all knocked down you knock down the king (the tall one).

I saw the plans get linked to on one of the craft blogs I read (I think it was Make Magazine), and it looked like an easy enough wood project and a fun enough game. I haven't gotten to do much with my dad this summer so this seemed like a good way to finish off the summer before I head off to my freshmen year at college.

The rules on how to play can be found here. Same guy who posted the plans, and did a very good job explaining it.

I did change a few things from what his plans said. The biggest change was that instead of trying to rip 1/2" off the edge of a 4"x4", we just ran it through a planer a bunch of times, so the wood started out looking really nice (Didn't really last past the first game that much). When it was all said and done I finished the wood with Danish Oil to give it a little bit of water protection.

When we were picking out the lumber we found one piece of closet rod that was the perfect length, but was all warped. It hurt a little bit to buy that piece, knowing it didn't matter since I was cutting it into short pieces, but still, the twitch.

This is going to be the perfect game to take to Davis. Having fields all over the place will be nice.

My New Toy

So the price of technology still ceases to blow my mind. For the last few weeks I had been tossing around the concept of thin clients, which is where you have all your software running on one computer, and then displaying on many. The primary application being in schools and libraries where you can have a bunch of old, cheap Pentium IIs and one big new shiny server running everything, pretty much making the PIIs as fast as the new server, depending on how many people are running it.

I've wanted to play around with this, but that didn't work too well when I was lacking one key piece of hardware to pull it off: an extra network interface. All new computer's come with a network interface build onto the motherboard, (in the old days, it was an extra PCI card) so I can't just borrow another one from one of my other computers and play with it till the cows come home.

I needed to go buy a PCI NIC (Network Interface Card) to add to my server so I can play around with this. I saw a whole box of these at Weird Stuff, a local surplus electronics store, for $5, so that was my plan, until I checked on Fry's website for the general price of a new NIC.

NICs come in three flavors: 10, 100, and 1000. This is just defining the speed. The normal NIC these days is 100 and is what I saw for $5 at Weird Stuff. (100Mbps = 12.5MBps either way) 10 is rather painfully slow at 1.25MBps. (Although still much faster than my internet) So imagine my surprise when I saw on Fry's a 1000Mbps NIC for $10! I had no concept that this hardware is that cheap.


So I ran over there that afternoon and picked up the one I saw on the website. But I discovered something really interesting when I was looking at the shelf. The brand name NICs; more like $70. That's a pretty crazy difference from brand name to generic. I'll take a generic, thank you very much...

So now my desktop has 2 network interfaces to play with. I installed Edubuntu x86 server on a spare hard drive and plugged my laptop into the second NIC. Turned it on, and like magic, I had Linux booting on my laptop from across the network. Now hopefully my dorm will have a Cat6 jack in it so I can run this card at full speed for once. (All of my other equipment is 100Mbps)

Saturday, September 8, 2007

Swamp Cooler

So I'm at my grandparent's house right now trying to fix their computer/internet. It's one of those "treat the computer like a toaster" instances where the first thing I do is download the last 150 security updates and service pack 2.
Being the middle of the Central Valley it is rather hot around here. I've been especially impressed with one of their techniques to stay cool.

This is a real appliance, it says "Wisper Cool" on the top of it. It's a box fan with a cloth covering the air intake that looks and feels a lot like one of those textured kitchen sponges. It has a little water pump that circulates water up to the top of this cloth keeping it wet all the time.

What is really amazing about it is that in the last 24 hours I've poured more than a gallon of water into this thing refilling it. I find that an incredible volume of water to be vaporized at room temperature. It's kept the closet that is their computer room rather comfortable.

Just food for thought.

Saturday, August 25, 2007

Tip of the Day - August 25, 2007

Generally, don't bother asking for permission to do something that they don't stand a chance of understanding.

This happens a lot to me while I'm working tech support. People just do not understand computers and are terrified of them.

Tuesday, August 14, 2007

ARM Microcontroller Development System


Thanks to freecycle yesterday I managed to get my hands on an embedded development board, designed to help people write applications for PDAs and the like. It came with Windows CE circa 1998 on a flash chip that I finally managed to get it to boot off of, which I'm typing on right now, to then copy it onto my laptop to post.

It was a long and painful 4 hours of trying different jumpers on the 20-some-odd pairs of pins before I got anything more than my power supply fan spinning.

Ignoring the fact that it is pretty much useless thanks to the fact that every time you reboot it it loses all your changes (including calibrating the touch screen! #@$^#^), it is a very cute systemto play with. Nice little 5" touch screen (640x480) and an 8" keyboard which is a little awkward to type on with more than two fingers. It even has a little pezo buzzer that clicks every time you press a key.

It also has a ton of pretty cool stuff about it. It has a MultiMediaCard slot (which is how I save data between reboots) a PC card slot, an RJ-45 jack, 3 serial jacks, and even a video capture card. Granted most of this doesn't work without writing your own software for it so I'll just enjoy typing into my text files.

It also has a liquid crystal display on the board itself that has never displayed anything and a keyboard that doesn't have every letter and the ones it does have aren't even right. (k=tab v=` m=\ i=x etc etc)

Thursday, August 9, 2007

Tip of the Day - August 9, 2007

If your computer ever randomly dies and restarts, run a memory test.

I am currently trying to fix a neighbors desktop that does just that, and my dad suggested trying a RAM test. It was trivial because Ubuntu gives you a memory test on their install discs so I dropped on in and ran it. 50% in it started picking up errors every few seconds, which would explain why it was acting oddly. It's like your post-it notes disappearing when you randomly decide to stick them to one certain place on the wall.
The first thing you try when RAM starts giving errors is to pop the SIMMs out, blow out some of the dust, and reseat them. It will usually fix it unless the RAM is really defective. Then you're SOL.

Wednesday, August 8, 2007

Tip of the Day #2

Keep silica packs in your toolbox to remove moisture and prevent rust.

The Truth About Debugging

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian W. Kernighan

Monday, August 6, 2007

Tip of the Day #1

Always carry pen and paper with you

I've been a big fan of the Hipster PDA. It's nice when you have random ideas, or even just need to write a note to someone, to have a pen and paper on you to just whip out. I had a brainstorm on the way home from Portola yesterday (read: 5 hour drive) and came up with more than 10 of these.

Friday, July 20, 2007

Getting into College

After 4 long painful years of high school, I'm now heading off into the great unknown that is college. I applied to 3 Universities of California and one California State college, so my view is going to be just about that. So here is an errata for all those cool people out there thinking about getting into college:

Get Organized
Throughout high school my organization system for papers at home was an accordion folder. I had one slot for each category of memorabilia (read: girlfriends) and then one for everything else. This was great when "everything else" consisted of my DMV test and a few blood donation test results. It didn't work once I started getting stuff from colleges all the time. I started losing stuff.
So go out and find one of those mini two drawer filing cabinets and get all the hanging folders, etc for it. Make a folder for each school you're applying to, then put everything in those folders right away. EVERYTHING! You won't imagine what I threw away, never needing again, and ended up needing it again two months later. Once you file your intent to register you can take every other folder and have a burning party.

Get Started
That's right juniors. It's July, and it's time to start working on your essays for the UCs. The prompts should be posted by now so get crackin. There is a lot more work during senior year than we lead on to and November gets here really fast.

Think About It
Print out the prompts, post them on your wall, and start thinking about them. Spend a week writing the most random shit that comes to mind on a piece of paper. This might be helpful in the next step.

Now Really Get Started
Yes, that prompt is weird and awkward to answer. Here's a secret; they have no idea what you're going to write about until you submit it. This leaves you with 4 months to do anything you want until those applications are due.
This means open a word processor and start typing. Just keep going and get the 600 words out in one sitting, it won't kill you. And congrats, you have what is probably the worst and most embarrassing essay you have ever written. Now file that under "version 1" and pretty much never look at it again. Now come back tomorrow, and do the same thing, but this time it really won't seem to suck as much. It can be on the same subject, or something totally different. Either way it'll probably be an improvement.

Revise
Now you have your version 2.0 essay you wrote on the second day. Now edit the footer and type "version 2.0 mm/dd/yy" and print a copy. (Paste the prompt on the top too!) Now whip out the red pen and read through your essay and fix stuff. Read it backwards word for word and fix stuff. Turn the paper upside down and read it again, keep fixing stuff.
Now you have a sad-looking sheet of paper with 601 words printed on it and enough red ink to make you want to cry. Now fire up the ol' word processor and fix all the mistakes you found. Now edit the footer and change it to "version 2.1" Guess what; you're going to have literally 20-some-odd copies of this stupid essay floating around your house by the end of this and you're going to have no clue which one came before which one.

Backup
How much would it suck to lose all of this work, just like that? We get complacent with computers, but never forget that at any moment it can all just disappear with no warning. Put it on your flash drive. Email it to yourself. Email it to your parents. Do all three. Really, do it.

Filling out the Application
So the time to fill out the application comes and you start checkin check boxes and clickin radio buttons like the egotistical fiend that you really need to have become by this point. You get to the essay section: bam, easy. Copy paste your three essays into it after doing a final word count check. Then comes the tricky part.
They've jumped a surprise section on you: What you've done in high school. They give you some 5 sections under 100 words to really tell them more about you. DO NOT, I repeat, DO NOT EVER edit anything in these boxes. You're going to spend 45 minutes trying to write a compelling 99 words as to why you being in the Rock Music Club actually matters at all for college. Guess what, your session times out after 10 minutes. You click the submit button, and because it's all in one of those awkward pop-up windows, it gives you a "you need to be logged in to do that" error and all of your work disappears! Edit it in Word and copy it over.

Submitting the Application
Be ready to submit your application two weeks before the deadline. Once you're ready to submit all of it and give them your first born and credit card number, print the entire application. Read through all of it. Have your parents read through it. Have a friend read through it. Arm every reader with a red pen. If there is any mark on that application, fix it, and print out another copy. Let this take as long as it needs to. (As long as that length of time is less than a week.)
Now you're a week away from the deadline. SUBMIT YOUR APPLICATION RIGHT NOW! Don't wait until the last day, don't wait until the last three days. Just don't do it. Everyone waits until the last night and they all try to submit their applications at the same time. The UC servers go down, and you are SOL, without a submitted application by the deadline, and yes, those servers will go down.

You're Done! (not)
Congrats, you have now given the UC system a well-written and compelling reason to pick you to grace them with your presence. Bask in your glory, have a good thanksgiving dinner, annnd now get back to work. If you really want to get on the scholarship band wagon you need to get started the beginning of December. I was so done writing at this point that I didn't want to think about scholarships, and promptly didn't!
I only got one scholarship for $1000, while I could have gotten so much more, and the only reason I got that one was because it literally fell into my lap. Mrs. Hamilton came into my Gov AP class and handed me a Fremont High School folder with the scholarship application half filed out. It's FREE money people, don't pass that up. You won't be getting paid $500 an hour doing anything again for a very VERY long time, if ever.

Now You're Done!
Sit back and watch the acceptance letters and scholarship checks start rolling in in the mail. You earned it.

Monday, June 18, 2007

My Ubuntu Setup

Edit 7/23/07: Replaed the netkit-inetd with openbsd-inetd and fixed svn so it works now.

One of my big pastimes is to play around with Linux. This means I try out a lot of stuff, which often ends up breaking my install. This means I need to whip out the (FREE) install disc and wipe the hard drive and start all over again.
After doing this for the umty-odd time, I finally broke down and made a checklist of everything I do right after a fresh install. Granted this is all for my personal use, so whatever you don't want, skip over.
The one thing you'll need to do is know the basics of vim, which is a classic terminal text editor. Vim is very different than other text editors (The best known being notepad) in that it has different modes for entering text and editing the text. In insert mode you type normally like you would in notepad, and in command mode you would do things like you would with key chords in notepad (ie ctrl-c in notepad is y in vim)
To open a file, just type in a terminal vim /path/to/file. When you first open a file you will be in command mode. To switch to insert mode, press i. To save and quit press esc and then type :wq and press enter. That's all you really should need for the basic editing you're doing here.

Turn off IPv6:
IPv6 is the new system for computers to talk over the internet, unfortunately it really hasn't been implemented yet so it does you no good to have it turned on.
  • In /etc/modprobe.d/aliases change alias net-pf-10 ipv6 to alias net-pf-10 off #ipv6
  • Visit about:config in Firefox, type network.dns.disableIPv6 in the filter bar at the top and turn it to true. This make browsing the web usable again.
Turn on Boot Concurrency:
When your computer is first booting, it needs to run a lot of software right away. Normally what it does is load the first program, run it, load the second, run it, etc. But this isn't as good as loading programs as fast as possible and running them once they're loaded.
  • In /etc/init.d/rc change CONCURRENCY=none to CONCURRENCY=shell
Decrease Swappiness:
Swappiness determines how soon before Linux starts moving stuff from memory to the hard drive to make room for more stuff. Having this fairly high for a small amount of RAM makes sense because when you go to open a new program, you don't want to wait for Linux to swap out a bunch of files in RAM, you want it to have already swapped out a bunch of stuff you weren't using. The downside is that if you have a lot of RAM, (512MB+) it will swap stuff out sooner than it really needs to, and if that stuff it swapped out you really did need, it has to stop and swap it back in. Waste of time. I believe the default value for this is 60. Finding the best value is a bit of trial and error if you want to get it really good. I just use 10.
  • In /etc/sysctl.conf add vm.swappiness = 5
Installing Software:
Now for the first pass of installing software. First use the Symantec GUI to enable Universe and Multiverse. These are just third party software packages that Ubuntu can't guarantee are high quality. Run the following code:
sudo apt-get update
sudo apt-get install preload ssh firestarter mailx subversion openbsd-inetd mpg123
When it installs mailx it will ask what configuration you want, choose local only.
What it does:
  • apt-get update: updates the local database of what software is available to download and install. Ubuntu will usually auto-run this when you boot and check for patches for you. You only need to run this now because you just added two new databases.
  • apt-get install: This downloads and installs all the software packages listed after it.
  • preload: This program runs in the background and watches which programs and libraries you use. When the computer is idle it will take these logs and calculate which programs you're most likely to use next and caches them in memory to help them run faster once you do run them.
  • ssh: This is both the client and server for ssh, which is a remote terminal program that I use so I can work on my Linux box from my Vista laptop anywhere.
  • firestarter: Firestarter is a firewall mostly controlled from a GUI. Start it from System> Administration and make sure to open port 3690 TCP for whoever you want access to your svn server.
  • mailx: mailx is a mail system which is useful because some programs run automatically and will send you email through this to alert you if anything goes wrong.
  • subversion: SubVersion is a revision control system I use for all my programming projects. It's nice because it allows me to program on one computer, commit, switch to another computer, press update and be able to start from where I left off on the other computer.
  • netkit-inetd openbsd-inetd: inetd is the master internet daemon, which you configure to listen on whichever ports you want it to and it will respond to connections on that port by starting the server for it. I only use this with the subversion server. Edit: the openBSD inetd was ported to Linux and is better maintained than the netkit one.
  • mpg123: This is a very lightweight text-based mp3 player. The developers of it take great pride in being able to run it on a 100MHz desktop. Another plus about it is that I run it in a virtual terminal (Ctrl-Alt-F(1-6)) so if I need to restart the X Server (Ctrl-Alt-Backspace) my music keeps playing and I don't miss a beat. (FYI, to switch back to the GUI, press Ctrl-Alt-F7)
Upgrade Vim:
Vim is an extension of another text editor, vi, and normally will try and act like vi, which is great if you're used to vi, but vi was before my time so I've never used anything other than vim, thus I want all the added functionality:
touch ~/.vimrc

Install Hamachi:
Hamachi is a VPN program I use to virtually connect all of my computers plus some of my friends so we can always access the computer no matter where we are. I use it the most to access my SVN server and to log into my Linux box's SSH server.
wget http://files.hamachi.cc/linux/hamachi-0.9.9.9-6.tar.gz
tar -zxvf hamachi-0.9.9.9-6.tar.gz
sudo su
mkdir /usr/src/hamachi
mv hamachi-0.9.9.9-6 /usr/src/hamachi
cd /usr/src/hamachi/hamachi-0.9.9.9-6
make install
tunecfg
hamachi-init -c /etc/hamachi
At this point Hamachi will be installed and you can setup/join your network using these commands:
hamachi -c /etc/hamachi set-nick nickname
hamachi -c /etc/hamachi login
hamachi -c /etc/hamachi create network password
hamachi -c /etc/hamachi join network password
hamachi -c /etc/hamachi go-online network
hamachi -c /etc/hamachi list
hamachi -c /etc/hamachi go-offline my-net
And lastly you need to create a script so Hamachi will start every time you turn your computer on, which is nice, right?
vim /etc/init.d/hamachi-control
And paste the following script into it:

#!/bin/sh


hamachi_start() {
echo "Starting hamachi..."
/sbin/tuncfg
/usr/bin/hamachi -c /etc/hamachi start
}


hamachi_stop() {
echo "Stopping hamachi..."
killall tuncfg
/usr/bin/hamachi -c /etc/hamachi stop
}


hamachi_restart() {
hamachi_stop
sleep 1
hamachi_start
}


case "$1" in
'start')
hamachi_start
;;
'stop')
hamachi_stop
;;
'restart')
hamachi_restart
;;
*)
hamachi_start
esac
Edit 11/20/08: Apparently this script has problems starting Hamachi after a power failure.  I no longer use Hamachi on my network, so I can't confirm or deny any solution left in the comments.

Next, make it executable:
chmod a+x /etc/init.d/hamachi-control
And finally add it to the list of scrips to be run on startup and shutdown:
update-rc.d /etc/init.d/hamachi-control defaults
We're done being root for now, exit back to your normal user:
exit
Thanks to this post for most of this, BTW.

Setup Hamachi with Firestarter:
Now that we've installed Hamachi, we need to allow people to access this computer through it. First step is to configure our firewall to recognize it, then to allow access to the ports needed, which in my case is 22 for SSH and 3690 for SVN.
  • In /etc/firestarter/user-pre add:
    • $IPT -A INPUT -i ham0 -j ACCEPT
    • $IPT -A OUTPUT -o ham0 -j ACCEPT
      • Note: I use ham0, type ifconfig to double check that on your system.
  • Since Hamachi is my private network, I'm not very worried about it and allow all traffic on all ports. Add this rule to System > Administration > Firestarter > Policy > Allow connections from host in the GUI:
    • 5.0.0.0/255.0.0.0
  • In the bottom box add rules to allow anyone access to ports 22 and 3690 so I can log into this box from any computer over SSH and so anyone can checkout my svn repositories.

Profile the Boot Files in GRUB:
GRUB is the bootloader that first loads everything Linux needs to boot when you first press the power button. Now that we have most of the software setup, we can have GRUB make a list of where all these files are so it can load them faster on boot:
  • On the GRUB splash screen right after the BIOS, press ESC to get to the GRUB menu.
  • Use the arrows to select the Ubuntu kernel and press e to edit the options
  • Move down the the second line and press e again
  • move to the end of this line and add a space and profile
  • press enter, then b to boot the kernel with this extra option
FYI: This option is temporary and will only run this one time. Expect it to boot noticeably slower this time, but after this first time it will boot somewhat faster.

Setting up the SVN Server:
You really have two options here, either run the basic svn server which has no bells or whistles, but just runs and is easy to setup, or run it as an Apache module, which I have never gotten to work before... So I went the first route since it's one of only two services I'm running on this computer, no need for all of Apache.
  • Create a new user to be in charge of the svn repositories. I called my user svn. I gave it a totally random password because I'm never going to be logging in as this user.
  • Switch to this user using su:
    • sudo su - svn
  • In their home directory create a folder called repos to store all the repositories:
    • mkdir repos
  • Create a new repository in repos:
    • cd repos
    • svnadmin create NewRepo
  • Enable the password file
    • cd ~/repos/NewRepo/conf/
    • vim svnserve.conf
      • Uncommect (delete the #) before password-db = passwd
    • vim passwd
      • Add users to the repo in the form username = password
  • Add svn to inetd, so it will start when someone makes a request on port 3690
    • vim /etc/inetd.conf
    • Add this line to the end
      • svn stream tcp nowait svn /usr/bin/svnserve svnserve -i -r /home/svn/repos
    • What this does:
      • svn: defines the service, which is stored in a table in /etc/services, svn uses port 3690
      • stream tcp nowait: this service uses a tcp connection, compared to the simpler udp
      • svn: run this service as the svn user, which protects the rest of your computer
      • /usr/bin/svnserve: this is the program to run to service the client making a connection
      • svnserve -i -r /home/svn/repos: start svnserve, telling it that it's being called by the inetd (-i) and restrict it to the repos folder so it can not access the rest of your computer. (-r /home/svn/repos)
    • restart the inetd so this takes effect
      • /etc/init.d/openbsd-inetd restart
  • We're done, exit out back to your normal account
    • exit
Configure ddclient:
ddclient is a third-party script used to update your IP address for a dyndns account. I use this mainly so I can find my computer anywhere on the internet with the URL myscreenname.dyndns.org. Of everything, this is probably by far the most challenging to set up. First download ddclient from the internet and extract it:
wget http://downloads.sourceforge.net/ddclient/ddclient-3.7.2.tar.bz2
tar -xvvjf ddclient-3.7.2.tar.bz2
cd ddclient-3.7.2
sudo su
cp ddclient /usr/sbin/
mkdir /etc/ddclient
cp sample-etc_ddclient.conf /etc/ddclient/ddclient.conf
vim /etc/ddclient/ddclient.conf
And change your hostname, logins, and passwords. Also set your username for mail and turn off SSL, it doesn't work by default. Next add the script so this runs automatically.
cp sample-etc_rc.d_init.d_ddclient /etc/init.d/ddclient
update-rc.d /etc/init.d/ddclient defaults
At this point ddclient should be working, unfortunately it will constantly send you "CAUGHT SIGTERM" emails every time you turn off your computer. I really don't care about what happens to this script when I turn off my computer, so I commented out that line in the script.
vim /usr/sbin/ddclient
And find the line with sigterm and add a # at the beginning of it. Its line number should be somewhere in the 600s.


That pretty much does it. Once I have it setup I obviously add other software like the java compiler and some games, but all of the back-end software is here.

Saturday, June 16, 2007

Laptop Battery Care

First off, in case you didn't already know, rechargeable batteries will wear out. Thats why after 3 years your cell phone doesn't seem to last as long as it used to, and even worse with cordless phones that get used for decades. Over time the batteries inside these devices just can't hold as much of a charge.

So there's a myth/mentality floating around that the best way to extend the life of these batteries was to always make sure to discharge the battery all the way so it doesn't "forget" how much energy it can put out. At one point this was true, but not any more. Most new batteries (Lithium-ion) operate differently than when this was true. As you discharge new batteries, the farther you go, the more you damage it. So to get the best life you want to charge your phone/laptop/etc as often as possible.

The one hangup with this is that if the battery never gets discharged, the battery sensor never gets calibrated and will do the annoying thing of dropping to low battery and stay there for a long time. So to get the best of both worlds, when you get your new laptop, first thing you do is run it all the way down. Don't worry because once the battery gets low enough your computer will go into hibernate (usually, no guarantee) and you can just plug it in and get everything back that you were working on. After draining it this first time, you should be calibrated, so try and keep your batteries charged as much as possible from then on.

The last note on this subject is that if you're putting batteries into long-term storage, it's been found it's good to store them partially discharged. I'm blanking on the number right now but it's either 30% or 70%.

Thursday, June 14, 2007

Cheap Computers with Freedom

So today I was bored, per usual during the summer, so I finally broke down and went to go check out Weird Stuff with Fetter. Weird Stuff is a salvage electronics store, so you can't go there looking for anything specific, but we wanted to see what they had. We've been talking about checking the place out for a few weeks now, but never thought of it until after hours. It's right across the street from the dump so not really on our normal beat.

So we show up at 3:30 and browse around for an hour and play the Atari. It was a pretty cool store over-all. It wasn't anywhere near as bad as I feared it would be. One thing I was really hoping for was an old junker laptop good enough to check email, and not much else. Going camping this summer, I'm not thrilled about taking up my brand new laptop, or to go without email for 9 days. The one thing I did find there that was most tempting was the 10GB hard drives for $15. It's always nice to have an extra hard drive to swap out if I want to test some new OS.

The most interesting part, I thought, was that they had a whole pallet of counter top desktops with PIII and 256MB RAM for $50 each. That means for $65 I can set up a completely useful computer for word processing, email, web browsing, etc. (That is ignoring getting a monitor) This probably won't matter to anyone, but if someone really is desperate to get their own computer, I can hook you up. Granted it will be running Linux, but for $65, even that limitation is irrelevant. It really just means you can't run iTunes on it. (Probably couldn't run iTunes on a PIII anyways...)

On a related note, if anyone has a computer they want to get rid of, I'll take it. I've already gotten a few computers from places. If I deem them useful I'll use them. If not, I'll pick out what will be useful to me and take the rest of it down to the Smart Station. (Which is totally free, so it won't cost me anything)

Sunday, June 3, 2007

Pimped Out My 1kBWC Deck

So tonight after we played a game of 1kBWC at Coffee Society I decided that I was tired of trying to carry all these piles of index cards, so we went to Office Depot and picked out a box to keep it all in, another 500 index card pack (already burned through 60% of last one), and some more pens. The box was $10 and 20 pens were on sale for $2.50.

1000 Blank White Cards

1000 Blank White Cards (or 1kBWC for short) is a game of almost complete freedom with little to no point, goal, or rules. The point of the game is to just have fun and make an utter fool of yourself and your friends in public.

A good intro to the game mechanics is on Wikipedia here. The gist of the game is you start with blank halves of index cards and some from the previous game written on and anyone can fill in the blank cards as they draw them during the game. You then play the cards on each other and follow the instructions on the cards. There are many small variations on the rules so here is our specific rules:
  • Hands are 5 cards by default and players draw back up to the 5 at the end of their turn.
  • Points usually range +/- 100-1000 but is not a hard limit.
  • Players may play counter cards or cards with instant effects any time they want, but must wait until the end of their next turn to redraw to 5.
Our deck is fairly technology oriented with a few different theme sets that we've gone through at times. We save good cards as they phase out so later we can start skipping the pregame when everyone just makes 5 new cards because it's hard to just come up with 5 cards out of nowhere and is rather boring. Since each game is reseeded from the previous game, you collect all the leftovers and they form a huge pile, which you dream reaches 1000 at some point. Most of these collections are named so to distinguish ours it is called the Phire deck.

This is a great game to play with close friends. It's extremely cheap to pick up a $3 pack of 500 index cards, cut them in half, and then go to a coffee shop and play. We scan many of our better cards and upload them to flickr here. I can't recommend this game enough for groups of creative friends dynamic enough to be able to go out and make fools of yourselves.

Tuesday, May 8, 2007

Puz15

Intro:
This is a Java programming project for my Video Game Design class in high school. It is a simulation of those puzzles where you have 15 tiles numbered from 1 to 15 and you have to slide them around to get them all in order.
The challenging part is to have the computer solve the puzzle for you. I'm learning different approaches to this problem in the class. (Meanwhile the rest of the class learns what an array is, just to give you an idea of how badly out of place I am)

Approach Number 1: Dumb Brute Force
So the simplest way to solve any problem: try every single possible solution until one works. This means taking the original board and creating 2-4 new boards, each with one of the different possible moves (2 if the empty is in a corner, 4 if in the middle, etc)
At the time I thought how I handled this was very clever. Have a container object that holds three things: the board, the one move it took to get to that board, and a pointer to the container that holds the move before this one. (Java doesn't support pointers in their useful sense, but that's what they really are. shhhh!) It's a tree, except instead of the roots pointing out to the leafs, the leafs point inward, which makes getting the complete list of moves at the end real easy. Just unwind the linked list back to the original board!
Unfortunately I later realized that it wasn't such a hot idea. Brute force means the number of movecontainers will grow very very fast. (By move 20 we are WAY into the millions of moves) For the first time, I ran out of memory! A lot sooner than I expected as well... Turns out that the Java Virtual Machine (where you code runs) limits itself to a predefined amount of memory, which is all it uses. I remember resetting this in Windows XP at some point just for the fun of it, but this was Linux, so I couldn't figure out how to do it...
15 minutes of google-fu latter: To changed the amount of memory allocated to the JVM, pass it the parameter -Xmx256m (In this case to give it 256MB of memory) This was fine because I do all of my programming in the shell anyways, so the complete command is:
java -Xmx256m classname
classname in this case being puz15. So there's that problem fixed, now back to the program to figure out why it ate up 64MB so fast...
That clever linked tree of move lists for each node, means that all the movecontainers that I've looked at and decided they weren't the solution yet, are still referenced by their children. This means the useless boards (integer array[16]) never get unreferenced and are never garbage collected by the JVM. This is where programming object oriented really shone. There is one function that unwound the linked list to collect the move list. Everywhere that needed a move list just called this one function, so I changed it from unwinding a linked list and had it just store a local complete move list. The older boards drop out of reference, garbage collected, bam, more memory!

Approach Number 2: Smart Brute Force
So then for the next step. As the program stood at this point, every board spun off 2-4 child boards, which each spun off 2-4 children, etc etc. Great, but many of those moves are moving one tiles back and forth, each time spinning off new lineages of stupidity, all rechecking the same moves. So what we need is some way to check if a board has already been examined and its children created before we bother repeating our work.
This is where I should have learned how to use hash tables, but I really hate the thought of hashing something down because I know that when you simplify something you might simplify two things to the same simplification. I came up with a personally favorable way to do it which guaranteed zero collisions.
Really two ways, both the same principle. Each board consists of 0-15 in 16 positions. (0 is for the empty space) Hey, 0-15, that's one digit of hex... I can represent each tile as 0-9 a-f, create a 16 character string and I can represent the whole board in a way that's real easy to sort, store, and compare later!
The second way is more complicated and I didn't implement it for technical reasons: 0-15 requires 4 bits to store. (15 is 1111 in binary) So to store the entire board I need 4 x 16 bits. That's 64... long integers are 64 bits! I can take each tile, bit left shift it (multiply by 2) to it's position on the board and just add all of them. (If you didn't understand that, it's ok) So then I end up with one number completely describing the board. Single numbers are even easier to store, sort, and compare than strings! The problem is that Java doesn't support unsigned longs as far as I can tell, so I only get 63 bits plus a sign bit (saying if it's positive or negative)
So long story short: I implement this "board to hex string" function and now it's smart enough to not try and solve it by endlessly sliding one tile back and forth.
It's still pretty heavy though, and takes more than 900 trials to solve a 10 move board. (At the same time it rejected more than 1000 duplicate boards, and that's not even counting the children of those duplicate boards or their children, etc!)

Approach Number 3: Informed Search
This is where the computer really starts getting smart and is less of a really fast monkey on a keyboard. I just started implementing this today in class but the concept for it's pretty simple. So as the program slogs through this giant field of possible moves, it'd be great if there was some way to figure how close something looks to a solution without actually figuring it out. Then based on that score, work more on the paths that seem to be heading towards the castle more than away from it.
The way I am doing this is through an algorithm called the Manhattan Distance, which is pretty much the vertical + horizontal distance between two points. So to find the "score" of any one board, first total the Manhattan Distances for all 15 tiles, then add on to that the number of moves it took to get there (To see if there is a more efficient way to get to the current board) and there you have it, a distance score! Now where before the queue for boards to be processed used to be just a list where new boards were added to the end, now they can be sorted and prioritized based on promise.

I will keep you readers updated on how this goes as I work on it. I think this Wikipedia linking madness is a good call as far as helping some of our less technical readers. Enjoy!

Thursday, April 19, 2007

What is GNU/Linux?

This is a question I have been getting quite a bit lately and wanted to try and answer it here.

GNU/Linux is a free operating system. The most popular operating systems are Microsoft Windows and Apple's OSX, both with the major difference that they cost money. (Windows Vista will cost ~$190 - ~$400) GNU/Linux is just totally free.

The Name
GNU/Linux is really two different projects; GNU and Linux.

GNU:
GNU stands for GNU is Not Unix. (Pretty useless huh?) Long story short, GNU is a project to make software totally free for everyone. This is done by computer programmers simply volunteering their time and energy into whatever part of this (gigantic) project that they want. Every single one of them is doing it because they have some itch they want to scratch.

In theory it seems peachy, but in real life there's mean people who don't really care about the collective good of programmers and this is where the GNU GPL comes in. The GNU General Public License is a license that most of the software in the GNU project are licensed under which requires that they distribute the source code with their software, which then allows the user of the program to change it any way they want. The GPL also grants the end user the right to take their modified program and distribute it to others, with the requirement that it is also licensed under the GPL and that credit is given where it's due. Thus, viral freedom.

Example: I go to the GNU website [1] and find a really cool program that draws squares on the screen. Let us call it "SquareD." So I play with this program for awhile and think it's pretty fun, but would be that much cooler if it could draw circles too! So I go back to the GNU website and download the source code for SquareD and after spending my entire spring break working on it, get it to draw circles. So now that it works, I take all this source code (which is still licensed under the GPL) and post it on my blog and say "Hey guys, check out this awesome edit I did to SquareD!"
So now my friends and anyone else who wants to can come download my program (based on SquareD), which I decided to call ShapeD, and play around with it, and even add more features as they like, etc etc. This is where it gets cool. Mr. Dude-who-wrote-SquareD-in-the-first-place sees my blog post about ShapeD and is also very impressed with it's ability to draw circles. So he promptly downloads my source code, figured out what I changed from SquareD, and reapply it to SquareD. Now, SquareD can draw circles! I was able to add the needed feature I needed for my personal use, and once I made it, others were able to take it and apply it somewhere else where it was needed.

So in short GNU is a project to make an entire operating system out of software that is all free and open to change from anyone who wants to make the changes.

Linux:
The GNU project is great and making tons of progress all the time, but it's missing one critical part: a kernel. The kernel of an operating system is the engine of a car. It handles all the parts of the computer and gives the users software somewhere to run. The kernel for the GNU project was a little overambitious and is still in it's infancy, even after many years of development.

Que the entrance of Linus Torvalds [2], a 21 year old Finnish programmer, who just for the fun of it, wrote his own operating system. Unfortunately all the software you need for an operating system is a lot of work, so eventually he decided to license it under the GNU GPL so he could then draw on all of that software for his operating system. The first version of Linux was around 10,000 lines of code, and others were impressed with it. And since it was licensed under the GPL, others could also work on it and give back improvements to Linus. Thus through 15 years of work by thousands of programmers, the Linux kernel has grown to several million lines of code and a usable substitute for the unfinished GNU kernel.

So now what?
So now that we have a free operating system, where do we get it, and how do we use it?
This is where Distributions come into play. A Linux distribution, or distro for short, is the Linux kernel, a lot of GNU software, and anything else they want to add, all compiled into one system that we as users can download and install on our computers.

Each distro is different, be it in how it handles software or what it's designed to do. A distro can focus on being fast and efficient or on having absolutely amazing graphics, or just being a good general purpose computer.

Where to Start
So now comes the dilemma. There is literally hundreds upon hundreds of distros out there. Some maintained better than others, if even at all. Some cost money while most are free. Some don't even have a graphical interface and everything is run through the command prompt.

Personally, I have been using Ubuntu [3] for almost a year now, and as far as desktop distros are concerned, it really is one of the best. One of the problems about Linux that it fixes is that Linux doesn't hid anything from the user. If something goes wrong, it will give you a 1,000 line long error message telling you exactly what went wrong. Which would be great, but none of us stand a chance of understanding what that means... Ubuntu hides a lot of this and really has made giant strides toward making Linux a very friendly operating system to use.

In Conclusion
So I've been using Linux as my secondary system for around a year, and really started doing some serious work on it around two months ago. Fortunately you don't need to sacrifice your current operating system to just try it out once. Ubuntu offers an ability where you put the CD in your computer, reboot, it boots off the CD, and you can interact with the operating system exactly as it will be if you install it, without it touching your hard drive at all. The whole process of downloading a CD and burning it get a little complicated, so if anyone would like to try it out, just let me know and I'll be able to hook you up with a CD to try out on your computer.

1. http://www.gnu.org/
2. http://en.wikipedia.org/wiki/Linus_Torvalds
3. http://www.ubuntu.com/

Tuesday, March 27, 2007

HTTP Downloads (more batch goodness)

After downloading so many GNU/Linux distro CDs, you cross a point when you just fall in love with your BitTorrent client and everything it is. I enjoy little more than being able to just ignore whatever files I'm trying to download and then come back a week later, "Oh, look at that, finished." That's one of the great things about P2P downloading.

Unfortunately not everyone has caught up with the times. Every once in a while you find the website that has a great file you just have to have, but they only offer plain old vanilla HTTP downloads. (Those are the type that you click on the link and your web browser asks you "Where do you want to save this?")

That's great and all, unless you won't be there when it's finished. Then you're crossed with the dilemma of downloading the file and leaving your computer on over-night or all weekend or however long you'll be gone. I'm one of those people that greatly frown upon the wastefulness of leaving your computer on all the time, and thus always wanted some kind of solution for it. Time to break out the batch script.

Step 1. Collect the needed tools.
This is a pretty simple script, only using two commands: shutdown and wget. shutdown is a system .exe and should already be in C:\Windows\System32\shutdown.exe
wget is where it gets a little bit harder. It was originally a *nix tool which has been ported over to Windows. wget website [1] Download the windows binary and add it to your path. (The simplest, yet not cleanest, is to just copy-paste wget.exe into C:\Windows\System32\, I'll get into doing this better later)

Step 2. Write the script.
Pretty simple script. Just find the URL for the file you want to save and open up notepad or whatever text editor you want to use.
wget yourURLhere
shutdown -s

Then save it as "downloader.bat" In notepad you'll need to use the quotes so it doesn't save it as downloader.bat.txt. And there you have it.

Step 3. Run
Once you've saved it, save-close out of everything like you're about to shutdown, double-click the downloader.bat script, and walk away. It will download until it's done and then shutdown your computer. Pretty neat!


[1] http://www.gnu.org/software/wget/

Saturday, February 24, 2007

Notepad .LOG File

So I was flipping through the "LifeHacker" book today by Gina Trapani, which was an interesting read, when I happened upon one of those neat little hacks you pick up after living on the computer as long as I do.

A neat little hidden logging feature in Notepad where you create a new .txt file and enter .LOG as the first line. Save the file and open it again in Notepad: low and behold it has added the time, date, and a carriage return for your logging goodness.

I can see myself using this quite for random event logging, or at least something more useful than this demo file:

.LOG
11:58 PM 2/23/2007
This feature is pretty cool
12:04 AM 2/24/2007
It's still cool, really...
12:07 AM 2/24/2007
Oh yeah, one more thing: this is still cool!

Sunday, January 28, 2007

Jack and the Candlestick


Jack be nimble,
Jack be quick,
Jack couldn't even get over a freakin candlestick...

Saturday, January 27, 2007

Backup Batch Script

This project spawned mainly from some of the posts on the LifeHacker blog about using rsync in cygwin to backup your files on your computers to each other. Unfortunately I never managed to get rsync to work and thought that SSH over one 100Mbps wired switch was a little overkill. Thus I sifted through all the comments on the LifeHacker posts (which are well worth the sifting) and discovered that one of Microsoft's own powertoys for Windows XP is a synchronizer program with a good set of options and, even better, a basic command line interface.
Command line interfaces are pretty cool. Open up a command prompt, (Start > run: "cmd") and be able to interact with a program only using text. They get even cooler when you save a whole list of said commands in a .bat file, otherwise called a batch file. I am a huge fan of batch files. Once you know how to write them, they can make your life easier in a few small ways.

The first useful batch file I wrote was called "startup.bat" and all it did was start up all the programs I wanted running when I turned on my computer. Normally this is done by just putting shortcuts to the programs in your startup folder (C:\Documents and Settings\UserName\Start Menu\Programs\Startup) but my problem is that I don't want these programs to start every time I log on, only most of the time. It was a huge pain to have to wait for every program to load, just so I can close it again.
This batch file is pretty simple, just one command repeated for every program you want to have running. This wonderful command is START. Example:
START /D"C:\Program Files\Gaim\" gaim.exe
START /D"C:\Directory\of\program\you\want\running\" nameofprogram.exe
Pretty cool! Just repeat that 6 or 7 times and you can open your chat client(s), web browser, email client, podcast reader, and anything else you want with just one double click.

So back to Backup.bat. Microsoft's SyncToy is really designed for moving files between your cell phone and camera and your computer, but you can really give it any folder name, including one on another computer. For this example let us just use my two main computers, "KWF" and "KWF2" So the trick is that for the SyncToy you give it a folder name that is a shared folder on the other computer. i.e. \\KWF\Backup\

Now for how to backup "My Documents" to \\KWF\Backup\ from KWF2. First set up a job in SyncToy to echo your "My Documents" folder to \\KWF\Backup\ and name the job "My Documents"

START /D"C:\Documents and Settings\UserName\Local Settings\Application Data\SyncToy\" SyncToy.exe -R"My Documents"

That's it. That will work, but the concept is that you come up with a more elegant solution to it then that. My idea was to have it check to make sure the other computer is turned on first before it tries to run the job.

IF EXIST \\kwf\kennethbakup\ (
START /D"C:\Documents and Settings\UserName\Local Settings\Application Data\SyncToy\" SyncToy.exe -R"My Documents"
)

This also means I can set up many different jobs with different names to back up all of my external storage devices and mirror files to different computers as they become avaliable, etc etc.

That's it. The trick is to set this to run with the AT command every so often so you don't even have to think about it. I think I'll leave using the AT command as a challenge to the reader. It's real easy to find tons of info on it from Google.

One still needs to face the fact that this is not the solution to backing up your data. This is only local and protects you from hardware failure. If your house burns down, you loose both computers and it all counts for nothing anyways. Make sure you keep offsite backups of the real important files somewhere secure.