The Best Online Project Management & Collaboration Tools of 2013

workflowThe web has opened us up to collaborative work on a global scale.  On any given project, we may work with contractors around the globe.  But managing that collaboration requires a tool, or set of tools, that allows asynchronous communication and information sharing.  Picking the right Project Management software is an important decision, and the final choice of tool is going to be highly dependent on both your management style and business needs. Quite some time ago, I posted my list of the 5 best web based project management / collaboration tools.  That list has proven to be one of the more popular posts on this blog, but the landscape has changed a lot, even in the last year.  So, after taking another look at my own workflow, and checking to see if there are any new tools out there that more closely fit my needs, here’s an updated list of some of my favorite Project Management software for 2013.

Continue Reading…

Taming the WEASL, Weapon for Evaluation & Analysis of Solr/Lucene

Apache SolrI do a lot of work with Apache Solr, which is a front end wrapper for Apache Lucene.  Lucene is a text analysis search engine.  Basically, you give Lucene a “document”, and it analyzes the text of that document, and stores an index of which words and phrases occur in which documents.  What Solr does, is provide an http based front-end and a “ready to go” installation for the entire system.  Lucene is an amazing piece of software, and Solr is just awesome, as far as I’m concerned.

With that being said, Solr’s admin interface leaves a lot to be desired.  Solr has the concept of “cores”, which are independent, unrelated indexes.  Reminiscent of Drupal’s multi-site installation, Solr’s multi-core, allows you to set up multiple search engines for multiple sites, all on a single installation of Solr.  Unfortunately, you can’t work across multiple cores in the admin interface.  For instance, in one installation that I work on, I have multiple cores, one for each site.  These sites are all similar, and they all use the same Solr schema.  There’s also the potential for the same content to be created across multiple sites, and to end up in multiple Solr cores.  Now, if I want to see if a document occurs in multiple cores, then I have to go each core’s admin interface separately, and run a query.  That’s sort of my base gripe with Solr, and I’ve been working on a tool to alleviate the problem, for a while now.  I call it The WEASL!

Continue Reading…

HDTV, OTA, DIY, and lots of copper

Lately I’ve been very interested in getting rid of cable TV. It’s an unneeded expense, since I do most of my TV watching via Netflix, Crackle and Amazon Video. However, I do still want to watch the local news, ABC, CBS & FOX. I also have small children, so PBS is a big deal in my house. So I have to have cable for that, right? Contrary to what Time Warner, ComCast or your local cable company would like you to think, it turns out that you don’t really need them.

Local television stations still broadcast their signals over the airwaves (OTA, or over the air), just like in olden times. And by using a properly tuned antenna, then you can pull in those signals for FREE! It turns out that cable companies actually compress their signal in order to save bandwidth, so your HD stations aren’t HD by the time you watch them. Using an antenna, on the other hand, you’re receiving the full uncompressed signal, so HD is truly HD.

Another misconception is that you need an “HD” antenna to be able to receive these new digital HD signals.  That’s a bunch of marketing horse hocky.  A signal is a signal is a signal…  Any antenna will do the job, provided you’re close enough to a transmitter, and it’s pointed in the right direction, and there aren’t giant mountains or concrete buildings in the way.  If you look around, you’ll find some really good antennas available for a decent price.  ChannelMaster and Antennas Direct are some of the well respected names in the industry.  But, anybody can go out and buy an antenna.  I’m a geek, and I don’t need no stinking store bought antenna!  I’ll build one myself!  OK, at this point my wife is looking at me like I’m a complete lunatic.  “You can’t ‘build’ an antenna.”, she says.  “That’s not even possible.  Is that possible?”  Of course it’s possible.  You can smooth out some tin foil and attach it to the TV, and that’s an antenna.  But there are some resources out there on the intertubes that make it possible (not easy, but possible) to build a really high quality, high gain antenna that will blow your mind.

First things first.  We need to find out what signals are available, and how we need to orient our antenna.  There are two really good resources, tvfool, and antennaweb. and are both excellent sites that show you what television signals are available based on your address.  Personally, I think antennaweb is a bit easier to use, but tvfool seems to offer more detailed information.  You can try them both at:

[AFG_gallery id=’1′]


So, according to these reports, I should be able to receive somewhere around 14 stations (not including the digital subchannels, i.e. 5.1, 5.2, 5.3, etc…), including all of the standard broadcasts, ABC, CBS, NBC, Fox, etc…  Now, rabbit ears aren’t going to cut it, so let’s do a quick browse around the internet and see what we can find.  There are quite a few hobby antenna sites out there, mostly catering to the Ham radio crowd (those guys are hardcore).  After digging through a few antenna design forums, I found these two designs that look promising:

The Stealth Hawk

The Grey Hoverman

Since this post is starting to get really long, I’m going to go ahead and stop for now.  Next time, I’ll detail my experience building these two antenna designs.

My first 555 timer circuit

I finally built a working 555 timer circuit with a blinking led.  That’s basically the “Hello World” of the electronics world.  I was so proud of my myself, then I showed it to my wife, and she patted me on the head and said “That’s nice, honey.”  Anyway, I think it’s cool.

Here’s a super awesome picture of my 555 timer in action.

My first 555 timer

Drupal’s Learning Curve

I just had to share this image.  To my mind it illustrates the Drupal learning curve, perfectly.

That about sums it up.

I’m not sure where the image comes from originally, but I found it posted by Arjun at:

UPDATE: Several people have suggested that this image originally came from the excellent webcomic XKCD.  According to the XKCD forum, this was never an XKCD comic.   See this post for more information.

Fixing Drush to work with Custom Drupal modules

I’ve mentioned that I consider Drush to be an absolutely essential tool if you’re running more than one Drupal site.  However, I recently ran across an issue that took a little while to figure out.  First of all, the latest update to Firefox seems to have broken something in the FCKEditor module.  I may talk about that later, but it’s not the main point here.  The fix is to disable FCKEditor, and switch to the newer CKEditor.  Using Drush, that’s a simple matter of two commands

drush disable fckeditor
drush enable ckeditor

However, when trying to run Drush, I got the following error:

Drush command terminated abnormally due to an unrecoverable error.

That’s right, Drush wouldn’t even run.  It turns out that the problem was caused by a custom module that I had written for the site that does a redirect.  When Drush accessed the Drupal core, it was being redirected to a static page, which caused it to barf.  So, I needed to figure out a way to make sure the redirection doesn’t happen if the request is being made by Drush.  I tried for quite a while to use the Apache $SERVER global to check the request origination, but I just couldn’t figure out what the value should be to check for Drush.

What I finally settled on was checking for the existence of one of Drush’s methods.  Due to the way that php operates in Drupal, once a method (function) is defined, it’s essentially a global function (Drupal’s not object oriented, so there’s no real concept of access modifiers).  So simply making the following check fixed the issue:

  //don't redirect