I love free software and could not have built my site without it. But free web services are not like free software. If your free software project suddenly gets popular, you gain resources: testers, developers and people willing to pitch in. If your free website takes off, you lose resources. Your time is spent firefighting and your money all goes to the nice people at Linode.

Don’t Be A Free User (Pinboard Blog)

This is a very interesting take by Maciej Ceglowski of Pinboard. He encourages all of us to financially support any web service we use and love, even if it requires you to “yell at the developers!”. He says that what happened to Gowalla could happen to any free web service. As the service gets popular, costs rise; and as costs rise (and the service gets popular), an acquisition looks very appealing the founders; but the appeal of the acquisition wears off when the acquirer shuts down the service and keeps the engineers to work on something else. Patrick Rhone (of Minimal Mac) took this advice and announced that he will be sending Tumblr $10 per month to help keep the service he loves afloat, even after the VC money is gone.

I think this is a very interesting situation. There are SO many free web services out there, and there is no way they can all survive while being free. I like that some users are trying to take it into their own hands and help keep the web services they love in business. But I also like that some of the popular web services are trying to think differently about “monetizing” their service.

David Karp of Tumblr has said that he wants to find ways for Tumblr to make money that “enhance the experience” for its users. I can’t wait to see what they come up with. I also can’t wait to see what other services, like Twitter, Instagram, and Path eventually settle on as their business model. Twitter seems closest by far, but I think they still have some way to go. This is why venture capital is so great - by raising money from VCs (instead of charging their users), these web services have the opportunity to innovate new (and hopefully interesting) business models as they grow into larger companies.

Minimal Interfaces (My New Theme)

As I was working on my (very) simple blogging engine (more on that soon), I started thinking a lot about the template I would use. I really liked my most recent Tumblr theme, with all of the great widgets in the sidebar, but noticed that a lot of my favorite blogs don’t have any widgets. They have a sidebar with several links (archive, colophon, contact, projects, RSS, etc.) and an image at the top. That’s it.

It seems like minimal themes have become very popular for blogs. I’ve even watched several blogs switch from a more cluttered, widget-ful layout to a simple and elegant layout. I really like the look and feel these sites provide with their very minimal interfaces. A good header and a good font puts all the focus on the writing and creates an enjoyable reading experience. This is the exact experience I want my site to provide. And so, I’ve decided to revamp my theme here on Tumblr. With this post, my new theme is going live!

I tried to make my new theme as simple as possible. I took my old theme and completely removed the sidebar. I added a few links to the top of the page and added a search box to the bottom of the page. I also made my content div wider than it used to be and centered it on the page. I am keeping Helvetica as the font for now, but have been browsing TypeKit and Google Fonts for a different one. I even got rid of the footers that were after every post on the homepage. Those only show up if you visit the permalink now.

And with my new theme comes a goal: I plan to post at least one long-ish post per week going forward. If I don’t meet that goal and you happen to notice, drop me a line telling me to write something!

(I said I’d have more to say about my blogging engine, so here it comes… I am going to put that project on hold briefly. I have a (basically) functioning version that works on my local machine, but I don’t feel like I have a good enough reason to pay for hosting when Tumblr is working just fine for me. In the future, I’ll probably need a hosted server and can use my own blogging engine then, but for now I’m sticking with Tumblr.)

My Baked Blog

As you may (or may not) know, I am a really big fan of Dan Benjamin and his 5by5 podcasts. I was listening to this week’s Build and Analyze episode (with Marco Arment) and they were talking about Brent Simmons’ Plea for Baked Weblogs and Marco’s ideas of how to implement this. That really got me thinking. How cool would it be to write my own simple blogging engine?! And as I was thinking about it, it seemed like it could be done pretty easily, so I think I am going to try to do it myself (even if it is just for my own education and never gets used). This post will be a basic outline of all I think it would take to do it.

Since I know Python best, I’ll use that for most of the programming and found a Python version of Markdown. Other than that, I’ll use Dropbox to store all the posts so I can write and edit posts from my iPhone or iPad via the PlainText app (my current favorite text editor).

My basic idea is to write two shell (or Python?) scripts, called rebuild and rebuild_all. Rebuild will be a cron job that runs every minute. If there are any new text files ready to be posted, it will change them from Markdown to HTML, rebuild the home page, and rebuild the archive page (only the files that need to be rebuilt to accommodate a new post). Rebuild_all will be a cron job that runs once a day to go through and rebuild all HTML files on the entire website (which will allow it to catch any edits I make). Since all Markdown files will be stored in my Dropbox, I can edit any of them at any time from any device I want. I think this would be a very simple, but elegant solution.

