Wednesday, July 26, 2006

You wouldn't believe

How difficult it is to find a list of all the compile-time variables available from the Visual Studio IDE. I had to dig around and search for something like 4 of them among the various projects I have to put in Google and even then I had to scroll down to the bottom of the first page of links.

http://msdn2.microsoft.com/en-us/library/c02as0cs.aspx

Microsoft seems to be intentionally messing up Google search results. Then again, their own search engine can't find that page. This doesn't make sense. They obviously want people to use their search engine, but if it can't find stuff, let Google find stuff for you and don't pull dumb tricks to stop them from scanning the site.

Unfortunately, I don't see anything there that will help me a lot. So frustrating.

Those pictures ARE coming. I haven't taken them yet because I'm trying out multiple ideas for working copy mobilization of a subversion repository. One method definitely works (SVNCopy - a tool I wrote) but someone mentioned another possibility and it isn't working. Visual Studio is being really dumb about linking files across multiple drives. Even I could figure out where the data is but apparently some programmer at Microsoft is severely incompetent. I wouldn't doubt it either. I recently saw a video of some guy on "Channel 9" (MSDN) who blabbed on forever about something but what stuck out was that he admitted that works on the Visual Studio team and also admitted he knew nothing when he joined Microsoft. That explains a few things.

Until today I haven't had more than the occasional problem with Intellisense. With this latest experiment, Visual Studio is completely barfing.

Wednesday, July 19, 2006

Lexmark Printer Driver Removal is a...

Really large pain in the neck. When I purchased my main PC, it came with one of those "free" Lexmark printers that chew ink for breakfast and force you to clean the cartridges every two minutes.

A couple days ago, I decided to do my "let's analyze Task Manager and see if there is anything I can clean up" mid-year cleaning. I discovered a few applications that had managed to sneak back into the startup sequence either through updates or simply running them (I hate Apple QuickTime with a vengance). And I noticed a number of SYSTEM processes running. After uninstalling the Lexmark drivers and applications about a year ago, I noticed that Lexmark had kindly left stuff installed. I also noticed that I couldn't shut down and disable the Lexmark printer service without also eliminating the printer spooler. I realized it was going to be more effort than it was worth, so I left it alone.

Which brings me to today. Today I finally eliminated the last remnants of the Lexmark printer drivers. I got some hints from an Experts Exchange dialog that happened between someone else who wanted the same thing, but I realize that there are a LOT of people out there with the same problem - LexBceS.exe and LexPPS.exe keep coming back from the dead and showing up in Task Manager complete with dependencies on the printer spooler. So, I've created a solution that takes just a few keypresses and 'poof' everything Lexmark printer driver related is removed from the system:

http://www.cubiclesoft.com/Unrelated/RemoveLexmark.bat

The above batch file is pretty cheesy looking when it runs (as far as applications go, it looks very old-school). It also only works properly on Windows XP and later. You can easily tweak it by saving it to your hard drive and right-clicking and selecting the 'Edit' option. The "XP-only" feature in question is the 'taskkill' section. 'taskkill' is a utility that kills a running process from the command-line. You can replace those lines with pskill from SysInternals (www.sysinternals.com) but that is an extra download and I was feeling lazy.

Even when you finish running RemoveLexmark.bat, you will want to go into the C:\WINDOWS directory and search for Lex*.* files. On my machine, three files that were supposed to be deleted by the batch file didn't get deleted. So I manually deleted them.

The fact that it takes a batch file from an advanced programmer that executes a ton of commands to remove Lexmark's terrible print drivers from a system says something about the quality of the programmers at Lexmark.

Wednesday, July 12, 2006

The Ultimate Chair (Part III)...

Today I put the finishing touches on the Ultimate Chair. I first went to Meijer and bought some supplies. A digital egg timer, some velcro with sticky backing, and a nice fluffy black pillow.

As I said in Part II, the lumbar support poked into my back and made sitting in the chair very uncomfortable. The first step to making a chair comfortable is to determine how to eliminate the uncomfortable components. I solved the majority of the problems by flipping the lumbar support over its support mechanisms and made it hang down the back of the chair. Detaching the unit entirely is possible but is rather difficult. Besides, it still looks "okay".

