Putty Tray

I've switched from using the basic Putty to using a customized version called Putty Tray. Why? Because Putty Tray allows me to click on URLs! This is extremely useful while using naim, the console based Linux messaging client I use in conjunction with Bitlbee (I use Bitlbee to communicate on GoogleTalk through IRC).

Finally, no more selecting, clicking, and then pasting URLs into a new Firefox tab!

Unsure

I've never been more unsure about what I want out of life than I do right now.

Perhaps the feeling arose from observing so many others who appear to have a plan, or who fully enjoy what they're doing with their life.

Thea & Meera's Wedding

My sister Meera was married today, to Thea Bou. It was a long day, with three different traditional weddings all rolled into one: A Vedic wedding, a Khmer wedding, and the standard American wedding. It started to rain just as we were ready to do the American wedding outside, however a delay with the Justice of Peace caused the timing for the wedding to be perfect and rain free.

Meera and Thea hired a professional photographer, however Meera asked me to take some photos too. Some of them came out really nice, however a lot of them were either taken from the wrong angle or through the glass divider (which created either a glare or white haze on the pictures). I was unable to take any photos of the American part of the wedding so I'll be sure to post the professional photographer's pictures as soon as I have them. The reception is tomorrow evening and I'll be taking pictures there as well. I'll post those either tomorrow night or Sunday morning.

I'd like to take this opportunity to extend my congratulations to my sister and my brother-in-law and wish them a long, happy marriage. 🙂

Listed 1998 Audi A4 for Sale

Almost exactly 6 months ago, I purchased a 1998 Audi A4 from my friend Tom. The main reason I purchased it was because I needed a vehicle I could use to drive between Cambridge and Lowell without wasting too much gas (my truck gets about 12mpg, vs 19mpg on the Audi) and I didn't want to wear down my truck anymore than was necessary (already has 150k miles and has a transmission that is barely hanging on). Plus, I couldn't pass up the $3500 price tag.

Over the past few months I've had to put at least $2000 worth of work into it, however now the car runs great. But a great running car isn't worth keeping when you don't have the money to afford the insurance and when you're trying to get rid of all unnecessary expenses. So I've decided to list the car for sale on CraigsList. It's a bit ironic how the pictures I used to post on this blog when I bought the car are the same pictures I'm using to sell it.

Do not fear detachment! 🙂

My Firefox Tweaks

Ever since I started using Firefox I've been discovering new and awesome ways it can be tweaked. It started with speeding up Firefox and has progressed into everything from where my tabs are placed to how selecting text happens (see the layout.word_select options below).

Below is a list of all the options I have added/modified using the about:config function of Firefox (simply type about:config in the address bar). I have decided to save space and time by opting out of writing descriptions for each option. I've linked each option to it's respective page on MozillaZine. If you'd like a more layman explanation of each option, you can search Google or check out this article. If an option doesn't exist, create it.

Value		Preference Name
---------------------------------------------------------
0		nglayout.initialpaint.delay
1000000		content.notify.interval	
true		content.notify.ontimer
true		content.interrupt.parsing
2000000		content.max.tokenizing.time
3000000		content.switch.threshold
false		layout.word_select.eat_space_to_next_word
false		layout.word_select.stop_at_punctuation
32		network.http.max-connections
8		network.http.max-connections-per-server
8		network.http.max-persistent-connections-per-server
0		network.http.request.max-start-delay
true		network.http.pipelining
30		network.http.pipelining.maxrequests
false		browser.cache.memory.enable*
0		browser.sessionhistory.max_total_viewers
true		config.trim_on_minimize

I will add tweaks to this list as I discover them, mainly as a reference for myself. Some of the options require other options to be enabled, so if you're not going to use all of the tweaks listed here, make sure you do your research before complaining that its not working.

*UPDATE: See my post here about browser.cache.memory.enable. The short version: don't use it!

