Apache Shindig PHP Setup Problem Solved

First things first. Shindig is an Apache incubator project that serves as an OpenSocial Container and…I’m already falling asleep. Too boring. I’m way behind the curve on all things “social networking” but I have an idea for an app that may scratch an itch I have, and it just happens that some of this social networking stuff might be a good way to jump start the idea. So that means catching up on a couple of years (or more) of stuff that’s been going in the world of web 2.0, which includes OpenSocial. I wanted a local OpenSocial test sandbox and found Shindig to fit that bill.

Now, onto the problem I was running into and the solution. Unless you want the long boring details, I can save you the trouble and tell you to make sure you have mod_rewrite enabled in Apache.

If you haven’t dozed off by now then it probably means you’re running into issues with the Shindig PHP setup and would like some more details. I followed the directions on setting up the PHP Shindig server on my laptop running Kubuntu 08.04 here at home and kept getting a 404 error. I thought that was strange since I could hit other files with my browser that I put in that directory manually for testing but not the Shindig index.php page. Turns out the Shindig index.php page tries to be more “controller/servlet” like by sniffing the URI and passing it along to the appropriate handler. If it can’t find a match, then it gives a custom 404 error. I noticed the test URI (http://shindig/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml) didn’t have any reference to index.php. Ah yes, the wonders of Apache mod_rewrite! And guess what I didn’t have enabled? Yep, Apache mod_rewrite. So, below is what I did to get things running on an Ubuntu setup from scratch (meaning no Apache 2, PHP 5 was installed or configured):

sudo apt-get install apache2 apache2-common apache2-mpm-prefork apache2-utils ssl-cert libapache2-mod-php5 php5-cli php5-common php5-curl php5-mcrypt

svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk/ /home/jhoover/dev/shindig

sudo mv /etc/apache2/mods-available/rewrite.load  /etc/apache2/mods-enabled/

sudo cp /etc/apache2/sites-enabled/000-default /etc/apache2/sites-enabled/shindig

sudo pico /etc/apache2/sites-enabled/shindig

Stop laughing, I use the Pico text editor. I’m, as my son would say, “weak sauce”. I know. Anyway, here’s what I have in that virtual host file:

NameVirtualHost *
  ServerAdmin [email protected]
  ServerName shindig

  DocumentRoot /home/jhoover/dev/shindig/php
  DirectoryIndex index.html index.php
  <Directory />
    Options FollowSymLinks
    AllowOverride All

  ErrorLog /var/log/apache2/error.log
  LogLevel warn

  CustomLog /var/log/apache2/access.log combined
  ServerSignature On

Once we have that in place, we need to edit our host file:

sudo pico /etc/hosts

Append the following to the hosts file and save:       shindig

Time to restart Apache:

sudo /etc/init.d/apache2 restart

Now you should be able to go to your web browser of choice and run the demo/test app:


If all went well you should see something a little like this:

MSSU Follow Up

On Thursday, October 25th, I spoke to the CIS club at Missouri Southern State University. The presentation won’t win any awards (no presentation of mine ever will.) I put the Powerpoint up on SlideShare. I promised the students and professors in attendance that I would follow up with a post on my blog with links and other info that might be helpful.

If you’re interested in an internship with Gestalt’s Joplin office, please send your resume to my email address: jhoover at gestalt-llc.com. I’ll make sure your resume gets to the right people within Gestalt.

Pragmatic Unit Testing in C# with NUnit on Amazon.com

Agile Software Engineering
Some of the agile software engineering best practices I mentioned during the presentation were Test Driven Development (TDD) and Continuous Integration (CI). Since MSSU is focused on .NET, here are some links that might be helpful related to TDD and CI:

YouTube Videos
Coco had asked how Gestalt was using YouTube. I mentioned that we used it as part of a recruiting effort. We had a contest open to the employees to see who could make the coolest recruiting video on YouTube. The results of that contest can be found here. The winner (as voted on by Gestalt employees) was John Moffet’s PatrolNet Woes. In an act of shameless self-promotion, I’m embedding my video below.



My Job Went To IndiaRecommended Read
A book I’m in the process of reading that I think would be extremely beneficial for college students to read is My Job Went To India. I’m about a third of the way through and the advice is practical and especially relevant for those entering the IT workforce these days.

RSS LogoThere were some questions about RSS during the presentation. May I suggest checking out the Gestalt Blogs RSS feed? This feed has all the posts from Gestalt bloggers, with quite a few being out of the Joplin office. My personal favorite combo for subscribing to and reading RSS feeds is Firefox and Google Reader.

Open Source
Below are the links to all our current Open Source projects:

Producing Open Source SoftwareRemember to look into joining an Open Source project. While I don’t have any specific recommendations on projects to join (other than our own!), I can definitely recommend reading the book Producing Open Source Software. You can get a free PDF and HTML version of the book.

Google Finds Search

It always seemed odd to me that Google Reader never had search functionality. I mean, what is the one feature you’d expect a Google app to have built-in from the start? Apparently not search. I’m a little slow, haven’t been in Google Reader much lately and completely missed the new search bar at the top of the Google Reader app. Very cool. Now I can actually find nuggets of pure gold in old posts that I tag and star in Reader.

Google Reader Search

Web 2.0 is Agile…Sort of

Scott Rosenberg makes an interesting observation about Web 2.0 software. Scott wrote the book Dreaming in Code, which gives a look into the making of the open source software project Chandler. One of the key points Scott makes in his book is that software is hard. One of the most common arguments against this point is that web applications solve this problem. Web applications are agile in their nature. They can be rapidly developed, deployed and continually updated with new features and fixes.Bloglines and Yahoo equal MS Vista

Web 2.0 makes software almost easy in comparison to past software revolutions. Not quite. As Scott points out in his blog post, both Yahoo! and Bloglines have taken nearly five years to release new versions of their web (2.0) applications — Yahoo! Mail and Bloglines’ namesake app. Five years is what it took Microsoft to get Vista out the door. While it’s easy to build web applications and services in a rapid manner, it’s not necessarily easier to make them scale. I pointed out yesterday that Twitter is having issues with scaling their service as it grows ever more popular. Facebook, MySpace, and many other Web 2.0 companies have faced the same challenge.

I don’t think many people touting Web 2.0’s software development superiority often understand what is involved in making a scalable web app/service. There are so many pieces involved and just addressing some of them (say the database layer or client optimizations) is not an option. Once one piece is made more scalable you find the other pieces are hindering the performance and stability of the application/service.

Web 2.1 LogoI believe that the next revolution for Web 2.0 (I think I’ll call this Web 2.1) is allowing developers to build on top of an infrastructure that handles the core scaling gotchas from the start transparently, without large up-front capital investment. Amazon.com’s AWS offerings appear to be headed in this direction. They’re still missing some key pieces (a reliable/persistent data store & load balancing for example), but it’s promising. The ideal would be for developers to not have to worry so much about the underlying hardware, network, operating systems, etc. For example, if you’re building the next great web app/service with Ruby on Rails, you would love to be able to deploy in an environment that allows you to grow without any worries. You’d want to know that you have things like:

  • Nearly endless data storage that is reliable and responsive
  • As much bandwidth as necessary (throttle on demand)
  • A data store that grows without concerns of having to purchase additional hardware and software
  • An authentication & authorization service
  • A standards based reliable messaging service
  • The ability to seamlessly add more instances in the web and app tiers (on demand)
  • A caching service for all levels of caching (client, database, external data sources, etc.)

If you can have those types of items covered in your deployment environment up-front without the typical capital investments (a big gotcha for today’s Web 2.0 companies, by the way), then I think the five year development cycle Scott Rosenberg references with the latest Yahoo! Mail and Bloglines’ releases can be lessened drastically. The problem today is that you can build your web app/service with scaling in mind but it takes substantial amounts of time to ramp up and test for each increment in the underlying infrastructure. If Twitter (for example) started out running on an infrastructure that had the items I listed above, I think they’d be able to better handle the exponential growth they’ve been experiencing. They didn’t start out on an infrastructure like that because the capital costs are too much initially.

Bottom line, Web 2.0 software development is not a panacea. (Ditto for SOA, as Jim Stogdill (Gestalt’s CTO) pointed out previously.) There are still many challenges faced by Web 2.0 software that makes it far from ideal in terms of solving the age old problems inherent in software. The good news is that there are opportunities to help solve these problems. The question I have now is: Who will step up to the challenge?

Twitter API Not Exactly Working Right Now

I installed the Twitter Tools plugin for WordPress on my blog here earlier in the week. I noticed on Thursday night that it stopped working. I did a little troubleshooting on it and found that the call to the authenticated Twitter API URLs were giving back a 301 response instead of a 200. Previously, when I wrote a new post, my Twitter status would update with the title and link to the post. It was a great way to shamelessly self-promote my blog to those following the Gestalt Twitter friends of status. Some call it spam, I prefer to think of it as “direct marketing”.

It appears Twitter made some changes to their load balancing setup and that is not playing nice with previously working consumers of the API like the Twitter Tools plugin for WordPress. I think I have a way around the problem but that means I need to add some code to Twitter Tools. If I write code then the guys back at the office might start to freak out. You see, my specialty is running GoTo meetings, a projector (questionable there), and ScrumWorks. This was first pointed out by James Lorenzen. Never ones to disappoint when it comes to boosting their Scrum Master’s self-esteem, James’ team members jumped in on the fun. I’d hate to ruin my reputation with those guys but I may have to. My spam operation…errrr…direct marketing efforts demand it.

I Don’t Get Facebook

I’m not hip. I don’t get Facebook. I understand the concept but I don’t get the hype around it. OK, it’s a platform. But, maybe I’m missing something. The whole point of the Facebook platform seems to be about locking you into Facebook. Another well hyped web app is Twitter. While I don’t use Twitter (nor the numerous competitors), I think I get it. Twitter’s API makes more sense to me. Twitter isn’t locking you into a platform like Facebook is. Am I over simplifying things?

You’d think Amazon would try to build out a platform of sorts with their AWS offerings. Who knows, maybe they are. But, I think Amazon is taking more of the approach I see in services like Twitter — providing well focused services like the Flexible Payments Service (FPS) and Simple Queue Service (SQS) rather than an all encompassing platform that makes the seemingly limitless Internet and web rather limited.

So, what is it that I don’t get about Facebook that many others do?