With the lumbar out of the way, I started experimenting and figured out the dimensions of a pillow that would make it possible to sit comfortably in the chair. I found a really great poly fill pillow that matches the black in the chair. I would have liked it to have an olive drab green in the center and black on the edge to better match the chair's color scheme, but all-black will work fine.

Amazingly, the back support on the egg timer was exactly the same width as the velcro I bought. Using a pair of scissors I cut out a properly sized velcro strip. I determined that the "hard stuff" should be on the piece I want to attach and the "soft stuff" should be on the chair. That way if I decide to remove a piece for whatever reason, the "hard stuff" won't be left behind and annoy me. Placing the egg timer's velcro was easy: I stuck both pieces together and removed the backing from the "soft stuff". This allowed me to place the "soft stuff" exactly where I wanted.

Then I moved on to the mouse pad support. I cut out two right triangles of a scrap 1" thick wood board. One triangle was 3" x 1.5" and the other piece was 3" x 2". Then I put both pieces together such that their right-angle corners were perfectly aligned using wood/carpenter's glue. I clamped the pieces together and left them overnight to dry. Then, I wrapped the two pieces in that funky rubber-like "grip-liner" stuff I used on the base of the mouse pad and stapled it down (with a staple gun) for a nice smooth black finish that looks really slick. Finally, I repeated the velcro procedure used with the egg timer and attached the unit to the chair.

The last step was to give the chair a go and here's my analysis: It is totally awesome inside. Assuming I get good sunshine tomorrow, I'll try it outside and take pictures. Part IV will have pictures of the key components as well as giving you a rare look of me sitting outside. Be forewarned...I'm still quite the ghost.

I'm impressed with what I've built. It is a highly customized chair designed for software developers. If I were to build another one, the cost would be considerably less. I have a much better idea of what is involved and I have a bunch of the materials already and what I don't have, I know how and where to get it.

Total cost for the project: $122.57 (USD)
Total time taken for the project: 1 week. Actually making it took only a couple days. The design work took most of the time.
Items used: 1 "Portable Outdoor Laptop Chair". A cordless phone. A surge protector. A mouse pad. A sheet of 1/4" Plexiglas. A sheet of rubber-like "grip liner". A bottle of contact cement. A digital timer (aka "egg timer"). Velcro strips. Fluffy black pillow.

Tuesday, July 11, 2006

The Ultimate Chair (Part II)...

Today I went out to the store and bought a number of supplies for the Ultimate Chair. As I was driving away I noticed a large'ish package at the front door.

First I went to OfficeMax and picked up a mouse pad and surge protector with a 6 foot extension cable. I figure that is long enough. It has safety plugs which should help reduce overall risk in case of a sudden thunderstorm. On my way to the checkout I helped an elderly'ish lady figure out what button battery went with her key locater device.

Then I wandered over to Best Buy because it was raining and the two stores are right next to each other. While I was there I wandered around. I had no intentions of buying anything but by pure coincidence I wandered into the cordless phones section of the store just as someone was pointing out that a $24.99 phone was $9.99 after rebate. I determined I needed this for two reasons: To be able to handle technical support calls outside and to see if this phone fixed a major issue I always have with automated systems that require "press the # key after entering such-and-such a number". My '*' and '#' keys don't work properly on my super old phone and someone told me that a different phone might work.

It eventually stopped raining and I went on to my third destination: Home Depot. I picked up a sheet of 1/4 inch Plexiglas, a roll of sheet foam rubber, and some contact cement.

Then I went back and picked up the package at the front door and opened it and got started to work. The first step was to figure out the best way to make it comfortable to sit in the chair. Let me take this opportunity to state that "lumbar support" should be stated "we have figured out how to put a rock in your back to make you incredibly uncomfortable - and it isn't optional".

I figured out how to make it comfortable. However, the secret will be left for the next edition of The Ultimate Chair.

This edition introduces you to a product that, amazingly, doesn't exist but really should. A mouse pad for an external mouse for a laptop.

