I Left Dreamhost

I Left Dreamhost

I was a Dreamhost customer for twelve years (2006-2018).

I have never needed a webserver for anything life critical or even for anything all that important.  I use a webserver for rather pedestrian reasons, primarily very small web hosting.  I suspect that after culling out web crawlers, 90% or more of the traffic to my websites is me.  I also like to have control over my email server.  I don’t have great reasons for doing it, but I like having complete control over my email.

In 2006, Dreamhost was the best webhost you could find.  A lot has changed since then, not all of it is necessarily the fault of Dreamhost.  I have lived through numerous outages, including some that lasted days.  I have lived through Dreamhost all but banning email servers.  I have migrated from shared hosting to virtual private servers to cloud compute.

Back in the day Dreamhost offered technical solutions and features that were hard to come by.  Today, webhosting has become a commoditized process.  Containerized and virtualized servers mean you as the user are now in control of everything.  Gone are the days where a webhost adds much value, instead today a webhost provides little more than bandwidth and hardware.  The less cruft and abstraction between me and my machine the better.  As always the more uptime the better.

In my experience, and I suspect the data bears this out, AWS uptime is better than Dreamhost’s.  While DreamCompute is a good step, Dreamhost’s implementation of OpenStack still puts too much between me and my server.

This year I finally decided that it was time to move everything to an AWS instance.  It was the right decision, since moving everything has been much easier with little to no downtime.

So long Dreamhost, it has been real.


Technical Inspection of Insteon Hub2 2245-222

Technical Inspection of Insteon Hub2 2245-222

The following are some notes I gathered while investigating the technical possibilities of the Insteon Hub2.

