Fork me on GitHub

Drew's World

Rants, News, Etc on my Life and Projects

The UpDesk UpWrite

by Andrew De Ponte (@cyphactor)


Over the last few years I have been paying more and more attention to ergonamics in my workspace. It all began when I started having issues with my wrists and given I am a software developer I need my hands to work properly. This sent me down a path of exploring ergonomic keyboards and standing desks. I started trying out the cheaper ergonomic keyboards and never had any luck. Enter the Kinesis Advantage Pro, I finally decided to drop a chunk of change on it and I really haven’t looked back. My next exploration will be the ErgoDox which I recently ordered all the parts for.

A little bit before I switched to the Kinesis Advantage Pro I switched to a fixed height standing desk which I bought from Ikea for approx. $150. I have been using the fixed height standing desk for over a year now and I love it. However, the more research I do around the topic the more I have found that it isn’t good to stand all day, which is what I currently do. Therefore, I started looking into motorized standing/sitting desks. After a lot of research I finally decided on the UpDesk UpWrite. It is at the lower end of the price range, $1,149.00, for motorized standing/sitting desks but it has the specs of a lot of the more expensive alternatives. It also has the added benefit that it is a dry erase/wet erase surface so you can scribble notes on it while working.

The Setup

Putting it Together

My UpDesk UpWrite arrived tonight and it was actually very straightforward in terms of physical setup. The included instruction sheet explained things very well. It is actually much simpler in my opinion than most Ikea furniture. It probably took me 25 mins to get it put together. I was extremely impressed with the quality of packaging and the quality of the parts them selves. It seems to be an extremely solid piece of furniture that will last a long time.

Initializing and Calibrating

Once I physically setup the desk I tried to initialize it and callibrate it. Initializing the desk was very straightforward on their instruction sheet and worked like a champ. Calibrating it on the other hand did not work following the instructions they provide. The instructions for calibration that were provided are as follows:

  • At any height, measure the distance from the floor to the top of the desk.
  • Press both the “UP” and “DOWN” arrows at the same time until the display shows three bars (—).
  • Release and immediately set the correct height by pressing either the “UP” or “DOWN” arrow until the correct height is displayed.

I tried the above steps numerous times and every time I got to the third step and pressed the “UP” or “DOWN” arrows to adjust the displayed height it would also move the desk up or down which made no sense if the goal of the process was to callibrate the height.

So, it took a little playing around but I finally figured out how to properly callibrate it. The directions to calibrate it should really be as follows:

  • At any height, measure the distance from the floor to the top of the desk.
  • Press and hold both the “UP” and “DOWN” arrows at the same time, the display will immediately display three bars (—), continue to hold the “UP” and “DOWN” arrows until the display flashes from (—) to the displayed height.
  • Release and immediately set the display to height you previously measured in the first step by pressing either the “UP” or “DOWN” arrow until the correct height is displayed.

Dialing in Presets

Once I had it all calibrated I followed the rest of the instructions to set the presets to heights that I like for standing and sitting. All worked great.


So far the UpDesk UpWrite seems like a great desk. It was a little frustrating that the directions weren’t clear enough, or rather just plain wrong, for how to calibrate it. However, I am willing to look past that small hickup and I hope this blog aids others in getting their desks calibrated quicker than I did.

Shrinking Vagrant Linux Boxes

by Andrew De Ponte (@cyphactor)

So, lately I have been using Virtual Machines via Vagrant a siginificant amount as we are now using them to host our development environments and dependencies for all the development work we do. We have been using Puppet to automate the configuration of our environments and to make building our boxes easier.

Once you have provisioned a VM and you have it all dialed, you will most likely want to create a Vagrant Box from that VM and host it up on S3 so that new developers can get started simply by installing Vagrant, cloning your repository and running:

$ vagrant up

This actually works great. However, I found that the VM disks both for the Vagrant VMware Provider and the VirtualBox Provider grow dynamically, but they never shrink. So, when I was going through the process of building the VM and installing all the dependency software, etc. it was bloating the base machine. This was the case even though I removed the temporary cruft from the filesystem on the guest.

With a little research and some trial and error I found that you can shrink these disks as long as they are ext3 or ext4 file systems with the help of the following command:

$ vagrant ssh
$ sudo dd if=/dev/zero of=wipefile bs=1024x1024; rm wipefile

What the above command is doing is simply writing zero bytes to the wipefile in chunks of 1024 bytes until there is no disk space left in your VM’s disk. Then it is removing the wipefile. This basically leaves all those excess bytes zero’d out.

This is necessary because the shrink/compaction tools provided by either VMWare or VirtualBox both have no way of identifying space they can free up in the disks unless they are zero’d out.

Before shrinking/compacting you should always make sure to exit the guest machine using the following commands:

$ exit
$ vagrant halt

With VMware you can shrink the vmdk disk by doing the following:

$ vmware-vdiskmanager -d /path/to/main.vmdk
$ vmware-vdiskmanager -k /path/to/main.vmdk

