Random Thoughts of a Scatterbrain.
 Friday, March 07, 2008

Now For Something Completely Random...

3/7/2008 1:46:43 PM (Eastern Standard Time, UTC-05:00)
"Network Apologizes For Mocking Athol"

http://www.cbsnews.com/stories/2008/03/06/ap/strange/main3915750.shtml

(AP) A cable sports network says it no longer will make Athol the butt of its jokes. Comcast SportsNet said Thursday it would pull a newspaper ad that leaders of the small central Massachusetts town called insulting and offensive.

The ad featured two side-by-side signs that together read: "We can pronounce Worcester ... without sounding like an Athol."

I grew up one town over from Athol :P It was always a joke the kids would play: hold your tongue and say "Athol".

 Monday, August 06, 2007

And I Thought My Setup Was Badass...

8/6/2007 3:07:20 PM (Eastern Daylight Time, UTC-04:00)

Excessive? Maybe.

Badass? Most definitely.

Now I'd be way more impressed if those monitors were 30-inchers.

 Sunday, July 15, 2007

Commitment Chains, GUIs, Frustration, And Other Ramblings...

7/15/2007 11:29:58 PM (Eastern Daylight Time, UTC-04:00)

Warning: massive brain dump ahead...

As I was laying down to sleep and having a discussion with my wife - much to her dismay - the topic of her current graduate class came up and she mentioned how much she enjoyed just sitting down and writing for 45 minutes each class.  I found it strange that she should put it in such a perspective.  I mean, there's nothing preventing her from taking the time to sit down and write for 45 minutes each day (and she did keep a journal up until maybe 3 or 4 years ago) as surely, countless minutes of her day (and any average person's day) is spent doing mindless things like watching television or eating or something else equally useless.

The idea of commitment chains occurred to me as I was using an analogy about exercise and trying to convince her that writing for 45 minutes each day is relatively trival compared to working out.  Think about it: in exercising, one starts a chain of commitments which can seem unconsciously daunting.  To exercise is to sweat, to sweat is to necessitate an immediate shower (well, unless you don't mind body odor or the salty stickiness of sweat), to exercise necessitates a larger load of laundry, and most importantly, in this proposition, is that it necessitates a healthy lifestyle lest that exercise went for naught. 

It is a relatively large commitment chain to make simply by exercising and perhaps this is why so many people find it so difficult to maintain a healthy lifestyle: the weight of this commitment chain is simply too heavy.  On the other hand, writing for pleasure carries little commitment of any kind.  You write if you want to, you don't if you are not in the mood.

What's the point?  No point, really :-D  I guess if there was a point, then perhaps it is that very often in life, we don't really take into consideration how little commitment it takes to do what we want to do and do what we enjoy.  We also fail to realize how these low commitment activities have a profound effect on our lives as they help us feel like we've done something.  Simple things like taking a stroll around the block, watering some flowers, laying down and watching the clouds pass, sitting with a cat on the grass, drinking a cup of lemonade on a hazy summer afternoon.  Perhaps that's the secret to finding balance in life: to have a healthy mixture of tasks with long commitment chains (work, family, health) mixed with activies of low commitment (I'm mixed on whether blogging is the former or the latter, but I do find it constructive to put thoughts to text some times).

Shifting gears now.

Prior to this discussion, we had another discussion about how we visualize dates.  I was thinking back to something that I had once read about how to interview tech candidates: propose that some object typically comes in a set of 14.  Now 5 additional elements are introduced...ask the candidate how he or she would organize the new elements.

Some people, like my wife, would tend to place the 5 elements "below" the 14 elements and line them up and start to form a multidimensional array - or a matrix, if you will.  Some people like me, would visualize it as a separate block of elements, but in a linear manner...more like containment where the first set contains 14 elements and the second set contains 5, but they are part of yet a larger set.  It is less of a repeating pattern and more of a general grouping.

This manifested itself clearly in the way in which we think about and visualize dates.  For her, as day of the week is important, she tends to organize her events and key dates in a typical calendar fashion and in fact, she can visualize it so well, that given one event in a month, she can probably tell you the day of the week of any other date in the month nearly instantly.  She views the set of 7 days in a week as a part of a matrix much as a calendar is typically visualized.

In my case, as day of the week is generally not that important, I visualize date and time as linear and quite abstract (I think the most natural way to think about it since it really is linear and absolute...it is only the incidental cyclical nature of our orbit around our Sun that defines constructs like seconds, minutes, hours, days, weeks, years and so on).  In my case, I am terrible at remembering dates and I am terrible at remembering order; I only roughly index that I have something to do some time in the future.  Ask me what I'll be doing two weeks from now, and it'll take me a good amount of time to figure that out whereas my wife's response will be nearly instantaneous.  I tend to think of time in blocks where I have commitments (meetings, errands, and so on) and blocks where I don't have commitments.

When you really think about it, time itself is completely abstract (what is it? will it end? when did it start? how much of it is there? what does it look like? what is the absolute unit of time?  can it really even be counted?), but the organization and demarcatinon of time into units seems...weird and useless to me; I am fine thinking about it in the abstract (i.e. "some time in the future, I need to do this") and not as an absolute (i.e. "on such and such date at such and such time, I need to do this" or "x units from now, I need to do this").  

There is a parallel in my profession: as a software developer, there is nothing tangible about the constructs that I build; the contructs that I build are purely abstract in nature: every GUI, every construct in software, is but an abstraction of numerous lines of code - or, is it the other way around?  Software is but one layer of abstraction on top of another...modern day software could not exist without the huge levels of abstractions that have been built to allow programs to be written efficiently.  Buttons are not buttons, they are rectagles.  Rectangles are not rectangles, they are arrangements of lines.  Lines are not lines, but merely a linear set of pixels.  But in essence, there is nothinig to grasp and to utilize to visualize proportion, all of it is purely hypothetical and kind of "uploaded" into my brain as a set of objects, relationships, and other abstract constructs when I sit down at my desk in the morning. 

In actuality, I find this process of uploading and unloading quite unpleasant (particularly the unloading part).  I have been told by my coworkers, wife, and family members that I can become quite unruly when I'm involved in my work.  The reality of it is that when I'm in my groove, unloading and then loading so much abstraction and so much data causes some sort of mental instability...I just get frustrated at the individual forcing the purge or I just lose my groove and have to kind of veg for the rest of the day...I simply cannot be constructive.

From an observer's perspective, I think this makes me seem like a loner or anti-social or if a colleague is coming to me with questions, it may seem like I'm impatient or uncooperative.  In reality, my bitter reaction is more of a defensive mechanism to kind of keep myself from having to go through these periods of derailment as in my case it's not a temporary derailment...it's like a long term derailment once it happens as there is simply too much data to store and reload that it's taxing on my mind.

For this reason, I think I've recently been in some hot water with some coworkers.  I simply don't take afternoon interruptions very well as that is the time when it is hardest to recover from derailment at that point.

Of course, the whole reason that this discussion and train of thought came up was the movie Stranger Than Fiction (it's an absolutely brilliant screenplay with an absolutely excellent performance by Will Ferrell (everytime you think he's going to break into his "normal" genres, he surprises you and keeps his acting true to the character...a brilliant perfomance)). 

This movie draws my attention on various levels: it is at once a deep inspection of what it means to live and to be alive, it asks what exactly is the scope of one life in the grander scheme of the universe, on some level it is a movie about religion (I haven't really fully formulated this part of it yet), and of course, it's a touching romantic comedy :-).

I also found the specials (and this isn't the first time) to contain some very insightful information on teamwork and project management that would apply to almost any field (but that's a discussion for another day).

What also caught my attention was how director Marc Forster and the visual effects team realized how Harold's thoughts were visualized with these planar "screens" with metrics, text, and data layered together.  It's much the same way I visualize data, code, structures, and tasks, all on virtual screens that I slide around, stack, layer, and intermingle.  I now realize that there is no organization to how I think about these constructs and abstractions...I simply see them in my mind as if before me was a stack of cards strewn about and yet I am able to reach out and pluck the ace of spades at will with no effort.

Maintaining such mental order requires a lot of effort and a lot of concentration.  I think it is because of the amount of effort required to work the way that I do, that I am so unpleasant when interrupted (much to the dismay of my wife, mother, and coworkers).  And believe me, it's not that I don't like to help others with the development issues or educate other developers and team members, rather such tasks are not my primary concern and shifting gears is extremely difficult when you have to maintain such large abstractions and structures in the mind.

So of course, the question is, what is the solution?  Well, perhaps I need to invest some time in some organizational books.  Perhaps I need a whiteboard to help unload some of the data and make it easier to reload as well.  Perhaps I need a bigger desk so I can scribble more and keep better notes.

Well, I think that about wraps this up.  Possibly not the most coherent or well organized entry, but it contained data would have kept me up all night if I didn't unload it :-)

 Sunday, April 29, 2007

Photo Tour Of China

4/29/2007 11:17:38 AM (Eastern Daylight Time, UTC-04:00)

Rediscovered an awesome photolog of a tour of China today.

Note to self: visit China.

 Friday, April 06, 2007

NYIAS: 2007

4/6/2007 7:04:15 PM (Eastern Daylight Time, UTC-04:00)

Pictures from our trip to the New York International Auto Show: 2007 are up.

Enjoy :-)

