<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Erik&#039;s Weblog &#187; Information</title>
	<atom:link href="http://erik.labianca.org/blog/category/information/feed/" rel="self" type="application/rss+xml" />
	<link>http://erik.labianca.org/blog</link>
	<description>A blog. About stuff.</description>
	<lastBuildDate>Tue, 28 Dec 2010 23:05:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>JavaScript QuickStart Reference</title>
		<link>http://erik.labianca.org/blog/2010/06/javascript-quickstart-reference/</link>
		<comments>http://erik.labianca.org/blog/2010/06/javascript-quickstart-reference/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 23:57:02 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=107</guid>
		<description><![CDATA[I wrote this quite some time ago when I had to re-acquiant myself with JavaScript, but never posted it. It&#8217;s not complete, but it&#8217;s got some of the basics so I&#8217;m going to go ahead and hit publish anyway. Javascript &#8230; <a href="http://erik.labianca.org/blog/2010/06/javascript-quickstart-reference/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I wrote this quite some time ago when I had to re-acquiant myself with JavaScript, but never posted it. It&#8217;s not complete, but it&#8217;s got some of the basics so I&#8217;m going to go ahead and hit publish anyway. Javascript (actually <a title="http://en.wikipedia.org/wiki/ECMAScript" href="http://en.wikipedia.org/wiki/ECMAScript" target="_blank">ECMAScript </a>nowadays)  is everywhere. If you&#8217;ve never had to use it, you&#8217;ve somehow managed to avoid writing any modern web apps. The good thing is, it&#8217;s really very simple! A few things you should know before getting started:</p>
<ol>
<li>JavaScript uses (more or less) the standard Algol (C-like) syntax, including most C programming constructs.
<pre><code>
if (myVar == True) { doMyFunction(1, 2); myVar = False; }
while (myVar == True) { doMyFunction(2,3); myVar = False; }
for ( var i = 0; i &lt; 10; i++ ) { doMyFunction(i, 2); }
switch(myVar) {
    case "A": doMyFunction(1, 3);
    case "B": doMyFunction(2, 1);
}</code></pre>
</li>
<li>In JavaScript, functions are &#8220;first-class&#8221;, simply meaning they are objects. As objects, the can be passed around and modified like any other object. This functionality is key to most JavaScript idioms, so make sure you understand it.
<pre><code>
function doMyFunction(x, y) {
    if (x % 1 != 0)
        throw new TypeError(x + " is not an integer");
  return x * y;
}

/*
 * This callback variable probably should be global to be useful!
 * You'll see this idiom a LOT with any sort of AJAX programming
 */
function setCallBack(callback) {
    var callbackVar = callback;
}
</code></pre>
</li>
<li>JavaScript itself does not provide a class library or define any runtime services. This results in JavaScript often looking more complicated than it really is because it&#8217;s always intertwined with a bunch of wierd browser runtime stuff. For instance, the following is probably the easiest way to write a &#8220;Hello World&#8221; in  JavaScript, but note that the document object is provided by the browser!
<pre><code>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"&gt;&lt;/code&gt;
&lt;html&gt;
  &lt;head&gt;&lt;title&gt;simple page&lt;/title&gt;&lt;/head&gt;
  &lt;body&gt;
    &lt;script type="text/javascript"&gt;
      document.write('Hello World!');
    &lt;/script&gt;
    &lt;noscript&gt;
      &lt;p&gt;Your browser either does not support JavaScript, or you have JavaScript turned off.&lt;/p&gt;
    &lt;/noscript&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
</li>
<li>JavaScript array and object literals are form the basis for JavaScript Object Notation or JSON, which is commonly used as a data transport in AJAX applications. The syntax  looks like this:
<pre><code>
{
    "pos": {
        "x": 5,
        "y": 7
     },
    "name": "JavaScript",
    "numbers": [ "first", "second", "third" ]
}
</code></pre>
</li>
<li>JavaScript is a dynamic language. As a dynamic language, you get the &#8220;eval&#8221; function. Eval opens the door to everything that makes JavaScript powerful, and also most of the possible security holes. Do not eval anything unless you have complete confidence that is is trustworthy code!
<pre><code>
str = "{ "pos": { "x": 5, "y": 7 } }";
var myObj = eval(str);
alert(myObj.pos.x);
</code></pre>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2010/06/javascript-quickstart-reference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get started using Mercurial source control in 5 minutes or less</title>
		<link>http://erik.labianca.org/blog/2009/05/get-started-using-mercurial-source-control-in-5-minutes-or-less/</link>
		<comments>http://erik.labianca.org/blog/2009/05/get-started-using-mercurial-source-control-in-5-minutes-or-less/#comments</comments>
		<pubDate>Tue, 12 May 2009 14:51:40 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[revision control]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=121</guid>
		<description><![CDATA[While, in a previous post I talked about how DVCS is the modern form of source control and promised I&#8217;d show you how to do it, quickly and easily. So let&#8217;s get started! I&#8217;m going to use Mercurial because, well, &#8230; <a href="http://erik.labianca.org/blog/2009/05/get-started-using-mercurial-source-control-in-5-minutes-or-less/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While, in a previous post I talked about how DVCS is the modern form of source control and promised I&#8217;d show you how to do it, quickly and easily. So let&#8217;s get started! I&#8217;m going to use Mercurial because, well, I am.</p>
<p>First, you need to download the Mercurial package for your system. If you use a mac with <a href="http://www.macports.org/">macports</a> you can just use type <code>sudo port install mercurial</code>. You could also use the very nice mac .dmg packages from <a href="http://mercurial.berkwood.com/">berkwood</a>. On Ubuntu, you should be able to <code>sudo apt-get install mercurial</code>. On windows, you&#8217;ll probably want to download and install <a href="http://bitbucket.org/tortoisehg/stable/wiki/Home">TortoiseHG</a>. BitBucket makes it complicated to find the download link so just click <a href="http://bitbucket.org/tortoisehg/stable/downloads/">this one</a> instead. You&#8217;ll want the file in the top of the list. Right now, that is <a href="http://bitbucket.org/tortoisehg/stable/downloads/TortoiseHg-0.7.5-hg-1.2.1.exe">TortoiseHg-0.7.5-hg-1.2.1.exe</a>.</p>
<p>So, you should now have a working mercurial command line executable. To try it out, open your shell of choice and type <code>hg</code>.You should get something like this:<br />
<code>
<pre>
loki:dtest erik$ hg
Mercurial Distributed SCM

basic commands:

 add        add the specified files on the next commit
 annotate   show changeset information per file line
 clone      make a copy of an existing repository
 commit     commit the specified files or all outstanding changes
 diff       diff repository (or selected files)
 export     dump the header and diffs for one or more changesets
 init       create a new repository in the given directory
 log        show revision history of entire repository or files
 merge      merge working directory with another revision
 parents    show the parents of the working dir or revision
 pull       pull changes from the specified source
 push       push changes to the specified destination
 remove     remove the specified files on the next commit
 serve      export the repository via HTTP
 status     show changed files in the working directory
 update     update working directory

use "hg help" for the full list of commands or "hg -v" for details
</pre>
<p></code></p>
<p>Now comes the fun part. Simply navigate to the directory you want to put under revision control and run
<pre><code>hg init</code></pre>
<p>. This will create the <code>.hg</code> directory which stores your local repository.</p>
<p>Your next step should be to create a <code>.hgignore</code> file. This file will tell mercurial which file types to ignore. It can use two syntaxes, standard shell globs and also regular expressions. This should give you enough flexibility to eliminate all those pesky auto-generated files, movies, etc from your project directory. Here&#8217;s what I&#8217;ve been using for drupal projects lately, it should give you a good idea of what sort of patterns you might use.</p>
<pre><code>
syntax: glob
*.pyc
*~
hostmeta.ini
Thumbs.db
.DS_Store
*.exe
*.flv
*.mov
*.zip
*.avi
*.wmv
*.dv
*.psd
*.LCK

syntax: regexp
.*\#.*\#$
^files.*
^web/files.*
.*CVS.*
</code></pre>
<p>Now that we&#8217;ve got an <code>.hgignore</code> file, let&#8217;s check it into revision control. Simply execute</p>
<pre><code>
hg add .hgignore
</code></pre>
<p> and then</p>
<pre><code>
hg commit -m 'added .hgignore file'
</code></pre>
<p>. The <code>add</code> tells mercurial to flag the file revision control. The <code>commit</code> command will actually push the contents of the file into the revision control repository.</p>
<p>Now, let&#8217;s put your files under revision control. At this point, since you have a <code>.hgignore</code> file that eliminates all the files you don&#8217;t want controlled, you can run the</p>
<pre><code>
hg status
</code></pre>
<p> command. It will show you all the status of all the files in the revision controlled tree. File which are checked in and already up to date or ignored will not show up on the listing. For a newly created <a href="http://www.djangoproject.org/">Django</a> project with a single app in it, you might see something like this:</p>
<pre><code>
loki:dtest erik$ hg status
? __init__.py
? manage.py
? myapp/__init__.py
? myapp/models.py
? myapp/tests.py
? myapp/views.py
? settings.py
? urls.py
loki:dtest eri
</code></pre>
<p>Now, if all the with ? in front of them are ones you want to add to revision control, simply execute
<pre><code>
hg addremove
</code></pre>
<p>. This will recurse the tree and add all the missing files, and mark any files that have disappeared from your local tree as deleted in the repository. Then, you just run</p>
<pre><code>
hg commit -m 'added first set of files'
</code></pre>
<p> in order check everything in.</p>
<p>If you had files with ? that you don&#8217;t want under revision control, you will need to add expressions to your <code>.hgignore</code> file to ignore them and re-run status. You can also just use add manually on your files, but in my opinion the addremove feature is such a nice addition and hg status is such a powerful feature you will be much better off taking the time to maintain an ignore file.</p>
<p>So, you&#8217;ve now got a copy of your code in revision control. A simple <code>hg status</code> should return blank, indicating that your working copy is in sync with the repository. So let&#8217;s check out that safety net.</p>
<p>Let&#8217;s make a random change to our urls.py.</p>
<pre><code>
echo "# this comment is really lame" >> urls.py
</code><code></code></pre>
<p>And now run <code>hg status</code> one more time. You should see something like this:</p>
<pre><code>
loki:dtest erik$ hg status
M urls.py
</code></pre>
<p>The <code>M</code> prefix indicates that the file has been modified. Now, let&#8217;s see what exactly was modified. Run <code>hg diff</code>. You should get a result like this:</p>
<pre><code>
loki:dtest erik$ hg diff
diff -r 7844b323276e urls.py
--- a/urls.py   Tue May 12 02:56:05 2009 -0400
+++ b/urls.py   Tue May 12 02:58:47 2009 -0400
@@ -15,3 +15,4 @@
     # Uncomment the next line to enable the admin:
     # (r'^admin/', include(admin.site.urls)),
 )
+# this comment is really lame
</code></pre>
<p>As you can see, we have a nicely unified diff indicating that we added a single line. If you installed a GUI package, you can probably use the GUI to bring up a much more nicely formatted GUI change viewer.</p>
<p>So, now we know what we changed. That&#8217;s pretty useful, but how do we get rid of that change? Again, really easy, simply use the
<pre><code>hg revert</code></pre>
<p> command. If you don&#8217;t want to revert all your changes, you can run
<pre><code>hg revert urls.py</code></pre>
<p> for instance, which will only revert changes to <code>urls.py</code>.</p>
<p>If you revert a file and then run hg status, you&#8217;ll note that the file is no longer marked as modified and there is a new <code>? urls.py.orig</code> file which mercurial has nicely decided to keep in case you change your mind. I guess .orig would be a good suffix to add to your <code>.hgnore</code> file!</p>
<p>Obviously we&#8217;ve just barely begun to scratch the surface of mercurial and DVCS&#8217;s in general, but there&#8217;s plenty of time for more learning. Even if you just use it for diffs and revert, you&#8217;re getting great value from your DVCS and are ready to add in more functionality as you need it. Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/05/get-started-using-mercurial-source-control-in-5-minutes-or-less/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DVCS: Modern Source Control aka the Programmers Safety Net</title>
		<link>http://erik.labianca.org/blog/2009/05/dvcs-modern-source-control-aka-the-programmers-safety-net/</link>
		<comments>http://erik.labianca.org/blog/2009/05/dvcs-modern-source-control-aka-the-programmers-safety-net/#comments</comments>
		<pubDate>Mon, 04 May 2009 17:28:31 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Best Practices]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/2009/05/dvcs-modern-source-control-aka-the-programmers-safety-net/</guid>
		<description><![CDATA[Revision control is a key tool for modern software engineers. It provides a safety net for the individual developer, and provides a collaborative framework that allows many developers to work on the same project without fear of stepping on each &#8230; <a href="http://erik.labianca.org/blog/2009/05/dvcs-modern-source-control-aka-the-programmers-safety-net/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Revision control is a key tool for modern software engineers. It provides a safety net for the individual developer, and provides a collaborative framework that allows many developers to work on the same project without fear of stepping on each others toes.</p>
<p><a href="http://www.flickr.com/photos/35545469@N06/3290184656/"><img height="300" border="0" width="450" style="margin: 5px;" class="" alt="" src="http://erik.labianca.org/blog/wp-content/uploads/2009/05/skydivers.jpg" title="Skydivers from The Passion Man" /></a>
<p>Revision control or isn&#8217;t a new idea. <a href="http://www.gnu.org/software/rcs/rcs.html">RCS</a> and it&#8217;s descendant, <a href="http://www.nongnu.org/cvs/">CVS</a>, date back to the early 80&#8242;s, and they in turn were based on even older systems. That said, many programmers still aren&#8217;t using it. Eric Sink blames it on <a href="http://www.ericsink.com/scm/scm_intro.html">lack of training</a>. Ben Collins-Sussman thinks it&#8217;s because <a href="http://blog.red-bean.com/sussman/?p=82">80% of programmers aren&#8217;t &quot;Alphas&quot;</a>. Andrew Smith (the number one hit on Google, I might add) thinks it&#8217;s because <a href="http://littlesvr.ca/grumble/2008/07/24/why-dont-people-use-version-control/">takes too long to learn and it&#8217;s hard to set up a server</a>. I&#8217;ll plead the fifth and say I hope I can be a part of the solution instead of the problem!</p>
<p>In any case, up until the last few years, revision control systems were centralized. That is, there was a single central repository of code to which contributors connected, checking out code and checkin in their changes. <a href="http://subversion.tigris.org/">Subversion</a> is the latest of these centralized systems. It was developed specifically to be CVS without the worst of the bugs, and to that end it is very successful. If you want great tools support, have a reasonable sized team, like non-mind-bending behavior, and you only work across a local network anyway, subversion is a great system. </p>
<p>However, many developers have become frustrated with centralized version control. Nobody wants to be accused of &#8216;breaking the build&#8217;, so naturally the frequency of checkins decreases. To the same end, to avoid newbies breaking the build, project administrators don&#8217;t give out commit access lightly. The end result is that developers lose the safety-net aspect revision control. I&#8217;ve been witness to developers making a copy of their source code, out of revision control, because they&#8217;re so afraid they might check in something bad.</p>
<p>In addition, since core contributors are the only ones with commit access to the revision control system, most contributions must come as patches. These patches can be tricky to create in the best of times, but with scale this problem becomes untenable. Just check out the linux kernel mailing list to get a sense of the problem.</p>
<p>The answer to these problems is called a <a href="http://en.wikipedia.org/wiki/Distributed_revision_control">Distributed Version Control System</a>, or DVCS. There are quite a few of these animals out there. Most recently, it seems as if the open source playing field is being dominated by three: <a href="http://bazaar-vcs.org/">Bazaar</a>, <a href="http://git-scm.com/">Git</a>, and <a href="http://www.selenic.com/mercurial/wiki/">Mercurial</a>. All of these systems have their plusses and minusses, but they are all open source and work well enough to get the job done.</p>
<p>Distributed version control systems share quite a few things in common. Instead of using a line or <a href="http://en.wikipedia.org/wiki/Tree_data_structure">tree</a> with named revision numbers to store the change history, distributed revision control systems use <a href="http://en.wikipedia.org/wiki/Directed_acyclic_graph">directed acyclic graphs</a>. This basically means that you can have multiple valid lines or trees at the same time. Hence, distributed.</p>
<p>What this means to you (the developer) is that you get a local copy of the entire repository available to you at all times. That means you can check in, revert, merge, create branches, etc without a network connection.</p>
<p>It also means that you always have access to that revision control sandbox. It allows you to &#8216;check in early, check in often&#8217;, and still not live in fear of breaking the build or disrupting somebody elses work with your bad code. When your code is good and ready, you can review it&#8217;s entire change history, merge in any changes, and submit the entire changeset directly to the central repository or to a core committer as a patch.</p>
<p>Having a local copy of the repository also means that you have a more complete copy of your source code at every developer location  with a DVCS than you would with a traditional VCS.</p>
<p>I&#8217;ll get into the nitty-gritty of how to actually start using DVCS (and how&#8217;s it&#8217;s arguably faster and easer than svn) in another post, but for now, just get out there and use something. Not using source control is like skydiving without a parachute.</p>
<p>References:</p>
<ul>
<li>James Golick has a friendly <a href="http://jamesgolick.com/tags/dvcs.html">introduction</a> to DVCS logic.</li>
<li>Eric Sink has some solid posts about <a href="http://www.ericsink.com/scm/source_control.html">Source Control</a> and <a href="http://www.ericsink.com/entries/dvcs_dag_1.html">DVCS and DAGs</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/05/dvcs-modern-source-control-aka-the-programmers-safety-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developers for Smarties: 5 Traits Of Great Programmers</title>
		<link>http://erik.labianca.org/blog/2009/02/developers-for-smarties-5-traits-of-great-programmers/</link>
		<comments>http://erik.labianca.org/blog/2009/02/developers-for-smarties-5-traits-of-great-programmers/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 13:29:22 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=101</guid>
		<description><![CDATA[While the wonderful folk in the world of information technology would have us all believe that all we need to do is buy their latest &#8220;solution&#8221;, the facts of the matter are that if you&#8217;re serious about leveraging technology eventually &#8230; <a href="http://erik.labianca.org/blog/2009/02/developers-for-smarties-5-traits-of-great-programmers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While the wonderful folk in the world of information technology would have us all believe that all we need to do is buy their latest &#8220;solution&#8221;, the facts of the matter are that if you&#8217;re serious about leveraging technology eventually you are going to need go beyond what came free in the box.</p>
<div class="zemanta-img zemanta-action-dragged" style="margin: 1em; display: block;">
<div class="wp-caption alignright" style="width: 190px"><a href="http://www.flickr.com/photos/49503056657@N01/561370770"><img title="Hacker Barbie" src="http://farm2.static.flickr.com/1401/561370770_19406fb137_m.jpg" alt="Hacker Barbie" width="180" height="240" /></a><p class="wp-caption-text">Image by nic221 via Flickr</p></div>
</div>
<p>Going beyond what came free in the box typically means hiring somebody calling themselves a Programmer, Developer, Software Engineer or even Software Architect. If they worked someplace interesting or for themselves, they might prefer terms like Hacker, Geek or Programming Rock Star. Unfortunately, none of this stuff really means anything! Having worked with and around these guys for a few years I can say with great confidence that their ability to program is in no way related to these accolades. Unfortunately, involvement with large companies or ostensibly successful high-profile projects doesn&#8217;t necessarily mean anything either. It&#8217;s not that hard to hitch your wagon to a train.</p>
<p>So what are you looking for?</p>
<ol>
<li><strong>Engaged with Technology</strong>. I&#8217;ve never met a good programmer who didn&#8217;t get excited about almost any technical project. It could be simple like &#8220;hey did you see the new Google fizzbuzz application&#8221; or complicated like &#8220;hey, did you hear they added support for asyncronous transaction replication to the latest version of MySQL&#8221;? Either way, a good programmer will engage. Bear in mind, the first response is likely to be &#8220;That&#8217;s BS, MySQL sucks, use MS SQL Server&#8221;, but they&#8217;ll engage. If they sit there like a dead fish and don&#8217;t even ask you what you are talking about, be afraid. Caveat: You need to be able to be sufficiently technical to engage in a discussion with a programmer. If you can&#8217;t, chances are you aren&#8217;t equipped to manage one either, so why try to hire one?</li>
<li><strong>Problem Solving</strong>. To a degree beyond most professions, programming is about problem solving. See my previous post on Levels of Work, but frankly, you can&#8217;t afford to have many Stratum I programmers on your staff unless you&#8217;re running an internship program. You want the guys that can engage problems head on, and come out with solutions. Good programmers love to hear about what your problems in an interview, and would love to offer ideas as to how to solve them. Give them the chance.</li>
<li><strong>Language Agnostic</strong>. Great programmers are familiar with more than one language. Actually, more like more than ten. It should be obvious, then, that looking for somebody with 10 years of C++ experience is a sure-fire way to eliminate great candidates. Bear in mind, if your goal is to create the next revision of the C++ standard, you really do need somebody who is deeply involved in the C++ community and has been for 10 years. Most of us, however, are much better off using the right tool for the job, and frankly, sometimes that means using a new programming language. Anybody who hasn&#8217;t even dabbled in another environment for 10 years probably won&#8217;t adapt well to the future. Computer languages aren&#8217;t that complicated, and even better, learning another language adds a ton of great perspective to every program you write. The obvious extension to this rule is that they should also be familiar with more than one development framework. Every Rails programer should have at least checked out what Django has to offer by perusing their website. J2EE programmers should at least know that they aren&#8217;t just WebLogic or WebSphere programmers, but that they are also Glassfish or JBoss programmers.</li>
<li><strong>Understands Development Process</strong>. If you haven&#8217;t seen <a class="zem_slink" title="The Joel Test" rel="wikipedia" href="http://en.wikipedia.org/wiki/The_Joel_Test">The Joel Test</a> by now, you&#8217;re missing out. Ditto for any programmer that isn&#8217;t familiar with Specifications, <a class="zem_slink" title="Revision control" rel="wikipedia" href="http://en.wikipedia.org/wiki/Revision_control">Revision Control</a>, Defect Tracking and Automated Build Systems. Good programmers whine about how they never get complete enough specs, or say they gave up on specs in favor of agile methods. Good programmers will happily bore you to tears with the reasons you should use distributed version control instead of that lame old CVS clone you&#8217;re using. If they say something dumb like &#8220;I don&#8217;t use revision control, I make backups to floppy discs&#8221;, run away. Quickly.</li>
<li>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 212px;">
<dt class="wp-caption-dt"><a href="http://commons.wikipedia.org/wiki/Image:Programming_language_textbooks.jpg"><img title="A selection of programming language textbooks ..." src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Programming_language_textbooks.jpg/202px-Programming_language_textbooks.jpg" alt="A selection of programming language textbooks ..." width="202" height="138" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image via <a href="http://commons.wikipedia.org/wiki/Image:Programming_language_textbooks.jpg">Wikipedia</a></dd>
</dl>
</div>
</div>
<p><strong>Continuous Learning</strong>. Would you want a brain surgeon who last updated his technique in 1985? Maybe you would, but you definitely don&#8217;t want a programmer with skills that old. Technology is the fastest moving set of skills in the workplace today, and among technology, software is arguably the fastest moving of all. Programmers are the mechanics of software, and they need to be up to date. Good programmers are always looking for an excuse to try something new. Suggest a possible Rails app to a guy who&#8217;s been doing J2EE and, all things being equal, the correct response is &#8220;I&#8217;m familiar with it, but never had the chance to use it for a Project&#8221;. Now, bear in mind she may be afraid to sidetrack her career by becoming the Junior Rails Programmer (TM), but you wouldn&#8217;t be so silly as to try to pull that stunt anyway, right?</li>
</ol>
<p>In short, hiring a programmer is hiring somebody to think. They have to be able to think out of the box of convention while still staying in the box of what can actually be done using the technology available. They have to continually update their skills, and enjoy doing it. I&#8217;ve barely scratched the surface of what makes a great programmer, but here&#8217;s some other opinions to consider as well:</p>
<ul>
<li><a title="http://www.codinghorror.com/blog/archives/001225.html" href="http://www.codinghorror.com/blog/archives/001225.html" target="_blank">The Ferengi Programmer</a> and it&#8217;s<a title="http://www.codinghorror.com/blog/archives/000856.html" href="http://www.codinghorror.com/blog/archives/000856.html" target="_blank"> followup</a></li>
<li><a title="http://www.codinghorror.com/blog/archives/000895.html" href="http://www.codinghorror.com/blog/archives/000895.html" target="_blank">Learning, or Learning How to Learn</a></li>
<li><a title="http://www.joelonsoftware.com/articles/HighNotes.html" href="http://www.joelonsoftware.com/articles/HighNotes.html" target="_blank">Hitting the High Notes</a></li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/1cf7becd-6083-48d3-8a94-c70d3f500c8c/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=1cf7becd-6083-48d3-8a94-c70d3f500c8c" alt="Reblog this post [with Zemanta]" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/02/developers-for-smarties-5-traits-of-great-programmers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtualization Technology Overview</title>
		<link>http://erik.labianca.org/blog/2009/02/virtualization-technology-overview/</link>
		<comments>http://erik.labianca.org/blog/2009/02/virtualization-technology-overview/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 14:00:05 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[virtualization]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=92</guid>
		<description><![CDATA[One of the hottest buzzwords in technology today is virtualization. Unforrtunately, virtualization by itself covers a vast array of potential technologies. Let&#8217;s look at the word itself first. Virtualization implies taking something &#8220;real&#8221; and &#8220;virtualizing&#8221; it, or making it &#8220;virtual&#8221;. &#8230; <a href="http://erik.labianca.org/blog/2009/02/virtualization-technology-overview/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of the hottest buzzwords in technology today is virtualization. Unforrtunately, virtualization by itself covers a vast array of potential technologies.</p>
<p>Let&#8217;s look at the word itself first. Virtualization implies taking something &#8220;real&#8221; and &#8220;virtualizing&#8221; it, or making it &#8220;virtual&#8221;. Typically, this is exactly what is going on with virtualization technologies, the differences lie in what exactly is being virtualized.</p>
<p><strong>Storage Virtualization</strong></p>
<p>At the very bottom of the technology stack lies storage virtualization. Unfortunately, the storage industry is probably the most arcane of all IT sectors, and the inability to agree on what truly comprises storage virtualization technology is a great case in point.</p>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 212px;">
<dt class="wp-caption-dt"><a href="http://commons.wikipedia.org/wiki/Image:Rack001.jpg"><img title="A typical server &quot;rack&quot;, commonly se..." src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f5/Rack001.jpg/202px-Rack001.jpg" alt="A typical server &quot;rack&quot;, commonly se..." width="202" height="269" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image via <a href="http://commons.wikipedia.org/wiki/Image:Rack001.jpg">Wikipedia</a></dd>
</dl>
</div>
</div>
<p>From a layman&#8217;s perspective storage virtualization should simply mean that your OS images don&#8217;t have to worry about where their storage comes from, it&#8217;s just there. Virtualization should allow it to be resized, move to new physical hardware, and isolated from hardware failure, all without effecting the running operating system and storage. In practice, vendors will call almost anything storage virtualization, so make sure you put on your skeptics hat when you hear them claiming to support it.</p>
<p>Coupled with server-side operating system virtualization, true storage virtualization delivers a one-two knockout punch to old fashioned IT. Expect to see this technology stabilize quickly as the industry gets excited about cloud compuing.</p>
<p><strong>Operating System Hardware Virtualization</strong></p>
<p>Lately there&#8217;s been lots of news over OS virtualization. <a class="zem_slink" title="VMware" rel="homepage" href="http://www.vmware.com/">VMWare</a>, Xen, Parralels, <a class="zem_slink" title="Sun xVM" rel="homepage" href="http://sun.com/xvm">Sun xVM</a>, and <a class="zem_slink" title="Hyper-V" rel="wikipedia" href="http://en.wikipedia.org/wiki/Hyper-V">Microsoft Hyper-V</a> are all this sort of technology. Newer Intel and AMD processors even have native instructions to make this sort of virtualization more efficient. In short, OS virtualization allows you to run several complete virtual systems on a single virtual machine host.</p>
<p>Operating system virtualization is revolutionary when it comes to maintaining datacenters. Most server applications are not cpu, memory, or even I/O bound. Rather, they are IT staff bound, meaning that every application gets to run on it&#8217;s own server because IT doesn&#8217;t dare install it any other way.</p>
<p>OS Virtualization seperates the OS image from the hardware support, allowing you to provision a host operating system as specified by a specific application, while migrating it from machine to machine as needs dictate.</p>
<p>There is a ton of R&amp;D going into OS virtualization, both on the client and server side. Modern hypervisors allow you to migrate a running virtual machine from one physical host to another, allow for automatic failover and load balancing, and integrate with backup software. At this point, if you are provisioning new server systems without using virtualization, you ought to be asking yourself why.</p>
<p>On the client side, OS virtualization is pretty cool for tech people, but in my book still isn&#8217;t where it needs to be. There is no reason for most computer users to run their OS on native hardware, yet that hasn&#8217;t happened. Until it does, you&#8217;ll be stuck dealing with rebuilding your system every year or so to clear out the cruft or to handle a system migration. Technologies like VMWare ACE are trying to tackle this proble, but the technology has a long way to go before it catches up with server virtulization with respect hardware isolation.</p>
<p><strong>Operating System Partitioning</strong></p>
<p>Another very interesting technology in the operating sytem world is system partitioning. OpenSolaris Zones, FreeBSD Jails, <a class="zem_slink" title="NYSE: IBM" rel="stockexchange" href="http://finance.yahoo.com/q?s=IBM">IBM</a> LPARS and Linux vServers are all variants of this technology. In short, the runtime environment of the operating system is partitioned off from the host system while continuing to share a kernel.</p>
<p>Since kernels tend to be pretty reliable, this allows you to have some of the principle benefits of hardware virtualization (application isolation) without many of the costs (performance and memory overhead).</p>
<p>Unfortunately, this type of technology hasn&#8217;t really made any headway in the Microsoft stack, so it&#8217;s not used very heavily. Nonetheless, it&#8217;s something to keep your eyes on as the world moves towards cloud computing etc.</p>
<p><strong>Runtime Virtualization</strong></p>
<p>Moving farther up the application stack is runtime virtualization. <a class="zem_slink" title=".NET Framework" rel="homepage" href="http://www.microsoft.com/net/">Microsoft .NET</a> and Java are the 800lb gorilla&#8217;s in thie space. Runtime virtualization brings much of the application isolation benefits of OS-level virtualization schemes without incurring the much of the complexity of maintaining multiple operating system images.</p>
<p>The downside is obviously that software has to be explicitly targetted at a virtualization friendly runtime. However, you should understand the development and deployment benefits of targetting such an environment before choosing a development platform for a new project. They are by no means insignificant, and a lot of very smart people are working very hard at moving this technology forward.</p>
<p>Projects using Runtime Virtualization that I find particularly interesting are JRuby and Jython for Java and IronRuby/IronPython for .NET. These projects bring the development benefits of modern scripting languages to the deployment benefits of runtime virtualization. Look for a lot more good stuff from these guys.</p>
<p><strong><br />
</strong></p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/8505ec57-e353-4f6f-aefa-5b64f97fa8e1/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=8505ec57-e353-4f6f-aefa-5b64f97fa8e1" alt="Reblog this post [with Zemanta]" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/02/virtualization-technology-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to keep your personal data safe</title>
		<link>http://erik.labianca.org/blog/2009/02/how-to-keep-your-personal-data-safe/</link>
		<comments>http://erik.labianca.org/blog/2009/02/how-to-keep-your-personal-data-safe/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 14:14:44 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Personal computer]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=56</guid>
		<description><![CDATA[Everybody knows they should be backing up their personal data, but nobody does it. Here's some simple and straightforward steps to actually doing it. <a href="http://erik.labianca.org/blog/2009/02/how-to-keep-your-personal-data-safe/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Everybody worries about it. I&#8217;ve got over 30 GB worth of photo&#8217;s archived at home, and I wouldn&#8217;t want to lose a single one of them. The rule I try to follow is very simple. Some folks call it the <a title="http://www.lockss.org/lockss/Home" href="http://www.lockss.org/lockss/Home" target="_blank">LOCKSS</a> principle, which stands for Lots Of Copies Keeps Stuff Safe. Unfortunately, it&#8217;s a little easier said than done, and many folks I know don&#8217;t even say it, let alone do it!</p>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div class="wp-caption alignleft" style="width: 120px"><img title="Maybe he lost his data..." src="http://cache.daylife.com/imageserve/04bu0diaoe85T/110x150.jpg" alt="Maybe he lost his data..." width="110" height="150"/><p class="wp-caption-text">Image by Getty Images via Daylife</p></div>
</div>
<p>Before we get into the details, let&#8217;s cover a few ground rules.</p>
<ol>
<li>You have data you care about on your personal computer. If you don&#8217;t care about it, don&#8217;t back it up, problem solved.</li>
<li>Since your data is worth something, you&#8217;re willing to pay something to keep it. This is important, because the old saying is true, <a class="zem_slink" title="TANSTAAFL" rel="wikipedia" href="http://en.wikipedia.org/wiki/TANSTAAFL">there&#8217;s no such thing as a free lunch</a>.</li>
<li>You know where your data is. Unfortunately, sometimes this is easier said than done, but if we start with simple stuff like photos and build out from there you can probably figure it out pretty easily.</li>
</ol>
<p>Ok so now that&#8217;s out of the way, how are we going to solve this problem?</p>
<p><iframe src="http://rcm.amazon.com/e/cm?t=erlactatla-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=B001F9LY14&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1" style="width: 120px; height: 240px; float: right;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe></p>
<p>It&#8217;s pretty simple, really.</p>
<ol>
<li>Create a data store. Ideally you would do this on a second hard drive. Internal or external, it&#8217;s your choice, but usb external ones are cheap and easy so my first recommendation would be that. See the amazon links for a couple options. If you&#8217;ve got a monster system drive or are just feeling cheap, at least do yourself the favor of making a C:\Data folder or something like it so you conclusively where the important stuff is.</li>
<li>Consolidate your data. I know it&#8217;s counterintuitive, but if you don&#8217;t actively choose what to back up and what not to, your backups will quickly get out of control as you accumulate all the flotsam and jetsam flying around on the interwebs onto your hard drive. This step is as simple as making a few folders in data store, such as Documents, Pictures, and Music, and filling them up with the stuff you care about. If you have several computers, I&#8217;d suggest moving all the important data to a central computer and enabling file sharing between them in order to keep things simple.</li>
<li>Make some copies!</li>
</ol>
<p>Making the copies is the fun part.</p>
<p><iframe src="http://rcm.amazon.com/e/cm?t=erlactatla-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=B001FWEETK&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1" style="width: 120px; height: 240px; float: right;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe></p>
<p>The simplest solution is to simply use another external USB drive and use old fashioned &#8220;copy&#8221; to drag the contents of your nice simple data folder to it. As you get more data, you may want something more advanced. There are lots of great free tools to handle keeping multiple copies of directory in sync with other, such as <a title="http://en.wikipedia.org/wiki/SyncToy" href="http://en.wikipedia.org/wiki/SyncToy" target="_blank">synctoy</a>,&nbsp; <a title="http://samba.anu.edu.au/rsync/" href="http://samba.anu.edu.au/rsync/" target="_blank">rsync</a>, and <a title="http://www.cis.upenn.edu/~bcpierce/unison/" href="http://www.cis.upenn.edu/%7Ebcpierce/unison/" target="_blank">unison</a>. You could also any of thousands of different pieces of backup software. I&#8217;d save that for later, however, as right now the goal is simplicity, and it&#8217;s just about impossible to beat lots of raw copies.</p>
<p>Now that you&#8217;ve got at least two copies in your house, you need something off-site. Again, there&#8217;s lots of options for this, but unfortunately most aren&#8217;t free. Personally, I&#8217;ve been using <a title="http://mozy.com/" href="http://mozy.com/" target="_blank">Mozy</a> with good results, but I&#8217;ve also heard good things about <a title="http://carbonite.com/" href="http://carbonite.com/" target="_blank">Carbonite</a>, and frankly, if you&#8217;re up for it you could also use rsync or unison with a remote host or a friends computer. The key here is to get a verifiable copy up and out of your physical location and updated regularly, and the internet is the easiest way to do that by far. Typically, these services will run about $5 per month for unlimited personal data, so piece of mind comes pretty cheap.</p>
<p>Finally, the most important part. Restoring. No backup is worth anything if you can&#8217;t restore from it. The good news is, since you&#8217;re just keeping spare copies on a USB drive, testing restore is easy: Take the drive to a friends computer, plug it in, and browse your files! Open a few up and make sure the they work. Then don&#8217;t forget to bring your drive back home!</p>
<p>The online backup service might be a little trickier to verify restores from, but with Mozy you simply go to their web control panel and browse your backup files. A few clicks will download them to your PC where you can verify whether or not the backup worked.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://r.zemanta.com/?u=http%3A//www.usnews.com/blogs/daves-download/2009/1/7/clickfree-backup-moves-off-pricey-disks-to-pricey-cable.html%3Fs_cid%3Drss%3Adaves-download%3Aclickfree-backup-moves-off-pricey-disks-to-pricey-cable&amp;a=2553236&amp;rid=320591e2-051a-4d97-855e-6bc5d73e6266&amp;e=3eb8347bcc5c85f862696bbc930c1e49">Clickfree Backup Moves Off Pricey Disks to Pricey Cable</a> (usnews.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.theregister.co.uk/2009/02/10/symantec_consumer_cloud/">Symantec takes on Mozy with cloud backup</a> (theregister.co.uk)</li>
<li class="zemanta-article-ul-li"><a href="http://www.labnol.org/gadgets/strange-clicking-sound-in-hard-drive/5377/">Is Your Hard Disk Making Strange Clicking Sounds?</a> (labnol.org)</li>
<li class="zemanta-article-ul-li"><a href="http://www.techcrunch.com/2008/12/09/backblaze-brings-its-dead-simple-online-backup-to-the-mac/">Backblaze Brings Its Dead Simple Online Backup To The Mac</a> (techcrunch.com)</li>
<li class="zemanta-article-ul-li"><a href="http://designmind.frogdesign.com/blog/sandisk-launches-the-world%25E2%2580%2599s-first-backup-usb-flash-drives.html">SanDisk Launches the World&#8217;s First Backup USB Flash Drives</a> (designmind.frogdesign.com)</li>
<li class="zemanta-article-ul-li"><a href="http://ptech.allthingsd.com/20090107/clickfree-backs-up-your-files-easily-so-youre-not-toast/">Clickfree Backs Up Your Files Easily, So You&#8217;re Not Toast [Personal Technology]</a> (ptech.allthingsd.com)</li>
<li class="zemanta-article-ul-li"><a href="http://johngannonblog.com/2009/02/05/online-backup-is-the-trojan-horse-of-the-cloud/">Online backup is the Trojan Horse of the cloud</a> (johngannonblog.com)</li>
</ul>
<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/320591e2-051a-4d97-855e-6bc5d73e6266/" title="Zemified by Zemanta"><img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=320591e2-051a-4d97-855e-6bc5d73e6266" alt="Reblog this post [with Zemanta]"/></a></div>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/02/how-to-keep-your-personal-data-safe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to build a business infrastructure in an hour using cloud services</title>
		<link>http://erik.labianca.org/blog/2009/02/how-to-build-a-business-infrastructure-in-an-hour/</link>
		<comments>http://erik.labianca.org/blog/2009/02/how-to-build-a-business-infrastructure-in-an-hour/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 05:01:53 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[infrastructure]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=46</guid>
		<description><![CDATA[Lately, the IT world has been abuzz with talk of &#8220;cloud computing&#8221;, &#8220;cloud services&#8221;, &#8220;cloud storage&#8221;, and pretty much everything else having to do with clouds. In an earlier post I talked about some of the risks of using these &#8230; <a href="http://erik.labianca.org/blog/2009/02/how-to-build-a-business-infrastructure-in-an-hour/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Lately, the IT world has been abuzz with talk of &#8220;cloud computing&#8221;, &#8220;cloud services&#8221;, &#8220;cloud storage&#8221;, and pretty much everything else having to do with clouds. In an earlier post I talked about some of the risks of using these cloud services. This time, we&#8217;ll look at what you stand to gain from them.</p>
<p>Even two years ago, in order to start a business you&#8217;d need to think seriously about getting some basic infrastructure in place just so you can look the part. Those days are all but gone now. Let&#8217;s take a look at the sorts of IT services you might need to support a new business.</p>
<p><img class="alignleft size-full wp-image-48" title="The Office You Don't Need" src="http://erik.labianca.org/blog/wp-content/uploads/2009/02/strip-mall.jpg" alt="The Office You Don't Need" width="380" height="252" /><strong>Internet Domain</strong></p>
<p>Having your own domain isn&#8217;t strictly necessary, but really, why not? There are literally dozens of registrars out there who will sell you a domain name. Heck, <a title="http://www.quonic.net" href="http://www.quonic.net" target="_blank">my company</a> can sell you one if you really want. <a title="http://www.register.com" href="http://www.register.com" target="_blank">Register.com</a> is fairly reputable and has been in business for a long time, although I don&#8217;t use them personally.</p>
<p><strong>Email</strong></p>
<p>Now that you&#8217;ve got a domain name, you need an email service that will support it. For this exercise, I&#8217;m going to suggest <a title="http://www.google.com/apps/intl/en/business/index.html" href="http://www.google.com/apps/intl/en/business/index.html" target="_blank">Google Apps</a>. It&#8217;s free in it&#8217;s most basic incarnation and gets you a bunch of value added services beyond email. Bear in mind that there are lots of other ways to tackle email, including many low cost and even free options from other companies.</p>
<p><strong>Fax</strong></p>
<p>Personally, I hate faxes but they are nonetheless a fact of life. In fact, legal documents cannot be emailed, so you may find yourself doing business with companies that require you to be able to send and receive faxes. Luckily, this is a really easy problem to solve. There are two good options here, efax and faxaway. <a title="http://www.efax.com" href="http://www.efax.com/" target="_blank">Efax</a> is much more polished, and much more expensive. <a title="http://www.faxaway.com" href="http://www.faxaway.com" target="_blank">Faxaway</a> is less polished but darn near free at $2/month for your unlimited faxes to your incoming number including voicemail service. You also will pay a few pennies per outbound fax.</p>
<p><strong>Telephone</strong></p>
<p>The explosion of VoIP telephony means there are dozens of options for telecommunication now. Since you probably signed up for faxaway, if you like you can use their voicemail service for inbound calls. For outbound, there are lots of options, but the 800lb gorilla of them all is <a title="http://www.skype.com" href="http://www.skype.com" target="_blank">Skype</a>. They&#8217;ve been around for a long time and allow you to download and use their client for free. Since we&#8217;re talking about setting up a business here, you will likely want to sign up for a monthly subscription to skype and purchase an inbound telephone number. These services are nonetheless very cheap, around $10 per month. Beyond the quick setup and low cost, pc-based VoIP has the advantage of portability. Set up your laptop in Panera, the local business incubator, or a friends garage, and you&#8217;re up and running.</p>
<p><strong>Document Management</strong></p>
<p>It&#8217;s not a matter of if, but simply when, in the course of a business that you will need to draft some documents. The great news is that since you already signed up for Google Apps for email, you get <a title="http://docs.google.com/" href="http://docs.google.com" target="_blank">Google Docs</a> included with it. Google Docs provides word processing, spreadsheet, and presentation functions which are (in theory) Microsoft Word compatible. They&#8217;re certainly not as robust as some of their competitors, but they sure do work.</p>
<p><img class="alignright size-full wp-image-49" title="Your New Virtual Office" src="http://erik.labianca.org/blog/wp-content/uploads/2009/02/beach-laptop.jpg" alt="Your New Virtual Office" width="200" height="200" />While you&#8217;re at it, however, you could also check out <a title="http://www.zoho.com" href="http://www.zoho.com" target="_blank">Zoho Office</a> or download <a title="http://www.openoffice.org" href="http://www.openoffice.org" target="_blank">OpenOffice</a> to your local PC.</p>
<p><strong>Invoicing</strong></p>
<p>Chances are that if you&#8217;re doing work, you&#8217;re going to need to ask people to pay you. Luckily, there&#8217;s lots of ways to do that. There are several on-line accounting packages worth taking a look at, including <a title="http://www.freshbooks.com" href="http://www.freshbooks.com" target="_blank">Freshbooks</a> and <a title="https://invoice.zoho.com/login/jsp/login.jsp" href="https://invoice.zoho.com/login/jsp/login.jsp" target="_blank">Zoho Invoices</a>.</p>
<p><strong>Customer Relationship Management</strong></p>
<p>CRM is the acronym for your old fashioned customer list. Luckily, again, there&#8217;s lots of options out there including <a title="http://crm.zoho.com/crm/login.sas" href="http://crm.zoho.com/crm/login.sas" target="_blank">Zoho CRM</a>, <a title="http://www.highrisehq.com" href="http://www.highrisehq.com" target="_blank">HighRise</a>, and <a title="http://www.salesforce.com" href="http://www.salesforce.com" target="_blank">SalesForce.com</a>. Or, if you prefer to keep things simple, you can just use the Google Contacts application that came with your Google Apps setup.</p>
<p><strong>Web Presence<br />
</strong></p>
<p>Now that you&#8217;ve got the basics of your business covered, you&#8217;ll need to promote yourself. A good place to start is with a solid promotional web-page explaining your business and products. The good news is that Google Apps gives you headstart on this front as well, with the Google Sites feature of Google Apps. Obviously, you can also choose to host your website with a plethora of other hosts or <a title="http://www.google.com/search?q=5+minute+business+website+service&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=com.ubuntu:en-US:unofficial&amp;client=firefox-a" href="http://www.google.com/search?q=5+minute+business+website+service&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=com.ubuntu:en-US:unofficial&amp;client=firefox-a" target="_blank">services</a> as well.</p>
<p>Beyond these basic services, there are dozens of other services available on-line. Just make sure to keep in mind what you&#8217;re getting for your money (or free). You might find my previous articles on<a title="http://www.cto-at-large.com/2009/02/whats-all-the-noise-about-voip-anyway/" href="http://www.cto-at-large.com/2009/02/whats-all-the-noise-about-voip-anyway/" target="_blank"> VoIP technology</a> and <a title="http://www.cto-at-large.com/2009/02/is-your-data-safe-in-the-saas-cloud/" href="http://www.cto-at-large.com/2009/02/is-your-data-safe-in-the-saas-cloud/" target="_blank">SAAS cloud services </a>to be helpful with that.</p>
<p>Last, but certainly not least, remember to have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/02/how-to-build-a-business-infrastructure-in-an-hour/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What&#039;s all the noise about VoIP, anyway?</title>
		<link>http://erik.labianca.org/blog/2009/02/whats-all-the-noise-about-voip-anyway/</link>
		<comments>http://erik.labianca.org/blog/2009/02/whats-all-the-noise-about-voip-anyway/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 05:21:46 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[telephony]]></category>
		<category><![CDATA[VOIP]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=25</guid>
		<description><![CDATA[What's all the noise about VoIP? In short, it's the way we'll all talk on the telephone in a few years, so you'd better learn a bit about it! Read the rest of the article to get started. <a href="http://erik.labianca.org/blog/2009/02/whats-all-the-noise-about-voip-anyway/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>You may have seen an advertisement on TV for <a title="http://www.vonage.com" href="http://www.vonage.com" target="_blank">Vonage</a>, or perhaps a telecomm integrator is pitching you a new VoIP PBX. Maybe you&#8217;ve got comcast &#8220;digital voice&#8221; or one of the equivalent business grade systems from incumbent carriers like AT&amp;T, something like IP Flex or Business VoIP. Or perhaps you talk to your oversees friends for free using <a title="http://www.vonage.com" href="http://www.vonage.com" target="_blank">Skype</a>, MSN or iChat. The fact is, VoIP is everywhere, but it remains confusing.</p>
<p>The good news is that it&#8217;s conceptually very simple. First, let&#8217;s break down the acronym. Voice over Internet Protocol. Now, that was easy! VoIP just means any technology used to transmit voice communications over the Internet. Unfortunately, from here on out it gets more complicated.</p>
<div id="attachment_30" class="wp-caption alignleft" style="width: 407px"><a title="http://www.cisco.com/en/US/products/hw/phones/ps379/ps1855/index.html" href="http://www.cisco.com/en/US/products/hw/phones/ps379/ps1855/index.html" target="_blank"><img class="size-full wp-image-30" title="The Cisco 7960 VoIP Handset" src="http://erik.labianca.org/blog/wp-content/uploads/2009/02/cisco_7960.jpg" alt="A high quality VoIP compatible handset." width="397" height="348" /></a><p class="wp-caption-text">A high quality VoIP compatible handset.</p></div>
<p>In order to understand VoIP, it&#8217;s also important to understand the &#8220;old way&#8221;, known as the <a title="http://en.wikipedia.org/wiki/PSTN" href="http://en.wikipedia.org/wiki/PSTN" target="_blank">Public Switched Telephone Network</a>, or PSTN for short. This technology is based the same stuff invented by <a title="http://inventors.about.com/od/bstartinventors/a/telephone.htm" href="http://inventors.about.com/od/bstartinventors/a/telephone.htm" target="_blank">Alexander Graham Bell in 1876</a>, although over time it has morphed, become digitized, and a very advanced system of switches put in place. The key characteristic of the PSTN is that it always allocates a &#8220;pair of wires&#8221;, digital or analog, between you and the person you are talking</p>
<p>You also need to understand a bit about the Internet. The Internet is a <a title="http://en.wikipedia.org/wiki/Packet_switching" href="http://en.wikipedia.org/wiki/Packet_switching" target="_blank">packet-switched</a> network, with providers establishing peering points and routing via the <a title="http://en.wikipedia.org/wiki/Border_Gateway_Protocol" href="http://en.wikipedia.org/wiki/Border_Gateway_Protocol" target="_blank">BGP protocol</a>. The interesting thing about being packet switched is that between any two hosts on the Internet there is a multitude of possible routes. Bear in mind that only one route will be in use at a time. The key point here is that you don&#8217;t have much control over which route will be used. In addition, all traffic between those two points is broken into individual packets, each of which might take a different path across the Internet.</p>
<p>So, put the two together and the issues become apparent. With analog telephony, you have a guaranteed path, and guaranteed performance. With VoIP, you have a dynamically allocated path based on breaking the transmission into tiny packets. This dynamically allocated path means variability, and quality voice communications require consistency.</p>
<p>There are lots of techniques to try to improve the consistency of Internet packet delivery, such as private networks, <a title="http://www.voip.com/blog/2008/05/g729-versus-g711.html" href="http://www.voip.com/blog/2008/05/g729-versus-g711.html" target="_blank">high compression codecs</a>, <a title="http://en.wikipedia.org/wiki/Class_of_Service" href="http://en.wikipedia.org/wiki/Class_of_Service" target="_blank">Class of Service</a> tags, <a title="http://en.wikipedia.org/wiki/Quality_of_service" href="http://en.wikipedia.org/wiki/Quality_of_service" target="_blank">Quality of Service</a>, traffic shaping and many others. When implemented correctly CoS tagging and end-to-end QoS rules in conjunction with the wider signal bandwidth of a VoIP telephone can result in better than PSTN voice quality (typically measured using a <a title="http://en.wikipedia.org/wiki/Mean_Opinion_Score" href="http://en.wikipedia.org/wiki/Mean_Opinion_Score" target="_blank">Mean Opinion Score or MOS</a>). However, since the Internet is not necessarily designed for voice transmission, VoIP signals are often not properly QoS&#8217;d and VoIP on the whole has gotten a band rap. This is why you&#8217;ll see Comcast offering &#8220;<a title="http://blogs.zdnet.com/ip-telephony/?p=1350" href="http://blogs.zdnet.com/ip-telephony/?p=1350" target="_blank">Digital Voice</a>&#8221; and AT&amp;T offering &#8220;BVoIP using CoS&#8221; and trying to convince you they aren&#8217;t selling that &#8220;crappy VoIP stuff&#8221;.</p>
<p>Don&#8217;t buy the BS, it&#8217;s all VoIP, it&#8217;s just more likely that they&#8217;re doing it right.</p>
<p>So. What&#8217;s in it for you? In short, everything and nothing. Practically, it means that voice calls around the world need not cost any more than across the office. In addition, since everything is handled digitally, you can easily route VoIP through a computer and get some benefits from communications convergence. Since VoIP runs over the internet, you can also move your &#8220;home phone&#8221; from one location to another with no hassles at all. You can even run a VoIP phone over Wifi (<a title="http://i.gizmodo.com/5148607/hands+on-with-jajahs-ipod-touch-voip-app" href="http://i.gizmodo.com/5148607/hands+on-with-jajahs-ipod-touch-voip-app" target="_blank">or on your iPod</a>), making a cheap approximation of a cell phone without any contracts! Finally, VoIP falls outside the traditional regulatory domain of PSTN communications so you can save a few pennies in regulatory fees and tariff charges as well.</p>
<p>How do you know if it&#8217;s right for you? In short, you&#8217;ll need to try it out. Be aware that VoIP services that match the quality of PSTN services are likely to be price competitive. As usual, the &#8220;you get what you pay for&#8221; rule often applies, so beware of anything that seems too good to be true. The key to getting value from VoIP is to determine exactly what your needs are, try out the proposed system in production, and determine exactly how much money you&#8217;ll save. From a business standpoint, without a clear ROI case, VoIP is probably not something to get excited about. Luckily, that case is usually easy to make!</p>
<p>Stay tuned for the next article about VoIP at your local office instead of across the internet.</p>
<p><strong>Useful References</strong></p>
<ul>
<li>Added 2009-02-13: <a title="http://voipschool.org/2009/02/the-different-flavors-of-voip/" href="http://voipschool.org/2009/02/the-different-flavors-of-voip/" target="_blank">This post</a> at VoIPSchool has a great breakdown of some of the types of VoIP services out there.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/02/whats-all-the-noise-about-voip-anyway/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Is your data safe in the SAAS cloud?</title>
		<link>http://erik.labianca.org/blog/2009/02/is-your-data-safe-in-the-saas-cloud/</link>
		<comments>http://erik.labianca.org/blog/2009/02/is-your-data-safe-in-the-saas-cloud/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 04:34:22 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=5</guid>
		<description><![CDATA[Data stored in online "cloud" or "SAAS" applications is necessarily well protected. It's important to understand the risks of using these applications and protect yourself as much as possible. <a href="http://erik.labianca.org/blog/2009/02/is-your-data-safe-in-the-saas-cloud/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While I was browsing around the web, I found <a title="http://www.craigburton.com/?p=2929" href="http://www.craigburton.com/?p=2929" target="_blank">Craig Burton&#8217;s</a> post about the state of blogging software. He&#8217;s right, 100%. If you&#8217;re trusting some free web service with the only copies of your blog content, you definitely run the risk of losing it all. See <a href="http://puzzling.org/logs/thoughts/2009/January/3/backup-policies">this true story</a> if you need more convincing.</p>
<p>However, it really only gets worse. Lots of paid services make it very difficult to get a useful snapshot of your data out, as well. For instance, while <a href="http://www.netsuite.com">NetSuite</a> provides a &#8220;full data export&#8221;, it doesn&#8217;t include any custom fields or custom tables. Given some of your most important data is likely to be in your customizations, will you be able to get your business back up and running quickly if that&#8217;s the data you have? Granted, they do run out of an enterprise-grade data center and make backups, but what if they go out of business?</p>
<p>Google Docs, for instance, can&#8217;t be backed up without a bunch of sketchy thirdy party scripts such as <a title="http://1st-soft.net/gdd/" href="http://1st-soft.net/gdd/" target="_blank">this browser hack</a> or <a title="http://code.google.com/p/gdatacopier/" href="http://code.google.com/p/gdatacopier/" target="_blank">this command line application</a>.</p>
<p>All that said, the key here is risk analysis. Most folks don&#8217;t back up their home computers, so using a SAAS service that runs out of a datacenter (hopefully!) is probably better than leaving stuff sitting around on a single hard drive at home or the office.</p>
<p>Here&#8217;s some of the factors to consider:</p>
<ul>
<li>Does the provider offer an SLA or otherwise warrant their ability to provide your service. What compensation does it offer? Probably not a alot&#8230;</li>
<li>Does the provider have on-site redundancy? It&#8217;s not inappropriate to check if they&#8217;re using RAID and what level it is.</li>
<li>Does the provider make backups of your data? On what schedule? Are they stored off-site? What&#8217;s their recovery time objective for restoring that data in the event of a disaster?</li>
<li>Can you make a backup of your data? Is that backup usable? If you can&#8217;t test the restore, you probably shouldn&#8217;t trust it. In some cases, the sheer size of this makes it impossible, but in most cases it shouldn&#8217;t be. A simple URL you can click to download a full copy of the entire system locally is worth a lot. The free password management site <a title="http://www.clipperz.com/blog" href="http://www.clipperz.com/blog" target="_blank">Clipperz</a> does a great job of this.</li>
<li>Is there an exit strategy to an alternative product? Data is great, but what you really want is to keep using your data, and to do that will require an application.</li>
</ul>
<p>What other questions should you ask of a prospective SAAS cloud application? What other applications out there are doing a good job, or a bad job of providing an exit strategy?</p>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/02/is-your-data-safe-in-the-saas-cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What is Network Attached Storage, anyway?</title>
		<link>http://erik.labianca.org/blog/2009/02/what-is-the-network-attached-storage-anyway/</link>
		<comments>http://erik.labianca.org/blog/2009/02/what-is-the-network-attached-storage-anyway/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 02:24:51 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Information]]></category>

		<guid isPermaLink="false">http://www.cto-at-large.com/?p=8</guid>
		<description><![CDATA[Network Attached Storage, or NAS. You'll see a lot of storage industry pros debating about what it really is, and why their flavor of NAS is better than their competitors.The term NAS comes from the fact that originally a NAS allowed "storage devices" which speak SCSI to be attached to a "network", speaking ethernet. But really then, what is it? <a href="http://erik.labianca.org/blog/2009/02/what-is-the-network-attached-storage-anyway/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Network Attached Storage, or NAS. You&#8217;ll see a lot of storage industry pros debating about what it really is, and why their flavor of NAS is better than their competitors. The term NAS comes from the fact that originally a NAS allowed &#8220;storage devices&#8221; which speak SCSI to be attached to a &#8220;network&#8221;, speaking ethernet.</p>
<p>But really then, what is it? Actually, it&#8217;s just a file server, the same thing you get when you right-click on a folder and select &#8220;share&#8221; on your windows system. However, a good NAS appliance will have some or all of the following:</p>
<ul>
<li><strong>Multi-protocol capability</strong> -  CIFS, NFS, and iSCSI are all pretty basic anymore. However, if you need concurrent access to a filesystem from both NFS and CIFS look very closely at how the system mandles permissions and how it will effect you.</li>
<li><strong>Snapshot capability</strong> &#8211; This allows you to store point-in-time snapshots of your shares. Windows XP and Vista have shell integration for this and vista even has this capability built-in.</li>
<li><strong>Redundancy</strong> &#8211; A NAS will typically use some form of RAID to insulate you from data loss due to hard drive failure. Remember that hard drive failure is by no means the only way to lose data, however!</li>
</ul>
<p>So why should you buy a NAS instead of just re-purposing that old machine gathering dust in the closet? Well, firstly, maybe you shouldn&#8217;t. There are several open source NAS appliances out there, and they work very well for many people. They are cheap, they work, and since they&#8217;re open source they&#8217;re documented and repairable by your local linux wizard.</p>
<p>However, you&#8217;ll still likely miss out on a few key differentiators:</p>
<ul>
<li><strong>Performance and Scalability</strong> &#8211; Enterprise-grade NAS appliances are designed to serve thousands of clients concurrently without a hiccup. This means NetApp, Sun 7000, BlueArc, EMC Celerra and some others. Anything running windows storage server and/or having less than a full tray of disks probably won&#8217;t be anything to write home about. But don&#8217;t assume an expensive unit will meet all your expectations just because it&#8217;s expensive. Demand a real demo of the actual product you&#8217;re considering buying running your applications. Unless you&#8217;re buying a lot of them, good luck, but you might be able to negotiate a 30-day money back if nothing else by trying.</li>
<li><strong>Hardware Integration</strong> &#8211; Enterprise-grade NAS products will have tightly integrated software and hardware. They will know when a drive has failed and turn on a nice red light on that drives carrier. NetApp, at least, will even phone home and have another drive delivered to your door automatically if the unit is under contract.</li>
<li><strong>Reliability</strong> &#8211; Enterprise-grade NAS products are engineered to meet strict uptime guidelines. They boot fast, they are designed not to crash, and they have had thousands of hours of R&amp;D and testing put into their data protection techniques. They are also designed to support fully redundant operation and their recovery methodology is well known.</li>
<li><strong>Support</strong> &#8211; Real NAS products are sold with support contracts. There is an aftermarket support industry, and a training and certification programs for folks who operate them. This makes it easier to keep them running and find folks to help do it.</li>
</ul>
<p>In general, like in most things in life, you get what you pay for. The key is knowing if you need what you&#8217;ll get. Hopefully this overview has helped you to understand that a bit better. Comments welcome, of course.</p>
<p><strong>Downloadable NAS Appliances:</strong></p>
<ul>
<li><a title="http://www.openfiler.com/" href="http://www.openfiler.com/">OpenFiler</a></li>
<li><a title="http://www.freenas.org/" href="http://www.freenas.org/">FreeNAS</a></li>
<li><a title="http://www.nexenta.com/" href="http://www.nexenta.com/">Nexenta</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://erik.labianca.org/blog/2009/02/what-is-the-network-attached-storage-anyway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

