Hosting for Business and Pleasure

In the world of web hosting there are so many options it's dizzying. Each boasting that they are faster, cheaper, and easier to setup than the next. The purpose of this post is definitely not to wade through all of the murky waters that is cloud-based web hosting but rather to shine some light on three hosts that I have a fair amount of experience with. I am going to briefly talk about some of the pros/cons as well as what I would recommend as the general use case for each of the three.

AWS

Obviously Amazon Web Services (AWS) has a huge presence in the hosting space and rightfully so. They are top notch when it comes to scalability, customization, features, and in a lot of cases pricing. With that said, why not go with them for everything? Personally, I think they are overkill for things like brochure/marketing sites, personal apps/blogs, etc. Now when it comes to scalable, distributed, high availability web applications, AWS is my top choice. I have been a part of two major migrations from other hosting platforms to AWS in the last 60 days and I can say from experience they provide some of the best platforms/tools in the business. I actually have a talk submitted for an upcoming conference that focuses on one of these migrations so I am going to hold off on going too much deeper into AWS in this post. What I will say is that we were able to leverage all of the following services for a single web application:

Digital Ocean

Touted as the "SSD-Only Cloud", Digital Ocean provides a slick interface to manage servers/keys/etc, and also has a great API. Beyond that it has one-click installations for the following apps/stacks:

In my mind, Digital Ocean is the best host for personal blogs/sites. You can scale the server up (vertically) at any time and you just pay for what you use. This blog is currently running on Digital Ocean and I pay next to nothing for hosting. Furthermore, I have full SSH access into my box(es) so I can tweak/customize to my hearts content. Getting a server (or in Digital Ocean terms, a "Droplet") up and running really couldn't be easier. If you are new to hosting or are just interested in focusing on development/publishing content rather than managing your server, Digital Ocean is a great option. If you do decide to give Digital Ocean a shot please feel free to sign up using my referral link, I would certainly appreciate it!

Linode

This site (and many others done by @MitchellHislop and Myself) have co-existed on the same Linode cluster for years. I have nothing but good things to say about them, they provide great support, offer a variety of SSD-based linux varieties, and a bunch of other services. For a large web application that got a lot of traffic during the holidays (particularly after being featured on the news in two states) we were able to use "NodeBalancers" to take care of routing traffic to our various nodes and could swap nodes in and out as needed. They definitely don't have the feature set or instant scalability that AWS does but they are certainly robust enough to run most apps. If you know your way around a Linux environment and have a general understanding of hosting, DNS, etc, Linode is a great place to call home.

Summary

I'd say the big take away here is that there is no perfect host. There are always going to be some give-ups whether it be functionality, ease of setup, or cost. If you are competing with the "big boys" in the web application space, then AWS is absolutely the right place to be. If you are looking to get a site up quickly and easily then Digital Ocean is the place for you. If you are a developer/hacker looking to spin up boxes for a variety of purposes that need at least some ability to scale in both directions, then Linode is a perfect fit.

As I mentioned at the beginning of this post, I have left out A LOT of major players (Rackspace, MediaTemple, countless others) but these are the ones I have experience with and I think they provide a nice representation of the different types of hosts out there which still provide with you with the basic needs like SSH, SFTP, etc.

I'd love to hear about your experiences in hosting, I know most people have strong opinions on the topic so please share your story/thoughts in the comments.

Midwest PHP 2014

MidwestPHP - Day 1

I recently attended the Midwest PHP conference and it was a truly great experience. I went last year and while the location changed this year the quality of the conference was right on par. This year it took place at the University of St. Thomas (Minneapolis Campus) which proved to be a perfect venue for the event. All of the sessions had plenty seating and with only three active rooms it was easy to navigate between sessions.

Day 1 kicked off with a keynote titled "Sending a billion text messages" by Even Coury. It was a very enjoyable talk and was very inspiring. The big takeaway was to always have a side project that you are working on because you just never know where it might take you and who might become interested in it.

The next session I went to was "How I learned to Stop Caring and Made Better Software" by Eli White. I am a big fan of Eli and his talk was very interesting. He has a fascinating background and has worked on a ton of really cool projects. Definitely a cool guy.

Next up was one that I was very excited about, "DOs and DON'Ts of MongoDB" which was put on by the one and only Jeremy Mikola. I was particularly excited about this because I recently implemented MongoDB for a huge data collection project and I had several questions about the approach I took. Fortunately I was able to speak one-on-one with Jeremy after the talk and he answered all of my questions and gave me some good takeaways.

After that I went on to a talk titled "Code Reviews: The 'Secret' to Building Quality Software" by Patrick Schwisow. Unfortunately this talk was very basic and didn't really give us anything to take back to our environment because we already have a very well defined way that we do code reviews. Perhaps I will use that as a topic for a future blog post.

The last session I attended on day 1 was called "Building Rock Solid Software in the Real World" by Omni Adams. This was one of my favorite talks of the day because it had great content and also a lot of humor, Omni is a really funny guy. We discussed a wide variety of tools to help ensure that code stays solid (PHPLint, PHPUnit, PHPCode_Sniffer, PHPMD, PHPCPD, PHPDCD, etc) along with a number of code review tools, topics and style guides. Definitely an awesome session.

MidwestPHP - Day 2