I also have some non-auto show photos that I thought came out really well:

Library

Bryant Park

Bryant Park

We stopped by Bryant Park since I had to make a trip to the Taiwan Cultural and Economic Building (or something like that) to renew my Taiwanese passport.  I love it when I can kill two birds with one stone.

While I never liked working in NYC, as I commented to my wife, there's just so much visual texture that it's still refreshing to visit once in a while.  It's in the faces of all of the people you see, in the architecture, in the smells (and many of them are admittedly nauseating...), in the shops, in the food, and in the very space itself.  Your eye glances everywhere and it's visual overload.

 Tuesday, March 27, 2007

Google: Server Error

3/27/2007 3:01:39 PM (Eastern Daylight Time, UTC-04:00)

Whoa.  This is a first:

google-error.jpg

 Tuesday, March 06, 2007

Oh My...

3/6/2007 1:40:40 PM (Eastern Standard Time, UTC-05:00)

My goodness...

bmwm3geneva041-1.jpg

Via WindingRoad.com.  I am sooo looking forward to NYIAS this year.

 Thursday, November 09, 2006

Upstream, Red Team!

11/9/2006 7:43:58 PM (Eastern Standard Time, UTC-05:00)

Go RU!

Who would have thunk it?

The amazing thing is how much attention, both locally and nationally this has garnered.  All of the digital signs on the Turnpike declared "Go Rutgers!"; it kind of caught me off guard.

Now I'm off to watch the game...on my TV :(

Edit:

 

RUTGERS!!!

 

Bill Simmons: NBA Week 1

11/9/2006 3:44:05 PM (Eastern Standard Time, UTC-05:00)

I just had to share, a really humorous look at the week that was in the NBA.

http://sports.espn.go.com/espn/page2/story?page=simmons/061108&lpos=spotlight&lid=tab2pos2

 Tuesday, October 31, 2006

Fitting Halloween Posting

10/31/2006 3:54:39 PM (Eastern Daylight Time, UTC-04:00)

Bones?  Halloween?  Yah?  No?  Wait, I got another one: Charlie "digital", get it? Okay, lame, I know :-).

In any case, that's my finger.

That little piece of bone hanging off of my middle phalange is a chip fracture that I suffered about 4 weeks ago at the gym playing basketball.  Turns out it was more than just a fracture.  As my finger was hyperextended, the tendon at the joint actually tore partially (which explains the excruciating pain and swelling) and as it tore, it actually took a small piece of the bone with it.

The ER doctor had my finger in a straight splint for the last four weeks, which totally messed up my finger because it needed to be in a curved splint to account for the hyperextension and to release stress on the tendon.  Doh!

I've been mostly getting by with 4 finger typing on my left hand, but spelling mistakes are plentiful and I feel as if my WPM is down at least 33%.

Well, looks like it'll be another 2 weeks in a splint for now.  This has me wondering: can/should us keyboard jockeys insure our hands?

In any case: Happy Halloween!

 Monday, October 30, 2006

Just to Share...

10/30/2006 6:36:44 PM (Eastern Daylight Time, UTC-04:00)

Great quote from Jason Kidd on David D'Alessandro's Nets postings:

