Tuesday, December 29, 2009

Practical Guide to Linux Commands, Editors, and Shell Programming

Author: Mark G. Sobell
Format: Paperback, 1080 pages
Publisher: Prentice Hall PTR; 2nd edition (November 29, 2009)
ISBN-10: 0131367366
ISBN-13: 978-013136

The reviews on the first edition of this book were overwhelmingly favorable, so you'd expect Sobell's second edition to be at least on par. What I want to know before handing over my hard earned green, is why I should buy the second edition? What has changed so much in the world of Linux in 4 or 5 years that makes a difference? With those questions in mind and tome in hand, off I went in pursuit of the answers.

The back cover blurb touts the advantages of this book, including the fact that it includes both system administration info and programming data; material that is usually archived in two different books (with the idea that system admins and programmers don't live in the same universe). Another advantage is that the book is "distro agnostic", meaning that it doesn't favor Ubuntu and other Debian-esque flavors vs. Fedora and other Red Hat variants. Surprisingly, though I suppose it shouldn't be, info on Mac administration is also included (and why not...go back far enough and the common ancient ancestor is UNIX). But what's new?

Gold dust was discovered in the Preface in the New in this edition section. Turns out, Mac OS X CLI info is brand new in this edition, so if you love Linux and Mac, or at least you have to administer them, you're in luck. Also, there's a new chapter on Perl, new rsynch secure copy utility material, and content covering 15 new utilities that weren't included in the first edition. There have also been some organizational changes. Three indexes have been added to make it easier for the reader to find specific information, including an index just for Mac OS X.

The first five chapters or so bring the reader up to speed on Linux and Mac (mostly Linux) in general, including a basic overview of the operating systems and where to find things. Common utilities, file system basics, and an introduction to the shell are all available. Up to this point, you don't have to be much of a guru in anything or even much of a power user, so students who want to be admins and shell programmers are welcome here.

They say there are two types of people in the world; vi people and emac people. I happen to be the former but understand (reluctantly) that there are plenty of folks out there that prefer the latter editor. Sobell serves both populations with a chapter devoted to each editor. Keep in mind there are entire books written on these editors, but you may not have the desire or time to buy and read them.

The book then moves the reader on to more detailed information on the shells. The bash (bourne again shell) shell is included as well as the TC shell, which is the expanded version of the C Shell (csh and yes, it's pronounced "sea shell"). I've never worked with a Linux system that didn't have the bash shell as the default, but if you really want something "completely different", here's your opportunity to learn about the TC shell.

The next part of the book: "Programming Tools" includes some of the main changes in this edition. The brand-new Perl chapter is inserted here, as is the chapter on rsync. Don't expect to learn Perl from scratch by reading a single chapter in this book, but if you have a background in Perl or just in general scripting, it will help in Linux shell programming. My personal preference is Python, but you can't have everything.

The last main section is the command reference and it is basically a long list of man pages. The twist is that some of them (they're marked) are commands specific to Mac. I'm not sure if it would be faster for the experienced Linux user to just read a man page in the shell or to look it up on Sobell's book, but they're here, anyway. That said, there are additional details present, as least for some of the commands, including examples, discussion areas, and the occasional diagram you won't find on a man page.

I probably could have lived without the Glossary in the Appendix section, but if the book is supposed to speak to newbies as well as power users and admins, then it makes sense. As I previously mentioned, one index includes nothing but Mac OS X notes, which is a nice plus, but I suppose it assumes you're working in a mixed Linux/Mac environment. If you administer just Macs, I can only imagine you have the required Mac-oriented texts on your bookshelf.

The main advantage of this book and others like it, is not that it contains any radically new information or that it's put together in a unique way. The reason you want to buy this book is that all this information collected entirely between two covers. The entire body of Linux administration data is more or less easily located on the web and is no more than a search string in Google away, but the Internet is a lousy library. By comparison, Sobell's Practical Guide to Linux Commands, Editors, and Shell Programming is a model of organization.

The second edition of this successful book does what it's supposed to; update information for a changing technology landscape, add a few new bits for spice, and otherwise maintains the original level of quality. You could read it cover-to-cover, but something this size works better as a reference for the learner or the experienced person who needs a quick reminder (you can't remember everything). If you administer Linux, program Linux, or both, this book most likely has what you need. If those roles are your goals, then this book will carry you to the target. Enjoy.

You can find and purchase Mark Sobell's book at Amazon.com.


Thursday, December 24, 2009

Wiredwriter.net has Changed

I've never mentioned my original website on this blog before, mainly because it had aged badly and I never found the time to pay any attention to it. That all changed a day or so ago and I got the bug to completely revamp it. Fortunately, I decided to lean towards the simple side of things. The site has a temporary home on a small server appliance sitting on my desk, but I'll eventually let it live at a proper web host.

Reintroducing Wiredwriter.net. Let me know what you think (and I haven't forgotten about the programming tutorials...maybe over the holiday break, I'll do more).

Tuesday, December 15, 2009

Why Hasn't Google Wave Gone Viral?

I received an invitation to get Google Wave and, with serious intent, decided to give it a whirl. After all, I had initial misgivings about Facebook and twitter, but now you can't blow me off of either one with a stick of dynamite. I figured (reluctantly...how many ways to communicate do I really need?) that Wave would be the next big app in my life to consume what little time I don't have. I even wrote a review on Wave a few weeks ago, so I was on my way, right? Wrong. What happened?

I logged into Wave for the first time in three days this morning and found a "wave" from someone making the same statement I just did. She said:

I know! That's what's "un-useful" about it - I always forget to check mine to so I just revert back to Twitter and email - you know - those "oh so out of date" tools! ;-)

I don't get it. I remember when Gmail was "by invitation only", and now every one has Gmail and I use it as my default webmail. I've pimped my Google home page with a customized theme and all manner of gadgets I use to keep track of my social networking. Google has me hooked as far as that part goes, so what's the problem with me extending my "addiction" to Wave?

The question that seems to come up from the people I do use Wave with is "what am I supposed to use this thing for?" I managed to add about a dozen people to my Wave address book, but conversations have stalled. I've started following a few public Waves to see if I could join in on a conversation, but they're hard to follow. Nothing seems linear. When a new contribution has been made to a Wave, it isn't at the top or bottom of the stream as you'd expect (as in a "conversation" in Gmail, for instance), nor does the Wave automatically focus on the new addition.

I think part of the problem is in trying to find information to make practical use of Wave. For instance, in attempting to do the research for this blog, I did some Google searches (what else?), but searching for "why hasn't Google Wave gone viral" doesn't yield a great deal of useful data. I managed to locate the article Why We Are Cautious About Google's Wave, but frankly, it didn't do much to answer my question. It was written soon after Wave was first introduced, so the information has "aged" somewhat (at least in Internet time).

Next, I tried searching Wave itself. I figured if anyone would be talking about the use of Wave, or lack thereof, it would be Wave users. Am I wrong? Facing the Wave UI, I realized I'd forgotten how to search for public Waves. A little Googling later, I found The First Google Wave Search You Must Know and with a mere with:public, pulled up an endless list of public Waves. Gee, how unique. Now how do I find the one I want? I don't want to read a book and I don't want to scan a 14 page web guide. Like most people in our Microwave oven, Google search engine, instant gratification world, I want to ask a quick question and get a quick answer.

I don't remember having this sort of problem getting on board with twitter, and realistically speaking, I haven't been using twitter all that long. Sure, Tim O'Reilly and Sarah Milstein wrote The Twitter Book, but I didn't use it to "learn twitter" (it actually wasn't a really great book, and I ended up donating it to my local public library after reviewing it). When I needed to know something about twitter, I either asked another twitter person or Googled it. I usually found the little tidbit I needed (who has time to read a whole "dissertation" like this blog?) and away I went.

I have an interest in Microsoft's SharePoint platform (don't ask...it's a long story), and am following a few public Waves on the topic. This is a frequently asked question: "Is Wave a SharePoint killer?" and the general consensus is "no" (despite Om Malik's prediction in his previously mentioned blog). Sure, Wave is extendable with just oodles of APIs, but in what direction does one "extend" Wave to make it usable and (dare I say it) intuitive? Why does it seem so hard to use Wave?

It occurred to me that either Google never intended Wave to be particularly useful to the average end user crowd, or they initially targeted the wrong audience. Speaking of SharePoint, I find myself wondering if Wave is intended (or should be intended) for the business, rather than the general public space? Everything else is going into the cloud, why not enterprise collaboration? This seems to be the thought of David Cook at The Shiny Wave blogspot. Perhaps my failure to launch, relative to Wave, is due to my being the wrong person to use it, or at least my using Wave in the wrong context.

Of course, I've tried Delicious, Friendfeed, Plaxo, Plurk, and other online social apps and promptly walked away, not feeling "the hook" sink deeply into my flesh, so maybe Wave is just another passing fancy that didn't take hold in my life. Then again, I didn't bother to review any of those apps and or dedicate two (so far) blog articles to them, so Wave must have made some sort of impression on me.

It can't be lack of information. Doing a general search on Google Wave produces a ton of results, including guides at Mashable and Lifehacker, so quality tech affectionados feel Google Wave is worth spending time and resources on. On the other hand, getting a specific piece of information seems excessively difficult, such as how to find a specific public Wave discussing why Wave hasn't "gone viral", so is that it? What's the problem? Is it Wave or (gulp) is it me?

Afterword: I just added a public wave: "Why Hasn't Google Wave Gone Viral" and made it accessible to everyone (Thanks for the tip, Google). Let the games begin.


Thursday, December 10, 2009

Human Rights Day: Free Gilad Shalit

Gilad Shalit bannerI saw a "tweet" on twitter originally posted by Nonprofit Orgs and retweeted by Pursue Compassion announcing Human Rights Day and promoting the Have Fun, Do Good blog. I spent a little time reviewing the list of rights being promoted, but didn't see one that said "The Right to be Released from Illegal Captivity". I know that Amnesty International generally champions the cause of political prisoners, but I wasn't sure they included Gilad Shalit in their list.

According to Wikipedia, Gilad Shalit is an Israeli soldier who was captured by Palestinians during a border crossing raid on June 25, 2006. He was just 19 years old at the time and has been illegally held by the Palestinian terrorist group Hamas for almost three and a half years.

On February 10, 2009, Hamas released a video of Shalit showing a gaunt but otherwise apparently healthy young man. Hamas required the release of 20 female Palestinian prisoners just for making the Shalit video available to the Israeli authorities and the world media. While there has been recent news of an "imminent" release for Shalit, most likely mediated by Egypt, there have been no tangible results. Each side says that the other is to blame, according to a December 3rd news story by the Christian Science Monitor, but in the end, this 23 year old man is still in the hands of terrorists, with no end in sight.

Hamas generally demands the release of a large number of prisoners from Israel in exchange for a single Palestinian captive. There's an unconfirmed story online stating that Israel has agreed to release almost 1000 terrorist prisoners in exchange for Shalit. Whether this is true or not, it's understandable that Israeli authorities would balk at putting such a large number of terrorists back on the street to do more harm. On the other hand, if Israel levies sanctions on Gaza, where Hamas is headquartered and where Shalit is being held, "world opinion" is likely to again paint Israel as aggressive and hostile in their response, and said-response could include withholding food supplies and electricity from Gaza and even a military solution.

This last viewpoint of the world towards Israel is especially puzzling on Human Rights Day. Gilad Shalit is a human being. He has the same rights as any other human being. He is being held against his will. He committed no crime. He is NOT a prisoner of war, at least as evidenced by Hamas and their total and complete failure to comply with the conditions for the treatment of prisoners of war as per the Geneva Convention. Putting a rather fine point on the situation, Gilad Shalit is in the hands of a criminal gang whose sole purpose seems to be the extermination of the Jewish people.

In the spirit that Britt Bravo has attempted to create with her Have Fun, Do Good blog, I have taken up a cause. She encourages each person to do something to promote human rights, such as "Write a Letter, Make a Video, Embrace Diversity" for Human Rights Day on December 10th. For the occasion, I'm writing this article on my blog. I don't know that it's "fun", but I believe I am doing good. I'm embracing the human rights of Gilad Shalit, held captive illegally by Hamas in Gaza for 1264 days as of this writing. Gilad Shalit is a soldier, an Israeli, and a Jew. He's also a human being. Promote his human rights. Free Gilad Shalit! Free him now!


Wednesday, December 9, 2009

What do Interpreted Programming Languages have in Common? Part II

I begin this tutorial a few weeks ago with Part I and received some very nice comments correcting my (fortunately) minor errors. This isn't a tutorial about how to program in a specific language or even really about how to program. I wanted to show the common structure of interpreted programming languages in the hopes of revealing some common threads, rather than focusing on the ins and outs of one language. I've heard it said that if you learn one langauge, it makes learning the next one easier. My problem is I get lost in the nuances of the language in question and lose track of the basic structure of programming. I've created this tutorial series to try and correct that. This tutorial is for my education as much as anyone else's so I welcome comments but, as I said before, be polite. This is about learning.

Speaking of Languages, code examples are presented in JavaScript, Python, and Ruby. I figured this represented a healthy cross-section of commonly used interpreted languages. Now, on with the show.

Controlling Program Flow, Part I

In our last episode (sorry, couldn't resist), we left off with Arrays and Booleans. The tutorial picks up with methods of flow control. According to Wikipedia, flow control is "a statement whose execution results in a choice being made as to which of two or more paths should be followed. For non-strict functional languages, functions and language constructs exist to achieve the same result, but they are not necessarily called control flow statements." In other words, it's a way of making decisions within the program given different conditions. Speaking of which:

Conditions: These statements in a program act as a decision tree or like a set of intersections in a city. The decisions or route are dependent on what conditions are or are not true (speaking of Booleans) or where you're trying to go. The basic structure of a conditional statement looks something like this:

if (condition)
     conditional code;

That's a very general example, of course, but it gives you a place to start.

if statements:
If statements are more or less the same in all three of the languages we've been working with:

JavaScript Sample Code:

var value = 0;
if (value > 0)
     alert("Greater than zero");
Python Sample Code:

n = 0
if n > 0:
     print ("Greater than zero")
Ruby Sample Code:
n = 0
if n > 0
     return "Greater than zero"
Of course, that's not much of a decision tree. Each program has different conditional statements that are similar but not exactly the same, to deal with a decision that is either this or that:

if-else statements:
The following examples are equivalent and look almost the same, but not quite:

JavaScript Example Code:
var name = "Jim";
if (name == "Jim")
     alert("Your name is Jim.");
else {
     alert("You are not Jim.");
Python Example Code:
name = "Jim"
if (name == "Jim"):
     print ("Your name is Jim")
     print ("Your name is not Jim")
Ruby Example Code:
name = "Jim"
if name == "Jim"
     print "Your name is Jim"
     print "Your name is not Jim"
That takes care of "the fork in the road", so to speak, but what if there's more than one decision to make? It can't be just "Jim" or "no Jim" all the time. What about Jim, Bill, and Heather, for example?

else-if statements:
Depending on the program, this statement is called else-if, or elif, or elsif, but you get the idea.

JavaScript Code Example:
if (name == "Jim")
     alert ("Good Morning, Jim.");
else if (name == "Bill");
     alert ("Good Morning, Bill.");
else if (name == "Heather");
     alert ("Good Morning, Heather.");
     alert ("You're not on the list.");
Python Example Code:

if (name == "Jim"):
     print ("Good Morning, Jim.")
elif (name == "Bill"):
     print ("Good Morning, Bill.")
elif (name == "Heather"):
     print ("Good Morning, Heather.")
     print ("You're not on the list.")
Ruby Example Code:
if name == "Jim"
     return ("Your name is Jim.")
elsif name == "Bill
     return ("Your name is Bill.")
elsif name == "Heather"
     return ("Your name is Heather.")
     return ("You're not on the list.")
print name
As you can see, there really isn't much difference between now each language expresses conditional statements. The details are quite minor and I hope this all illustrates the common factors in such statements, which is the important piece to learn in this lesson.

Time limitations are forcing me to make Part II shorter than I originally intended, but at least I've got it up and on the blog. Pick through everything and see if I left any holes. If so, let me know. If not, then all is good, at least for Part II. See you next time for Part III: Loops.


Friday, November 27, 2009

What do Interpreted Programming Languages have in Common? Part I

Update, December 4, 2009: I took the two comments I received an incorporated the appropriate changes. If anyone else sees corrections that need to be made, please (politely) let me know. I've been really busy lately, but I'll try to write and publish Part II soon. Thanks.

Foreword: I'm writing this particular blog as much for my own education as for yours. I'm sure I've made a mistake or two here and there, and if so, I don't mind you pointing them out. I would appreciate it however, if you at least tried to be civil if not polite when making corrections. I want this to be a friendly atmosphere where education is encouraged, not fear of mistakes. Thanks.

One of the frustrating things about learning how to program is that you have to start somewhere. I know there's no way of avoiding this, but when you learn your first programming language, you are also learning the basic structure of how to program in general. It's easy to get mixed up at this stage and lost in the details of a particular language, losing sight of the overall goal. I've tried, but there are few, if any, guides available online that present the general structure of an interpreted language (as opposed to a compiled language which we won't be discussing here), without referencing one specific language. With that in mind, I thought I'd try to put together an outline of what interpreted languages seem to have in common as far as a basic structure. My specific examples will be JavaScript, Python, and Ruby, so you can see how different languages are expressed within this structure. But first, some basic definitions:

The Purpose of a Program: In general, any computer program is supposed to take a large problem, and solve it by breaking it down into small, bite-sized bits or steps.
Syntax: This is the rules about how to write in a particular programming language. While interpreted languages in general use the same "parts" or structure, how each language is expressed within that structure varies.

Statements: A statement in a program is like any other statement, such as a person making a verbal statement or writing a sentence in an email. In a program, a statement is s step that defines a particular action that's taken in the program. Statements are written, regardless of the language, in a way that the computer, but not necessarily people, can understand.

Statement one
Statement two

JavaScript Sample Code:

Python Sample Code:
bunnies = 3
while bunnies > 0:
    print bunnies
    bunnies -= 1

Ruby Sample Code:
input = ''
while input != 'bye'
   puts input
   input = gets.chomp
The statements in the previous examples don't quite do the same thing, but you can get the idea of how statements are similar and different across three separate languages. Comments: Since statements are always understandable by human beings, comments are often written in human-readable language so that people can understand what a statement is supposed to say and do. It's not only a note from to programmer to himself or herself, but to any other programmer who may later need to understand and perhaps modify the code. Using a while statement as an example, a statement in general looks like this:
JavaScript Sample Code:
Statement one; // This is the first statement
Python Sample Code:
Statement one #this is the first statement
In Python, you can also create a comment that spans multiple lines like this:
Statement one """this is a multi line comment
about the first statement"""
Ruby Sample Code:
Statement one #this is the first statement
There's also a way to make a comment that spans multiple lines in Ruby:
Statement one =begin
this is a multi line comment
about the first statement
Variables: In a program, variables are used to store information, however as the name implies, the value of the information stored isn't static. It can be changed depending on the requirements of the program. Usually variables are assigned values as in the following examples.
JavaScript Sample Code:
var color = "blue";
Python Sample Code:
color = "blue"
Ruby Sample Code:
color = "blue"
Variables Types: Variables can be used to store different types of information. Depending on the programming language involved, the variable types may be either strictly typed, which means you must tell the program specifically, what type of data is to be stored, or loosely typed, which means the language doesn't really care what is contained in the variables. That said, you as the programmer must know what type of data you want stored in a variable. Variable types include:
  • Numbers
  • Strings
  • Arrays
  • Booleans
Numbers: Numbers are what you imagine them to be: 1, -2.2 3.14159265, and so on. Actually, there are two different ways of expressing a number within a program: Integers and Floats. Both Integers and Floats can be expressed as positive or negative values.
  • An Integer or int is a whole number such as 1, 5, -123, 345698, and so on.
  • A Float or Floating point number is a number expressed with a decimal such as 1.3, -33.7, 8.5678906556, and so on.
  • Mathematical Operations are what you might have learned as "signs" as a child when studying basic math. The most commonly used mathematical operators are addition (+), subtraction (-), multiplication (*) and division (/).
Numbers can be added, subtracted, multiplied, and divided. This is unlike the next variable type. Strings: A string is a series of characters that can be of any length, from zero (an empty string) to infinity (though you'd never finish writing an infinite string). Strings aren't just letters such as "dffvsdftgojpgbjdfe" but can be any type of character, including letters, numbers, and symbols. Usually a string is contained between two single or double-quotes to distinguish it from a part of the program. I also mentioned that numbers can be included in a string but a number in a string is not the same as a number in an integer or float. Strings cannot be added, subtracted, multiplied, or divided (except under certain circumstances).
String Operations: I mentioned that strings couldn't be added, subtracted, etc... but that's not entirely true. If 2 + 2 is expressed as integers, the result will be 4, but if "2" + "2" is expressed as strings, the result is "22". Confused? When you add two strings, performing "2" + "2" is no different than performing "a" + "8". The operation doesn't perform mathematical addition but rather concatenation. In this case, "a" + "8" concatenates to "a8".
Arrays: While the variable types presented thus far store individual pieces of information, arrays are designed to store groups of values, such as a list of names or a series of numbers. An array provides an ordered structure for storing a group of values. When my kids were in elementary school, as they entered their classroom from outside, they could store their backpacks in individual cubbyholes or "cubbies" in storage racks. This is the same principle as an array, with each "cubbyhole" representing a "slot" or element in the array. Each element position is represented by an index. Children always start counting with the number one (1) and go up from there. so the first cubby on the left on the top row would be "one", and next cubby to the right would be "two" and so on. In an array, the index of the first element is "zero" (0), the next is "one" (1) and so on. So an element's position in an array is represented by an index, but the element isn't very useful unless it contains a value. (example of how to write an array) So, for example, the element in this array with the index of "one" (1) contains the value "second". Arrays can contain numbers, strings, or a combination as follows:
JavaScript Sample Code:
var cubby = [];
cubby[0] = "First";
cubby[1] = "Second";
cubby[2] = "Third";
cubby[3] = "Fourth";
Python Sample Code:
cubby = ["First", "Second", "Third", Fourth"]
Ruby Sample Code:
cubby = ["First", "Second", "Third", Fourth"]
Associative Arrays: This is just like any other array except that the indexes are switched out for "keys". In a standard array, you need to remember that a particular index, such as 4, contains the value "Sailor Moon backpack". The computer doesn't have a problem with that, but you might. If you, for example, wanted to associate a child's name with a backpack type in an array, you could create that connection in an associative array as in the following:
JavaScript Sample Code:
var backpacks = [];
backpacks["Jamie"] = "Sailor Moon";
backpacks["David"] = "DragonballZ";
backpacks["Michael"] = "Batman";
backpacks["Jim"] = "Jonny Quest";
Python Sample Code:
backpacks = { "Jamie" : "Sailor Moon", "David" : "DragonballZ", "Michael" : "Batman", "Jim" : "Jonny Quest" }
Ruby Sample Code:
backpacks = { :Jamie => 'Sailor Moon', :David => 'DragonballZ', :Michael => 'Batman', :Jim => 'Jonny Quest' }
These are called key-value pairs with, for example "Jamie" being the key (formerly the index) and "Sailor Moon" being the value. So, going back to our elementary school example, we know that Jamie's cubby contains a Sailor Moon backpack (I know I'm dating myself, but it's been awhile since my kids were little). Booleans: Simply put, a boolean is a value that can contain one of two positions: true or false. There are only three operators to work with when using booleans: and, or, and not. Booleans are used to evaluate statements to determine if they're true or false. If true, then one thing happens. If false, then another thing happens. It gets more confusing if one thing happens if A and B are true, and another thing happens if A or B are true. Booleans work more or less the same way in all three of the languages. A common way to use a boolean in any of these languages is to evaluate a loop (we'll get into loops in Part II) in a while statement. While a condition is true, continue going through the loop. When the statement is false, exit the program. For instance, you may have created an array of products your business sells. A customer may be searching your site for products you have in stock. While the customer continues to enter the names of products you have in stock, the search returns a web page for the desired product. When the customer searches for a product name out of stock, the search returns the "not in stock" page. Long, drawn out blogs are a bore to read, even if the content isn't. I'm going to cut the tutorial off here. Part II will continue with the lesson, by explaining conditions, loops, functions, and objects. Stay tuned. Share/Bookmark

Tuesday, November 24, 2009

Review: Goggle Wave so far

I got this in my Gmail inbox the other day:

"Thank you for signing up to give us early feedback on Google Wave. We're happy to give you access to Google Wave and are enlisting your help to improve the product".

Since I'm all about making improvements, I clicked the link to accept my invitation to Google Wave. Once I signed in with my handy dandy Google account (OK, so I'm going a little overboard here), Google Wave opened in my Firefox browser.

I clicked on the first welcome message (there were two) and got this:

Google Wave is more fun when you have others to wave with, so please nominate people you would like to add. Keep in mind that this is a preview so it could be a bit rocky at times.

Invitations will not be sent immediately. We have a lot of stamps to lick.

Happy waving!

Gee. Who would I wave with? I took a look at my contacts and saw that four of them were already on Google Wave. Still, I should read the other welcome message before continuing (linear or anal, I don't know which).

The second message lead me to a YouTube video of "Doctor Wave". Volume was up full blast, so it almost blew my head off. Took me on a nice tour on the GUI, just to orient me (all of us who are using Wave so far). The video is a sparse 2 minutes, 12 seconds, just enough to point out all of the major areas of the UI but not enough to bury the audience in details. Below the playback, is a small group of links that lead to further content.

Now I felt free to check out my Contacts to see if anyone was around I could "wave" with. I clicked on a name and the YouTube video in the wave panel vanished and was replaced by a text editor. I created the message, clicked "Done" and waited. Nothing happened, but then, I didn't know what to expect. Also, all of the nifty links that were below the YouTube video on the wave panel vanished, and I had no idea how I can get them back.

Thought I'd try out the navigation panel and clicked from Inbox to All. More messages became available, including two unread ones; more introductory material. I clicked on the "Welcome to Wave" message again, and the YouTube video and the aforementioned links came back to the wave panel.

I must say, I'm probably the perfect person to try this out and review it. I'm experiencing Wave from a total "end user" perspective, having not read up on it previously, so the whole thing is new. Also, I'm still working on my morning coffee, so I can't promise my brain is as agile as it should be if it were fully caffeinated.

I sent out a cry on twitter for more Wave people and then continued to explore. One of the messages in the "All" folder (already read) listed Extension Settings, which I could uninstall or remove. Basically, these are Google Gadgets, like the ones I used to pimp out my Google home page. I looked around, but the "under construction" message from Google let me know that more Gadgets for Wave weren't available yet, so the pimping would have to be postponed. The noticed "Unfollowed" appeared by the message title. Apparently, you can follow and unfollow specific waves. I found an unfollowed wave that said Profile and decided to "edit" my Google Wave identity.

I was surprised that it wasn't imported from Google proper. My Google av was as I could see it in the Contacts box and by all of my waves, but it wasn't available in my actual profile. Nevertheless, I clicked Edit Profile and see what was what. I inserted the URL to my blog and updated my av photo and that was about it. There was a field for "status" but I have no idea what it's used for. Is it like updating one's "status" in twitter or Facebook?

Just for giggles, I followed the "unfollowed" waves in my All box, then continued to explore Navigation. The rest of the folders were not surprising. By Me is like a "sent" folder, Requests was empty and must contain waves relative to receiving invitation requests. Spam and Trash are self explanatory and Settings held the waves related to the customization of my Google Wave.

No responses to my message that I possess Google Wave invitations yet (has it become that passe' already?). Doctor Wave was right. Without someone to Wave with, this isn't much of a power surge. Of course, if a new message arrives, will I know? My Google page automatically refreshes, and so does Gmail, but I don't know about Wave. I did notice that the number of messages changed in my Inbox from time to time. I don't mean that new messages arrived, but that the messages disappeared and reappeared. Sometimes they all vanished and the all returned. Then, about half of them vanished. Of course, this is a beta, so you can expect the occasional glitch.

While waiting for anyone to respond or to care, I continued to nose around. Under Navigation, you can expand Searches and Folders. Folders just lets you make more you-know-whats and Searches is like searching Gmail, only with a few more options. You can also search your Contacts, though with only four registered in Wave, that's hardly a chore.

Within the Wave window itself, you can click Reply, Playback, Unfollow, Archive, Spam, and Read (which is only active for an unread Wave. It's nice to finally have the option to Unfollow an Gmail/Wave, since an unending conversation in Gmail can sometimes get annoying. Playback?

When you click Playback on a Wave that's not a video or audio file, you get the controls but they affect nothing. I found myself wondering if the Playback button shouldn't also be inactive on all Waves that don't actually play. A minor point, but Google is asking for suggestions.

While waiting, I decided to see if my Google Wave profile was able to work and play well with CredMe. I found out that not only it did, but there were a set of instructions (apparently written by a developer and not me) telling me how to insert the CredMe URL code. I've been playing with CredMe for awhile, so I didn't really need to RTFM. I quickly verified my Google Wave profile with CredMe and was back to the Wave.

Oh, I did get a reply from a friend of mine in the UK. His new job won't let him get online as freely as he could in the past, so I had to wait for the workday to end in that part of the world. Message arrived automatically. When I revisited Wave on a break from my own job, it was just there. Somebody please tell me how this is an "email killer". It's nice, it's smooth, it's slick...it looks like the next generation web-based email interface...but it's email. What makes it "Wave"?

To be fair, I've only been on Wave for a few hours and have only exchanged messages with one person. Probably not a fair test of Wave's abilities. While I'm going to post this article now, I'll be back with updates on Wave as (or if) they develop.

Oh. One more thing. You can reach me on Google Wave at james.pyles AT googlewave.com.


Wednesday, November 18, 2009

Lunch in Boise: Sweetwater's Tropic Zone

I know...I don't usually review restaurants, but it's my blog and I figured, what the heck.

I probably wouldn't have eaten here, but my friend @ryancoates said he'd heard it was good. Actually, I was the one who invited him out, which is probably a surprise to most of you who know me. I don't "get out" much for lunch, but I had something specific I wanted to talk with Ryan about (which is another story...nothing bad, though).

I looked up the address online and according to Google Maps, it's an 18 minute walk from where I work. Beats looking for parking downtown, which I detest, so at about 11:40 a.m., I set out to hoof it to Sweetwater's. I have to say that the smell of barbecue as I walked past The Cottonwood Grille on 9th was just intoxicating, but I pressed on (I love the carbon monoxide smell of charcoal briquettes).

I encountered a few of those new "timed" electric crosswalk signals. Instead of just holding up a blinking red hand to indicate the traffic light is about to change against you, it presents a countdown from about 18 seconds (I think) down to zero, letting you know if you should walk or run or not attempt to cross the street. A minor distraction, but like I said, I don't get out much.

I love downtown Boise. Whenever I have a reason to, I really enjoy the area on foot. At least during a weekday and during daylight, it's kind of peaceful, old fashioned in a brickwork sort of way, and the way every city's downtown should be. If I had the whole afternoon to kill, I'd slow up my pace and just explore, but not today. I was on a mission.

I arrived at the restaurant just a minute or two before twelve and could see Ryan approaching. Our timing was right in synch so neither of us had to wait. The air had a bit of a snap to it when I was walking, but by the time I got to 205 N. 10th, I was warm enough. Ryan and I said our hellos and then followed the directions to enter via the lobby of the entrance next door.

Sweetwater's was very lightly attended, which is good for service but not necessarily good for business. We were seated right away and attended to in every little detail. We were given the lunch menu, plus a beverage and some other menu (I didn't look at it) to review. I'd already selected the Curried Avocado & Jasmine Rice salad from the online menu, and Ryan had some sort of blackened chicken (sorry, I didn't listen very well when he was ordering).

Service was swift, but I probably wouldn't have noticed that much, since Ryan and I were already deep in conversation (64-bit hardware at this point, but moving into Artificial Intelligence). My salad was excellent and a big plus, the portion was just right. I usually either come away from lunch stuffed or starving, but this sat with me just right. Our wait staff (and probably the manager) provided us with a bottle of hot sauce euphemistically called "The Inferno" and I tried a bit on my salad. I guess either the hot sensing part of my tongue died with age, or a lifetime of eating hot foods has made me immune, but I thought it rather tasty.

I only had water to drink, so can't testify to any of the beers they serve. I didn't have to wait, once I put out my credit card, to have it run and have the receipt for signature returned to me (waiting to settle the bill is a pet peeve of mine). Lunch customer activity had only marginally picked up by the time I was ready to pay the bill, and service was still lightning quick. It would have been interesting to have eaten there during a rush to see if this would have been affected at all.

I have to give Sweetwater's Tropic Zone top marks. Food was exotic without being overpowering and service was swift and straightforward. Exactly how I want it when I lunching with a friend and conversation turns to politics (both American and UK), religion, and driving on ice.

Sweetwater's Tropic Zone is located in downtown Boise at 205 N. 10th Street, between Bannock and Idaho. They're open Monday through Saturday, starting at 11:30 a.m. I couldn't find their closing time online. You can get to their website at http://www.sweetwaterstropiczone.com and follow them on twitter at @SweetwatersBOI.


Sunday, November 1, 2009

Linux in a Nutshell, 6th Edition

Authors: Ellen Siever, Stephen Figgins, Robert love and Arnold Robbins
Format: Paperback, 942 pages
Publisher: O'Reilly Media; 6th edition (September 30, 2009)
ISBN-10: 0596154488
ISBN-13: 978-0596154486

I was going to swear that, with each successive edition of this book, the page count got larger and larger, but I checked, and it's stayed almost the same over the last three editions. O'Reilly says that the 4th edition was 944 pages long, but the 5th and 6th editions (the 6th being the latest) are both 942 pages. When I got my review copy in the mail and opened the box, the book seemed larger than I expected for some reason.

But if the book isn't getting larger and thus, filled with more recent and updated information about Linux, why publish subsequent editions? For that matter, can you call a book that's approaching 1000 pages a "Desktop Quick Reference?" To try and answer my first question, I took a look at the back cover and saw, "This updated edition offers a tighter focus on Linux system essentials, as well as more coverage of new capabilities..." Yes, the Linux kernel continues to evolve and thus, what you need to know about Linux system administration continues to change as well. While most of the common shell commands won't change, there are new ones that you'll need to know (and if you've bought this book or are intending to, you belong to that class of person who needs to know). Also, virtualization is huge these days and you can now manage Linux servers via Xen and VMware.

Linux in a Nutshell is considered a classic by anyone's standards, so it's expected to review well. In fact, the prior editions have reviewed extremely well so, in this case, turning in a bad review on the latest edition would mean that the authors and publisher must have completely rewritten the book and done a poor job of it. Fortunately, that's not the case here. Linux in a Nutshell, 6th Edition is a worthy successor to those editions that have come before it. You have three main reasons to buy it. First, you have the reason I've already mentioned; keeping up to date on the latest changes to Linux. Second, you've completely worn out your older copy of the book and need something that isn't hanging in rags. Third, you are new to Linux and need to buy a reference guide for the first time.

In a literary sense, some books are considered classics and almost legends. That may be a bit more rare in technical circles (is there such as thing as the equivalent of A Tale of Two Cites or To Kill a Mockingbird when it comes to Linux?), but it's not entirely unheard of. If the world of Linux has such a book, it's probably Linux in a Nutshell.

All that said, you will be disappointed in this book if you don't know what to expect, and I've read comments from people who were quite disappointed with this book. Hence writing reviews. Here's what not to expect. This is not a tutorial. It will not explain, step-by-step how to use Linux, particularly for the home or office desktop user (and with Ubuntu 9.10 (Karmic Koala) having just been released, a large number of people are thinking of the Linux desktop). If you try to read this book cover-to-cover, you won't find it amusing or entertaining. It would be like trying to read an encyclopedia set or dictionary from A to Z. Yes, it would be very informative, but organized in a very rigid manner, and it will not read like a narrative.

This book is a reference in the same manner as the aforementioned encyclopedia and dictionary. You look up only what you need to know. It presupposes that the reader have some familiarity with Linux, at least enough to understand what information they require and how to use the book to find it. The list of shell commands runs from page 33 to page 503, for instance and is in alphabetical order. On the other hand, chapters such as The Bash Shell do contain narrative and explanatory components, so you do get more than raw shell commands and arguments. Still, it is not a good book as your first exposure to Linux documentation or as an introduction to topics like the bash shell, the vi text editor, or the gawk programming language. It would be like trying to learn English by reading a dictionary. A dictionary is better utilized once you know at least the basics of the language and want to pick up something specific.

Both Git and Subversion version control system commands are well covered in the later chapters, but as I said, you'd better know the basics first, rather than expect to learn them for the first time here. As promised, Virtualization Command-Line Tools sits in the last chapter of the book, giving you fingertip access to the commands and options involving KVM, VMware, and Xen virtualization tools.

This book's 6th Edition is indeed a worthy inheritor to those that have come before it and carries on the tradition of providing A Desktop Quick Reference for Linux shell commands and utilities. If you've owned a prior edition, this update is now available as a replacement. If you are learning Linux administration for the first time and have the basics down, you're ready to buy this edition as your first experience to Linux in a Nutshell.


Tuesday, October 27, 2009

Fahrenheit 451 Revisited: Do Firemen Still Dream of Igniting Books?

Fahrenheit 451"One last thing," said Beatty. "At least once in his career, every fireman gets an itch. What do the books say, he wonders. Oh, to scratch that itch, eh? Well, Montag, take my word for it, I've had to read a few in my time, to know what I was about, and the books say nothing! Nothing you can teach or believe. They're about nonexistent people, figments of imagination, if they're fiction. And if they're nonfiction, it's worse, one professor calling another an idiot, one philosopher screaming down another's gullet. All of them running about, putting out the stars and extinguishing the sun. You come away lost." -From Fahrenheit 451

Last July, after reading a notice of an American classic to be re-published as a graphic novel, I wrote a bit of commentary on Ray Bradbury's novel Fahrenheit 451 called Fahrenheit 451: "Digital" is the Fire in Which we Burn. I was lamenting the day when books were a serious form of entertainment and source of information, even during the advent of the age of television. Then I chanced upon Bradbury's novel at my local library and found myself wondering if I'd ever read it. I assumed I had, but I couldn't really remember. Well, there was one way to fix the problem.

This work was first published as a novel in 1953, the year before I was born. More than half a century later, this work still stands on solid legs, but perhaps not quite the legs that Bradbury first built for his book. The book isn't so much about censorship or even about television replacing books and other print media, as it is about the dumbing down of humanity. If the world of ideas and debate make people unhappy, take them away and replace them with the equivalent of Prozac for the masses. Let the government do the worrying. You don't have to concern yourself about a thing.

Fifty-six years later, the government isn't burning books, but there's a question as to whether or not they've been marginalized. While Bradbury unsuccessfully predicted interactive television in the home, with screens on all four walls (he did seem to capture flat-screened TVs, though), he couldn't have possibly imagined Cable and Satellite TV, iPods, eBooks, blogging, twitter, texting, YouTube, gaming, and the Internet (and on and on). We haven't replaced print with TV, we've replaced few information sources with many, and with sources that produce content in all its myriad forms, at a rate that accelerates faster than the dizzying velocities of the cars and jets of Montag's (the book's protagonist) world.

Whenever I go to the gym to work out, music is blaring, a dozen TV sets are tuned to a dozen TV channels, almost everyone working out is listening to their iPod, and in the midst of all that, some people are either talking or texting on their mobiles. I go to the gym to try and coax my middle-aged body into continued activity for an hour or so a day, and people can't seem to unplug for even that brief a period of time. If we aren't constantly bombarded with information and entertainment every waking second of the day, what would become of us? Would we actually have to suffer alone with our own thoughts? Would we actually have to relate to other human beings? Is this the "real" Fahrenheit 451?

Print isn't dead, it's just been transformed. This blog is one incarnation...one descendant of the magazine article or the newspaper editorial. The difference is that anyone can blog for little or not cost and for some, with little or no effort. When I want to write a book (yes, I still write real books), I have to write and submit a proposal to a publisher through my agent. The publishing staff evaluates my proposal to determine if it's worth their time and money to turn my idea into a book. That is, they have to decide if there are enough people who'll pay good money to buy what I want to write. Even if the proposal is approved, the book turns out to be a collaboration between me and the various editors I work with, so it's not just all my bright ideas on paper or in eBook format.

With blogging, anyone can write anything at anytime. Of course, no audience is guaranteed, but anyone might surf onto your blog and read whatever you've written. Feedback is instantaneous via the commenting system. The main reason I named my blog A Million Chimpanzees was out of the horrible thought that writing as an art has been reduced to the lowest common denominator because there's no limit to who can blog or what can be blogged. Of course, this is also the realization of freedom of speech. Any citizen can, at any time, without limitation, post his or her ideas and statements to the Internet where anyone with access can read them. Reduce the ideas to 140 characters at a time, and blogging becomes twitter. Digitally film them, and you've got YouTube. Podcast and streaming video them and, putting it all together, you've got the cacophony I was describing a few paragraphs back.

I'm still trying to decide whether this is a good thing or not, but from the point of view of Fahrenheit 451, I think it is. To write (or otherwise create), we are compelled to think. This is the antithesis of Montag's world, where his wife Mildred spends all day pretending to be a part of a fictional, interactive "family" on her favorite TV shows (and adding 21st century technology to the mix, the "family" could well have been computer generated, rather than real, human actors). When the day is done, she wanders off to sleep with her iPod in her ear (not really, but the way Bradbury presents it, the device might well have been an iPod). Entertainment parks abound, and schools are not to educate, but to indoctrinate the next generation into a population of entertainment junkies, even as the country is on the verge of nuclear war.

In Montag's world, people are moving in a single direction; from more to less complex thoughts and ideas. Reading and education are not only discouraged, they're illegal. Humans are not only encouraged to be mindless TV junkies, it's almost the only choice they're offered. We, on the other hand, seem to be going both ways simultaneously; a culture addicted to entertainment, and obsessed by information. What do we really want, a lobotomy, or a PhD? Then again, how much reading to we actually do on a single subject, before we bounce to the next input, and the next and the next and the...You get the idea. If it isn't short and it isn't fast, it isn't compelling enough to stick with. Change the channel or click the next link (does this sound cynical?).

One of the best parts of reading this book was reading Bradbury's commentary. He wrote about how he managed to write the novel, the origin of the ideas and the mechanics of the writing itself. He didn't own a typewriter (no PCs and word processors the 1950s), so he found what amounted to a "typewriter lab" in the basement of a building at UCLA. He could rent typewriter time for ten cents a half-hour and, with not so much as a spell checker or even a bottle of liquid paper, he set about to create his masterpiece. It's in the context of the early 1950s that Bradbury wrote the book, and being able to step outside the book itself, and into the motivation of the writer, I found another dimension to the story and some of the history of where we come from.

Ray Bradbury grew up in a world of books, in a world before television and, even though the film industry was thriving, in a world where the moving image couldn't displace the world of imagination contained within the printed page. I'm old enough to still prefer a "real" book over an eBook, and will still close my web browser to thumb through pages and enter the realm of print, on occasion. That's part of the allure, both of checking out books at the library and of reading books. Fortunately, I'm not alone. A few days ago, I came across a blog article at PBS.org called Kicking Ink: The Guilty Pleasures of Print. I couldn't help but see the parallels between the blog article and the future Bradbury imagined. Books aren't forbidden and burned in our world, but we are made to feel a little guilty about reading them because of the "carbon footprint" they leave behind. Political correctness and the advance of technology take the place of the firemen and their kerosene.

No, we don't burn books, and we don't necessarily disdain thinkers and writers, but is what we're writing (including this blog) worth reading? I hope at least some of it (including this blog) is, but what we produce is in danger of buried in the screaming snowstorm of all the digital content we're generating at warp speed and beyond. Ray Bradbury's novel, over fifty years old now, still has something to tell us. It might not be exactly the same as the original message, but it's close enough to be chilling, or maybe ironic.

All that said, time marches on, and so does the book's creator. You can even go to raybradbury.com these days and find out what he's currently writing.

Endnote: On a whim, I crafted part of the title of this article on Philip K Dick's book title, Do Androids Dream of Electric Sheep?...another novel where humanity, at least as we know it, is an endangered species.


Sunday, October 25, 2009

Joomla! 1.5: A User's Guide plus Fundamentals of Joomla! Video

Author: Barrie M. North
Format: Paperback, 480 pages plus DVD edition
Publisher: Prentice Hall PTR; 2nd edition (June 1, 2009)
ISBN-10: 0137012314
ISBN-13: 978-0137012312

Update: I just got a heads up from Heather Fox at Prentice saying that Fundamentals of Joomla Video Training & Users Guide Package (which includes the subsequently mentioned book and DVD training video) is still available exclusively at Barnes and Noble. After January 1, 2010, the bundle will become generally available. Please disregard any contrary bits of information in the original review. Thanks.

I think this bundle (the book and DVD) was a limited offer and unfortunately, it's taken me just a bit too long get to my review to take advantage of the package. Nevertheless, the products are still available individually, and are both written and presented by Barrie North. But let's back up a bit.

According to joomla.org, "Joomla is an award-winning content management system (CMS), which enables you to build Web sites and powerful online applications. Many aspects, including its ease-of-use and extensibility, have made Joomla the most popular Web site software available. Best of all, Joomla is an open source solution that is freely available to everyone." Between those two links, if you didn't have an idea of what Joomla was before, you do now.

Like a number of other Joomla books on the market, Prentice Hall's offering is tailored for the novice, but promises enough sophistication to take the reader up to at least a "quasi-professional" level. The Preface of the book states in part, that the reader isn't assumed to have any programming or even CSS experience. It's "easy to read" and "low on technical jargon", telling me that North wrote the book for the non-web designing business professional who wants to take advantage of CMS in general and Joomla in specific, to further their business purposes and goals.

That said, the book does teach the technical aspects of how to create a Joomla site from scratch but you start out at ground zero by being introduced to the concepts of web pages, CSS, and Joomla itself. Depending on your level of experience, the first chapter may be something you want to bypass, or at least just skim through. If you have web experience but no Joomla experience, Chapter 2 will tell you where to go to find and download Joomla, then how to install it. You are wisely directed to the XAMPP site to take care of the Apache, MySQL, and PHP side of things, but other options are also presented. Of course, you are also provided with links to acquire the required Joomla installation software.

While I don't consider the Chapter 2 instructions to be outside of a reasonably intelligent person's ability to comprehend, if you really are a completely non-technical person, you might want to take some time to read through the chapter and make sure you have all the steps down, before going through the installation process for both XAMPP and Joomla. This should save you a bit of time and frustration. However, for those with "power user" and up skill sets relative to web design or development, this shouldn't be too much of a chore.

Beyond this point, the book is fairly linear as far as assisting the reader in building the various skills required to create and manage a Joomla site, from basic administration, to organizing content, to creating menus, and so forth. Chapter 10 pulls together all that you should have learned in the prior chapters by letting you build a trial site. In this case, it's a school site, complete with content for students, parents, teachers, other staff, and so on. I suppose this would be the cherry on the cake if you're a school administrator in need of a website, but if you're not, the practice you gain can be applied to just about any organization with a bit of tweaking. If you really need another example, Chapter 11 teaches you how to build a restaurant site. The appendixes offer additional resources, including where to get help, case studies of actual commercial sites powered by Joomla, and more.

The Fundamentals of Joomla! video training DVD and 128 page study guide is based on North's Joomla! 1.5: A User's Guide so, if you have the book, you have all the content the DVD and accompanying booklet contains, just in a different form. On the one hand, this can seem redundant, but if you learn best by accessing more than one learning mode (text and video, for example) using them together will be especially handy. This method could be used either by the individual, or in a school classroom or business training venue. The video content itself might seem a little "light", especially if you have no familiarity with Joomla at all, but coupled with the 480 page primary text, it is a golden learning opportunity.


Tuesday, October 20, 2009

Web 2.0 Expo New York Announces 2009 Keynotes and Event Program

Me: Not that O'Reilly needs my help in promoting their conferences, but I did receive this in my email from Maureen Jennings and I thought I'd pass it along. Who knows? Maybe a trip to New York will be on your schedule next month.

Sebastopol, CA, October 20, 2009 — Today Web 2.0 Expo New York announced this year's keynotes and new program elements. O'Reilly Media, Inc. and TechWeb, co-producers of Web 2.0 Expo and Web 2.0 Summit, welcome a lineup of distinguished keynote speakers including Jay Adelson, Chris Brogan, Caterina Fake, Jascha Franklin-Hodge, Beth Novak and Kevin Rose, in addition to an expanded program with first time sessions and a New York Launch Pad. Web 2.0 Expo New York returns on November 16-19, 2009 to the Javits Convention Center. More information is available at ny.web2expo.com.

"The Power of Less is about how the principles of Web 2.0 can turn constraints into opportunities and drive innovation," said Jennifer Pahlka, co-chair of Web 2.0 Expo. "We are inspired by the canonical examples of this power, such as Twitter's character limit, but also by the products and services launching now, in a time of less, that will change the world."

Web 2.0 Expo New York 2009 brings Launch Pad to New York for the first time and adds a series of new sessions to the program including a track on the topic of Government 2.0. On the heels of a successful Gov 2.0 Summit, the Gov 2.0 sessions will further illuminate how transparency, participation and collaboration can break down silos and increase efficiencies on the government level. In addition, the event presents a brand new Bootcamp program. These full day intensive programs, taking place Monday, November 16, are titled "Good Design Faster," "Search as Strategy" and "Communilytics: Applied Community Analytics" and will further cover design and online communities, respectively, as they relate to successful business practices.

Web 2.0 Expo New York will feature influential keynotes and speakers, detailed workshops, a multi-track conference, an "unconference" program called Web2Open, a first-time New York Launch Pad start-up program, a major tradeshow and many rich networking opportunities and events. Conference tracks include: Landscape & Strategy, Design & User Experience, Social Media, Development, Fundamentals, Web 2.0 at Work, Government 2.0, Mobile, Performance and Analytics. The event targets developers, designers, entrepreneurs, marketers, and business professionals embracing Web 2.0 technologies.

Web 2.0 Expo New York 2009 welcomes industry leading companies that are participating and exhibiting in this year's show including Diamond sponsors: IBM and Microsoft; Silver sponsors: Awareness, blueKiwi, Jive Software, Layered Technologies, Inc., Neustar Inc., OpenText, Opera Software, Overtone, Qtask, Rackspace, and Sony Ericsson.

To learn more about the 2009 Web 2.0 Expo New York or to register, visit: http://www.web2expo.com/ny

View selected presentations from Web 2.0 Expo New York 2008 at: http://www.web2expo.com/webexny2008/public/schedule/proceedings

To see articles, blogs, and other coverage of last year's event, visit:

For a look at photos from New York 2008, see:

To apply for a media pass, visit: http://www.web2expo.com/webexny2009/public/content/media

To read the O'Reilly Radar, visit: http://radar.oreilly.com/

If you have ideas about areas you'd like to see included at the conference, send a note to: webexpo-idea@oreilly.com

If you'd like to stay up to date on information relating to Web 2.0, sign up for the conference newsletter (login required): http://elists.oreilly.com/#conferences

About TechWeb

TechWeb, the global leader in business technology media, is an innovative business focused on serving the needs of technology decision-makers and marketers worldwide. TechWeb produces the most respected and consumed media brands in the business technology market. Today, more than 13.3* million business technology professionals actively engage in our communities created around our global face-to-face events Interop, Web 2.0, Black Hat and VoiceCon; online resources such as the TechWeb Network, Light Reading, Intelligent Enterprise, InformationWeek.com, bMighty.com, and The Financial Technology Network; and the market leading, award-winning InformationWeek, TechNet Magazine, MSDN Magazine, Wall Street & Technology magazines. TechWeb also provides end-to-end services ranging from next-generation performance marketing, integrated media, research, and analyst services. TechWeb is a division of United Business Media, a global provider of news distribution and specialist information services with a market capitalization of more than $2.5 billion. *13.3 million business decision-makers: based on # of monthly connections.

About O'Reilly
O'Reilly Media spreads the knowledge of innovators through its books, online services, magazines, and conferences. Since 1978, O'Reilly Media has been a chronicler and catalyst of cutting-edge development, homing in on the technology trends that really matter and spurring their adoption by amplifying "faint signals" from the alpha geeks who are creating the future. An active participant in the technology community, the company has a long history of advocacy, meme-making, and evangelism.

O'Reilly conferences bring together forward-thinking business and technology leaders, shaping ideas and influencing industries around the globe. For over 25 years, O'Reilly has facilitated the adoption of new and important technologies by the enterprise, putting emerging technologies on the map.

Sunday, October 11, 2009

Python: Converting from one temperature scale to another is easy, but what about eight?

In just about any class or set of tutorials involving beginning programming, there's usually a problem or set of problems having to do with converting temperatures. Just about everyone has had to write a wee bit of code to convert Fahrenheit to Celsius or vice versa. That's not much of a chore. However, there are eight major temperature scales available (though some are around now only for their historical value), according to wikipedia. What if you had to write a program that let a user convert a temperature from any of these scales to any of these scales?

Do you have any idea how many if statements you'd have to write? On the previously referenced wikipedia page, there are eight tables (one for each temperature scale) so converting from any of scales to any of scales would, in theory, require 8 times 7 or 56 if statements (it wouldn't be 8 times 8 because you wouldn't convert from a scale to itself). That's an awful lot of coding and there's got to be an easier way.

Actually, there's more than one way to make it easier, but this is a tutorial that is, or should be, within the grasp of a relative newbie to Python. I took a stab at it and came up with what I think is a pretty straightforward bit of programming that doesn't require a lot of typing.

Oh. I forgot. There is a specific requirement for the solution to the problem. The code must convert from the source scale temp to central or canonical scale, such as Celsius, and then must convert that value from Celsius (for example) to the target scale temp. Here's what I came up with. I don't claim this is the best possible solution, but I don't think there's anything fundamentally wrong with it, either (I checked with a higher power to be sure). See what you think. Here it is:

t = float(raw_input("Please enter the temp: "))
source = raw_input("Please enter the source temp scale: ")
target = raw_input("Please enter the target temp scale: ")

if t < 1000000.0:
    if source == "k":
        cel = t -273.15
    elif source == "c":
        cel = t
    elif source == "f":
        cel = (t - 32) * 5.0 / 9.0
    elif source == "r":
        cel = (t - 491.67) * 5.0 / 9.0
    elif source == "d":
        cel = 100.0 - t * 2.0 / 3.0
    elif source == "n":
        cel = t * 100.0 / 33.0
    elif source == "re":
        cel = t * 5.0 / 4.0
    elif source == "ro":
        cel = (t - 7.5) * 40.0 / 21.0
    if target == "k":
        answer = cel + 273.15
    elif target == "c":
        answer = cel
    elif target == "f":
        answer = cel * 9.0 / 5.0 + 32.0
    elif target == "r":
        answer = (cel + 273.15) * 9.0 / 5.0
    elif target == "d":
        answer = (100.0 - cel) * 3.0 / 2.0
    elif target == "n":
        answer = cel *  33.0 / 100.0
    elif target == "re":
        answer = cel * 4.0 / 5.0
    elif target == "ro":
        answer = cel * 21.0 / 40.0 + 7.5

print answer
I found all of the formulas for conversions at wikipedia, too. You can copy this code into a text editor and save it as something like covert.py, then run it to see how it works for you. Share/Bookmark

Monday, October 5, 2009

Python: input, raw_input, and inadvertently treating integers as strings

This is a "newbie" mistake, but these little details do tend to get in the way, which is why I'm posting my wee Python tutorial. If you know Python or programming, even reasonably well, this will probably seem way too simple to you. Just giving you a "heads up" so you don't waste your time.

I encountered a lesson that teaches storing conditionals using booleans. The code was presented like this:

young = age < 45 

slim = bmi < 22.0 
if young and slim: 
risk = "low" 
elif young and not slim: 
risk = "medium" 
elif not young and slim: 
risk = "medium" 
elif not young and not slim: 
risk = "high"
Of course, you can't really run this. If you try, you get this:
Traceback (most recent call last): 
File "assign_bool.py", line 1, in  
young = age < 45 
NameError: name 'age' is not defined 
I figured the solution was to modify the program to let me input the age and bmi, then print the results. I modified the code like this:
age = raw_input("Please enter your age: ")
bmi = raw_input("Please enter your bmi: ")

young = age < 45
slim = bmi < 22.0
if young and slim:
    risk = "low"
elif young and not slim:
    risk = "medium"
elif not young and slim:
    risk = "medium"
elif not young and not slim:
    risk = "high"

print risk
Like I said, if you have any real programming experience at all, you can already see my mistake. If not, read on. My modified code happily returned prompts for my age and bmi. Being scrupulously honest, I entered my correct age. I have no idea when my bmi is, so I made up a value. When I pressed enter, the value returned was "high". Just to make sure the program was working properly, I entered a young age and a low bmi. Egad! The return value was still "high". In fact, no matter what values I entered, "high" was always returned. This wasn't right. On the fly, I tried this change:
age = input("Please enter your age: ")
bmi = input("Please enter your bmi: ")
It seems very simple (and it is). Using raw_input, the data is always interpreted as a string, rather than the INT type I needed for the program to work. Since strings, rather than integers where input, Python worked it's way through the various tests and, since none of the other conditions matched, printed the result of the final clause which of course, was "high". input interprets what you enter as a python expression, which works, but isn't the best solution, since it can return a wide variety of object types. What's really needed is a way to input something that's always interpreted as a number. I did a bit of research and came up with the following solution, changing the first two lines of my program accordingly:
age = int(raw_input("Please enter your age: "))
bmi = int(raw_input("Please enter your bmi: "))
Now the program will always expect integers to be input for age and bmi. If you try to enter a string now, you'll get something like this:
Please enter your age: Fred
Traceback (most recent call last):
File "assign_bool.py", line 1, in 
age = int(raw_input("Please enter your age: "))
ValueError: invalid literal for int() with base 10: 'Fred'
Play with the different input types and see for yourself. Share/Bookmark

Sunday, October 4, 2009

Sams Teach Yourself PHP and MySQL: Video Learning Starter Kit

Author: Sams Publishing
Format: Paperback: 80 pages/ DVD
Publisher: Sams; 1st Paperback/DVD edition (March 6, 2009)
ISBN-10: 067233027X
ISBN-13: 978-0672330278

Frankly, I'd prefer to work with a book or in a classroom setting. I can read faster than a person can speak in a video. OK, that contradicts my preference for the classroom, but in a class context, I can also directly interact with the instructor and the students. I can't exactly do that using a video. I know I keep telling everyone that I'm a visual learner, so you'd think that a DVD would be just about perfect, but I've always found them something of a problem. This isn't to say that video learning is bad in general or that this product is bad in particular. I'm just expressing my personal opinion before I move on.

I was initially excited to discover that I could use the DVD on any Windows, Mac, or Linux computer with a DVD drive. I've had problems with previous video tutorials that included movie files only readable on Windows. The Quick Start Guide reassured me that I wouldn't have a problem using Linux. Then, as I was about to rip open the packaging around the disc itself, I saw a piece of contradictory information. Specifically, the text on the packaging read, All the contents of the PHP and MySQL Video Learning Starter Kit are accessible on any DVD-equipped Windows or Mac OS X computer (emphasis mine). What?

It gets worse (from my point of view, at least). There are instructions on how to install PHP, Apache, and MySQL on both Windows and Mac but not on Linux. This seems rather mysterious considering we're talking about technologies that just thrive on Linux. Of course, if I have the need to install Apache/MySQL/PHP on Linux, I can just use XAMPP, but that's besides the point. I suppose Sams is playing to the majority desktop market, but that doesn't speak to those of us who spend the vast majority of our time using Linux for work and play. In fact, the vast majority of web developers and database people I work with in my "day job" use Linux on the desktop. Oh well. I still need to evaluate and review the content. Firing up one Windows XP computer.

I slipped the disc in my Windows PC and Adobe Flash Player 9 fired up flawlessly. The TOC is divided into Parts I through IV and each part contains various chapters or lessons. Part I for instance, contains the introductory lessons you'd expect, such as Getting to know PHP, Variables, Flow Control, and so on. Each lesson is divided into Lesson, Lab, and Quiz. I chose Flow Control to start with, just to get an idea of how things were presented.

The lesson on Flow Control honed in on conditional statements and loops. I'd recommend taking notes during the video lesson. I need to take notes, even when I read a book, because it's one of the ways I learn and remember the content, besides actually practicing the relevant tasks. The woman's voice reciting the lesson reminded me somewhat of those instructions airline attendants give when telling you, before your flight takes off, what to do in case the aircraft explodes or sinks into a lake. Actually, I felt fortunate that the visual content didn't include the author's appearance, which most of the time, is totally irrelevant. What I did see was pretty much a PowerPoint presentation.

Lesson 3 was fairly short, maybe five minutes or so long. This is another reason to take notes, since the content goes by very fast. To advance to the lab section, you are required to click the available link. This is also a slide show of sorts, but you click through manually, and there's no accompanying voice. Notes come in handy again since, unless you have a perfect memory, you'll need to refer to something as you're solving each problem. Once you complete each lab, you are able to click to see the output. At the end of a lab session, you can either click the link to repeat, or advance to the Quiz. In the quiz, you select an answer, but can't advance until you get the correct one. The quiz wasn't particularly extensive, which is good if you want to focus on material rather than tests, and bad if you need or want to test your memory of concepts and details.

The general formatting of the disc is good; that is, it's logical. I can see this content being used in the classroom to augment a standard curriculum, but I can't imagine learning these technologies using the DVD and Quick Start Guide (90 page mini-book) alone. I guess I'm old fashioned (which you must have guessed by now) in that I need to have access to more detailed content and/or something or someone I can query about what I'm trying to learn. That said, I can see the video answering questions I sometimes have about ambiguous content I've found in books. Having the same content presented in two different ways can fill occasional gaps. That means I'd need to have the full text book to accompany this DVD.

The content is appropriate for beginning students with little to no prior programming and database experience. For me at least, I'd need to have a platform running actual PHP and MySQL to practice on. Getting my hands dirty is the only way I'm able to learn this sort of material. I recommend setting up your system so you can do a little more than the labs suggest, but remember, the instructions for how to do that only cover Windows and Mac computers.

If you explore the disc, you'll find the eBook Teach Yourself PHP in 10 minutes by Chris Newman in PDF format. The book was published in 2005, but is still relevant to PHP 5.0. The eBook also includes some MySQL content, so it'll take you further than the flash material and the mini-book.

For the programming and database beginner, who may eventually want to get into putting together at least some basic web applications, this product should fit the bill. If you get to the point where you've become familiar with, if not mastered the content, I'm sure you'll want to pursue more advanced resources.


Friday, October 2, 2009

It's Here!

new book I came home last night and my daughter-in-law mentioned that I'd gotten a UPS delivery. She said the box was heavy and felt like books. Sure enough, my author's copies of my new book PC Technician Street Smarts, Updated for the 2009 Exam had arrived. I know it's technically available (in the U.S. at least) in just a few days, but having a copy in my hands makes the book seem so much more real.

Now, I need to line up my "usual suspects" and ship off a few copies for review. I encourage anyone out there who's reading this and who is either planning on taking the A+ exams or is a newbie PC or desktop support tech to have a look. Please review on Amazon or your blog (or where ever). If you do, let me know or post a comment here. I'd really like to know what folks think of the second edition.



Thursday, September 24, 2009

O'Reilly Media and Microsoft Announce Plans to Expand Microsoft Press

I just got this press release from Sara Peyton, one of my contacts at O'Reilly, this morning via email. Thought I should pass it along. Read it and let me know if you have any feelings or opinions on the topic:

O'Reilly to Distribute Microsoft Press Titles and Launch New Ebook Initiatives

Seattle, WA—September 24, 2009O'Reilly Media, Inc. and Microsoft Corp. today announced a joint arrangement to support and expand Microsoft Press from production through distribution, co-publishing and content development, marketing and management. Through this strategic relationship, on November 30, O'Reilly will become the distributor of Microsoft Press titles in North America with a global roll out in a phased approach. Both O'Reilly and Microsoft will develop Microsoft Press titles. O'Reilly, publisher of the iconic "animal books" for developers, has been at the forefront of online publishing and is the host and founder of several conferences for developers including the popular Tools of Change for Publishing Conference.

This collaboration takes advantage of O'Reilly's groundbreaking digital publishing innovations and social media know-how to increase Microsoft Press' reach and develop its content for multiple, multimedia channels. Microsoft Press books have helped millions of people understand and use Microsoft technologies. By bringing that content to digital and mobile devices and platforms worldwide, millions more will have access to that same great content.

"The publishing industry is rapidly evolving, embracing the new and interesting ways that people are consuming information, and using personal technology. By working together with O'Reilly Media, Microsoft authors will have greater opportunity for exposure, and readers will have more access to author content," said Walid Abu-Hadba, corporate vice president, Developer and Platform Evangelism, Microsoft Corp. "This is an opportunity to give our customers a broader and more robust portfolio that is more responsive to their needs."

Microsoft will continue to produce training content and will optimize efficiencies through O'Reilly's expertise in global manufacturing, distribution, sales, and marketing. This will fuel market potential for Microsoft Press and greater responsiveness to new opportunities while allowing customers to continue buying books through current online and retail channels. Microsoft continues to keep customers apprised of current books about Microsoft technologies on www.microsoft.com.

"There are more than 40 million people walking around the world with a mobile phone or digital device which essentially gives them a bookstore in their pocket. That's an enormous opportunity for publishers today," said Tim O'Reilly, founder and CEO of O'Reilly and an influential leader in the Open Source and Web 2.0 communities who has over one million Twitter followers. "We are no longer a print publisher that happens to sell digital books too. We're a digital publisher that also sells print books. All publishing is now digital publishing, and all writing is writing for the web. Books must behave like the web they're now a part of."

"We will apply the lessons we've learned and the knowledge we've gained about digital publishing," added O'Reilly. "And we will remain true to our own values. All the derivative content from each Microsoft Press title--whether it's an ebook, app, webcast or an interactive video--will be issued DRM-free, because that's what we believe in doing."

Partnering with O'Reilly provides the following key benefits:

  • Marketplace agility. O'Reilly's digital publishing innovations and multiple media channels will deliver Microsoft Press content to users and readers when and where they want to consume it--whether it's in a book, on their computer, or on their mobile phone.
  • Increased visibility. Access to O'Reilly's social media tools, webcast program, and online portals and websites will expand the reach of Microsoft Press' titles and content worldwide.
  • New opportunities for authors. O'Reilly's Author Portal will give Microsoft Press authors immediate access to an array of marketing and social media tools to help them promote their books and themselves as experts in their fields.

"O'Reilly is doing this because we believe in the future of Microsoft Press," said Laura Baldwin, COO and CFO of O'Reilly Media. "We're thrilled to collaborate with Microsoft and we're excited about working with Microsoft Press. We've built an infrastructure that maximizes the value of technical content through both digital and print publishing, and we're delighted to extend that value to Microsoft."

About Microsoft
Founded in 1975, Microsoft (Nasdaq "MSFT") is the worldwide leader in software, services and solutions that help people and businesses realize their full potential.

About O'Reilly
O'Reilly Media spreads the knowledge of innovators through its books, online services, magazines, and conferences. Since 1978, O'Reilly Media has been a chronicler and catalyst of cutting-edge development, homing in on the technology trends that really matter and spurring their adoption by amplifying "faint signals" from the alpha geeks who are creating the future. An active participant in the technology community, the company has a long history of advocacy, meme-making, and evangelism.

# # #

O'Reilly is a registered trademark of O'Reilly Media, Inc. All other trademarks are property of their respective owners.