My Domain is Now Registered With iWantMyName

iwantmyname-mediumIf you (very) recently did a WHOIS search on the domain records for this site, you’d notice that it’s now registered with iWantMyName. Except you wouldn’t, because nobody does that. But that’s the point of this post – domain registration should be dirt simple, and your registrar should just get out of the way and allow you to register domains, manage DNS, and nothing else. That’s why I chose iWantMyName (yes, the ‘i’ is lower-case, I know). Despite no longer being a DreamHost customer, this domain was still registered with New Dream Networks, LLC. I decided that I don’t want to deal with their bulky control panel anymore with tons of features that were nice when I had hosting with them but are utterly useless otherwise. iWantMyName is a very reputable company that has been in the business for over 5 years and the only other competitors I really considered were Gandi.net and NameCheap, which are both reputable and ethical companies as well. The two selling points for me were the ridiculously simple (but still working and powerful) control panel and the fact that it supports Authy authentication which is an incredibly useful product that I use for almost all of my online accounts (I’ll probably write a review of that later). The transfer process went relatively smoothly, and within a couple hours, my transfer was initiated. Most importantly, they didn’t mess with my nameservers or anything – they left all my (working) configuration the way it was. If you don’t want to support companies like GoDaddy who endorse SOPA-like laws (and smutty, objectifying television commercials) and just want a simple domain registrar with an easy control panel that “just works”, check out iWantMyName. Their prices are industry standard, and they don’t trick you with low first year pricing to bump the price up to $20/year later like some of their competitors do. I can highly recommend them

Goodbye Dropbox, Hello OwnCloud.

owncloud23I’ve been a faithful Dropbox Pro customer for years, but at the rate they charge and the amount of storage offered,  I found it more and more difficult to justify paying $100 for 100GB of storage (well, I have 162.13GB due to referrals and promotions via Samsung). Of course, that’s a lot of money for not that much space. What really made Dropbox worth it was it’s fantastic sync capabilities and it’s integration with … well, almost everything. If you know me, you probably realize I love to play with software in my free time, I enjoy coding and debugging things, and I have no fear of doing something myself even if a service is available that handles it for you. So, that being said, I set out to do several things:

  • Make a private storage solution that I have complete control over
  • Pay LESS than a Dropbox subscription for the same amount of space
  • Have all of the same syncing features offered by Dropbox, if not more features

The obvious solution to this is to set up a VPS. I did a trial run of OwnCloud 7 on a 320GB VPS hosted by Vultr, a company I highly recommend for VPS hosting including gaming servers, websites, etc. They have been great to me, and the only reason I didn’t keep this VPS on Vultr is because I got a very good deal on an OpenVZ setup albeit with less control than I would have had with KVM for the exact same price. After running the server on Vultr for two months and deciding that OwnCloud was both fast and stable, I decided I wanted to get more bang for my buck. I found a company called ByteOnSite and signed up for not just one, but two VPS servers. It’s always good to have redundancy, and I like having the extra resources. After a little bit of back-and-forth with their support staff, I had NFS and private networking with unmetered bandwidth working on my account. I used the promotional code “48AYEAR” to cut the cost of each VPS server down to $4/month. Yes, the promo code worked for both servers. At $96 a year, I was paying $3 a year less than I was paying for Dropbox’s 100GB plan, but what exactly was I getting for my money? Let’s take a look.

 

Server Package 1:

  • Protected Storage Level 1
  • 1TB Hard Drive
  • 512MB Total Memory
  • 1TB Outbound Bandwidth
  • Free Inbound Bandwidth

Server Package 2:

  • Memory Intensive Level 1
  • 1.6GB Dedicated RAM
  • 3.2GB Total Memory
  • 80GB Disk Space
  • 2TB Bandwidth

Between the two servers, I have access to:

  • 1.9GB Dedicated RAM
  • 1.9GB SWAP Space
  • 1080GB Disk Space
  • 3TB Bandwidth (Outbound)