“I feel physically that I can average a triple-double,” Kidd added. “That’s the way I approach the season, for me to physically and mentally be involved -- rebounding, finding the open guy and scoring points and playing the game in that form of being involved (in everything). If it’s for 30 minutes, then in those 30 minutes I will give ‘em hell.”

Particularly that last sentence.

 Monday, September 25, 2006

Go Scarlet Knights!

9/25/2006 11:43:20 AM (Eastern Daylight Time, UTC-04:00)

I never thought I'd see the day.  Rutgers football having a winning season?  It was but a common joke on campus (the football team that is).  But what do you know?  It turns out that Rutgers is now #23 on the AP top 25!

No joke. Rutgers is ranked.

The Scarlet Knights, long a college football laughingstock, moved Sunday into The Associated Press Top 25 for the first time in 30 years.

Applause for Greg Schiano, the coaching staff, and his players.

 Thursday, August 17, 2006

Quote of the Day

8/17/2006 5:05:26 PM (Eastern Daylight Time, UTC-04:00)

I don’t accept the currently fashionable assertion that any view is automatically as worthy of respect as any equal and opposite view. My view is that the moon is made of rock. If someone says to me “Well, you haven’t been there, have you? You haven’t seen it for yourself, so my view that it is made of Norwegian Beaver Cheese is equally valid” - then I can’t even be bothered to argue. There is such a thing as the burden of proof, and in the case of god, as in the case of the composition of the moon, this has shifted radically. God used to be the best explanation we’d got, and we’ve now got vastly better ones. God is no longer an explanation of anything, but has instead become something that would itself need an insurmountable amount of explaining. So I don’t think that being convinced that there is no god is as irrational or arrogant a point of view as belief that there is. I don’t think the matter calls for even-handedness at all.

Source.

 Wednesday, August 09, 2006

For All the Hate That Microsoft Gets...

8/9/2006 4:45:04 PM (Eastern Daylight Time, UTC-04:00)

Will you look at that?

The team that won the Autonomous Underwater Vehicle competion used Microsoft Windows XP Embedded to run their bot.

From the team's white paper:

The Windows XP Embedded operating system along with Matlab 7 were utilized in order to create an easy and quick development environment.

Not only did the team win, but they retained their championship title from last year.

Very cool.

 Wednesday, August 02, 2006

10 Windows Password Myths

8/2/2006 7:51:05 AM (Eastern Daylight Time, UTC-04:00)

I came across an article on some common myths with regards to Windows passwords (via Fark).

The short of it is to keep the password easy to remeber, make it at least 15 characters, and don't forget that you can use spaces in passwords as well to create passphrases.

 Thursday, June 15, 2006

Say Hi to Quincy

6/15/2006 6:22:20 PM (Eastern Daylight Time, UTC-04:00)

That's Quincy, our new bearded dragon.

Interesting little critter...quite aware of us and of the surroundings; extremely inquisitive and quite cute :-) But also quite a pain in the ass to take care of.

 Monday, June 12, 2006

Pure Genious

6/12/2006 1:00:40 PM (Eastern Daylight Time, UTC-04:00)

Pure Genious: http://www.realtechnews.com/posts/3155

Brilliantly simple and intuitive.

I'm a firm believer that the simplest, most obvious ideas are the ones that require the most ingenuity to come up with.


 Tuesday, May 23, 2006

So, How's Married Life?

5/23/2006 6:32:25 PM (Eastern Daylight Time, UTC-04:00)

I love this reply from Jerry Brown, the mayor of Oakland, in Time magazine this week:

It's a good thing.  There is a certainty, a finality about it.  I was very conscious that it was a vow, and I liked that.  It's part of a higher order.  In a frivolous age, it has a depth that is very welcome.

 Wednesday, May 03, 2006

Random Happenings

5/3/2006 2:55:38 PM (Eastern Daylight Time, UTC-04:00)

Well, my pineapple died recently.

Yes, that's right, pineapple.  Sometime last year, I decided to start growing a pineapple plant after I picked up a weird interest in growing tropical plants (fruits in particular).

Why pineapples?  Well, I found out from various sites online that the pineapple has an amazingly rich history.  Plus, I love the taste of pineapple :-)  Besides, I figured it would be easier to try to raise a potted plant as opposed to, say a mango tree.

So I found some directions online on how to grow a pineapple and started to grow one from the healthiest crown I could find.

At first I was a bit skeptical as to how hardy the plant would be after reading the directions.  As it turns out, though, pineapples are amazingly hardy with regards to water and temperatures.  The plant survived sub-70 degree weather in my townhouse and office during the winter and wasn't any worse for wear.  But alas, it was not hardy enough for sub-50 degree temps.  I recently moved and since the weather was getting nicer, I started to keep the pineapple outside.  A couple of nights ago, I forgot to bring it inside only to wake up in the morning to find frost (!!!) on my car window.  Frost == dead pineapple :-S

It lived for over a year; not bad.  Quite an attractive plant, too.  I started to grow two more yesterday; we'll see how these two go.

On an unrelated note, I'm starting to suffer with "only" 1GB of RAM on my notebook (unfortunately, the max it can accept).  With VS.Net 2005 and ReSharper 2.0b running on a small project, it's taking up roughly 350 MB of memory.  To complicate matters, all of the 2005 apps (VS, SQL Management Studio, etc.) are such resource hogs, that there is noticeable lag when I use any of them.  I've had to shut down SQL Server for the most part (unless I really need it) and a lot of other services as well.

Merom can't come soon enough...

 Monday, May 01, 2006

Awesome Blog

5/1/2006 9:43:18 PM (Eastern Daylight Time, UTC-04:00)

Came across a great blog while looking for images of praying mantids.

Great links.

Including this one and this one.

Bookmarked!

TortoiseSVN Tip

5/1/2006 3:16:29 PM (Eastern Daylight Time, UTC-04:00)

Hey now! Our inaugural post for May!

Let's start things off with a tip for TortoiseSVN users out there.

First of all, did you know that you can right-drag objects in the Windows GUI? No? Neither did I. I felt like such a noob upon discovering this functionality as I've never, in my several years of Windows usage, ever known about this. Well, in any case, you can, and it's way better than the default left drag that we all know and love.

What's this got to do with Tortoise? Well, I went onto the SVN IRC channel trying to figure out if there was a way to move files in a "SVN-aware" fashion. After asking around and googling, I came across this article that mentioned right dragging.