Here is a listing of the basic tasks each script will do:

Script 1 - rebuild (every minute)

  • Check /drafts folder in Dropbox for any file beginning with “zz” (my way of denoting a file ready to be published)
  • Put that file in /posts/year/month/day? folder in Dropbox and remove “zz” from the name
  • Add “/posts/year/month/day?/title” to a text file which will be the home page log file
  • Run Python script 1 that uses Markdown and a template HTML file to build the static HTML file for that post and put it in the www folder
  • Run Python script 2 that uses Markdown and a template HTML file to build the home page from the home page log file
  • Run Python script 3 that updates the archive HTML file

Script 2 - rebuild_all (every day)

  • Traverse all of /posts folder in Dropbox, and for each Markdown (txt) file run Python script 1
  • Run Python script 2

That’s it. It seems like it should be simple enough - now I just need to find the time to try to do it!

Following vs Friending

I recently downloaded a new app to my iPhone called into_now. It is basically a social app that allows you to check in to what you are watching on TV. Like all good social apps, it allows you to see if any of your Facebook or Twitter friends had joined so you could “friend” them to get started. I am so accustomed to the “follow” version of “friend” (like Twitter) that it didn’t even occur to me that I would actually be sending friend requests to everyone I tried to “friend” (like Facebook). Few of my friends are as geeky as me, so none had joined yet, but several people I follow on Twitter had. So, since I figured into_now would have a more Twitter-like (public timeline) model, I tried to friend several people who I have never met without even thinking about it. When none of those people showed up in my timeline or list of friends right away, I realized that I must have sent them an actual friend request! Oh well, hopefully none of them mind.

Through this experience, I realized that I have become very accustomed to Twitter-like “follow” model of social networks. Very few new services have the Facebook-like “friend” model. One that comes to mind is Path, but that is for a very specific purpose. I don’t really understand why into_now chose this model, but that is their decision. I am writing this post to ask developers who choose to implement this model to include some sort of warning or confirmation before actually sending a friend request. When I tap somebody’s name to friend them, a dialog asking “Are you sure you want to send a friend request to this person?” that gives me the option to confirm or cancel would be very helpful. I know that LinkedIn requires an extra step before requesting a connection and am pretty sure Facebook does. That would make people like me feel a lot less embarrassed when we try to friend everyone we follow on Twitter, but have never met.

Usernames

I have been signing up for more and more web services lately. A lot of these have been through a really cool website called beta list. Since I am usually a fairly early user in most of these services, I have a pretty wide selection in usernames. I have begun to think a lot lately about usernames and their impact on my usage of the service as well as my web presence in general.

For the longest time, I used ghawk17 as my username in various services that I would register for. From gmail (way back when) through registering for twitter and tumblr a little more recently, I stuck with this username. More recently, however, I began to wonder if I should start using a more “mature” username. I started caring more about my online identity and keeping it consistent (and semi-professional). I began using greghochsprung as my name in several of the services I registered for, but that felt like a very long username to give people (plus I’d have to spell out my last name if I was speaking with someone about random web service X I thought they should sign up for). But now that I am an earlier user to most services, I can usually pick a shorter username than that and have been pondering how to keep this consistent.

I’ve come to view getting my choice username as a game. For a few months now, I’ve been trying to get the username greg. It seems like Greg is a fairly common name, and I can’t always get it as my username. I admire people with slightly less common names (like bijan or bryce), who can usually get their first name as their username. But when I can’t get greg, I need to pick something else.

One thing I started trying was the username g (or gh). That seemed like a pretty cool username to have. Instagram was the most notable service I did this with. That was a HUGE mistake. I also registered a different username to use primarily, but had logged in as g at one point on my iPhone. This has resulted in every instance of “@g” causing a push notification to appear on my phone (see below for some of them), which confused me a WHOLE lot at first (Is Instagram having problems? Why am I receiving push notifications directed to other people?).

I also have heard Dan Benjamin mention in his podcasts that he got rid of the username dan on twitter for this very reason. He was getting way too much @reply spam. Additionally, some services have a minimum length for their usernames, so g or gh may not even work in some places.

I don’t want to use ghawk17 or greghochsprung and I really can’t use g or gh, but I can’t always get greg. So, I decided recently to always get gregh as my username on any service I sign up for. I think that I will usually be early enough to a service to get it. Also, gregh is short enough for people to remember and have no difficulties spelling it if I tell it to them in passing.

