Currently if I work from home I have two options: remote desktop into my work machine and code from there, or work locally at home after syncing up my code. The problem with remoting into work is it's extremely slow and I can't use your full screen. The problem with working locally is when I'm going back to the office and my code isn't finished, it's difficult to sync the half finished code.
So I have installed Ubuntu Linux onto a thumb drive and will use that as my 'work' machine, and tote it back and forth to work. Now I can have my half finished work on the drive and either work from home or in the office.
Here are the steps I took:
Whenever I call customer service I hate having to deal with "press 8 to...." or whatever. I'd rather just talk to a person. Here is a cheat sheet that you can use to get to a human on the phone quickly.
I was waiting for a compile to finish (like my excuse?) and came across this article/blog entry about geek tv. It's about online distribution and consumption of TV content. Very interesting stuff.
Here is my one idea for the week:
The iPod needs to support record scratching when you're listening to music.
How badass would that be? Like Run-DMC badass.
Since getting my new phone that came with a so-so camera, I've been trying to figure out what to do with the camera. I decided to be like everyone else and make a moblog and post pictures as I take them.
Flickr.com has a nice site that allows you to upload pictures by phone (among other ways) and provides nifty utilities to organize your pictures. There is even a set of tools that allow you to retrieve your flickr pictures programatically and put them into your normal blog - like this one. I'll have to do that later.
Until then, my pictures are going here
My new phone takes pictures and sends them to other phones or email addresses. Each shot is $.25, which is kinda a rip, but what can you do? Here's my first picture looking out from my office/cube at work.