Note that you will only get the proper context menu commands if the target folder is already under version control; if not, you will not get an option to perform a SVN-aware file/folder move.

tortoisesvn-move.gif

This is by far, much more convenient than left dragging and then manually adding the file to the repository in a new location (and removing the file from the old location).

 Monday, April 17, 2006

Joy!

4/17/2006 2:57:33 PM (Eastern Daylight Time, UTC-04:00)

A certain sense of glee overcame me just now as I was checking the activity logs.

Perhaps one of the most exciting (yeah, I realize I'm exposing myself as a total geek by saying that) things about having a blog (or any website in general) is checking out the activity logs and seeing people coming in and out of your website (hopefully finding something useful).

The idea with my Workshop series is to provide bits of knowledge that I've gained through the various projects that I've worked on in the past in simple, easy to follow and easy to digest chunks (with lots of pictures and code samples to boot). 

Imagine my surprise (oh, Joy!) when I tracked a link to my page from Google groups!  It's one thing to have searches hit your pages...it's an entirely different feeling when someone actually references your site.

Happy is me.

Yes, I'm a dork.  And probably a noob, too :-D

 Wednesday, April 12, 2006

Hide the Rice Krispies....

4/12/2006 8:59:39 AM (Eastern Daylight Time, UTC-04:00)

I thoroughly enjoyed this post :-)

 Sunday, April 02, 2006

NYIAS 2006...Almost Here!

4/2/2006 9:02:50 PM (Eastern Daylight Time, UTC-04:00)

Sooo psyched about the New York International Auto Show this year.

Nissan will have a big show there with the unveiling of the new Altima, among other things.

To get ready for this event, I put together a gallery of the shots from last year's show.

Enjoy!

 Friday, March 10, 2006

Dick Cheney: Jedi Master

3/10/2006 9:47:15 AM (Eastern Standard Time, UTC-05:00)

The stunt that the Bush administration is pulling with this Dubai ports deal is simply genius (and of course, terribly disgusting from a political point of view).

About a month after I had gotten the job at Factiva, the recruiter that had brokered the deal called me up and took me out to lunch.  During that time, he had told me that one of the practices that they use when presenting candidates was to position the presentation in such a way that the client would see a few below par candidates to set up a candidate so that the last few candidates would all seem to be way above average.  In a sense, I was a closer in that there was no way that I could fail this interview given the setup that they performed (not that I needed it, the recruiter called and notified me that they hired me before I could even get back to my house, 20 minutes away).

This was confirmed to me by experience last year when I went in for an interview with JPMorganChase.  My goodness.  The guy they had lined up before me (due to a scheduling snafu, we both ended doing a "group interview" together) was a total moron.  Short guy.  Bad presentation.  Stuttering.  His main claim was that he built a website for his church using ColdFusion.  Wow.  Not to come off like an arrogant prick (which I probably am :-D), there was no way that this guy was going to even come close to getting the job over me.  (I declined, though, because I didn't like the manager and the environment didn't seem right for me.)

So what does all of this have to do with the Dubai ports deal?  It's fairly obvious that this has been planned all along by the Bush administration and in particularly, Dick Cheney as a setup for Halliburton to step in and take over control of the ports.  Could you imagine the outcry and resistance from the Democratic party and consipiracy theorists had they initially offered this deal to Halliburton?  The entire act was great.  Bush threatening veto (the man hasn't vetoed a single bill to pass his desk) was such a dead giveaway to the entire act and yet the public and the news outlets bought it up like a hot Christmas toy.  It was the perfect setup and the Democrats and some poor Republicans latched right on as planned.  After forcing the hand (having these Dem.s like Schumer give such a loud public outcry in the name of safety), it would look entirely partisan if they made the same outcry over Halliburton.

You can almost visualize Cheney in a dark room with a spotlight over his head, wringing his hands in pleasure at how this turned out as the media and the public ate it up.  The man is genius.  Using the simplest of psychological tricks to get the media and masses to do his bidding.  Jedi Master indeed.

 Saturday, January 21, 2006

Impressive

1/21/2006 11:18:48 AM (Eastern Standard Time, UTC-05:00)

Perhaps even that is too weak a word.

Omar Al Zabir demonstrates an amazing breadth and depth of understanding of many technologies in addition to sound software engineering and design concepts.

He has a great writeup at CodeProject.  That just blows me away in the elegance of the design and the way that he's able to have such a deep grasp of so many of the technologies that are relevant.

 Sunday, December 04, 2005

Engineers...

12/4/2005 1:09:26 PM (Eastern Standard Time, UTC-05:00)

Great thread with some funny jokes and what not about engineers.

Just a sampling:

There was an engineer who had an exceptional gift for fixing all things mechanical. After serving his company loyally for over 30 years, he happily retired.


Several years later the company contacted him regarding a seemingly impossible problem they were having with one of their multimillion dollar machines. They had tried everything and everyone else to get the machine to work but to no avail. In desperation, they called on the retired engineer who had solved so many of their problems in the past.

The engineer reluctantly took the challenge. He spent a day studying the huge machine. Finally, at the end of the day, he marked a small "x" in chalk on a particular component of the machine and said, "This is where your problem is."

The part was replaced and the machine worked perfectly again. The company received a bill for $50,000 from the engineer for his service. They demanded an itemized accounting of his charges.

The engineer responded briefly: One chalk mark $1; Knowing where to put it $49,999.

I also like this one:

To the optimist, the glass is half full. To the pessimist, the glass is half empty. To the engineer, the glass is twice as big as it needs to be.

 Tuesday, November 29, 2005

Extraordinary Craftsmanship

11/29/2005 9:09:40 AM (Eastern Standard Time, UTC-05:00)

Wow.

and

Wow.

I think that's all I need to comment on these :-)

 Friday, November 04, 2005

Friday's Random Thoughts

11/4/2005 8:20:13 PM (Eastern Daylight Time, UTC-04:00)