You might say, "Big deal - the mouse pad exists already." Sure, for PC users. Laptop users could buy a gaming mouse pad which is made of 100% plastic, but I'm picky and prefer cloth mouse pads. What if there was a mouse pad that felt exactly like a cloth mouse pad (complete with its squishy goodness) but didn't flop around AND maintained its grip?

People constantly ask me, "Why bother with a mouse at all?" Productivity. Touchpads and trackpoints (or whatever they are called) are incredibly unproductive to use. External mice are far faster and more accurate. Laptop users are supposed to use shortcut keys to be efficient, not their touchpad/trackpoint. I prefer a nice balance that allows me to maximize efficiency. However, to achieve maximum efficiency with an external mouse, I need a flat surface designed for maximum trackability, which means I need a mouse pad with my laptop.

Anyway, I digress. My solution to this problem involved creating multiple layers. The first step was to trace the outline of the mouse pad onto the Plexiglas. I think I messed this up slightly by using a pen, but no harm was done.

The next step was to cut the Plexiglas. I'm not exactly what you would call a "handiman". However, I have the power of Google on my side and I looked up how to cut it before I made my trip to the stores. I did what people suggested and tried out a couple cuts on the excess portions before making the real cut. My first cut was a disaster. I was using a table jigsaw and about 2 inches in, the plastic melted and cooled around the blade. If you've never used a table jigsaw before (uh, this was my second time ever), getting the blade "frozen" 2 inches from the edge of Plexiglas is a very painful experience. I extracted the blade by grabbing a hammer and screwdriver and carefully pounded to minimize the potential impact to my layout.

I reset the jigsaw blade and then sat and thought for a long time. Then I remembered reading something about methods people use to reduce the probability of melting. So I went back and read the tips people had. I settled on using three layers of tape and ice cubes and wished I had one of those really powerful water-driven cutting tools that cut steel like butter. Once the tape job was done, I grabbed the first ice cube and put it up to the blade and started cutting. When I was done, the blade was actually a good 10 degrees below room temperature.

Once the Plexiglas was cut, I sanded the edges down to a nice smooth finish. This was done so I wouldn't cut myself on the "sharp edges". Technically, Plexiglas doesn't cut, but I can attest otherwise. I'm glad I chose the ice cube route - little tiny microfragments of Plexiglas tore up portions of my hands - the water and tape kept the shards localized to the surface of the table - if I had used any other option I could have ended up with nasty particles in my eyes. Yes, I'm an idiot for not wearing protective gear but nothing on Plexiglas that I read said, "If you don't wear protective gear, you're a doofus."

With the Plexiglas cutting and sanding done, I was ready to glue the first two pieces together. I used contact cement. This stuff is incredibly potent and highly intoxicating. Don't even open the bottle unless you have some serious ventilation going. If you have ever used modelling glue, this stuff is 5-7 times as potent. I followed the directions but noticed that it was drying a lot faster than advertised and scrambled to piece the first two layers together.

Then I got out the "sheet of foam rubber". To be honest, it isn't exactly "foam rubber" but it has sufficient gripping properties like the real foam rubber on the bottom of cloth mouse pads. I cut it to the size of the mouse pad using a utility knife. Finally, I attached it to the mousepad/Plexiglas combo using the contact cement.

The result is an incredible mouse pad that I can use on any mostly level surface. The Plexiglas creates a solid layer not unlike a table. The "sheet of foam rubber" on the bottom provides a gripping surface that works on just about everything. So, just to quickly summarize the layers:

- Cloth mouse pad (with foam rubber backing - I prefer 1/4 inch thick)
- Contact cement
- Plexiglas (cut and sanded)
- Contact cement
- Sheet of foam rubber (the thinner this is and the stronger the gripping surface, the better)

Creating the mouse pad is just part of the equation. I took it over to the chair and determined that the mouse would fall off but the pad would stay put. Clearly, the chair has to be modified to support the mouse pad.

A trip to the store is necessary to get the remaining supplies. I knew the external mouse would be tough to do right. The mouse pad has many different uses outside of the chair. For instance, someone could fly somewhere and put a similar mouse pad under the edge of their laptop on the tray and the mouse pad would dangle in the air past the edge of the tray.

