VirtualBox and Bridged Networking on a Headless Ubuntu Server Host

In the previous VirtualBox post, I explained how (and how not) to set up bridged networking with LAN access to a Virtual Machine running on a Windows XP Host. Today I will explain how to do the same thing (without the How Not To part) using a virtual Machine running on a Headless Ubuntu Server.

For this example we can assume a few things:

  1. You have already set up a headless VirtualBox server
  2. You have already created a Virtual Machine instance. For this sample, we will call the Virtual Machine “MyVM”.

Believe it or not, setting up bridged networking to allow your VM to access your network is pretty simple and completed by issuing the following VBoxManage command in a terminal window.

Command: VBoxManage modifyvm “MyVM” –nic1 bridged –nictype1 82540OEM –bridgeadapter1 eth0

Break it down

To understand a bit more about what’s happening here, let’s break down the command string from the beginning.

VBoxManage – This is the command line utility used to access, control, configure and manage your VirtualBox Virtual Machines.

modifyvm – This command allows you to make changes to the properties of a Virtual Machine, including the amount of memory assigned, nic interfaces, Virtual device boot sequence, number of CPUs, etc. It can be compared to the Settings dialog of the VirtualBox Graphical user Interface. The command line version, however, offers additional advanced options not found in the GUI.

Note: the VM must be registered within VirtualBox, but must not be running

MyVM” – This is simply the name of the VM you want to modify.

–nic1 bridged – The –nic1 parameter is used to set the type of networking your VM should use for each of the it’s virtual network cards. You can have more than one network card in use for a VM so the paramater is written as –nicX where X is the network card being targeted. Here, “–nic1” is the first network interface, –nic2 would be the second and so on. This portion of the command string is setting the type of networking on the first interface to “bridged”.

–nictype1 82540OEM – The –nictype1 parameter allows you to specify which networking hardware VirtualBox should emulate for the VM’s virtual network cards. Here we set the networking hardware to emulate an Intel PRO/1000 MT Desktop card or 82540EM.

–nictypeX follows the same sequence numbering and –nicX for multiple interfaces where –nictype1 is the first virtual card, –nictype2 is the second and so on.

Note:  The following is a list of the available nic hardware types and the associated ID recognized in VirtualBox.

  • AMD PCNet PCI II = Am79C970A
  • AMD PCNet FAST III = Am79C973 (the default)
  • Intel PRO/1000 MT Desktop = 82540EM
  • Intel PRO/1000 T Server = 82543GC
  • Intel PRO/1000 MT Server = 82545EM
  • Paravirtualized network adapter = virtio-net

–bridgeadapter1 eth0 – Finally we have the –bridgeadapter paramater. This is the only part of the command string that references a part of the VirtualBox host and tells your VM which physical host adapter to pass it’s traffic through.

Again, this uses the same sequence numbering as nicX and nictypeX for multiple interfaces. Here, we are setting the bridgeadapter for our first virtual network card to use the eth0  interface on the host. Note that is eth zero, as in the number and not the letter O.

And that’s it. Restart your VM and you should now have a working bridged network interface for you VM with full network and internet access.

VirtualBox 3.0.4 and Bridged Networking on XP Host with GUI

Photo: Wally Gobetz
Photo: Wally Gobetz

Editors Note:

While I was writing this, the solution to my problem struck me unexpectedly. Click here to skip the drama and jump right ot the solution.

Originally, this article started out as a complete rant and cry for help. I started to write about the failure and frustration of the installation and network configuration of a virtual machine in VirtualBox 3.0.4.  It just would not work. The problem, as it turned out, was that I was over thinking the process. BUT, that is not completely my own fault.

Continue reading “VirtualBox 3.0.4 and Bridged Networking on XP Host with GUI”

Add a Network Printer to an Ubuntu Desktop – The Easy Way?

The Rant