Starting Nmap 6.40 ( http://nmap.org )
Nmap scan report for 192.168.XXX.XXX
Host is up (0.00058s latency).
Not shown: 65535 open|filtered ports, 65531 filtered ports
23/tcp open telnet
443/tcp open https
992/tcp open telnets
25105/tcp open unknown
MAC Address: 00:0E:XX:XX:XX:XX (Smarthome)

Nmap done: 1 IP address (1 host up) scanned in 2306.43 seconds

I can connect to both telnet ports, but all I get is a blank screen that doesn’t seem to respond to any commands.  It also doesn’t seem to broadcast the buffer contents.

After a lot of futzing, I was able to connect to the https 443 port.  It uses the deprecated RC4-MD5 cipher and a self-signed certificate.  You will also need to use Basic Auth and the username and password.  Once in, the webpage looked identical to the one described below, I was unable to determine any other benefits of this port.

The 25105 port is configurable.  It is a basic http port that requires Basic Auth using the username and password printed on the bottom of your hub.  The default webpage is very basic, with a link to http://connect.insteon.com and the product manual and support pages.

There is some rudimentary available at this port.  It is rather crudely documents (as is Insteon’s style) here: http://cache.insteon.com/developer/2242-222dev-062013-en.pdf.  See pages 6-10.  Note that this document is actually for the Hub1, I have yet to find any developer notes for the Hub2.

The buffstatus.xml page provides access to the incoming messages for the Hub2.  Of note, the Hub2 has a 200 character buffer not the 100 listed for the 2242-222.  Also, undocumented is the final two characters of the buffer.  These turn out to be a hexadecimal representation of the last position written to.  Essentially, the incoming messages are written left to right and when the 200th position is reached it goes back to 1.  The characters are never cleared (unless you call a special command to do so) but are merely overwritten.

It is possible to poll the Hub2 about twice a second and to use the buffer to see all of the messages received by the Hub2.  This seems to work rather reliably, and the constant polling doesn’t seem to upset the device.

I am not aware of a way to see outgoing messages.

The interface also allows for sending of some messages.  See the http://xxx.xxx.xxx.xxx:25105/3?YYYYY=I=3 documentation in the above pdf.  This seems to provide an interface to communicate with devices from the hub.   However, as of yet, I am not able to communicate much if at all with the hub using this interface.  As a result, I am unable to scan the hub’s link table.  Update: Figured it out.  So far all of the common PLM commands seem to work with the 3?<CMD STR>=I=3 style message.  But, anytime a 3?<CMD STR>=I=3 style message is sent, the buffer is zeroed out and the buffer position is reset to 00.

Finally, I took a TCPDump of the Hub2.  Best I can tell, the Hub2 doesn’t open any outside ports on my router.  This is contrary to the claim that it does “automatic port forwarding.”  This is probably for the best security-wise anyways.

Instead it appears that the Hub creates a persistent connection to insteon.pubhub.com (hosted on Amazon Ec2).  Poking around http://www.pubhub.com confirms this.  The communication is all SSL encrypted.  I thought about placing a man-in-the-middle and trying to decode this messaging, but I doubt it would be much help.

Speed Up WordPress on Dreamhost Using Custom MySQL Server

Speed Up WordPress on Dreamhost Using Custom MySQL Server

I run all of my services on a Dreamhost VPS instance.  I have even upgraded to the newer VPS with 1GB of RAM. Yet, my WordPress instances have become stupid slow.  Like 2-3 seconds to load a page slow.

I had chalked this up to the complexities of WordPress and the various plugins that I had installed.  However, eventually I became so frustrated I tried disabling each all plugins and discovered that this had little effect.

After more poking around, I installed a query monitor plugin and discovered that my SQL queries were taking more time that I would have anticipated.

Frustrated, I installed the MySQL server on my local VPS, and then copied over my database.  Viola!  All of the slowness disappeared.  I went from having 3 second load times to less than half second load times.  The following is a chart from Google showing the load times each time it crawled my site.  You can clearly see the date when I switched over.


The moral of this story is that the shared MySQL server that comes with a Dreamhost VPS account is absurdly slow.  Stupidly so.  Luckily, there is plenty of RAM on a VPS instance to run a MySQL instance.

Making the Dreamhost Nginx Install More Standard

Making the Dreamhost Nginx Install More Standard

Dreamhost maintains a custom Nginx package that is installed on all of its VPS servers.  The package contains a number of modifications that make it easier for Dreamhost to configure Nginx from a central location.  In addition, the Dreamhost package contains a significantly more recent version of Nginx (1.4 at the moment) compared to what is available in Ubuntu 12 LTS (1.1.4 at the moment).

You can easily modify the Dreamhost configuration files to make Nginx act more like a standard Nginx install.

Find the following line in the /dh/nginx/servers/<<server>>/nginx.conf

include /dh/nginx/etc/config.d/*;

Replace it with the following:

include /etc/nginx/config.d/*;
include /etc/nginx/sites-enabled/*;

You can then create a /etc/nginx/sites-available and /etc/nginx/sites-enabled directories.  Place your vhosts file in the sites-available directory and symlink them to sites-enabled when you want to turn them on.

For reference, this is Dreamhosts default vhost file:

# Vhosts:
server {
 listen &lt;&lt;server_ip&gt;&gt;:80;
 server_name &lt;&lt;domains_to_host&gt;&gt;;
 access_log /home/_domain_logs/&lt;&lt;username&gt;&gt;/&lt;&lt;domain&gt;&gt;/http/access.log combined;
 error_log /home/_domain_logs/&lt;&lt;username&gt;&gt;/&lt;&lt;domain&gt;&gt;/http/error.log error;
 root /home/&lt;&lt;username&gt;&gt;/&lt;&lt;domain&gt;&gt;;
 # Mitigation for CVE-2013-4547
 if ($request_uri ~ " ") {
 return 444;
 index index.html index.htm index.php index.php5;
 include /home/&lt;&lt;username&gt;&gt;/nginx/&lt;&lt;domain&gt;&gt;/*;
 # No mirrors - using strict redirects
 if ($http_host != &lt;&lt;domain&gt;&gt;) {
 rewrite ^(.*)$ http://&lt;&lt;domain&gt;&gt;$1 permanent;
 autoindex on;
 # Disallow access to config / VCS data
 location ~* /\.(ht|svn) {
 deny all;
 # Statistics
 location /stats/ {
 alias /home/_domain_logs/&lt;&lt;username&gt;&gt;/&lt;&lt;domain&gt;&gt;/http/html/;
 auth_basic "Statistics Area";
 auth_basic_user_file /home/_domain_logs/&lt;&lt;username&gt;&gt;/&lt;&lt;domain&gt;&gt;/http/html/.htpa$
 location /doc/analog/ {
 alias /usr/share/analog/;
 # PHPMyAdmin
 rewrite ^/dh_phpmyadmin/([^/]*)/(.*)$ /dh_phpmyadmin/$2;
 location /dh_phpmyadmin/ {
 alias /dh/web/phpmyadmin/;
 location ~ /dh_phpmyadmin/(.+)\.php {
 alias /dh/web/phpmyadmin/;
 fastcgi_param SERVER_PORT 80;
 fastcgi_split_path_info ^(.+\.php)(/.*)$;
 include /dh/nginx/etc/fastcgi_params;
 set $relpath "index.php";
 if ($uri ~ ^/dh_phpmyadmin/(.+)$) {
 set $relpath $1;
 fastcgi_param SCRIPT_FILENAME /dh/web/phpmyadmin/$relpath;
 fastcgi_pass unix:/home/&lt;&lt;username&gt;&gt;/.php.sock;
 # PHP
 location ~* \.(php|php5|php4)($|/) {
 fastcgi_param SERVER_PORT 80;
 fastcgi_split_path_info ^(.+\.(?:php|php5|php4))(/.*)$;
 if (!-e $document_root$fastcgi_script_name) {
 return 404;
 include /dh/nginx/etc/fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_pass unix:/home/&lt;&lt;username&gt;&gt;/.php.sock;
 #pragma php_launch &lt;&lt;username&gt;&gt;

 Starting PHP FastCGI

Dreamhost uses a custom script to instantiate the PHP-Fastcgi instances for each user.  If you do the above customizations, the Dreamhost method will no longer work.

To overcome this, you will need to install spawn-fcgi and follow the instructions here:


You will need to coordinate the PHP user and the Nginx web user so that they can read each other’s files.  Personally, I only want a single web server user www-data.  You will need to adjust the Nginx.conf accordingly.

Disable Dreamhost Panel Management on VPS

Disable Dreamhost Panel Management on VPS

A Dreamhost VPS is nearly indistinguishable from a dedicated server.  Dreamhost allows users full root access to the VPS servers, so you are free to manage them as you see fit.

However, certain configuration files related to users, and web servers, are completely overwritten whenever a Panel change is made.  Plus, there may be other instances in which Dreamhost will overwrite your changes.  As a result, if you want to manage these features on your server, you need to exclude Dreamhost from managing them.

Danger Lies Beyond This Point

It is self evident, but if you elect to exclude Dreamhost from managing your server, you are responsible for making sure things don’t break.

Get Root Access

To get root access find the following section in the panel:ssh menu


and add a new key.

Details on how to make or use SSH Keys are well covered on the internet.  If you don’t already know how to work with SSH Keys, you may want to consider if you are really prepared to handle the management of your server.

Once the SSH Key has been installed, log in as root to your VPS.  Once there run the following command:

mv /root/.ssh/authorized_keys2 /root/.ssh/authorized_keys2.disabled

Dreamhost will no longer be able to access your server.  You can still use the Dreamhost Panel to adjust the memory and disk space allotments for your VPS.  However, adding domains, user, one-click installs, and all other related items will no longer work.

Dreamhost VPS Disable Jabber

Dreamhost VPS Disable Jabber

Even with Jabber disabled in the VPS configuation, you will still see jabber processes running on your VPS.  They eat up about 30 MB of RAM, but very little processing power.

You can easily disable them by running the following either as root or through sudo:

/etc/init.d/ejabberd stop;
update-rc.d -f ejabberd remove;
Dreamhost Triples the Memory on VPS

Dreamhost Triples the Memory on VPS

So I missed the announcement somewhere, but somewhere in the past few days, Dreamhost significantly upgraded their VPS offering.  Previously you got 300 MB of RAM and unlimited disk space for $15/month.

A few Trade-offs

Now Dreamhost is advertising 1GB of RAM but only 30GB of storage.  It looks like they are continuing to move away from their “unlimited everything” from their younger days. Personally, I am will to sacrifice the unlimited storage as I am currently using about 3GB of storage.  The new machines also use Ubuntu 12, but that was a change almost a year ago.  This is a bigupgrade from my Debian 5 VPS.

You will lose your usernames

A bigger downside is that it looks like you will need to create a new VPS instance and move all of your stuff over and then delete your old instance.  The real bummer of this, is that Dreamhost doesn’t allow usernames to be reused again, EVER.    So you can’t move your username and you can’t delete and recreate them on the new machine.  (I do have a hack to get around this, but more on that another day)

A Long History

The other sad part is that I will be losing my comparatively low VPS number.  My original VPS had a 10,000 number, the new one is in the 380,000 range.


Rigid R4510 Table Saw Impressions

Rigid R4510 Table Saw Impressions

Why I picked the RigidRigid R4510 Table Saw

I have been looking to buy my first table saw.  I am interested in getting started in hobby woodworking.  My plan is to start with smaller furniture projects and see how I do and how they turn out.  My first planned project is to build a night stand.

Since I am starting out, I decided to start with a cheaper table saw.  I realize it will not be professional quality, but there is no sense in spending thousands of dollars if I end up hating or being very bad at woodworking.  So my goal is to spend around $400-$600 on a saw.  I also have a smallish work space, about the size of a single car garage, so having a table saw that could be moved out of the way, might be helpful.

41KiHJ5o6jLTwo years ago I purchased this Dewalt Miter Saw.  I have used it mostly as a “chop saw” to handle repair and remodeling projects around the house.  But I was very pleased with the clean and accurate cuts that it produced.  I also own a Dewalt reciprocating saw that I like as well.  So I initially considered the Dewalt table saws.  My list of contenders was:

  1. Dewalt DW745 – Most popular table saw on Amazon.  Pros: The most inexpensive option at $299.  The Dewalt name.  Cons: No stand.  Very small (20 inch) rip capacity.  I am not sure Dados are supported.
  2. Dewalt DWE7480XA – Pros: Slightly wider rip (24 inches) and it includes a stand.  Cons: $399 ($100 more) for those two features.  Still a small rip capacity.  The stand lacks wheels.
  3. Dewalt DWE7491RS – Pros: Super wide rip (32 inches) and a rolling stand. Cons: nearly $600 for these features ($577).  At this price, there are lots of contenders.  The rolling stand requires manually folding up legs.
  4. Ridgid R4510 – Pros: While it lists for $679 on Amazon, $399 for a refurbished one, I found a brand new one at Home Depot for $399.  It has a rolling stand and decent rip at 25 inches advertised (closer to 26.5 in actual use).  Cons: Not a brand I am familiar with.

Needless to say, I went with the Rigid.  The price/feature ratio is what sold me.  I would have loved to have purchased the big Dewalt, but I couldn’t justify spending $200 more at this point.  If I really use this a lot, I am sure I will want a nice ($1000+) saw and not any of these.  So I consider this a starter saw.

My First Impressions

  1. The thing is freaking heavy (100+ lbs).  You will need help moving the box around.
  2. The assembly instructions for the stand are a joke.  It is a single diagram with a dozen bullet points.  Best I can tell, the first few bullet points come pre-assembled (maybe these instructions were provided with older different packaging?).  The rest of the bullet points are confusing as hell.  Get a six pack ready for when you finish.
  3. The stand is really convenient.  Given the weight, I thought raising and lowering the stand would be a pain, but it is remarkably simple.
  4. The saw arrived fully calibrated and aligned.  I checked the blade alignment and it was straight and true on all angles.  The fence is perfectly true, even out to the full 26.5 inch rip.  (For whatever reason, I seem to get about 1.5 inches more capacity than advertised.
  5. The table height is 35 inches.  This is just odd.  Nearly all table heights are 36, why this is one inch shorter is beyond me.  I plan to insert some wood spacers between the stand and the saw to raise it up to 36 inches.
  6. There is no soft start on this saw anymore.  But it turns out my 15 amp miter saw also lacks soft start.  It isn’t a problem in my shop, I have 20 amp breakers that seem to handle the load just fine.

Initial Conclusions

I like the saw.  After I spend more time I will write up some more detailed comments.

Best I can tell, the base Dewalt model is nearly identical to the high end Dewalt model in the sawing and motor components.  But unfortunately, they really charge you a hefty premium for simple features like additional capacity.

Initial impressions after unboxing and setting up the Rigid R4510 Table Saw.
Rigid R4510 Table Saw
Date Published: 10/03/2014
While heavy and difficult to assemble, the table saw seems sturdy, accurate, and feature-rich.
4.5 / 5 stars
The Perfect Single Meal Soylent Container

The Perfect Single Meal Soylent Container

I was a one week supply backer and last week I received my first shipment. My personal use for Soylent is as a Breakfast replacement and so far it has been working well, but I will wait a few more days to post my initial reactions to the product.

612BOx9kOYiL._SL1500_ender Bottle to be the perfect size. It holds a tight seal, and when filled with a single meal there is about an inch or so of extra airspace to allow for shaking.

On a related note, the free pitcher that comes with the initial shipment of Soylent is just okay. In fact my initial reaction was that it was very cheap. The Soylent logo is provided as a sticker that you have to apply yourself and the plastic feels only slightly better than a disposable water bottle. After using it for a few days, impression has improved somewhat, the leak-proofness is very strong and the ease of opening and closing the spigot is nice but it still seems rather cheap.

My process has been to mix up the entire three meal quantity in the large pitcher and then transfer it to my small single use pitcher each morning. I assume mixed Soylent in the fridge will last three days?

Automatically Clear/Sync Hangouts Notifications Between Android and GChat

Automatically Clear/Sync Hangouts Notifications Between Android and GChat

I have been plagued by this problems for months.  I frequently searched for a solution but found nothing until today.

The Problem

I am signed into hangouts on my Android phone and use Gchat (the chat client inside the web version of Gmail).  Throughout the day I use Gchat.  At the end of the day, when I look at my phone, there is a hangouts notification for the first message of each separate Gchat communication.  I have to manually clear the hangouts notifications on my phone, even though I have both seen and responded to the messages in Gchat.

The Solution

I can’t claim credit, but buried on this Google Groups page, I found the answer.  I have no idea why such an important solution is buried so deeply inside a groups post.

The solution in that post is hard to follow, what you want to do is “enable hangouts in gmail.”  Google does provide a nice instruction set for enabling hangouts in gmail.

The Results

It works!  When I get a new hangouts message, I get a notification on my phone and in Gmail.  If I click on or respond to that message in Gmail, the notification is cleared from my phone.

The only downside, is that the new interface for hangouts in Gmail is significantly different than the old Gchat interface.  It is too soon to say whether I think this is a good or bad thing.