I just got a gmail invitation from a friend, so now I'm a proud owner of hippos (.) are (.) evil (@) gmail (.) com. If you'd like your very own gmail account, they're giving them away on this site: isnoop.net. They don't always have invitations, but if you keep reloading the website and see they have invitations, quickly enter your current email address and you'll get one of them.
If you ever get tired of having to create a profile to log into a website for it's content (a la nytimes.com), check out bugmenot.com. You just enter the website URL that you're needing a profile for and most likely there already exists a login and a password. Or if you create a profile and want to share, that's good too.
I came across this site that has a cool animation that shows the most commonly used words in English. Now you can say that "mandate" is the 37377th most used word in English.
The Cassini probe just reached Saturn this week, and along with sensors and along with the Huygens probe a DVD of signatures was sent. Why is this cool? Cos my signature is on that puppy! I'm one of 600,000+! (And my forged signature of my buddy Sara's too.)
For a long time I've thought of RSS feeds as being pretty useless for me. Then I realized I was spending a fair amount of time checking different websites to see if they've changed. Well, this is where RSS comes in.
Some blogging software will produce a RSS xml file that gives a summary of what is on the website or webpage. My blogging software, for instance, puts a link on the top right side of my blog that reads XML. The link brings up an XML file that summarizes the last 15 or so entries.
Other websites, like slashdot and wired have RSS feeds that you can check (don't check /. more often than every 30 minutes, they end up blocking your IP address.)
So instead of manually checking your favorite websites, you can let your RSS aggregator do it for you. I wasn't able to find any decent ones until I upgraded my Opera browser that has a built in "Newsfeeds" reader. All I do is find someones RSS link, click on it and then my browser will automatically import the RSS xml and then monitor that link every X number of minutes.
I came across a free web based RSS feed reader today, bloglines. It works well, you type in the URL of RSS feed and it will monitor the feed for you. Plus you can access your feeds from anywhere and you're not tied down to a client sitting on a certain machine.
I really think it's nifty that you can have some program do your website checking for you. It could really free up a lot of time if you have tons of sites to visit to see new things.
How cool is this? A can that when you twist a bottom knob will cool the drink for you.
One of my projects at work is a data server that uses SOAP as its communication protocol. A year ago I tried, unsuccessfully, to make the server multi-threaded. This was a bust because in C++ the support libraries are not thread-safe. So I spent over 3 months trying to fix this and got no where.
A co-worker stumbled upon STLport, a thread-safe STL implementation. It was supposed to be faster than the normal STL, and in our micro-benchmarking, it was.
I re-enabled the server to be multi-threaded with the snazzy STLport and expected the program to scale better, that is to say, handle more concurrent clients without performance degredation. And it sucked. We actually had a slower performing program. 2 weeks later we realized that STLport was in fact two times as slow as the normal STL when it was run in a threaded environment. Super. The threads helped the scalability a bit, but couldn't over come the slow STL.
Another option was to use a Apache module and have the server plug into an Apache process. I spent about 3 days working on that before I realized it wasn't going to be smooth because the support wasn't really there.
I decided to take the Apache process model and apply it to my server. Old school programmers would normally do a fork()/exec() for each incoming request, letting the child process handle the request. This isn't so great because it's expensive to spawn a new process for each small request. So instead, I used a different model of just spawning multiple processes at the beginning that all listen on the same port.
When it came to testing this out, we saw a whopping gain of 18% when using multiple clients. Why so slow? HP-UX is my reason. The CPU is maxed out with one process and we max out both CPUs when multiple processes are running. This should gain you about 80% (a guess, really) performance gain owing to the increased CPU time. But HP strikes again and you only see a 18% gain. There must be another bottleneck, like the memory, disk or bus. Really lame.
It's kinda funny to spend over 4 months on a project to see a net result of 18% for all of your work. I keep telling anyone who listens that we need to ditch HP and get some Linux boxes. I get nods of the head, but I guess we're not in a position to come and use present day technology.
This weekend my little blog got hit by a spammer from a casino. They put little comments on each of my pages about blackjack and the like. I came across MT Blacklist, which is a Movabletype plugin that allows you to blacklist certain spammers from your blog, and to delete those comments. I had over 120, so it was nice to have a utility to do it for me.
Yesterday I was working on some code and did a cvs merge and lost some of my code during a conflict. So I used a Java decompiler to get the source code for my last build.
It had all of the code that I had lost so I could just copy the correct code back over. What was interesting was the type of optimizations the compiler made. It was either the compiler or the decompiler misreading the bytecode (I figure it's the compiler.)
My original code had a while loop like this:
while (iter.hasNext())
{
SummaryObject obj = (SummaryObject) iter.next();
SummaryObject newObj = obj.newInstance();
newObj.setGroup(currGroup);
newSummaryObjs.add(newObj);
}
While the decompiled code was:
SummaryObject newObj;
for(; iter.hasNext(); newSummaryObjs.add(newObj))
{
SummaryObject obj = (SummaryObject)iter.next();
newObj = obj.newInstance();
newObj.setGroup(currGroup);
}
It looked like all while loops were turned into for loops. Interesting to see how the compiler would optimize things.
So I ran Outlook Express earlier in the week to try and figure out some SMTP settings for an account I'm using. I hadn't used it before and once I was done I wanted to get rid of it. Lo and behold, you can't directly uninstall it. After 2 hours using search engines, I find out which dlls to remove and what registry keys to delete. I still can't delete the folder that Outlook is in, but that's ok. Every time I'd delete the program, Windows would put the program back. WTF?
Eventually everything was settled, except for the login screen, which was telling me how many emails I had unread. I came across this post that shows how to get rid of that dumb reminder.
It's enough to make you switch to Macs.
While checking around at java.com to see what's new, I saw a link for this page passur. From their page you can view certain airports in quasi-realtime, watching as planes take off or land (it's delayed 10 minutes for security.) You can look at different ranges, from 4 miles to 90 miles, and see all the airplanes in the area, their height and type of aircraft. They even have a "replay" button that shows past days worth of flights.
This weekend I finally got my online book place (samazon, get it?) working on the internet. I was using digital space for my java hosting, but mycgiserver finally came through with WAR deployment, so I'm trying them out. It works pretty well, until this morning when the main server was down, which makes me wonder about the stability - but it's free.
In any case, here is the webpage. I don't have many books or authors up yet, it takes time to scan in pictures and such.
I'm finally starting the coding of a web application for work, that'll sooner rather than later be put up on the Internet. We're doing unit testing with jUnit and the set up isn't too bad. What's nice is using Ant as the build tool. It will find the test cases you create and automatically run them. So after the initial set up, you just add a new unit test and it gets run on your next build. Much better than the C++ way, where you have to manually add the test cases.
I saw this article [msnbc.com] while geeking around on slashdot.org about Video on Demand through Disney and a company dotcast.
When I was at intel I worked in a group doing video on demand like this. Except that was over 4 years ago and if the Intel service went through they would have gotten videos at the same time as Blockbuster (curse them), Hollywood and others. Where this Disney thing doesn't get videos in the same window as video stores and only allows you to have the movie for 24 hours, which I think will hurt the project.
It's annoying to see that something I've worked on that was superior to this not get OKed and pushed through. I think that the project I was on missed the boat because the boat hadn't been docked yet and we just hopped into the river and got wet.
It's too bad really, a DVD quality (which Disney is not supplying) movie that you can watch anytime over 5-7 days (like a normal rental) would be great. Allow the user to burn a DVD on the set top box for an additional charge and you have a good deal. Put it all together with a system like myth tv or tivo and you'd have a great product.
I think it's only a matter of time for this type of product to be used by lots of people. I for one hate returning videos after I've rented them. People in the US spend over $1 billion on late fees, which is insane.
Earlier this year I had installed note taking software at work. It was axed for security reasons, so I created my own that I run through a servlet enabled web server.
I dont' have too much in the way of notes, but I'm hoping it'll end up being useful. Go have a look see!
There is a test account (user: test / password: test) I apologize if it crashes on anyone.
Wow,
My website made it onto the search engines (google, alltheweb, yahoo) finally. It's an exciting day!
Last week I got deluged with tons of virus emails, along with everyone else I suppose. Tonight I got the Blaster Worm on my system. Windows would notify me that it had an RPC error and was rebooting, and my machine would randomly reboot. I spent an hour or two getting patches and cleaners. Quite a pain on a 28.8Kbps connection.
Last night I got the iPod to finally work on my home computer. I spent about 45 min uploading songs and no crashes (knock on wood.) I put on my Ani Difranco concerts which have been sitting on my old hard drive in the closet for a few years. There are 2223 songs on the drive, which is pretty cool.
Too bad there isn't an interface that I could use to copy my camera pictures to the iPod on the road. Then I'd have a huge amount of headroom for taking pictures and movies.
I just spent the last two days working on a utility that turns out to be worthless. Some of our code was allocating a block of memory and deleting it soon after. Since the code was going to be called multiple times I figured that it'd be smart to reuse a buffer.
I did some tests of reusing a buffer vs. malloc/new. Reusing the buffer was an order of magnitude faster. Great. So I spent a few days creating a factory that would reuse arbitrary lengthed buffers.
I ran some tests today and it was dog slow compared to malloc/new. I am pretty sure the overhead of the factory and the function calls are too much and can't compete.
I'm sure other people already knew this, but I had to waste work time figuring it out. It sucks because I had touted this factory idea as a huge speed up - like 10x - and it wasn't.
Last night while uploading music to my iPod the little bugger crapped out on me. It put up the folder icon (unhappy iPod) and refused to turn on. I got it to work in disk mode but that doesn't help when I want to use the thing. In addition, it wouldn't take a charge so it was dying before I could play with it.
So this morning I took it to work and got it to charge in disk mode. I called the store where I got it and they said it's under the 30 day return so I could just return it. He suggested I call their support They have a cool voice recognition setup when you call and it doesn't sound like a computer.
The apple guy said I could try to restore it. My restore program at home doesn't recognize the iPod so I figured I was SOL. I downloaded it fresh from the net and ran it on my work computer (shame shame.) And now it works fine. I'm hoping that when I get home I can use the new program and things will be allright. I had over 10 gig of music on it that I have to reload tonight.
On Saturday I bought the new 30gb iPod I was very excited since my last mp3 player went kaput.
Saturday night I plugged it into my dell laptop and followed the directions. I was up until 2am trying to get the iPod to be recognized by Windows. I ended up downloading ephpod to use instead of music match (which is terrible.)
I went to bed at 2am, angry that I couldn't get this simple thing to work. In the morning I ignored the direction and what I'd read on the newsgroups and formatted the iPod with Windows Explorer. Then I used ephpod to create directories and could then start copying music over.
I bet that the iPod works seamlessly with Apples, but with Windows it sucked. None of the software that came with the iPod worked and I had to use some 3rd party programs. It's okay now, but what a hassle.
I have decided to go ahead and buy the iPod from apple. I was thinking of waiting until the Visa goes down a little more, but with Tina and me going on a long bike ride next weekend, I want it now. :)
I was thinking of getting a different mp3 player that also plays ogg files, as they sound better. But the iPod seems to be better than any other player out there. And they have a normal battery pack so I don't have to worry about recharging all the time.
I was installing software on another computer today and was getting tired of the 800x600 resolution. So I updated the resolution to 1280x720 and hit ok without testing the resolution.
Turns out that the monitor didn't support the frequency I was using and gave me a black screen stating such. Since I don't have the keystrokes memorized to change the resolution back, I had to turn off the box and march it to my computer and attatch it to my monitor. After resetting everything on my bigger screen I got back to what I was doing.
So don't just hit ok, use the test button instead.
signal(SIGPIPE, my_handler);
....
void my_handler(int x)
{
cout << "howdy: " << x << endl;
}
And I would get the howdy: 13 notice after the client exited. And when the client would restart and exit again, the server would go down.
I think it's silly that you have to tell the system that you want to catch the same signal again. Now my handler looks like this:
void my_handler(int x)
{
signal(SIGPIPE, my_handler);
return;
}
I was checking out servlets.com to see what new stuff was coming up. He put up a link about Mailinator. It's main use is for websites that ask for an email address for registration, and you usually have to check that email once or so to get the registration info. It's similar to spamgourmet.com but easier to use and has a nicer website.
So instead of setting up an account with hotmail, myway.com or yahoo.com, you make up a name like fancypants@mailinator.com and use that. Then you go to mailinator.com and check your email. And you don't have to worry about that email address getting hit by tons of spam.
Their FAQ is pretty good.
For about a year now I've been wanting to create an online book list of the books I own. I was going to create a WML version of it so I could see what books I had by using my phone when I was at book stores.
But I've been lazy and slow and have only just begun creating it. And I find this site [iblist] online. They have over 10,000 titles and are probably going to be the book equivilant of imdb . It's a nifty interface and has everything that I was/am going to do.
Mine will end up having quite a few less books than 10,000, but hopefully will still be nifty.
I just made a favicon for my website (My icon is of Mt. Hood). A favicon is the little icon your browser puts up for each webpage. It's the one good thing from Micro$oft has done. :)
Not all websites have them and not all browsers support it. Internet Explorer seems to ignore icons from websites and put it's own icon instead. Opera and Mozilla support the icon.
I'm using the Irfanview utility to create icons. It's pretty slick and is easy to use.
In Java there is a component model called Java Bean that is used all over the place. They are used in GUIs and in template languages (webmacro and Jakarta Velocity). I'm using the bean model for web applications and web services.
The major features I use are the get and set methods that access properties of an object. For instance, take a Circle object that has the following properties:
To make the class a Java Bean, you'd need to have something similar to this:
class Color
{
String m_color;
int m_radius;
public Color() {}
String getColor() { return m_color; }
void setColor(String color) { m_color = color; }
int getRadius() { return m_radius; }
void setRadius(int radius) { m_radius = radius; }
}
This can get tedious very quickly especially when you have a large number of properties you want to set & get. And if you're doing commenting, it's a real hassle.
So I wrote this quick and dirty Java program that takes a file with the list of variables and their types and names. It then creates a commented class that has all the appropriate get/set methods.
I updated my work page (not really saying anything too new.) I put up a copy of my junkIt delete utility. I've found it useful to use at work on our HP-UX machines or on my Dell box running cygwin.
Yesterday I decided to try out a different music encoding - ogg. It's an open source encoding that's supposed to have higher quality than mp3 (at similar bitrates.) I know that Microsoft's media has a good encoding, but I can't bring myself to use their products unless I have to.
So I encoded some music with their OggDrop program and played it on a few players: XMPlay and FMOD The sound seems to be better but I'll have to a real test to check it out.
There is a portable player that supports ogg files. But it's ugly and only has USB 1.1. Though it does have some nifty features, like playing over the FM radio or sharing music and recording. It'd be nice if the iPod would play ogg files.
I just got a new web account, over at digitalspace.net, to host my little Java Servlet projects. A website with it's own IP address, shell, Servlets, and mySql database is only $3 a month. Not too bad. I was using mycgiserver.com but their connection is pretty slow and the deployment is a little bit non-standard.
The new site only reloads it's Tomcat Server every morning, which makes it hard to develop servlets (as a new program won't get loaded.) So I did some research and it turns out you can create your own ClassLoader in Java.
I'm creating some facade Servlet classes that will load the real class for each request. This way when I recompile my classes, they'll be loaded by the server and the webpages will be updated.
pretty slick