It’s no secret that I am a fan of Ubuntu Linux. BUT.. one of the annoying things about using Ubuntu is trying to set up a network printer on a desktop or workstation. Regarding nearly all administrative tasks under most Linux systems that would require root permissions, Ubuntu has done a nice job of making it possible to operate a system as a “normal” user without elevated privileges, and then easily gain the elevated (root) privileges temporarily assigned to complete some specific administrative task. Ubuntu detects when a user is trying to do something requiring the elevated (root) privileges and pops up a small window asking for the current user’s password to gain the required permission. All the magic happens behind the scene and the user never has to issue a text command. It wasn’t long ago that users would have had to open a command terminal and issue all the instructions by hand. Well.. we’ve come a long way.. With the exception of installing a network printer. For some reason, when installing a printer in Ubuntu, the user is not prompted with the normal su password pop-up that presents itself for all other administrative tasks. Instead, the CUPS system prompts the user for the root password – and under Ubuntu, there is no root password by default meaning that root can not complete any direct action requiring a password. In fact, root can not log directly into the system at all. Fortunately, the solution is fairly easy.

The Solution

Do not try to install a printer from System > Administration > Printing menu. It won’t work. Sure, it will allow you to go through the wizard and give you the false impression that you’re actually accomplishing something – until you reach the point where a driver needs to be installed and you’re prompted for the root password. Instead, go to the Applications > Accessories menu and select Terminal.

Once the terminal window opens, issue the following command

sudo system-config-printer

The next line in the terminal window will ask for your password. Type in your user password and hit enter. If all is correct, the printer setup and configuration window will open with elevated privileges enabled and you can finish installing and setting up your new printer from comfort of an easy to use GUI.

Sample Setup

Lets take a few minutes and walk through the process. In this example, I will be setting up a Dell 1700 Laser Printer in my Home Office. Before you get started, you will need to know a few things about the printer first. Continue reading “Add a Network Printer to an Ubuntu Desktop – The Easy Way?”

YouTube API Hack: Link Your Videos Directly to Your YouTube Channel

Wait! Your a Hacker?

Hack ItFirst of all, my use of the word “Hack” is not the version popularized by the media. It is used here in the context of using a tool (YouTube API) to accomplish a task that was not originally part of the tool’s design. By using some creative thinking and little trial and error, I was able to accomplish a desired result, and overcome a limitation of the API.

Ready, Set, GO!!

While working on a recent project I came across a mildly irritating limitation of the YouTube API. The thing is, I wanted to display a list of recently added YouTube video thumbnails to a web site that link back to the videos in the YouTube users channel.  Easy! right?

Not So Fast!

Here’s the thing. The channel feed returned by the API does include the link back to the YouTube Video, BUT it sends the visitor to the usual standard public YouTube page with the video embeded and NOT to the Channel of the YouTube member who uploaded it.

For most, this would be fine. But I wanted to be able to preserve a connection and identity between the web site and the YouTube Channel.

Unfortunately, the YouTube API does not provide a direct way to do this [link videos back directly to the YouTube Channel instead of the standard YouTube page]. So what’s a developer to do? … Come up with a hack, of course!! (even if is is a small one)..

First A Note:

This solution uses the Simplepie PHP Code Library to grab the Channel RSS feed

The Code:

<?php

require_once(‘php/simplepie.inc’);