Just to wrap up my Austin trip, here's a few random, slightly organized thoughts on the city of Austin and my trip:

  1. There's lots of good, cheap Tex-Mex food in Austin (but I guess that this is true for most of the southwest).  Damn, I had some of the best Mexican food I've had in my life and it was ridiculously cheap.
  2. PT Cruiser...what an abomination of a car.  If you didn't know already, the rear window controls are at the base of the center console.  Double-U, Tee, Eff?  I didn't drive one, personally, but damn, it was ugly, slow, uncomfortable, and the antithesis of ergonomic.  Not that I had it much better; I had a Cavalier.  No wonder the American automakers are tanking so hard...I'm surprised they've lasted this long with crap like this.
  3. The capitol building in Austin has some very nice floorwork and craftsmanship in general.  Very nicely architected and designed.  It's kind of cool that there's so much concentrated in such a small area (two universities right around the capitol).
  4. Austin (and probably Texas in general) is very open compared to NJ (the most densely populated state in the country).  I like it.  No traffic jams, wide roads, well designed traffic patterns...I wouldn't mind living there, to tell the truth.
  5. TownePlace Suites is so-so.  For $89/night, it was a decent deal as I had my own kitchen, queen size bed, and a nicely sized living room.  The bed was very comfy, but the showerhead was weak and the "light continentel breakfast" really meant "bagel in a plastic bag".  Homewood Suites, on the other hand, was much better in terms of the food and accomodations (they had a basketball court in the back!).
  6. Being from the north, I tend to look at people oddly if they're walking around with a cowboy hat on, which seems to be common practice in the southwest.

All in all, Austin is a very nice place.  Not nearly as congested as most of NJ.

As I had a lot of down time, I made a bit of progress with The Mythical Man Month.  Without writing an entire essay, I'd just like to share some passages that caught my attention.

"Most organizations spend considerable effort in finding and cultivating the management prospects; I know of none that spends equal effort in finding and developing great designers upon whom the technical excellence of the products will ultimately depend."

"My first proposal is that each software organization must determine and procliam that great designers are as important to the success as great managers are, and that they can be expected to be similarly nurtured and rewarded.  Not only salary, but the perquisites of recognition-office size, furnishings, personal technical equipment, travel funds, staff support-must be fully equivalent."

I've never reall understood why so much emphasis was placed on middle management in most organizations.  I do agree that having exceptional managers can help increase organization and productivity dramatically, but the fact of the matter is that there are few exceptional managers.  My coworker, Igor, offered that instead, the emphasis should be placed on teams.  Small, self governing teams organized by technical function (database team, UI team, data objects team, etc).  The benefits of such a system of organization is clear, for no manager overseeing 20-30 employees can truly understand the strengths, weaknesses, and capabilities of each of the employees.  But such quandaries are easily sorted out in a small team where the team must bear the burden of the responsibilities and thus the team becomes accountable for understanding the function and capacity of each of its members.

One point, in particular, that I'd like to share is one of Brooks' bullet points on how to grow great designers:

"Systematically identify top designers as early as possible.  The best are often not the most experienced. [Emphasis mine]."

Too often in the software industry, the emphasis is placed on years of experience, and not on the actual merits and capabilities of the individual.  As the art and science of software engineering continues to expand and evolve, the best designers will expand their minds and evolve their techniques in parallel.  Software engineering is not a field in which the information and knowledge base remain static.  Certainly, there are core principles that never seem to change, but there are also many different new perspectives, practices, and patterns that emerge with each iteration of tools and environments.  I guess my point is that organizations must find ways to identify and then consequently nuture potential and not merely take the easy road by measuring years of experience.

There were also parts of the text that relate to a project I'm currently working on where the client continually makes change and feature requests, which, by themselves, are not necessarily bad.  But on some levels, the change affects the fundamental design principles of the application, which is time consuming and prone to introduce bugs without massive re-architecting and regression testing.  On this, Brooks says:

"The hardest single part of building a software system is deciding precisely what to build.  No other part of the conceptual work is so difficult as establishing the detailed technical requirements, including all the interfaces to people, to machines, and to other software systems.  No other part of the work so cripples the resulting system if done wrong.  No other part is more difficult to rectify later."

"Therefore, the most important function that software builders do for their clients is the iterative extraction and refinement of the product requirements.  For the truth is, the clients do not know what they want.  They usually do not know what questions must be answered, and they almost never have thought of the problem in the detail that must be specified.  Even the simple answer-'Make the new software system work like our old manual information processing system'-is in fact too simple.  Clients never want exactly that."

How true this is.  That last point is particularly interesting.  It's something that I've never understood; shouldn't the idea be to make it better than what you already have?

As I was driving home, I was thinking about how, I would approach a software design project knowing what I know now.  Sitting in on a hardware infrastrucure design session, it's clear how different the art of designing hardware solutions is compared to software solutions.  This is not to belittle the work done by the EMC guys, not at all.  But the fact of the matter is that the constraints, requirements, and features are so well defined by the cost and physical limitations of hardware that architecting a hardware infrastructure is a far less torturous exercise than designing a software system architecture.

I've been asked before, during interviews, how I approach system design.  I think that the right answer is that there is no answer.  Anyone that dares give "an answer" is like a voter that votes strictly Republican or Democrat, regardless of the particular issues at hand; it's a foolish and dangerous approach to think that there is one method or methodology that can be applied to every system.

The secret, as I've discovered on one of my recent projects that I deem to be my finest work to date, is that software must grow in an almost organic fashion instead of being built.

Of this, Brooks' says:

"Must of the present-day software acquisition procedures rest upon the assumption that one can specify a satisfactory system in advance, get bids for its construction, have it built, and install it.  I think this assumption is fundamentally wrong, and that many software acquisition problems spring from that fallacy."

"Let us turn to nature and study complexity in living things, instead of just the dead works of man.  Here we find constructs whose complexities thrill us with awe.  The brain alone is intricate beyond mapping, powerful beyond imagination, rich in diversity, self-protecting, and self-renewing.  The secret is that it is grown, not built."

"I find that teams can grow much more complex entities in four months than they can build."