This is on an OpenVZ configuration with private networking and a 1Gbps link (one link per VPS, so 2Gbps total). That’s one powerful setup. With an array like this, it would be possible to do some serious number crunching, and for the purpose of hosting an OwnCloud setup with the memory intensive server running the frontend and the storage server hosting all of the files (with encryption enabled, duh), I had more than 10 times the resources given by Dropbox, as well as a server just for me with my own guaranteed resources such as CPU time and RAM. A bit overkill, but at less than the price of Dropbox, why not? Now the fun part – paying for the servers was easy, setting them up was a challenge, and I thoroughly enjoyed it and learned more about Linux administration than I ever imagined. On the storage server, I installed the CentOS 6 64-bit minimal image, which is based off of RedHat Enterprise Linux. This is because the RHEL 6 kernel is needed to host an nfsd server on an OpenVZ container. Also, I secretly wanted to play with CentOS, as my familiarity with RPM based distributions isn’t as strong as my Debian-based distribution knowledge. On my memory intensive server, I decided to optimize it to use as much of it’s available resources as possible to speed up the web interface and take the load off of the storage server which is very limited in terms of RAM and CPU. I installed Ubuntu 14.04 LTS 64-bit on my memory intensive server, which I will refer to as my “processing server”. Once I had the servers setup, it was time to get to work.

On the processing server, I installed a LAMP stack with MariaDB instead of MySQL, a Varnish Cache Server for speeding up client requests and the Pound reverse proxy for enabling SSL over Varnish. In addition to that, I installed every possible dependency for ownCloud which includes the following packages:

software-properties-common smbclient libreoffice php5-gd* php5-intl php5-mcrypt php5-imagick libav-tools curl php5-curl

I also installed glances and ran byobu-enable as I typically do as it makes administration much easier. Speaking of administration, I installed Ajenti later on as it lets me keep tabs on my server’s resources. I also installed the packages necessary for me to mount the NFS share from the storage server and added an IP table configuration so that it would only route traffic over my private network:

ip route add 10.10.200.100/32 dev venot0:1 src 10.10.200.101

I configured all of the services to route traffic to each other so that the data would be seamlessly sent to the client. When done, my setup looked like this:

Client <=> Pound Reverse Proxy (:443) <=> Varnish Cache (:80) <=> Apache Web Server (:8080) w/ Memcache <=> NFS Share (10.10.200.100)

On my storage machine, I created a folder at /root/owncloud and bound it to /export/owncloud and added the necessary entry to /etc/exports which allows only my processing server to touch the folder:

/export/owncloud  10.10.200.101(rw,nohide,insecure,no_subtree_check,async,no_root_squash,fsid=0)

After running exportfs -a to apply these entries, I then set up /etc/fstab on the processing server to automatically mount this folder (after testing it manually using mount -t nfs [...]). After that, it was just a simple matter of mapping the processing server to a DNS server using a type A record (IPv4 -> domain) and installing OwnCloud by extracting the tarfile and creating entries in the MariaDB database. For me, this process looked something like this:

mysql -uroot -p[randomly generated, long root password] -e “create database owncloud;”
mysql -uroot -p[randomly generated, long root password] -e “GRANT ALL ON owncloud.* to ‘owncloud’@’localhost’ IDENTIFIED BY ‘[different long randomly generated password, used for owncloud admin user]‘;”