$feed = new SimplePie(‘http://gdata.youtube.com/feeds/api/users/[user name]/uploads’);

$feed->handle_content_type();

$YT_PlayerPage = “http://www.youtube.com/user/[user name]#play/uploads/”;

$YT_VideoNumber = 0;
$ShowMax = 4;

foreach ($feed->get_items() as $item)
{

if ($enclosure = $item->get_enclosure())
{

$YT_VidID = substr(strstr($item->get_permalink(), ‘v=’), 2, 11);

echo ‘<a href=”‘ . $YT_PlayerPage . $YT_VideoNumber . “/” . $YT_VidID . ‘”title=”‘ . $item->get_title() . ‘”> <img src=”‘ . $enclosure->get_thumbnail() . ‘”/></a>’;

}
if($YT_VideoNumber == $ShowMax) break;
$YT_VideoNumber++;
}
?>

Tiptoe Through the Tulips (or walking through the code)

There you have it. A small block of PHP code and we have the result we’re looking for. Now let’s take a look at each line in the code.

require_once(‘php/simplepie.inc’);

This line does nothing more than call/include the Simplepie Library. The one thing you may need to change here is the location of the library. I stored it in a directory at the root of my web called “php”. So depending where you store your copy of the library, you may need to change this.

$feed = new SimplePie(‘http://gdata.youtube.com/feeds/api/users/[user name]/uploads’);

The next line creates a new feed and stores it as $feed. Pretty creative.. huh? Whats happening here is simplepie is grabing the rss feed for the YouTube Channel’s Uploaded videos.

An important note to make here is that the URI for the RSS passed to SimplePie is not the same as the RSS URI that you would use to subscribe to the channel’s RSS feed to use with your RSS reader. You will also need to replace [user name] in the URI with the YouTube user name for the channel you want to pull videos from.

The Standard RSS Subscription URI looks like this:
http://gdata.youtube.com/feeds/base/users/[user name]/uploads

While the URI used by the API to grab the RSS looks like this:
http://gdata.youtube.com/feeds/api/users/[user name]/uploads

Notice the difference indicated in bold text (“base” vs “api”). You will need to be sure you use “API” version of the URI. You can get this by copying the public RSS URI and simply changing “base” to “api”.

At the next line we have:

$feed->handle_content_type();

This just makes sure the content is being served out to the browser properly.

The next three lines contain three variables I’ve added: $YT_PlayerPage, $YT_VideoNumber and $ShowMax

$YT_PlayerPage = “http://www.youtube.com/user/[user name]#play/uploads/”;

This is the first part of the key to getting YouTube links to point directly to the Channel page. This variable holds the base Channel player URI and is used to construct a complete video link. The completed URI link also includes a counter reference and the unique 11 character video ID. To get the URI for the channel player page, visit the YouTube Channel you’re grabing the video feed from and click on a video link. The complete URI for that video will appear in the browser’s address bar. Simply copy that URI and eliminate everything following the backslash “/” after “uploads” (indicated in red)

http://www.youtube.com/user/[user name]#play/uploads/#/xxxxxxxxxxx

$YT_VideoNumber = 0;

The links on the YouTube Channel page contain a counter in the URI and increases by +1 with each link. This is the second part of the key in constructing the direct Channel links. This counter was a portion of the link that was removed in $YT_PlayerPage. I’m not completely clear on what the purpose of the counter is and in my experimenting with this, it did not seem to make a difference what the counter value was as long as the video ID followed it. But since it is the format that is used on YouTube’s Channel pages, I’ve figured it would be best to recreate the same thing here. Besides, we are going to use that value later in the code. I’ve set the initial value of the variable to 0 (zero) because the counter is zero based. (0, 1, 2 … )

$ShowMax = 4;

The next line contains the $ShowMax variable. This is used to set a limit to the number video links I wanted to display on the page. BUT, there is a trick you need to be aware of here. We are using the $YT_VideoNumber to get the counter number for the current video in the Loop (the loop will be described in the next section). But because $YT_VideoNumber is zero based, we need to compensate for that in the $ShowMax Variable and offset the limit by -1. In other words, to limit the display to 5 items, we need to set $ShowMax to 4 because we are including 0 as the first item (0 1 2 3 4) for a total of 5 items. Got it?… good!

foreach ($feed->get_items() as $item)
{

These lines start/open the Loop getting each item in the feed. This is where the code will “loop” through each item (video) in the feed and extract the information I wanted for each video.

if ($enclosure = $item->get_enclosure())
{

This line sets a conditional variable ($enclosure) to check if the current item in the loop contains enclosure data provided by MRSS (Multimedia RSS) that might be provided with the feed. YouTube feeds do support and provide MRSS enclosure data and we need to be able to pull it from the feed. The get_enclosure() method is part of the SimplePie Library and makes getting access to this data pretty easy.

$YT_VidID = substr(strstr($item->get_permalink(), ‘v=’), 2, 11);

This line is the final [and probably most important] part of the key to constructing the Channel video link.  It’s also the most confusing part at first sight. I mentioned earlier that a video link is provided with the feed that will direct the viewer to a the standard public YouTube page for viewing. This link contains the video ID that we need. The bad news is that the API as far as I could see does not allow a direct or easy way to get the ID for each video [please correct me if I’m wrong here]. The good news is that the ID can be extracted from the link provided with the feed, and that’s exactly what this line does.

$item->get_permalink() returns the URI / video  that would direct a visitor to the standard YouTube page. The URI is similar to:
http://www.youtube.com/watch?v=xxxxxxxxxxx

v=xxxxxxxxxxx of the URI contains the video ID and needs to be extracted.

substr(strstr($item->get_permalink(), ‘v=’), 2, 11) isolates and extracts the video ID and then stores the ID in the $YT_VidID variable.

Lets have a closer look.
We need to find the position in the URI string where the video ID starts and then extract it.

The video ID is passed in the URI as in query string paramater “v”.  I used the PHP strstr() method to match and find the position of “v=”. This will create a new string eliminating everything in front “v=” so we are left with “v=xxxxxxxxxxx”.

If you look close, you’ll notice that strstr($item->get_permalink(), ‘v=’) and therefore the resulting string, is actually used as the string argument in the substr() method used to isolate the video ID.

The second argument, “2” tells the substr method to offset the beginning of the string by two characters. This is to eliminate the “v” and “=” characters and moves the substring start position to the character after the “=” which is the first character of the Video ID.

The third argument, 11, tells the substr method to isolate the next eleven characters from the start position, leaving us with the full video ID “xxxxxxxxxxx”.

In experimenting and playing with this, I found that all YouTube video IDs are 11 characters long. I limited the substring to 11 instead of allowing it to extend to the end of the URI because, if for some reason additional string data was passed with the URI after the video ID, it would be included as part of  the extracted string and the result would be an invalid ID.

After all that, I had the golden nugget of an isolated video ID which is now stored in the $YT_VidID variable. The hard part is DONE!! (really, it wasn’t that hard).

echo ‘<a href=”‘ . $YT_PlayerPage . $YT_VideoNumber . “/” . $YT_VidID . ‘”title=”‘ . $item->get_title() . ‘”> <img src=”‘ . $enclosure->get_thumbnail() . ‘”/></a>’;

The three key pieces needed to construct the direct Channel URIs are now available and the links can be put together. This line, still contained in our loop, constructs the link for each video item in the feed and outputs the HTML markup that will be included in the rendered page. To construct the link, join the three key pieces (the variables) like so:

$YT_PlayerPage . $YT_VideoNumber . “/” . $YT_VidID

$YT_PlayerPage = The base URI.
$YT_VideoNumber = The video counter
include a “/” character
$YT_VidID = The video ID

The output should look like:
http://www.youtube.com/user/[user name]#play/uploads/#/xxxxxxxxxxx

Include this string as the value of the href of an HTML <a> tag.
‘<a href=”‘ . $YT_PlayerPage . $YT_VideoNumber . “/” . $YT_VidID . ‘
Next add a “title” attribute to the <a> tag and set the value to $item->get_title().
“title=”‘ . $item->get_title() . ‘”>
This will create a hover text that shows the title of the video when the cursor hovers over the link.

Next, include the link content (text or image to act as the visible link). In my sample, I’ve used a thumbnail of each video.
<img src=”‘ . $enclosure->get_thumbnail() . ‘”/>
Note that again I’m extracting the enclosure data included with MRSS as part of the RSS feed to get the thumbnail image for each video.

Finally add the closing </a> tag to complete.

But wait … There’s more!!

}

The next line is nothing more than a closing bracket that closes and completes the conditional statement that checks for the enclosure data.

if($YT_VideoNumber == $ShowMax) break;

Remember the $ShowMax variable? This is where it comes into play. We are using the $YT_VideoNumber variable that was added to hold the counter for the current video and comparing it to the $ShowMax variable used to limit the number of videos the page will display. With each iteration of the loop, the code extracts the information for each video item and increments the counter by +1. The counter actually serves two purposes in the code. First,  to be used in constructing the video URI and second, to control the point at which the loop is to be exited. Why?.. If our video feed has 100 items and we only want to display 5 of them, then it does not make any sense to continue stepping through the loop to read the remaining items. So after we get what we want, we exit the loop to save resources.

What’s happening here is this:
If the current $YT_VideoNumber variable value for the current iteration of the loop matches the value of the $ShowMax variable, then “break” (exit) out of the loop and we’re done.

$YT_VideoNumber++;

BUT, if the values of these variables does not match, then the next line increments the $YT_VideoNumber by +1 and continues to the next iteration of the loop.

}

And Finally, there is the closing bracket of the loop which also brings us to the end of the code block.

So that’s it. This code will render a set of YouTube video thumbnails in a web page that will link directly back to the video on the YouTube member’s channel page where ever it is included. But don’t stop there. Have a look at the other methods available in the YouTube API and SimplePie Library for additional information and data you can extract and use, add your own CSS and markup to the the output to change the layout, appearance, function … whatever you want.

I hope you found this useful. If you have any thoughts, improvements or comments to share, please post in the comments section here.

And if you do use this in your own projects, I’d really appreciate a comment in your code, a shoutout or link back to this post.

Happy coding!!!

The Truth about Facebook, Ads, and Personal Pictures

Facebook Responds

A response to: Debunking Rumors about Advertising and Photos

The “Truth” about profile pictures appearing in Facebook Ads (according to Facebook). Facebook reacts to the recent outcry regarding the misinformation about their policy on using personal/profile information for Ads.

From the Facebook Blog:  “In the past couple of days, a rumor has begun spreading that claims we have changed our policies for third-party advertisers and the use of your photos. These rumors are false, and we have made no such change in our advertising policies…”

The Rant Begins:

The Source of the personal violatons was from 3rd party applications and Advertisers, not Facebook.

So many people are willing to click on any link that is put in front of them without considering the source or the consequences. Facebook applications (having nothing to do directly with facebook itself) are no different. These applications are created and developed by 3rd parties with their own agenda. Some are legit, but there are also some that walk the line (and sometimes cross it) when it comes to using or protecting your personal information. Every time you add, enable or allow an application to access your profile, you sell a small piece of yourself. There is a reason you see a extra “do you want to allow this application” message when you add applications like the oh-so popular “share a drink with you friends”.

If you are concerned with your personal online safety and privacy, take responsibility for protecting your own data first. Know what your getting into or agreeing to before you click the “allow” button. Read and understand the terms of service and privacy statements for the applications you allow on your facebook account – or any online account for that matter.

That’s my rant and I’m sticking to it.

Have your own thoughts about this? Leave a comment.

Intermatic dropping out of the Z-Wave game?

Keep InTouch?

Just read an article on CEPro that Intermatic was pulling out of the Z-Wave market. Intermatic has been one of the leading producers and manufacturers of Z-Wave enabled Home Automation Products.  I have several Intermatic products installed in my home from both the HomeSeer and InTouch product lines and have become a fan of them for two reasons.

  1. Cost – The price was right compared to other similar products. HomeSettings products were a lower cost line with decent quality that I found suitable for some of  the “out of the way” areas of my home where aesthetics was not important. While the InTouch product line, which cost a little more, were solid and suitable for areas of my home where aesthetics was important. In comparison to other competitive products, the Intermatic products were priced a bit lower-sometimes significantly lower-than the “high-end” products, and to be honest, they look and work just as good.
  2. Quality – The Intermatic lines were also built well. The InTouch line was solid and good looking, while the HomeSettings line was a step down in terms of quality and aesthetics, it was still a good low cost alternative for secondary or out-of-sight installation.

So now what?

Intermatic is not the only producer of  Z-Wave products and as the article states, others will step in to fill the gap. In fact, Wayne-Dalton is showing signs of picking up the Intermatic lines and continuing development of the products. A search on Amazon shows some of the Intermatic products co-branded with Wayne Dalton while the Wayne Dalton Online Store shows items once offered by Intermatic now packaged and printed with the Wayne-Dalton logo.

The truth is that Wayne Dalton shared product lines with Intermatic and they developed a number of the Intermatic products.

“We shared our product lines until the middle of last year,” …  “We developed their USB sticks, keyfobs, conversion modules and wireless gateway. We shared development on two other products. We purchased their entire inventory of three-way switches to serve as an interim until we get our own out of UL.”
Yan Rodriguez, director of home controls for Wayne Dalton

Wayne Dalton to the rescue?

Given Yan Rodriguez’s statement, it appears that the stage has been set for Wayne  Dalton to pick up the Intermatic line and continue to produce and develop the products going forward. It sounds to me like they will continue to offer the remaining stock of Intermatic products until they get UL approval for their own products. Considering they have been developing the Intermatic USB stick, modules, keyfobs, etc, and sharing in development of “two other products”, it makes sence to me that they should pick up where Intermatic leaves off.

That’s my 2 cents. What do you think.

RSS: What is it, and how do I use it?

RSS What?

RSS – We’ve all heard about it (or at least should have by now), but may not really understand what it is, what it does, and how it can add value to what we do every day.

RSS, originally an acronym for “Rich Site Summary” today is known as “Really Simple Syndication” and is a technology that allow us to aggregate news and information with very little effort and time. In the “Old Days” of the internet, in order to keep track of sites or news we found online, we had to rely on the option of Bookmarking or creating “favorites” in our browser, and then manually visiting these sites to see if there were any new updates or additions. If your in a position where you need to keep up on lots of topics, news, and changes that happen daily, then you will likely build a collection of bookmarks that could grow well into the hundreds. Let’s face it, at that point there is no efficient way you can manually organize and check each of these sites individually and still keep up with all your daily responsibilities at the same time.

RSS To The Rescue!

Why is RSS a better option than Bookmarking? Simple! Time, Effort, Near Real-time news access. Think of it like this: Instead of making the time and effort it takes to run out to your local news stand for the various daily news papers, the news is now delivered right to your doorstep. Now consider the morning news edition, the evening edition, the late edition, etc. That adds up to a lot of news papers and a lot of trips to the news stand. And what about breaking news? There’s a good chance you’d miss out on something timely if you had to go get it yourself. RSS takes all the time and effort away from getting your news and information and delivers it ALL to you, keeping you informed and up-to-date!

Wow, That’s Great, But How Do I Use it?

To get started with RSS, you first need a RSS or “feed” reader. There are many available, but my favorites are Netvibes (netvibes.com) and Google Reader. For the record, I use netvibes for all my RSS needs. Because readers have different methods for adding and managing feeds, I will not cover that portion here and save it for another post.

Once you have decided on a reader, the next thing you need to do is find the RSS Feeds you want delivered. How do you do that? RSS feeds have adopted an icon that makes identifying them easy.

Standard RSS Icon
Standard RSS Icon

RSS Address Bar Icon
RSS Icon in Firefox Address Bar

If you see this icon on a web page or in your FireFox Browser Address Bar, then the site or page you are on has a live RSS feed that you can “subscribe” to or add to your RSS Reader. Some sites may also simply provide a “subscribe” link but be careful to be sure it is an RSS feed link and NOT an email newsletter subscription link.

Copy Link Location
Getting the RSS Address: Firefox

Once you have located the RSS Feed link you can right-click the link and select “Copy Link Location“. This will copy the URL of the RSS feed to the clipboard of your computer. Once you’ve copied the URL, you will need to paste it into your preferred RSS feed reader where it will display headlines, links and descriptions of the host web page or site.

Again, depending on your preferred reader, adding feeds may differ and I will not describe the different methods for each reader here. Consult the FAQ or instructions available from your Feed Reader for information on that.

In some limited cases, the “copy link location” option does not always produce a usable RSS feed link. If this happens, you are still able to click through on the link which will open a new page listing the RSS feed either in a readable web page format, or in the native RSS XML syntax. From this page, now you can simply copy the URL directly from the Browser’s Address Bar and paste it into your Reader.
RSS Feed Url Seen in Firefox
Copying the RSS Address from the browser

5 Tips for better Wiki pages.

Wikis are great for sharing, documenting and archiving information. We Recently launched one for our company’s intranet to improve communication and allow better collaboration. Because wikis are intended to be an open platform to promote communication and collaboration equally across the organization, we try to encourage everyone to contribute. Unfortunately, I quickly learned that people can have different ideas regarding good page format, or may not know how to properly format a page at all. This can quidkly lead to mess of unruly pages that are difficult to read and navigate. So, I put together a list of five tips that I thought would help make formating wiki page content a little easier and make the pages less challanging to read and navigate.

When creating a new page, or editing an existing one, keep these tips in mind.

  1. Say No To Word: Unless the wiki has a built-in feature to deal gracefully with Microsoft Word syntax, Please Please Please…avoid copy-and-paste from word documents. Word documents create ugly HTML syntax that is difficult to edit and manage within the wiki (or any wysiwyg or web editor for that matter). It also creates pages that are structurally difficult to read and navigate without additional formatting and editing. As an alternative, save word documents as Rich Text Files, or plain text files then copy-and-paste into the wiki from there, then edit and format the content in the wiki using the wiki editing tools.
  2. Use Headers and sub-headers: Add headers and sub-headers when appropriate to organize your content on the wiki page. Using headers will not only help to visually separate each important section of your page, but they will also auto-create a page index or TOC (Table of contents) making it easy for users to find and navigate page content.
  3. Making The list: Use Ordered (numbered) lists and Unordered (bulleted) lists when creating lists of items. This makes each item in a list easy to identify and improves readability.
  4. Use An Opening Introduction: If your creating a new wiki page, always try include some information in a small paragraph at the top of each page describing what the content is about, and how it can be used. It is also helpful to include a small description below each heading and sub-heading as well. This helps readers to quickly identify the content and how it can be used.
  5. Can I Quote You On That? : Provide citations and supporting links to references when possible. Besides giving credit where credit is due, citations allows readers to confirm the validity of your input and lead them to additional sources of reference.

Do you have any other tips? Please leave a comment and share them here.

Ubuntu Jaunty Jackalope Caters to Web Applications and the Cloud

I’ll admit, I am a fan of Ubuntu. I run it on all my personal and home computers with the exception of one (8 in total) and have nothing to complain about. Now the new version, expected to be released in April 2009, is expected to see improvements in booting and operational speeds. That is always a good thing, but what I don’t understand are the claims that the new OS version, code named “Jaunty Jackalope” will cater to Web Applications and the Cloud (cloud computing). I have not heard of any other company making such claims, and I wonder exactly how they plan to “cater”. As far as I can see, no other details have been discussed. It’s unclear if Canonical will make OS or code changes somehow to improve support for web applications, or just make them more available through the UI.

Change of Plans – As I was writing the above, Something occurred to me.

Some points of interest

  • Google uses a custom version of Ubuntu for internal operations.
  • Google has generated a lot of Buzz recently about entering the office application market opposite Microsoft.
  • Canonical/Ubuntu has made impressive progress bringing an alternative desktop operating system to market and is regarded by some as an acceptable replacement to Microsoft.
  • Following the Quote from Mark Shuttleworth himself, it does sound like Canonical and Google have been at least talking about ways to “finalize Jaunty plans”.
    "We will be gathering forces in Mountain View on 8th - 12th December to
    survey the upstream landscape and finalize Jaunty plans, enjoying the
    excellent hospitality of Google and Silicon Valley's abundance of talent
    and innovation." - Mark Shuttleworth

Warning – Pure Speculation Follows:

Is it possible that Canonical’s intention to cater to web apps means teaming up or forming some sort of partnership with Google to use or push Google’s suite of web applications (Google Apps) while providing a competitive operating system to rival Microsoft?

References:
http://bits.blogs.nytimes.com
https://lists.ubuntu.com/archives/ubuntu-devel-announce/2008-September/000481.html

How-to: Active Directory Authentication with WordPress

Why Use Active Directory with WordPress?

I recently set up a WordPress Blog internally for our company to use over our intranet to help improve communication, collaborate, share and develop ideas, and stay informed about company announcements or current events.. etc.

One of the requirements I had was to allow authentication against our Active Directory. Yes, we operate a Windows network primarily, but you can also authenticate against other LDAP directories as well. This was important from an IT position as well as the participants of the blog. I felt people would be more likely to participate if they didn’t have to manage separate user accounts for each service on the intranet. I also set up a Wiki that is Active Directory enabled. I’ll post about that at a later time. The point is, it makes little sense to create different credentials for each user with each new service. It not only becomes a hassle for IT to track and manage the accounts, it’s also a drag for participants to keep track of and manage their username and password pairs for each service. The result would most likely lead to lack of use and that is not what we want.

Integrating the existing Active Directory accounts means that each participant can access these services using the same credentials they use to access or log into their network accounts and desktops. When time comes to change passwords, you need only to update the Active Directory account and your done. Simple! What could be better?

Starting Point

The first thing we needed to do was find out how to include AD Authentication with WordPress 2.5. There are a small number of plugins that claim to allow AD Authentication, but from what I came across, most of them were older and no longer actively maintained. But…there were two in particular that still showed signs of being actively maintained and had promise.

The first was was aptly called “Active Directory Authentication

The other plugin and the ultimately the one I managed to successfully include is wpDirAuth.

The Trials

Although I was able to get wpDirAuth to work with WordPress 2.5, there was a catch. The current “Official” release of wpDirAuth as of this writing is version 1.2 which is not compatible with WordPress 2.5 so there was some work involved to make this happen. I visited the wpDirAuth plugin page to look at the install directions. They seemed easy enough. It wasn’t until I actually installed and activated the plugin that I realized it wouldn’t work. My next stop was the support channel that the author set up to help troubleshoot install and authentication issues. It was here that I learned there was a patch already available and provided by a generous wpDirAuth user – Adam Yearout. I applied the patch and then tried to login with my network credentials again, and … No luck! By now I was scratching my head. Searching and reading all the information I could find, I finally found myself on the wpDirAuth Developer Support Channel. This was another channel set up specifically for developers. It was here that I uncovered some clues as to what was happening and a small code tweak that was necessary to overcome the problem. Apparently, the author of the plugin assumed that the login name was also the name associated with the Active Directory Account Email, which in most cases is true, but not always. For example username: johndoe would by default have an email johndoe@domain.com. In my case, my email and name and login name were not the same, so the logic that the plugin author used would not work. The good news is that the fix is a fairly simple one if you know where to look and the dev channel contained all the clues needed to find the info.

Setting up wpDirAuth with WordPress 2.5

For this how-to, I am using wordpress 2.5 installed on an Ubuntu 8.04 LTS server With Apache2 and PHP5. There is no GUI and I am not running an ftp server on this server so all settings and changes are completed using putty over SSL. Continue reading “How-to: Active Directory Authentication with WordPress”