In the tussle among the many Content Management Systems (CMS)  communities who are vying for more users is what might be the most common brag; “Our community is the most helpful!” As someone who works within three CMS platforms, i.e., Drupal, WordPress and Umbraco, I have found the Drupal community to be by far the most supportive. The community has many channels available for support. I have been surprised by what a helpful complement Internet Relay Chat (IRC) has been.

If time began with the Internet, than IRC and myself are primordial. I saw IRC and usenet as technologies that made sense before pretty user interfaces had become ubiquitous, and thus their continuation represented the equivalent of primary digital water coolers for bearded UNIX admin types. I wrongly presumed it was irrelevant. Additionally, I had been warned that many IRC groups are full of hard-core developers who don’t suffer beginner or intermediate level questions with any grace. As I have recently learned, I was wrong.

The North Carolina-based Drupal group maintains an active IRC channel (#drupal-nc on freenode). Despite my bias, curiosity led me to check it out. Over time, the value of it became obvious. There is on average about 15 people, many of whom simply leave their IRC client running (and thus aren’t there in the “active and watching the IRC stream” sense) but there’s nearly always someone paying attention and responding to questions or to greetings. As for responding, there is ample brainpower on display. These folks answer and discuss esoteric Drupal, PHP, MySQL, Apache, and other supporting technology questions with enviable facility. One can learn much by leaving the channel open and watching the discussions unfold. The group is very eager to help all questions, simple or esoteric.

Since joining this channel was so edifying, I added another channel to my irssi windowed view; the main #drupal channel. The volume of activity is much higher than #drupal-nc, perhaps by a factor of ten. The stream is constant (irssi updates at least every minute, sometimes rapid-fire) and there’s hundreds of “nicks” logged in at any time. The geographic scope is global; and one must presume he is not conversing with a North American, which makes conversations much more interesting. Roughly one in three questions are the type where a cynic might respond with a “Google it” but rarely have I seen that. Indeed, even better than “Googling it” is some excellent functionality that an IRC bot, “druplicon” provides all freenode Drupal channels. You can pass a Drupal URL and druplicon will provide a contextual response that helps to provide clarity in a technical discussion. You can ask it simple questions, such as a module name and a question mark, and druplicon responds with summary project information. It’s a clever way to leverage such a combination of old and new-ish technologies.

Here’s a great page on using IRC on the Drupal channel. Actually, there are several great irc-related pages for drupal there that I just discovered.

I use the irssi command-line client and I love it. It has low memory footprint (unlike the monster that Skype is. Note to self: convince my single Skype-loving client to switch to a private IRC channel?)

So, if you’re going to say you’ve got a friendly community, Drupal has set a very high bar to reach. Yea, I’m looking at you, umbraco!

Search Engine Optimization (SEO) is a funny thing. Most of our B2B customers are ambivalent about SEO during our specifications phase of development. “We’re word of mouth” is a common sentiment, a largely rational response. SEO is a great marketing tool, especially when well integrated, rather than being thumb-tacked on as an afterthought. However, for B2B, SEO isn’t as critical as it is for B2C. Anecdotally, we have found that after presenting the culled Google Analytics data on a couple months on their new site’s traffic, some B2B customers want to start increasing their visitor count.

Like good art, most people “know it when they see it,” and I understand wanting to see a higher volume of visitors. The downside to this is an overall higher cost than had we incorporated it in the specifications phase. There’s multiple SEO strategies we can add here; one way we’ll focus on here is to improve visibility and “desirability” in search engine indexing is frequently-updated home page content. Historically, this has mean There’s a simple way to do this, without requiring the cumbersome and time-consuming nature of creating a professionally-written blog entry: enter Twitter and the Drupal module Twitter.

Unlike writing a full blog post, a tweet requires much less expense. While one must write their tweets (content posted on one’s Twitter account) well, the 140-character limit is a wonderful parameter for keeping a tweet pith, poignant and appealing to their target audience. Also, a tweet is unformatted text. The author doesn’t need to load a WYSIWYG-enabled text field. It’s like writing in notepad: you just write. This is where Twitter and Drupal come together nicely. With the Twitter module, you can create a block that shows the tweets from a specific account. Then, drop this blog onto your home page. The Twitter module will poll your specifed channel for new tweets and add them to its own table. The main advantage is that it’s all server-side. When the dreaded “Fail Whale” surfaces, i.e, when the Twitter servers are unavailable, which isn’t uncommon, something you might see using Twitter‘s javascript/client-side script-based widget won’t be an issue. Additionally, the twitter widget isn’t helpful for content/SEO. That has to be server-side.

That’s it! Using Twitter/Drupal integration, our customers can now update multiple channels, i.e., their Twitter channel and their company’s home page, by virtue of creating a single tweet.

Here’s one of our sites that uses this process.

The cobbler’s kids shoes got an upgrade, and, as always, with more updates to come. I started phasing out our ancient, hand-coded site for skrinakcreative so as to convert it into a Drupal site. (For the record, I had considered using umbraco, but my bias towards LAMP stacks overwhelms me) Its odd to sell Drupal/CMS sites using a hand-coded site, though the performance of static HTML remains extraordinary.  I mentioned doing this in stages. Since performing site work is indirect (non-billable) activity, detracting from deadlines, I have to do so without incurring too great a cost or time hit, so, for now, I’m using iframes and I have embedded the old site’s portfolio section into the portfolio page.

That’s where this gets interesting.

I’m using Drupal 7 with the genesis theme, my favorite starter theme, the minimal profile and a small subset of my standard default modules: admin menu, markdown, pathauto, google analytics, token and token filter. (More will come as driven by need.) I had converted Elena’s designs to basic templates some time ago. Ironically, it is (for now) a three-page site; home, portfolio and blog. Using Path and Path Auto, I wanted the path to portfolio be skrinakcreative.com/portfolio and did the ordinary steps to do so. However, an odd thing happened. The "skrinakcreative.com/portfolio" link became "skrinakcreative.com/portfolio/" with the uninvited forward slash appended. This violates the .htaccess set by Drupal — which, as I later discovered, is a handsome safeguard against such a scenario. That was odd; and I couldn’t figure out what was causing this. I checked pathauto for the extra “/”; nope. Googled it, and found this issue but no immediate solution. However, the key to my problem was in there, but I missed it as I hadn’t fully comprehended the problem. I had a directory off my Drupal’s root directory, named “portfolio” so apache was dutifully updating the URL to point to the directory, and overriding Drupal’s path mechanism. The directory itself was detritus from my old site and I was able to safely delete it; thereby solving the problem.

As someone at the #drupal freenode irc channel said, it would be something so simple.

I had an interesting experience recently that encapsulates my experience with two CMS communities; umbraco and drupal. I had tweeted about my moving what is currently an umbraco 4.0.1 site to a Drupal 7.x site. This started an interesting conversation about why the move? Several umbraco fans (or what I call “umbracians,”) wondered why the move and sought more feedback from me. Being in the throes of developing a theme, I explained that while I still find umbraco a brilliant CMS (particularly considering what it sits on top of) that Drupal makes a lot of sense in the low-end web site space, especially with tight web development budgets. For the record, no Drupal fans stepped into the fray, which I expected. Regardless, I know I can count on both community when it matters, e.g., when I’m stuck on a technical or modeling issue.

One twitter user asked me for a constructive “why for the move?” Given how helpful the umbraco community is, I wanted to be clear on why I prefer Drupal over Umbraco. (Remember I offer this filed under “there’s no accounting for taste”)

  • The .NET licensing debacle. Sorry; I try and continue to work on my .NET skills but I don’t like MS’s restrictive, costly and constrictive licensing. This plays out in many ways, in one example, restricting my flexibility in quickly cobbling sandboxes. With open source software, the licensing allows me to have multiple virtualized OS’es as needed, created and scrapped as easily as files themselves. I can build, test, destroy and refine without caring about migrating my OS or development environment licensing as appropriate. It’s a major nuisance.
  • While WebMatrix is an interesting, if very nascent, effort by Microsoft to address portions of what I write above, one quickly hits the wall of what you can do and you find yourself needing a full development environment. That is; Microsoft Visual Studio. Sorry, but I greatly resent having to install 2+ GB to run VS. Intellisense is cute; but given all the time I’ve spent in vim, the “enhancements” offered by VS feel like training wheels, not productivity enhancements.
    Sidenote: For someone my age, I’m struck by the irony. MS was chided for it’s command-line starkness and poor Windows UI in the 90′s, where as Apple had a well-designed UI but poor or non-existent shell. Now I look to Ubuntu, Cent OS, Mac and others for an excellent shell and excellent GUI, but now Microsoft fails to offer a premier-class UI or shell. Adequate; not premier.
  • Bloatware. The two factors, above, adds up to extensively consumed disk space. My Dell is a dual-partition laptop, ubuntu weighs in at 20% usage for a 10GB partition. Windows Server 2008 weighs in at 80% usage on a 70 GB partition. So much disk space consumed for such little comparative value.
  • Web host pricing. I’ve found much better LAMP vendors than .NET vendors with greater variety, pricing and support levels. I expect that, again, licensing restricts what kind of support and pricing .NET platforms can offer. My MySQL vendors allow me to create up to 20+ databases. My .NET MS-SQL vendors? One database, and pay as I need more, or the plan is priced accordingly. Of course, as they pay per database. I’m happy to report I’ve found a solid .NET vendor that I can heartily recommend; as I also know of another whom I look forward to our quick parting.
  • I love the Umbraco spirit and community. They are very good about responding to my questions at their support site. Yet, as umbraco’s community isn’t the size of Drupal, there is a disparity in the amount of packages/modules available to each. So, while I greatly appreciate their helpfulness, I find myself “rolling my own” solutions, which adds time to a project. Additionally, I’m closer to the front end of site development than the back end. I prefer theming and snapping in functionality, not building the functionality.
  • Establish an Umbraco “core” directory structure: Updating umbraco is not easy, particularly if you’ve extended umbraco which one will almost certainly have to, as with any CMS. All binaries go into a single /bin folder. I like the drupal core model. Leave core alone, and updates are trivial (in comparison.) My guess is that umbraco could develop a comparable core directory structure.
  • Lack of a “status report” Drupal’s status report provides an environmental “dashboard” as it regards the server, it’s configuration and capabilities. This feature in Drupal is priceless, in particular when working on commodity hosting vendors. Inversely, I’ve been bit hard by the lack of such a dashboard or overview in umbraco; “trust level” “application pool” settings and other aspects. They have a rudimentary one in their installer that tests for fundamental support, that would be a good start.
So I haven’t said what I like about umbraco, and there’s a lot to like. One of our umbraco sites is a top performer in many respects. I love theming in umbraco; I much prefer it to the bipolar Drupal/php theming method. php theming is, well, butt-fugly. I love having direct-editing access to all my site files via the umbraco backend UI. And there’s more.
Umbraco remains a valuable asset in my toolbag; but I will be giving the node to Drupal for now.
So what’s up with WordPress? That’s for another post, though, ironically, I use WordPress for this very blog.

The cliché is that you only get a single chance at first impressions. In this case, we’ve got an exception. I’m talking about the CMS framework Umbraco. First, a little history. In 2007 we identified the need to move a customer’s 1200-page, includes-based site, into a CMS. The site was growing from one language to seven. We wanted an MS-friendly CMS, (the client is MS-centeric in its IT) but we wanted an open-source licensed framework, as I’ve grown to appreciate the support and community that an open-source projects offer. After performing extensive research, we settled on Umbraco. Read the rest of this entry »

Two simple notes about running git (specifically msysgit) on Windows that tripped me up: at first:

  • git config core.autocrlf false will prevent the conversion to unix-style line endings
  • To exclude all directories but a few, do the following:
    /*
    /dirname*

In the above, the first rule excludes all directories, but the second line includes the directory “dirname” and all that begin with such a path. It’s not clear to me why that works, but it’s working for now.

Performance Optimization WordPress Plugins by W3 EDGE