Clearly, I’ve been thinking about usernames WAY too much lately. Oh well. I tend to overthink quite a few things - this one I thought I’d share. Now, if only I could get the inactive gregh name on twitter…

My Twilio Inventory Checker

I recently decided that I want to start taking photography seriously. I just got married and we are actually pretty good friends with our photographers, so I got to talk to them about photography. Additionally, I started listening to the old episodes of The Talk Show podcast, specifically one where Dan and John talked to James Duncan Davidson and then Dan Benjamin’s podcast with James Duncan Davidson called Tack Sharp, so I’ve gotten a lot of exposure in a very short period of time to how cool photography can be. After a fair amount of research and talking with my photographer friends, I decided that I wanted to get a Nikon D7000, which was recently released by Nikon and a Nikon 50mm f/1.8 lens (a “nifty fifty”) to really get the hang of forming my own images.

After deciding what I wanted to buy, I started looking for retailers. I had heard that Adorama and B&H are the two big online stores for serious photographers, so started there. I also looked at Amazon (of course). Then I found out that I could get a $460 printer from Epson (the R1900) with a $400 rebate! Well…apparently everybody wants a D7000 - it was out of stock everywhere! So I checked in on the websites for a couple of days and never found it in stock. You could buy it from Adorama on back order, but in order to get the printer rebate, both the printer and the camera had to be delivered by April, so that worried me (especially after reading that some people wouldn’t get their cameras for months on back order!).

I searched the web for ways to auto-notify you when something came back in stock at Amazon with little luck. I also wanted something that could check the stock at Adorama and B&H so I had all my bases covered. After thinking about it for a little while at work the other day, I thought it would be fun to write my own little app to track the stock of “my” camera on these three websites.

Here is the basic functionality I wanted to build:

  • A python (the scripting language I know best) script running every 5 minutes as a cron job that would grab the product page for the Nikon D7000 on Amazon, Adorama, and B&H
  • That script would search for certain key words on each page to determine whether it was in stock or not
  • If the camera was in stock somewhere, use the Twilio API to send me a text message

It was actually really easy. I signed up for Twilio and got my free $30 of credit, then played around with their examples, accidentally calling myself (instead of texting!). Shortly after that, I texted myself “Hi Greg!”. Then I used the python urllib library to grab the three URLs from the three websites I wanted and simply scanned the page for certain keywords:

  • “FREE with Super Saver Shipping” on Amazon
  • “currently back ordered” on Adorama
  • “temporarily unavailable” on B&H

Finally, I used Twilio to send a text to myself telling me which store had the D7000 in stock as soon as it became available.

It was really a fun experience that took me a whole 30 minutes or so to complete. I posted my script here, so take a look if you’d like and use it as you see fit.

Note: On the day I decided to make this app, my camera became available on Amazon! Even though I didn’t really have any more use for my little app, I decided to make it anyways just to have a chance to play with Twilio and see how it worked.

Great Service from Amazon

I recently returned from three weeks in Europe where I, for the most part, tuned out my electronic life (email, blogs, twitter, etc.). After my return, I started paying all my bills and checking various accounts and noticed that I had been charged $79 by Amazon.com. Just before leaving for Europe, I ordered several last-minute travel items from Amazon using a free trial of Prime (to get free two-day shipping). I’ve used a trial of Prime before, and knew that I had to opt out of the resubscription after the trial ended, but I thought my trial was three months and that I could do it after getting back. Apparently that wasn’t the case and I got charged while I was gone - after my free month had ended.

I hadn’t used my Prime membership since those original purchases, nor did I plan on using it in the future, so I was dreading a lengthy phone call to Amazon, asking them to refund my money. To my surprise, however, when I went online to look at my Prime membership, there was an option to cancel and if you hadn’t used your membership for anything since being charged they would refund your purchase automatically! I was really astonished. All I had to do was hit “cancel” to get my money back. I think that is a really great thing Amazon has done. It completely made my day. I gained quite a bit of respect for Amazon as a result of this tiny feature they have implemented into their website. It just goes to show that really spending time to think through what users will do on your site can really pay off. This feature probably took very little time to implement and has probably saved Amazon quite a bit of time spent on the phone with users like me who forget to cancel…but it probably took a while for Amazon to see that users might need the feature. Amazon made that process so easy that I am looking forward to doing business with them going forward.

My Own Theme

Ever since I started blogging, I have been intrigued by how tumblr themes work. I started tinkering with my original theme and then with my most recent theme. I really enjoyed the simplicity of that one, but some things were missing. I decided that I wanted to try to create my own theme and have been working on it for the past several days (now that I’m done with classes and am hanging out until graduation!). The current theme you see is a result of my work.