I discovered the above commands in the Vagrant VMware documentation,

With VirtualBox the only way I was able to shrink the disk image was to clone it to a smaller copy using the following command:

$ VboxManage clonehd name-of-original-vm.vdi name-of-clone-vm.vdi

Once you have cloned the vdi you can then import it into the VM through VirtualBox and get rid of the original vdi.

That is how you “Shrink Vagrant Linux Boxes!”

AT&T Samsung Galaxy S3 with Google Voice

by Andrew De Ponte (@cyphactor)

Hi All,

It seems there is a little hickup with the instructions google provides you with to “Activate Google voicemail no this phone”. That is at least for the instructions for AT&T while trying to get Google Voice setup on an AT&T Galaxy S3. The instructions Google provides say to enter the following exactly as written as if dialing someone.

*004*1<your 10 digit phone number>#

Every time I tried the above instructions my phone would return an error code. I got so frustrated I even got online with AT&T tech support so that they could verify the state of things as I was trying various other commands that I found on the web. None, of the ones that worked allowed me to setup Google Voice as my voicemail provider appropriately. After being online with AT&T tech support for a while. I tried simply prepending another * character to the entire thing. Guess what, magically it worked. I even had AT&T tech support verify that it made the proper configuration change on my account. So the correct command that Google should be telling people to enter exactly as written is really the following:

**004*1<your 10 digit phone number>#

To disable voicemail forwarding I used the following MMI code.


Anyways, hope this blog post helps some other people struggling with this out there. I know when I was searching I couldn’t find any solution though I did see a number of message boards with people looking for an answer to this problem. If I were a better person I would probably go back and update all those message boards with my solution. I just can’t bring myself to do it.

RVM Installed Ruby (SSL certificate verify failed)

by Andrew De Ponte (@cyphactor)

Recently a few of our developers were having problems getting SSL certificate verify failures in Ruby. The error was the following:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:799:in `connect'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:799:in `block in connect'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:799:in `connect'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/net/http.rb:744:in `start'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:306:in `open_http'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:775:in `buffer_open'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:201:in `catch'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:677:in `open'
  from /Users/adeponte/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:33:in `open'

The error was reproducable by running the following Ruby snippet in an irb instance of the RVM installed Ruby version.

require 'open-uri'
open ''

I spent a good amount of time digging into things and trying to figure out exactly what the issue was. I came to the conclusion that they either had an out of date Root CA Certificate Bundle or SSL couldn’t find it for some reason. So, I went down the path of trying to import cacert.pem from (cURL’s website).

I went down this path because I vaguely remember doing this at some point in the past to solve the Twitter API SSL Verify fail issue when they changed their certs. I ran into a huge amount of difficulty trying to get the thing imported or converted into a format that Mac OS X Keychain Access would be happy with importing. I tried pem, crt, pck12, etc. Nothing I did seemed to make a difference.

This is when I saw a post of someone talking about SSL being installed inside of RVM and I looked at the latest output from rvm requirements. I quickly noticed that it now says to install SSL via the following command:

rvm pkg install openssl

Come to find out if you have run the above command before installing your Ruby version it will be using the RVM packaged openssl instead of the system openssl. That also means that the Root CA Certificate Bundle is different, or in this case, missing completely.

After discovering this and doing a little googling I found the solution to be as simple as the following command:

curl -o ~/.rvm/usr/ssl/cert.pem

I found this solution on the following blog post Hopefully, writing another blog post on the subject and linking to this one will help it gain its ranks in google search so that other people can find it quicker.

After running the above command you should now be able to restart your irb instance and re-run the test snippet described at the beginning of this post. This time you should get output looking similar to the following:

 => #<File:/var/folders/j_/9nxyjmd10js8g1sjx446vrsm0000gn/T/open-uri20120907-36935-4i4y64> 

Just like that your SSL woes are gone.

Finished Laying Bathroom Tile

by Andrew De Ponte (@cyphactor)

Well, it has been a while since I posted any of my progress on the house. So here is a little update.

This weekend I finished laying all the tile in the bathroom shower, the bullnosed tiles for the baseboard and setting the shelf in the shower.

I also bought a wash tub for the garage. I did this so I can scrub my hands and my tools without having to come inside the house. Tonight I constructed the pipe system to connect from the wash tub to the existing drain system in the garage.

Anyways, my next steps for the bathroom are to clean all the tiles and make sure the grout paths are clear. Once, I have cleaned up the tile and grout paths I will be ready to grout the tiles. I will be using a polyblend sanded grout and a color matched caulk in the inner corners of the shower. I was told that I should use the caulk in the inner corners because the walls expand and shrink as the temperature changes and it usually causes grout in the inner corners to crack. Hence, use caulk because it is more flexible and can absorb the expansion and contraction of the walls.

I feel pretty good about all the progress I have made this weekend and can’t wait for the shelf to finish setting so that I can clean up all the tile and get to grouting. The vision of the bathroom is finally starting to come together and I can’t wait to get it finished.

Till next time.