And so it was on my last project; the current (and I shan't call it final) design grew, piece by piece, line by line, class by class from a conceptual vision that I had in my head.  At every step, I considered where I could refactor the code, where I could make generalizations, where I could consolidate code, and where I could improve the interfaces and classes.  Where I spotted room for improvment, I did so.  With no interference, the very design itself grew as I learned more about the system and the dependent systems.

I can see that many of the practices and ideas behind agile and XP are not entirely new developments, but rather a natural evolution of the ideas that have been present in software engineering for decades.  Perhaps what's bothersome to me is that, even with this much time, the practice of engineering software is still very immature and it seems as if companies have not learned from the incidents and experience of the past.  We still see an over-emphasis, in many organizations, on management and not enough on discovering, developing, and rewarding top designers and programmers.

Okay, so maybe I've run on a little bit longer than I expected :-) But I'm done now, I swear!  Enjoy your weekend!

 Friday, October 28, 2005

CS476 Represent!

10/28/2005 11:22:03 AM (Eastern Daylight Time, UTC-04:00)

Heh, this is a Friday shout out to my project group for CS476--Ed (Myung) Kim, Roger Chang, and Craig Lichtenstein.  These guys were a great group to work with as everyone really took responsibility for their parts of the project and helped to deliver, what I felt, was a pretty cool application.

First, a little abstract.  In college computer science courses, even though you're told that you're supposed to work on programming assignments yourself, I think that no one really ever did.  If I may opine, this is a poor idea to begin with as no programmers in the real world work in isolation.  Now keep in mind, there are different working relationships.  In some cases, people are just moochers and just want to copy your code or steal your solution ideas.  In others, it's really a relationship where each of the students feeds off of the others to arrive at the solution together.  I had such a relationship with one Lew Fernandez, a fellow computer science major who was my roommate for half of the semester (a rocky freshman year).  I've always been one of those guys that could figure things out better if I had to discuss and explain different aspects with other people.

At some point, the idea occurred to me that it would be cool if we could work on the same codebase, collaboratively and interactively, even from remote locations (for example, if he was on one campus, and I was in our dorm room) without having to install any software.  Basically, you could work on code collaboratively from anywhere that you had access to a web browser.  Thus was born the idea of what would eventually turn out to be WebEdit, the project I designed for my CS476 Advanced Web Applications course.

This application popped back into my head recently as I was browsing a post on Web 2.0.  I came across the application Writely and it clicked, immediately, that what we had built was eerily similar to the idea behind Writely.  Admittedly, the implemenation and polish is very different (ours was slapped together in what I would say was roughly a week's worth of development time).  But it's nice to know that we had some good ideas back then.

WebEdit (aka JavaCVS3), utilized a Java applet frontend embedded in a web page that could communicate with a central server using Java RMI.  Chat was also in there, but that required a socket connection between the applet and the server, so it was limited somewhat depending on the networks and the firewalls sitting between any given client and the server.  The really cool part was that we didn't explicitly use the file system to manage files; everything was done through CVS.  Projects had to be imported to a CVS repository after which, different group members could check out a working copy by simply selecting the project from a drop down (projects were associated with groups).  As you're working on your working copy, you can update your copy if another user commits (you are notified interactively) and, using CVS merge, we were able to automatically merge your changes to those that were checked in by the other user.

While I'm here, I'd just like to take a moment and thank the guys for doing such a great job on the project and really working like a team (we pulled at least one 10 hour programming session topped off by celebratory coffee and doughnuts from DD).  As I was digging through some of the old documentation while trying to get everything set up again (to be clear, it was lacking in that respect), I was just amazed by the level of detail and attention in the documentation, especially by Ed; it made the process a bit easier for me.

So in any case, all this nostalgia made me want to see it up and running again.  The original application was designed to run on the Unix platform (including all of the sub-systems like CVS, Apache, and MySQL).  I know that at some point, after I graduated, I had tried to port our work over to a Windows platform quite unsuccessfully and gave up.  I was somewhat saddened as it was great work, but just not enough documentation/information to set it up and make it work on a different platform...until today.

After a lot of digging, prodding, and trial and error, I finally got it working again!  I had to substitute CVS with CVSNT, not knowing whether CVSNT would work exactly like the version of CVS we were running at Rutgers (no one ever wrote down the version).  It took me a few tries, but I finally figured out the version of Java that we originally compiled the source with (or at least the highest version without issues).  I also had to reverse engineer the database from the codebase (the database documentation was very high level and I didn't have any sample data to work from) and change the code to work with SQL Server instead of MySQL.  After a whole day of fidgeting, I finally got it working again!  Joy!  Particularly enjoyable since I haven't worked with Java in so long (roughly 2.5 years now).

webedit_capture.jpg

So this post is for you guys, if you should ever happen to stumble across this blog ;-)

 Wednesday, October 26, 2005

Walmart = Evil?

10/26/2005 12:15:18 PM (Eastern Daylight Time, UTC-04:00)

After reading the recent articles regarding the leaked Walmart memo regarding the hiring of "unhealthy" persons, I couldn't help but be repulsed by Walmart.

Another retailer, CostCo, which battles Walmart's Sam's Club, is almost the complete opposite of the Walmart in terms of business practices, values, and principles. I dug up a little writeup from a few months back:

Jim Sinegal = Hero

I was really moved by an article that I read about CostCo Ceo, Jim Sinegal.

"Costco's average pay, for example, is $17 an hour, 42 percent higher than its fiercest rival, Wal-Mart's Sam's Club. And Costco's health plan makes those at many other retailers look Scroogish.
...
Costco was founded with a single store in Seattle in 1983; it now has 457 stores, including two in the Houston area. Despite Costco's impressive record, Sinegal's salary is just $350,000, although he also received a $200,000 bonus last year. That puts him at less than 10 percent of many other chief executives, though Costco ranks 29th in revenue among American companies."

There are other positive articles on CostCo's business practices floating around the web.  I also learned a lot about CostCo and their absolutely awesome business practices from some people on Fark.

How's this for being treated well...

I'm an hourly NON-MANAGEMENT employee at a non-union location who makes $19.32 per hour and time and a half on Sundays for $28.98 per hour.

Besides this I get a bonus of $3,000 twice per year (full time employee), I get FIVE Weeks of paid vacation each year, 8 paid holidays, 6 paid sick days, I pay 4% of the total cost of my health insurance, I get 2% back on all my purchases, I get a free turkey every Christmas (winter holiday), ....

Did you know that a cashier at Costco who has worked for the company full time for 4 years makes more money than an Assistant store Manager at Wal-Mart?

Wait HERE's A GREAT ONE THAT I ALMOST FORGOT!!!!! ONE THAT IS SURE TO MAKE THE LIBERALS FLAME!!!

If you are a Costco employee and leave the company to enlist in the military, COSTCO HOLDS YOUR JOB FOR YOU FOR 5 YEARS!! AND IT GETS BETTER! If you end your active military service (you can stay in the reserves) and decide to come back to Costco within 90 days of your discharge, Costco not only takes you back, BUT THEY TAKE YOU BACK AS IF YOU HAD NEVER LEFT!!! You get the same or equal position and you accrue raises and bonus eligibility based on how many hours you worked per week for Costco before you left for the service!!!

So if you're a full time employee with say 6 months on the job, you can join the service, do a 4 year tour to get your GI bill, leave the active duty military and come back to Coscto as a topped out employee making $18.32 per hour with full benefits!!!!

-- "The_Pink_Pimp"

Now that is impressive; all this stuff really moved me (strange, I know). To me, this is what true patriotism is in the 21st century; it is supporting your fellow Americans by giving them fair wages, good benefits, and treating them like first class people.  An honest business practice that actually rewards the people that make the business profitable day-in, day-out?  That's almost unheard of in todays environment of Enrons and Tycos. As the cherry on top of the whipped cream, CostCo is also more profitable per square foot of retail space and per worker than Walmart...by a large margin:

Costco actually keeps its labor costs lower than Wal-Mart's as a percentage of sales, and its 68,000 hourly workers in the U.S. sell more per square foot. Put another way, the 102,000 Sam's employees in the U.S. generated some $35 billion in sales last year, while Costco did $34 billion with one-third fewer employees

Just goes to show you how fair pay, good benefits, and respectable business practices do pay in the end as employees are far more motivated, satisfied, loyal and, ultimately, far more productive.

I checked out their website and found out that they use ASP.Net :-D

CostCo just got another convert.

 Thursday, October 20, 2005

The Parable of the Concept Car

10/20/2005 3:32:08 PM (Eastern Daylight Time, UTC-04:00)

There's a great article in this month's Time magazine on Steve Jobs and Apple's success, even though the company operates counter what conventional wisdom dictates.

One bit that really caught my attention was Steve's "Parable of the Concept Car":

Ask Apple CEO Steve Jobs about it, and he'll tell you an instructive little story. Call it the Parable of the Concept Car. "Here's what you find at a lot of companies," he says, kicking back in a conference room at Apple's gleaming white Silicon Valley headquarters, which looks something like a cross between an Ivy League university and an iPod. "You know how you see a show car, and it's really cool, and then four years later you see the production car, and it sucks? And you go, What happened? They had it! They had it in the palm of their hands! They grabbed defeat from the jaws of victory!

"What happened was, the designers came up with this really great idea. Then they take it to the engineers, and the engineers go, 'Nah, we can't do that. That's impossible.' And so it gets a lot worse. Then they take it to the manufacturing people, and they go, 'We can't build that!' And it gets a lot worse."

When Jobs took up his present position at Apple in 1997, that's the situation he found. He and Jonathan Ive, head of design, came up with the original iMac, a candy-colored computer merged with a cathode-ray tube that, at the time, looked like nothing anybody had seen outside of a Jetsons cartoon. "Sure enough," Jobs recalls, "when we took it to the engineers, they said, 'Oh.' And they came up with 38 reasons. And I said, 'No, no, we're doing this.' And they said, 'Well, why?' And I said, 'Because I'm the CEO, and I think it can be done.' And so they kind of begrudgingly did it. But then it was a big hit."

I think this is a common downfall of many organizations and projects and it results from a sort of "design by committee".  Fred Brooks makes a similar point in The Mythical Man Month with regards to building software:

Simplicity and straightforwardness proceed from conceptual integrity.  Every part must reflect the same philosophies and the same balancing of desiderata.  Every part must even use the same techniques in syntax and analogous notations in semantics. 

Concpetual integrity in turn dictates that the design must proceed from one mind, or from a very small number of agreeing resonant minds.

In the case of Apple, Steve Jobs is the bolt that holds the whole structure together and the success of Apple can be directly related to Jobs' vision.  From concept to implementation, he enforces coceptual integrity at all levels of the organization.

I think the significance of conceptual integrity struck me when I was sitting in OfficeMax one day as my wife was looking for some supplies for school.  Christopher Lowell's Seven Layers of Design: Fearless, Fabulous Decorating was sitting on a desk that was next to the executive chair that I was fiddling with.  In summary, Lowell drives each of the project rooms in the book with his "seven layers of design" to demonstrate how easy it is to change a room from drab to fab in seven easy steps (yes, that sounded non-hetero in my head, too).  As I flipped through it, I couldn't help but admire how he made his philosophy so succint and consistently applied it throughout the book; it made it seem so easy.

I think the lesson to be learned from this is the importance of conceptual integrity from design to implmentation.  Good designs often fall flat in implementation due to poor adherence to the core concepts and ideas of the designer.

 Wednesday, October 19, 2005

"Cross of Iron"

10/19/2005 12:59:16 PM (Eastern Daylight Time, UTC-04:00)

I came across a blog post today that examined Dwight D. Eisenhower's 1953 speech, titled Cross of Iron.

What struck me a bit was the similarity of his message and vision to that of the Dalai Lama when he was at Rutgers a few weeks back.

In particular, the following excerpts mirrored the the perspective of the Dalai Lama with regards to war in the modern, globalized world:

"First: No people on earth can be held, as a people, to be enemy, for all humanity shares the common hunger for peace and fellowship and justice.

Second: No nation's security and well-being can be lastingly achieved in isolation but only in effective cooperation with fellow-nations.

Third: Any nation's right to form of government and an economic system of its own choosing is inalienable.

Fourth: Any nation's attempt to dictate to other nations their form of government is indefensible.

And fifth: A nation's hope of lasting peace cannot be firmly based upon any race in armaments but rather upon just relations and honest understanding with all other nations."

In his lecture at Rutgers, the Dalai Lama expressed that, in today's world, as we are increasingly dependent on other nations in one way or another, it doesn't make sense to label countries as enemies and wage war.  In doing so, in a sense, a nation wages war against itself.  This is true on many levels with the US as we have seen our soldiers die, our funds sink into a hole as a (very expensive) natural disaster hits our shores, and our reputation damaged for the near future.

Gonna have to read the rest of that sometime later today.

 Monday, October 17, 2005

Overview of Computer Science

10/17/2005 5:54:09 PM (Eastern Daylight Time, UTC-04:00)

As I was laying down to sleep one night last week, I started thinking about the computer science field and where I would want to focus if I were to do graduate studies (probably software engineering or UI related work).  I started to build a "map" (okay, it's not really a map) of the CS field in my head and I thought I'd share it with anyone that's looking to study computer science.

Without further delay, here is my map and commentary:

csmap.gif

Core Principles

In my opinion, the core principles of computer science are:

  • Mathematics.  At the heart of it all, computer science is really a branch of mathematics.  I don't think anyone who doesn't have a fondness for math (you don't have to be terribly great at it) will make it far in computer science (and if they do, they probably copied their calc. homework :-D).  If you look at most computer science curriculums, you'll find that they're heavy in mathematics.
  • Programming Languages.  All computer scientists must know at least a few useful programming languages (and the good ones know many). Programming languages are the mechanism by which we communicate human ideas and concepts to machines.  Different areas of study will typically involve different types of languages.  For example, most application development is done in a general purpose programming language (like Java, C#, or Visual Basic.Net).  From my understanding, most of the work in the field of AI is done in functional languages such as Scheme, Lisp, and Prolog (these languages were designed for AI).  In mathematics applications, you'll find that many computer scientists rely on math programming languages like MATLAB.  So each branch in computer science typically relies upon and utilizes different types of languages (although you see crossover as well).
  • Tools and Environments.  All computer scientists rely heavily upon their tools to get their work done.  From emacs, to vi, to pico, to Visual Studio.Net, having the proper tools for the job is very important to the computer scientist.  The core tool is almost always some mutation of a text editor (like Notepad).  Most computer scientists are familiar with at least one or two different environments/platforms as well (for most universities, this is Unix/Solaris).
  • Algorithms.  In computer science, there are a few universally useful algorithms and concepts that everyone learns.  For example, binary sort.  Another good example is recursion (not so much an algorithm as it is a concept).

Main Branches

In my view, CS can be broken out into three main branches:

  • Mathematical. As I mentioned, computer science is deeply concerned with solving problems in the area of mathematics. This branch of computer science is really about the application of computing to solving mathematical problems. For example, one of the persistent problems in computer science is how to efficiently factor large prime numbers (the basis of current data encryption algorithms). While this itself is more of a mathematical problem, the practical application of such solutions falls into the computer sience field. Computer scientists in the extremes of this branch (those that are practically pure mathematicians may rarely program computers and work primarily with algorithms and pseudocode).
  • Theoretical. This branch of computer science deals with the theory of computing. For example, creating, categorizing, and analyzing algorithms. At Rutgers, I would say, from what I garnered from my TAs, most of the graduate level research was in this area (as opposed to mathematical or practical). The work done in this field is often not useful by itself. For example, I would classify the graduate work that Larry Page and Sergey Brin did at Stanford into this branch. Google, the search engine that you and I use daily, really falls into the third branch.
  • Practical/Application. While the Rutgers graduate curriculum focuses primarily on theoretical computing, some schools focus more heavily on application/software development. This includes the actual implemention of theoretical algorithms, building user interfaces, and writing software (in the general case).

Of course, the boundaries between the different branches are not hard boundaries, but rather very loosely defined; however, generally, there is a distinction between one extreme and the other and, typically, someone intersted in one extreme will not be interested in the other extreme.

Number of Students/Types of Students

What I've noticed is that there are generally more students in the third branch than the others, with the least number of students in the mathematical branch. What I've also noticed is that at the left end of the spectrum, you'll find most of the nerds. On the right end of the spectrum, you'll find mostly geeks.

At the far right end of the spectrum (also the most populous among the CS students), are the idiots. These guys are the ones that always try to mooch code off of you as the deadline for handing in the assignment looms near. They are the stragglers that try to latch onto the nerds and geeks in hopes of getting that CS degree because of the tech boom and not because they are intrigued by the different aspects of computer science.  Not all idiots are doomed to failure; to be honest, I would classify my mother into this category (she has a masters in mathematics with "computer option").  I really don't know how she managed that one, but she told me that there was a lot of mooching :-D In any case, she's been highly regarded everywhere she's worked for the last few years as one of the better AS/400 developers.  So all hope is not lost; most of the idiots can become very successful and productive programmers once they realize that mooching can't get them through life.

Moving on, there are also the assholes. They're like idiots, but their people skills make them even worse since they posess superior people skills and they will try to manipulate the nerds and the geeks. You can spot these types of people by how they try to use other to their advantage.  For example, organizing study groups.  Real nerds and geeks don't need study groups to prep for exams. And if they do, they will typically do so with a select group of fellow nerds and geeks.  Another common behavioral trait is that they tend to ask many stupid questions, which, aside from the idiots, everyone in the damn lecture hall knows the answer to already.  You can almost hear everyone groan when one of these guys/gals raises his/her hand during a lecture to ask a question with an obvious answer. They ask not because they're curious, but rather to get facetime with the professor. These types of people will typically end up in IT management because of their type A personalities and lack of any real understanding of CS. It's like they accidentally enrolled in CS when they really should have enrolled in business, finance, or opertions management.

Real World Applications

Just for the sake of illustration, I listed some of the real world applications (off the top of my head) assiciated with each branch. Don't make too much of my placement of the text as, clearly, database systems require significant knowledge from each of the branches.

Areas of Study/Disciplines

As with the real world application, these are just rough estimations of a few of the areas of study/disciplines in computer science (random list off the top of my head).

Summary

If there's one thing that you can take away from this, it's that computer science is not for everyone. I think people don't realize how math heavy it really is and how certain fields require extensive knowledge of mathematics. At Rutgers, for example, I think calc. II and introductory linear algebra are required.  You'll find, though, that almost all levels of math courses beyond the required ones play a significant role in different areas of computer science (for example, calc. III and linear algebra (non-intro) are important for anyone that wants to get into computer graphics). In fact, you'll find that many of the courses in math and computer science are cross discipline and can count as credit towards either major (like linear optimization).

In addition, at the graduate level, there are different types of philosophies at different institutions. At Rutgers, the curriculum and research has a heavy theoretical bias (from what my TAs told me) whereas, based on my research, a school like Steven's Institute of Technology offers more practical masters/certificate programs.

I don't know if this will actually help anyone, but I'm throwing this out there for anyone that's thinking about obtaining a computer science degree. Bear in mind that this is from the experience and perspective of one person, me and I offer none of this as fact, so take it with a grain of salt ;-)

 Wednesday, October 12, 2005