Adblock Firefox Extension (and Blocking SourceForge.net Ad's)

They finally got to me, the ad's did. I was viewing my SourceForge.net account and realized just how annoying all the ad's were. So I dug a little (didn't have to dig very far) and found an easy solution to block Google ad's, as well as other ad's, using the Adblock Firefox Extension. However, the solution explaining how to block Google text ad's didn't work for blocking SourceForge.net Google ad's. I had to add these additional sites to the Adblock list:

https://genweb.ostg.com/google/ads/*
https://google-ssl-2.ostg.com/pagead/*

Of course, I can't even see my own Google ad's now that I'm using the extension, but it's easy enough to enable/disable. While I'm talking about ad's, I might as well mention that since I added Google AdSense ad's to my blog two months ago, I've made a whopping $1.29! It's not much, but its more than I would have made if I didn't add them. 🙂 There is still an amazing amount of traffic coming in to my basement project page from people doing searches on Google for "dig out basement". My post is 10th in the search result.

Less is More

I spent Saturday and Sunday working at my parents house, doing yard work and helping my dad tile the front porch. The weather was beautiful and it was so nice spending time outside for a change. I've always loved the outdoors however my current occupation does not allow for much outdoor activity. As a "computer guy", all of my work is done inside. Electronics and nature simply don't mix. Sure, I can use my laptop outside (which is where I'm writing this post right now) but the reality of it is, I cannot run my whole career sitting outside on my laptop. But, some people do.

I've heard stories of computer programmers who make a living accepting contract work over the Internet. They'll sit on a beach somewhere, with their laptop, programming and sipping fruity drinks. Then there are those who make a living running an online business that doesn't require anything except their laptop and a few hours of their time.

But maybe it has nothing to do with using my computer outside. Maybe I'm just sick of using computers themselves. Maybe I've been using them my entire life and have just come to accept that since it's what I know best, its what I'm meant to do. If that were so, why do I feel so undecided? Why am I not sure of what I want to do? That is so unlike me.

I'm a person of assurance. I don't do things because I think it's what I'm supposed to do, I do them because I know they're what I'm supposed to do. I understand that no one person can be sure of everything and that life is full of surprises and unexpected events. We must go with the flow. Never the less, when I feel myself losing control over something, I tend to hesitate and question myself -- question whether I'm doing the right thing. This is not a position I enjoy being in and it makes concentrating on anything difficult.

So every time I gain a new insight, I reanalyze my life. I do a systems check to make sure everything I'm doing still makes sense. I check to make sure what I'm doing is still in line with my goals. But how can I do this if I'm expecting and depending on the results of this and that? I have always followed the motto "if you want something done right, do it yourself" and I live my life that way. Life will always contain the unexpected. In life, as in programming, more variables equal an increased possibility for the loss of control.

My solution to this is to live life expecting nothing. Without expectation there will be no disappointment. Attachment creates waste and drains life. Ownership creates unnecessary work. Expect less. Own less. Attach to less. My Dad has always said "Less is more". I've never understood this more fully than I do now.

MIT HawkCam

My friend Sarith linked me to a really cool webcam at MIT called HawkCam. It's a live webcam pointed at the nest of two hawks on the MIT campus, less than 1/2 a mile from where I work. Yesterday I saw two dead mice in their nest, and later on in the day I saw them being eaten. Today, one hawk is shading the younger hawk from the sun while it rests.

Google Calendar in Thunderbird

I came across a really cool solution for viewing your Google Calendar from within Mozilla Thunderbird. I've been using Thunderbird for a few years now, for both personal email and work email. I thoroughly enjoy it over any other solution, however I've recently decided to put the time and effort into setting up and learning Mutt, a very old and popular text based email client that is endlessly configurable.

Never the less, the Provider plugin which makes it possible to view your Google Calendar from within Thunderbird also works with Sunbird, Mozilla's open-source calendar application. I remember trying Sunbird a few years ago when it was in alpha stages and it was really rough around the edges. It has since improved dramatically so I'll probably end up using it one way or another, even after I switch email clients.

Now if only Mr. Oldervoll would fix a couple of the bugs in GCalSync, I'd be able to sync my Google Calendar with my Blackberry worry-free and have an all-in-one solution!

Finding the Synergy Between Control and Chaos

For Thea's (my future brother-in-law) bachelor party, we went to F1 in Boston. F1 is an indoor, high-powered go-cart track. Two tracks actually, but we only raced on one (track 2). The track allows for 10 racers at a time. There were 15 of us, so we raced in two groups. There were two initial races, and the top ten with the best lap times raced in a final championship round. We were told we would have four races, with the fourth race being the championship race, so at least some of us felt cheated out of a possible win.

It was an incredible experience. I've always understood how professional racers constantly search for the balance between losing control and pushing the machine to its limit. If you're afraid to lose control, then you'll never find where that limit is and therefore never be as good as you could be. This fact holds true in many aspects of life as well. But passing the limit is one thing, you must also find a synergy between control and chaos. I grasped hold of that synergy several times tonight.

Life is fragile. We live on the edge every day without even knowing it. It's only when we get really close to losing control that we realize how out of control something can become; when we just barely avoid a car accident or feel the pit in our stomach as we almost fall off a ladder.

This is an interesting realization for me, in that I've never understood why I do well in certain things and yet with others I feel something inside myself holding back. For example, I compared my racing at F1 with the Mazda Rev-It-Up racing a few years ago, in which we raced actual full size Mazda6 cars. There was no speed limit, you wouldn't have to pay for the car if you flipped it over and the most that could happen to you if you knock over a cone, or even drive entirely out of the course area, is that you'd be penalized or not allowed to compete in the final round. Why then, should I hold back? I shouldn't have, but I did. I held back because I knew with enough speed and just the right turning, it was possible to flip the car. Was it instinct? Was it an intelligent risk assessment? Or was I just being chicken shit?

During the F1 racing, I knew the limits, the maximum speed, the track, and I knew I couldn't flip over. So I pushed the limits, over and over. Tires screeching, I drifted around the corners at maximum speed, spinning out only once in 55 laps. I averaged the best lap time out of everyone during the first two races, so my cart started in first place during the last round. Life must have been teaching me to be humble because in 55 laps the one time I spun out happened to be during the championship round. It cost me the round entirely (I ended with 7th place).

This realization also made me understand why I enjoy change and why, as monotonous as it can become, I enjoy driving. It's mental challenge I crave, visual and physical stimulation to challenge my senses. When I'm driving, I know at any moment an accident could happen. This causes me to be alert and take driving very seriously. I cannot settle into a little rut and enjoy it. I'm not satisfied when something is complete or when everyone else wants to sit back and admire their work. Movement. That's what I crave. Whether physical or mental, movement is vital to our growth as a human race.

Music. If you actually listen to and analyze every beat in your head, you begin to create a mental work of art, which, for me at least, seems to instantly transform into emotion. Movement. Always stay moving.

Mistakes are limits. They are dead end roads. When you discover a dead end road you don't park your car and wait for the road to suddenly lead somewhere interesting. You turn around and find another route! Life teaches us lessons. We have the choice to learn from those lessons and use them to make more educated decisions, or to forget the lesson and make our journey that more difficult. If you're lost, you don't throw away a map that has been handed to you, right? So why would you want to throw away anything that will help you live a better life? (If you don't know how to read a map, learn.)

So how does F1 racing have anything to do with learning lessons in life? Well the single time I spun out in 55 laps shows me how even though you think you've got life figured out, even though you were handed the first place position at the start of the race, there is always something new around the corner. Maybe a new lesson, maybe a new idea. The point is this: don't settle for anything. The moment we begin to accept things for the way they are, we age -- we become old and rigid. Finding that synergy, that balance, in life is what keeps us forever young.

Incredible Weather

Yesterday there was a tornado watch for the Northeastern New England area, including warnings of penny-sized hail and extreme thunderstorms. It was partly sunny in Cambridge until about 3PM, when suddenly within 30 minutes it went from being sunny to so dark that you might mistake it for being night time. Wind gusts were strong and random, going in different directions with every gust. Mother Nature really looked angry; even the air felt electrified, as if the entire Earth would crack open at any moment.

Only 2 minutes after I snapped this picture from my office window, it started pouring and the white sky visible near the chimney stacks turned dark gray. The chimney stacks disappeared when it started pouring, and I couldn't see more than 2 or 3 blocks out.

Free Cork Board

I've been wanting to buy a cork board to pin up important papers and bills that need to be paid. A few days ago, while I was taking out the trash, look what I found:

A perfectly fine cork board, just the right size. It even came with a whole row of push pins! Why anyone would want to throw it away, I have no idea.

Cumberland RD Studio Rented

A few weeks ago I listed two of my vacant rental units on CraigsList. One of them, the studio, has been rented (for $750, not $800 as shown in the AD). This was the first time I've used CraigsList to rent one of my units. In the past, I've always placed an AD in the Lowell Sun, which costs $110 for two weeks -- a lot more expensive than CraigsList, which is free. I also feel that advertising online pre-screens most of the tenants. Those who have a computer and know how to use one are more likely to be reliable tenants than someone who picked up a newspaper off the street.

I tasked my brother with taking the calls and scheduling showings, which took a huge load off my shoulders. This was the first time I've ever had a rental agreement signed, and the deposit in hand, without ever meeting the tenants in person.

The final addition to my home gym

As I mentioned in my apartment home gym post a few weeks ago, the only thing remaining to complete my home gym was a set of PowerBlock dumbbells. Over the weekend I decided not having any dumbbells was really holding back my workouts, so I used the only credit card with any credit left on it, to purchase a pair of the Pro Set PowerBlocks:

I was originally going to get the Personal set, however I was able to find a place local that sold the Pro set for the same price I was going to pay for the Personal set! These PowerBlocks allow me to adjust from 2.5lbs all the way up to 50lbs.

Kill Inactive and Idle Linux Users

Every once in awhile the SSH connection to my Linux server will die and I'll be left with a dead user. Here's how I discover the inactive session using the w command:

 15:26:26 up 13 days, 23:47,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
raam     pts/0    wfc-main.wfcorp. Mon10    2days  0.04s  0.04s -bash
raam     pts/1    pool-151-199-29- 15:26    0.00s  0.02s  0.01s w

You can easily tell there's an idle user by glancing at the IDLE column; the user in the first row has been idle for 2 days. There are many ways of killing idle users, but here I'll show you a few of my favorites. The bottom line is, you need to kill the parent process created by the idle user when he logged in. There are a number of ways of doing that.

Here is how I discover the parent process using the pstree -p command:

        ├─screen(29380)───bash(29381)───naim(29384)
        ├─scsi_eh_0(903)
        ├─sshd(1997)─┬─sshd(32093)─┬─sshd(32095)
        │            │             └─sshd(32097)───bash(32098)─┬─mutt(32229)
        │            │                                         └─screen(32266)
        │            └─sshd(1390)─┬─sshd(1392)
        │                         └─sshd(1394)───bash(1395)───pstree(1484)
        ├─syslogd(1937)
        └─usb-storage(904)

We need to find the parent PID for the dead user and issue the sudo kill -1 command. We use the -1 option because it's a cleaner way of killing processes; some programs, such as mutt, will end cleanly if you kill them with -1. I can see by looking at the tree where I'm running the pstree command, so I just follow that down the tree until I find a common process (branch) shared by both users; this happens to be sshd(1997).

You can see there are two branches at the point -- one for my current session and one for the idle session (I know this because I'm the only user logged into this Linux server and because I know I should only have one active session). So I simply kill the sshd(32093) process and the idle user disappears.

Of course, if you're on a system with multiple users, or you're logged into the box with multiple connections, using the above method and searching through a huge tree of processes trying to figure out which is which will not be fun. Here's another way of doing it: Looking at the output from the w command above, we can see that the idle users' TTY is pts/0 so now all we need is the PID for the parent process. We can find that by running who -all | grep raam:

raam     + pts/0        May 10 10:45   .         18076 (wfc-main.wfcorp.net)
raam     + pts/1        May 11 15:26   .         1390 (pool-151-199-29-190.bos.east.verizon.net)

Here we can see that 18076 is the PID for the parent process of pts/0, so once we issue kill -1 18076 that idle session will be gone!

Spring

Warm breeze,
Sweet smell of blooming flowers,
Birds chirping,
Warm sun,
Clear blue roof,
Random pairs of white, soaring wings.