tar -xjf owncloud-version.tar.bz2
rm -r /var/www/html/*
cp -R /root/owncloud/* /var/www/html
chown -R www-data:www-data /var/www

Of course, I needed to change my OwnCloud configuration file to allow connections over my DNS mapped domain name and point my data directory that is on my NFS storage server. It was also useful to increase my PHP memory usage limit and POST size and upload limits to around 50GB. This is a terrible idea on a shared production server, but since it’s my personal server, it’s nice to be able to upload tons of stuff at once. My configuration for OwnCloud looks similar to this:

<?php
$CONFIG = array (
‘instanceid’ => ‘[your instance id]‘,
‘passwordsalt’ => ‘[your password salt; don't change this]‘,
‘trusted_domains’ =>
array (
0 => ‘[my processing server's IP address]‘,
1 => ‘[my DNS mapped domain name]‘,
2 => ‘[my DNS mapped domain name]:6081′,
),
‘datadirectory’ => ‘/owncloud/data’,
‘dbtype’ => ‘mysql’,
‘version’ => ’7.0.0.2′,
‘dbname’ => ‘owncloud’,
‘dbhost’ => ‘localhost’,
‘dbtableprefix’ => ‘oc_’,
‘dbuser’ => ‘owncloud’,
‘dbpassword’ => ‘[the password from that earlier mysql query]‘,
‘installed’ => true,
‘forcessl’ => true,
);

Once that was all set up, the very first thing I did was enabled the “Encryption” plugin as well as “Tasks” and “Bookmarks”. After that, I was able to upload to it, and everything worked beautifully. Hopefully this is helpful for someone wanting a similar setup. After all, once this is setup, it’s almost no-maintenance.

Speed Up Your Site With Instant Click

There are many different tools and technologies to optimize your site and make it load faster, from CloudFlare to W3 Super Cache, they all work on caching your content so the site can return it faster. One great way to decrease the latency between clicking on a link and it loading is called InstantClick, and it works great. In fact, I have it running on most of my sites now. It works by starting to load the content as soon as the user hovers over the link so that the page appears to load instantaneously. The dramatic difference in perceived loading time is astounding, and for my fellow WordPress users, there’s a great plugin out there that sets it up for you. Try this out and tell me if it made your site any faster. One thing’s for sure, it’s great to have nearly no loading time on my site, and I plan on keeping this enabled.

Private OpenVPN is Great!

I finally got around to setting up a private VPN server, hosted in San Diego. It’s hosted on an Ubuntu 14.04 VPS, with almost nothing else running on it except OpenVPN, and I’m pretty impressed with the results. Much cheaper than paying some company to set this up for you, and well worth the privacy. Only downside is the bandwidth cap of 250GB/month (or around a few cents per GB overage), but really, I’m mostly going to only use this on public wireless networks and on my phone to prevent eavesdropping, so it should suffice.

Not too bad for the price I’m paying:

For anyone interested on how to set this up, it’s not too difficult assuming you can get a bare-minimum spec OpenVZ VPN with TUN/TAP support. To begin, you’re going to want to head over to a VPS provider, such as ChicagoVPS and sign up for a bare minimum SSD Linux plan. The 256MB plan is perfect, and is still cheaper than public VPN services. You want to provision your server with Ubuntu 14.04 and log into it using SSH. I’m using the “ubuntu-14.04-x86_64″ image on a 256MB SSD VPS. Once in your SSH console, download OpenVPN AS:

wget http://swupdate.openvpn.org/as/openvpn-as-2.0.8-Ubuntu14.amd_64.deb

Now install it:

dpkg -i openvpn-as-2.0.8-Ubuntu14.amd_64.deb

Set the password for your admin user (I just use this user for my VPS as I’m the only one on it)

passwd openvpn

And start the openvpn service:

service openvpn start

Now log in to https://[youripaddress]:943 using the password you set in the third step, and you can start your VPN and download files needed to connect to it. The server will offer you download links to clients for just about every operating system as well as instructions to set them up. This is by far the easiest and fastest VPN solution I’ve found – anywhere, and it’s secure too! If you need a more powerful VPS server or more bandwidth, check out Vultr and Digital Ocean. I’ve used both of these services before and they offer significantly better performance.

Upgraded Hosting to Virtual Private Server

Unfortunately, DreamHost was killing my processes because my site was using too much memory and my site would occasionally go offline. Despite being a great hosting company with a great control panel, DreamHost was no longer meeting my needs. I decided I needed several things: more control, more resources and affordable pricing. As a software developer used to SSH and the Linux terminal, it made sense to switch to a reliable VPS service. As of now, this site is now hosted on an unmanaged SSD VPS and the performance increase has been phenomenal. According to the tests that I ran before and after migration, site load time has decreased from around 1.5 seconds to around 1/30th of a second (on average). If I migrate from Apache to nginx as I’m currently planning to, it’s entirely possible that the load time will be even lower on average and more consistent. In addition to the load time being faster and having access to guaranteed resources through KVM (which is resilient to overselling), the amount of bandwidth I have is insane as this site is hosted on a 1Gbps dedicated link with 1 IPV4 address and a /64 IPV6 block. Of course, this means that I have to handle all of my software configuration and maintenance myself, but I enjoy that, so it’s not so bad. Ubuntu 14.04 LTS is pretty good in terms of ease of use, and I am very familiar with configuring it already, so that’s not a problem at all. Overall, expect much better performance from this site, and stay tuned for more updates.

764.17 Mb/s down, 211.08Mb/s up 12ms ping

Development Temporarily On Hold

Unfortunately I’m a busy college student, and I have many things to worry about, such as projects, exams, and studying. I prioritize this more than my open source development and work on new projects. Because of my heavy workload lately, I’ve put all of my hobbyist (read: unpaid and time consuming) development on hold. However, I did release the full source code of LibreScribe, and it’s released under the GPL so all of my work is not lost. Anyone can pick it up, fork it, and start working on it. I hope to work on this project again someday, perhaps over Thanksgiving break, but until then, I have to focus primarily on my studies and my financial and academic obligations. Also, I apologize for not updating this blog for quite some time. I assure you, I am fine, I’ve just been very busy, with a job over the summer, and being at college now, I have a lot on my plate to take care of. Thank you for your understanding.

Fixing Autokey (GTK) on Ubuntu 12.04

Autokey is a wonderful scripting tool for Linux. Unfortunately, it doesn’t work out of the box in Ubuntu 12.04. The reason why is because Autokey isn’t on the Unity panel’s system tray whitelist. I submitted a bug report on Launchpad, but for now, if you want to get Autokey working without breaking the Unity panel for any other applications, it’s as simple as running the following command in the terminal:

if grep -q 'Autokey' <(echo `gsettings get com.canonical.Unity.Panel systray-whitelist`); then echo "'Autokey' exists in Unity panel whitelist. Nothing to do here."; else echo "Adding 'Autokey' to Unity panel whitelist." && gsettings set com.canonical.Unity.Panel systray-whitelist "`echo \`gsettings get com.canonical.Unity.Panel systray-whitelist | tr -d ]\`,\'Autokey\']`"; fi

This will check your current whitelist to see if Autokey is present, and if it isn’t intelligently append it to the whitelist without messing up your current whitelist entries. If it’s already there, it won’t add a duplicate entry. This one-liner can be easily modified to add any value you want to Unity’s system tray whitelist, in order to fix the same problems with other applications. Note that you may have to log out and log back in before the changes take effect. Enjoy! :)

Ordered a Raspberry Pi

If you haven’t heard of it, Raspberry Pi is a very interesting project to create an incredibly cheap but powerful computer. It was released on February 29th, and on that same day, I purchased a Model B ($35) through element14′s site. Due to overwhelming demand, I probably won’t actually get it for a while, but when I do, I’ll post an update on my blog about it. Because of the unbelievable value of the device, and not-too-shabby specifications, there are many potential applications for it. I plan on playing with it and potentially coding some really neat stuff in my free time. I’ll post further updates about the Raspberry Pi on my blog.

How to fix com.android.providers.media crash on a rooted Android device

I noticed that my rooted Android phone, a Samsung Epic 4G was crashing when I opened my Camera application, saying that com.android.providers.media was force closing. It took me about half an hour, but I figured out how to fix the problem using adb. The problem is that it was having trouble writing to and reading from the media database. Deleting the media databases solves the problem without doing a complete factory reset. To do this, run adb shell, and then type su to gain root access. Now type in “rm /data/data/com.android.providers.media/databases/*” and hit enter. This will fix the problem.

A List of Words Containing “Rent”

So Barnes & Noble College is currently doing a word game called “Words With RENT” where you can submit a word with “rent” in it in order to have a chance at winning $100. Here’s a list of all of them (generated using cat /usr/share/dict/words | grep -i “rent” in Linux):
abhorrent, adherent, adherent’s, adherents, apparent, apparently, apprentice, apprentice’s, apprenticed, apprentices, apprenticeship, apprenticeship’s, apprenticeships, apprenticing, belligerent, belligerently, belligerents, coherent, coherently, concurrent, concurrently, current, currently, currents, deferential, deferentially, deterrent, deterrent’s, deterrents, different, differential, differentials, differentiate, differentiated, differentiates, differentiating, differentiation, differentiation’s, differently, godparent, godparent’s, godparents, grandparent, grandparent’s, grandparents, incoherent, incoherently, indifferent, indifferently, inferential, inherent, inherently, irreverent, irreverently, overenthusiastic, parent, parent’s, parentage, parentage’s, parental, parented, parentheses, parenthesis, parenthesis’s, parenthesize, parenthesized, parenthesizes, parenthesizing, parenthetic, parenthetical, parenthetically, parenthood, parenthood’s, parenting, parents, preferential, preferentially, recurrent, referent, referent’s, referential, referential’s, rent, rent’s, rental, rental’s, rentals, rented, renter, renter’s, renters, renting, rents, reverent, reverential, reverently, stepparent, stepparent’s, stepparents, torrent, torrent’s, torrential, torrents, transparent, transparently, undercurrent, undercurrent’s, undercurrents