The Day 2 keynote was titled "7 Things I Wish Somebody Told Me" and Aaron Saray killed it. He was funny, well spoken and had a some great points. Here are the seven things he wished somebody had told him:

  • Learn from EVERYTHING.
  • Find somebody smarter than you and use them as a mentor.
  • Log EVERYTHING.
  • Test EVERYTHING.
  • We (as developers) are customer service.
  • There are two development paths: 1) Innovation, 2) Stabilization.
  • Do something different. If you are stuck on something in code, get outside and clear your head.

The next session was probably my favorite of the entire conference. Paul Jones is not only an amazing speaker but wow is brilliant. The talk was called "It Was Like That When I Got Here: Steps Toward Modernizing a Legacy Codebase" and it was filled with great information. The gist of it was to refactor incrementally by consolidating classes, converting globals to injected dependencies and converting functions to classes / class methods. He encouraged all of us to check out the following reading material:

Next up was "From SQL to noSQL" by Derick Rethans from the MongoDB team. We learned quite a bit about the various types of noSQL implementations, CAP theory and some Mongo-specific approaches. All-in-all, a good talk abut I would have liked to dig a bit deeper.

"Professional-grade Software Design" by Brian Fenton was an excellent talk. He talked a lot about the concepts of SOLID design, naming conventions, comments, source order, dependency injection and object calisthenics. I have a ton of notes on this talk so check out the link to the "raw notes" below.

The last session I attended was by one of my favorite speakers, Josh Broton. Josh is hilarious, smart, witty and a real joy to listen to. This session was called "Sticks, Spit, and Duct Tape: Advanced Responsive Techniques", I know what you are thinking, what is a back-end developer doing at a responsive talk!? The honest answer to that is simply that I wanted to hear Josh speak but it was a really good talk that opened my eyes to a lot of things that we have to look forward to with new CSS3 features that will be rolled out soon. The 'flexbox' model is incredibly cool and could actually allow back-end developers like me to lay out content without pulling my hair out. Again, more information in the "raw notes" below.

In summation, this was a great conference and I really have to hand it to the organizers, sponsors and speakers. I can't wait to attend again next year.

Here are a few additional links on this topic that you might find interesting: - My reviews of all of the talks from MidwestPHP 2013 and MidwestPHP 2014 - My blog post from last year's MidwestPHP - My raw notes

Developer Portability

Be Portable As you may or may not know (see: here ) I recently switched jobs. I went from a cutting edge marketing firm to the world leader in automotive/aerospace/structural testing systems. Both places are top notch in their respective areas but as you can probably imagine they both operate very differently and utilize very different technologies. At my previous job we used nothing but Macs and other Apple products. At the new place we are strictly a Windows shop (except for our servers which run a LAMP stack) and as a result I have had to be quite agile and adapt to a using new tools, technologies and of course Windows.

I was a huge fan of Windows 95 since it was in early beta back in 1993-94. I had a friend who worked w/ Microsoft so I had a legit beta copy from Day 1. It was the first time I had used Windows because in the Windows 3.1 days I refused to use it and instead used a combination of DOS and Slackware. Even at the age of 13 I was incredibly stubborn about which operating system I used. In 2005 I switched completely to Apple-based solutions and fell completely in love with OSX. Since 2005 up until a couple of weeks ago the only time I used Windows was through a VM (to access Windows test/dev servers or do cross-browser testing) so it has definitely been a big change. Much to my surprise I am not minding it _too_ much and figured it might be worthwhile to document some of biggest differences between the two platforms and why they matter to me.

The number one thing that feels like it is 'missing' from Windows is a linux terminal. I know that sounds stupid because Windows != Linux but it's easy to forget sometimes that OSX is built on top of that and having access to that bash shell is truly something magical. It will be interesting to see how long it takes me to stop typing 'ls' when I am in a Windows command prompt. Having things like 'ssh', 'top', 'curl', etc readily available is extremely nice and while I know it is possible to install Windows-equivalents it just isn't the same.

As a developer who works primarily with PHP one of the biggest things I miss in a Windows environment is readline support. Readline support is required for the interactive PHP terminal ('php -a') and without it the interactive terminal becomes essentially worthless. Yes there is a way to get it to function but it's hardly interactive and honestly more trouble than it is worth.

Before I even say this, I am aware that Windows 7 includes the "Snipping Tool" but I hate it! Being able to hold CMD+Shift+4 and selecting what I want for a screen grab is just something I have become accustomed to and opening up an application to do it just seems inefficient. It sounds like a small thing but as a developer I do take a lot of screen grabs for demos, tickets, etc so being able to do this with a hot key is kind of a big deal.

This isn't as big of a point but something I love about OSX is that I can drop my cursor over a window, use the mouse wheel and it scrolls the window without me having to click on it. This sounds like a small thing but over the course of the day it happens to me quite a few times.

On the plus side I do have to say that Windows 7 is a solid operating system, definitely Microsoft's best since XP and I think it fits the corporate world quite well. I now only have one computer at home which is my 27" iMac and I still enjoying coming home to it at the end of the day. Perhaps someday I will completely switch over to Windows for both work and home but that time certainly isn't now.

Back to the point of this post, being agile & portable. I think good developers are ones who aren't married to their tools/platforms but rather ones who enjoy and excel at the actual work. At the end of the day writing code is writing code and whether I am in a Vim session on a Unix machine, working in Coda on a Mac or using NetBeans in Windows I am ultimately trying to accomplish the same thing, write the best code possible in the most efficient manner.

Thoughts? Arguments? Words of Wisdom? Leave them in the comments!