If I were to do this over, I would have done two things differently:

1) Put on proper safety equipment (maybe even obtained a gas mask).
2) Used two 1/8 inch layers instead of one 1/4 inch layer. 1/8 inch makes "scoring" and breaking a lot easier than 1/4 inch and I could have saved a lot of time by quickly scoring the Plexiglas and breaking it and only using the jigsaw on the corners.

Total cost so far: $98.69 (USD)
Items so far: 1 "Portable Outdoor Laptop Chair". A cordless phone. A surge protector. A mouse pad. A sheet of Plexiglas. A sheet of rubber-like "grip liner". A bottle of contact cement.

Saturday, July 08, 2006

The Ultimate Chair (Part I)...

Continuing from my tirade yesterday, I think I've found a base to form the ultimate chair for software developers who want to work outside:

http://www.hammacher.com/publish/72852.asp?promo=xsells

See my previous post for some basic comments on the chair, but after some additional thought, I am fairly certain that I can put together several modifications to the chair to create the ultimate outdoor office space. The first step I see is to obtain one of the aforementioned chairs and set it up to get a better idea of what supplies I will need.

Let's look at the checklist and see what issues will be solved up front by this chair and what I will have to do myself:

1) Is it comfortable? Well, I have sat in these sports chairs before and they are both comfortable and uncomfortable at the same time. I have strange sitting habits. I rarely sit in front of a computer screen in a chair the way it was designed. For instance, I am currently in the fetal position (feet on the chair, knees tucked into the chin). However, this chair has the foot rest and is adjustable so I'm hoping I will find a nice compromise here.

2) Obviously there is no swivel mechanism. There is no way I'd leave the laptop alone anyway. Getting out of the chair with a laptop could be complicated because of that weird strap thing. One thing to note - apparently the balance is good because no one is sitting in the chair and it isn't toppling over with the laptop there.

3) The mouse. There is no good spot for an external mouse. I'll have to construct such a spot from components available to consumers.

4) Reclinable. Not so much, but the foot rest makes it easy enough to slouch down and take that nap. Good enough. Egg-timers are a "dime a dozen" so to speak. It can hide away in the pouch at the side. However, I won't want one that "ticks". The ticking would drive me nuts.

5) Electricity. The legs are probably metal so attaching an electrical outlet would be a dumb idea (humorous, but dumb). I'll probably want a very heavy-duty extension cable, a good surge protector (probably APC), and those funky plastic electrical plugs used for protecting outlets from small children (i.e. water and electricity don't mix). It'll look really ugly but it'll work.

6) Can collapse. Yup.

7) Cup holder. It isn't quite at a position readily available but out of the way of danger, but it would have to be a huge disaster to be an issue (i.e. miss catching a falling laptop and hit the drink out of the holder at the same time). Good enough.

One big concern I have is with friction. Vinyl isn't exactly the best support platform for a laptop. I'll have to wait for the chair to arrive to make certain, but I may have to get really creative to keep the laptop from moving around. I've been doing research into what I think will get the job done but it could require spending $350 (more) to achieve the desired effect.

So, while I wait, I will work on building up the collection of items I know I will need for this endeavor. The next part will cover the creation of the ultimate surface for the external mouse.

Total cost so far: $48.90 (USD)
Items so far: 1 "Portable Outdoor Laptop Chair".

Friday, July 07, 2006

Outdoor furniture for Software Developers...

Doesn't exist. Yet. I'm not joking - there really isn't anything out there.

I ran at least 20 searches on Google looking for outdoor furniture designed specifically for software developers to achieve top performance while working outdoors. Including, but not limited to, "lawn chairs", "outdoor furniture for software developers", "outdoor furniture", "how to get software developers outside into the sunshine", "getting software developers into the sunshine", etc.

Edit: Stepping away from the computer for a few hours can do wonders. I found something close to what I want, but not quite. The keywords were a lot simpler than what I had been trying "outdoor chair laptop". Only that combination of keywords will bring up this chair:

http://www.hammacher.com/publish/72852.asp?promo=xsells