I was inspired a lot by Bijan Sabet’s blog. I think that the theme he uses is very simple, but very attractive. It also seems to be very personal. That theme is not available in tumblr’s theme listing, however, so I had to put it together on my own. (This was a good thing, actually, because it forced me to decide whether I really wanted every single element on the page.) I started by making the header and sidebar look the way I wanted. This was possible in a simple html file, so I could iterate my way through this on my own computer. Once I had this working, I started adding in all the tumblr code to allow for posts and notes and all that jazz. This was a little more complicated than I expected, but was definitely doable.

The picture in the header is from a sunset Jenny and I enjoyed back home (at Indian Rocks Beach in St. Petersburg, FL). I changed a lot of the elements on bijansabet.com slightly to fit with what I wanted to do. I added links to projects I’ve worked on and a “tag cloud” in the sidebar. Other than that, a lot of the functionality is similar to Bijan Sabet’s website which inspired me.

That’s pretty much it! I’m sure I’ll be tweaking this theme as time passes, so bear with me. Who knows - I may make it truly customizable and submit it into the theme garden! Please leave any comments if you see anything you like or don’t like or doesn’t work or whatever. That would help me out a lot.

Cloud Computing and Sustainability

I am just finishing up a class called Sustainability in Business where we had to write a paper about some topic that interested us. After looking for ideas online, I decided to write about cloud computing and its effect on sustainability and energy efficiency of computing. It was a six-page paper, so I don’t want to flood anybody’s Tumblr dashboard with that much text, so I’ll post the CliffsNotes version (intro, notes from the body, conclusion) here and leave a link to the whole essay if you’d like to read it:

Cloud computing is one of the most widely used buzzwords in IT today. The most basic definition of cloud computing is Internet-based computing - where applications you use are hosted in a remote, shared data center instead of locally, on your own computer. Cloud computing is gaining popularity for several reasons, one major reason being its scalability. For example, a small Internet startup company can get off the ground and scale up quickly and cheaply as it gains traction in the marketplace. Since cloud computing involves sharing a single resource (the data center) among many users, it would seem to be a more energy efficient and sustainable way of using computing power. This is generally the case, but there are some concerns that arise with the proliferation of cloud computing. This post will explore the pros and the cons of cloud computing as they relate to energy efficiency and sustainability.

Benefits of Cloud Computing

  • Easy to use
  • Accessible
  • Easy to implement/sign up
  • Scalable

How Does Cloud Computing Relate to Sustainability?

  • Cloud computing relies on data centers
  • Data centers require a lot of energy
  • Efficiency in data centers = more sustainable
  • IBM and Google have been able to reduce energy requirements of their data centers by 50%
  • Cloud computing users can use lightweight/energy efficient computers (laptops/netbooks/tablets)
  • Cloud computing may cause more computing power consumption
  • The Jevons paradox - increased efficiency tends to increase the rate of consumption

Cloud computing has been a significant boon to every party involved. Companies who use cloud computing have been able to use business applications and computing power with a more favorable cost structure. Many companies who provide cloud-based services have done well for themselves financially. Cloud computing has also made computing more energy efficient. Since computers are becoming more and more pervasive, this is very important to the environmental sustainability of computing. Emma Stewart, an executive at Autodesk (a company that makes design software) has an even greater vision for the sustainability potential of cloud computing. She believes that cloud computing could be the tool that unlocks one of the main drivers of unsustainable practices - “poorly informed decision-making.” Cloud computing gives decision makers access to vast datasets which will assist them in making better decisions. She sees this especially in design (of buildings/products/etc.), where designers can “ask ‘what if’ or ‘which one’ about considerations that will directly determine the life-time environmental footprint of their design.” This is a great opportunity for cloud computing to impact the sustainability of other industries. Overall, cloud computing has many benefits. The main drawback of cloud computing is that is encourages even more consumption of computing resources, but that consumption can be tempered slightly if cloud computing companies educate their users. Cloud computing as a technology is here to stay and the impact it has had on data center design should make computing even more energy efficient and environmentally sustainable going forward.

If you’d like to read the paper in its entirety, click here.

(While writing my paper, I realized that I like writing blog posts better than papers for two reasons. First, when you cite something, you simply insert a link in a blog post. In a paper, you need to cite all of your sources in a bibliography and all that nonsense. Second, it is much less frowned upon to use Wikipedia in a blog post than in a school paper.)