It is close, but I've sat in those funky green sports chairs before and they aren't very comfortable (IMO). The so-called laptop support that you see in the picture is made of the same flexible material as the rest of the chair and it sits at an angle. There is also lack of space for an external mouse. Despite that, this is probably the best single-unit solution to date. The only single-unit solution.

The reason I started hunting for a chair is because I know I spend too much time indoors. I'm not ignorant of that fact. I'm also aware that everyone needs about 15 minutes of sunshine every day to absorb Vitamin D so that Vitamin A can be broken down so that we won't go blind. What is really hilarious is that there are plenty of articles out there stating that "not enough Americans get out into the sun" but don't bother telling us how to get outdoors while still accomplishing our jobs. What got me to actually search for this is someone telling me how "pale like a ghost" I look like. Most 'Americans' are "white". I'm "whiter than white". Essentially, I'm not normal, but everyone already knows that. I just decided that it was time to do something about it. Lo and behold, there isn't anything I can do because the equipment necessary to do my job outdoors simply does not exist.

There is an incredible need for outdoor chairs for software developers that is not being filled. So let me draw a mental image of the perfect outdoor chair for the software developer:

1) It has to be comfortable. Most outdoor chairs don't allow for comfortable sitting for doing work. They are great for relaxing, but that's not the purpose of this chair. This one is for doing office work outdoors. Obviously the fake leather executive chair which I find relatively comfortable indoors would wear out quickly outdoors, but that is the sort of "comfort" I'm talking about.

2) It has to have a mechanism (preferably a swivel of sorts) to support up to 15 pounds of laptop computer. This mechanism should also be comfortable (i.e. no sharp metallic edges). The unit should have sufficient weight to not topple when no one is sitting in the chair (e.g. the owner gets up to go to the bathroom). If a swivel mechanism is used, there should be multiple "locking" positions. Assume the chair will be put on relatively level ground.

Edit: I found a really cool swivel mechanism here:

http://www.ergostoreonline.com/viewmaster-laptop-stand.html

Obviously, it would have to be a different color. And be cheaper. Otherwise, it is very cool.

3) There should be two types of chairs: Right-handed and left-handed. For right-handers such as myself, the laptop should swivel from the left and there should be a comfortable elbow rest on the left-hand side. The right-hand side should have a slightly shorter armrest (length-wise, it should have the same height) and a place to put a mousepad and mouse slightly below where my wrist would drop down. Essentially, there would be a blocky rectangle'ish thing attached to the armrest on the right. The setup would be reversed for left-handers.

4) The back of the chair should be somewhat reclinable for taking a nap. There should be an "egg timer addon" kit that keeps the person from being sunburned (nap or otherwise). If people are going to take naps on this chair, it would be great to have a full, back-support similar to what you find in indoor executive office chairs.

5) Have an "addon" kit for getting a surge-protected electrical outlet to the vicinity of the chair. Laptops require power and it is pointless to have a chair to sit in outdoors if there is no power source for the laptop. I would suggest an electrical outlet attached to the chair itself, but that's probably illegal. Not to mention dangerous (especially if the chair is made of metal).

6) Having the chair be able to collapse would be a nice feature but not required. Most people and companies will not move the chair around much because of the need for a power source. Essentially, this is going to be a stationary outdoor object that people sit on to do work on.

7) A cup holder should reside aligned with the seat (left-hand side for the right-handed chair). Sitting outdoors and doing office work is going to require more frequent fluid replenishment, but standard cup holders in most outdoor chairs put the cup in the way of creating a disaster (fluids and computer equipment doesn't mix). This allows the drink to be handy but not cause a disaster.

By the way, I'm not interested in a "chair with a table" combinations I know someone will come up with and try to persuade me is "what I need". I want the chair I just described and nothing else will be satisfactory. End of discussion.

Essentially, what I've described is going to create some really ugly prototypes. It will be big, bulky, rectangular, and ugly looking but will be super-awesome comfortable. If anyone in the computer chair or lawn chair industry takes this idea to production, please seriously consider me as the major "beta tester" of the product because chair manufacturers seem to never have anyone in mind, especially the customer.

Now I'm off to find an electrical socket to attach to my chair.