<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Paul Weinstein</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/" />
    <link rel="self" type="application/atom+xml" href="http://pdw.weinstein.org/feed.xml" />
    <id>tag:pdw.weinstein.org,2009-03-05:/2</id>
    <updated>2013-01-28T17:14:12Z</updated>
    <subtitle>Pontifications on the Life Universe and Everything; News and commentary about the web, computers, politics, programming, webzines, travel, reading et. al. by Paul Weinstein</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.25</generator>

<entry>
    <title>Cleaning House</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2013/01/cleaning-house.html" />
    <id>tag:pdw.weinstein.org,2013://2.256</id>

    <published>2013-01-28T17:24:40Z</published>
    <updated>2013-01-28T17:14:12Z</updated>

    <summary>Over on Facebook a few days ago I commented about a personal &quot;new year&quot; project of reorganizing (first the home office, next this website): &quot;Phase one of reorganizing home office desk completed. Most useless item: note to self to clean...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="retrocomputing" label="Retro Computing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="technology" label="Technology" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webzine" label="Webzine" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p>Over on <a href="https://www.facebook.com/pdweinstein">Facebook</a> a few days ago I commented about a personal "new year" project of reorganizing (first the home office, next this website):
</p><blockquote>
"Phase one of reorganizing home office desk completed. 

Most useless item: note to self to clean desk (near the bottom no less) 

Single largest source of paper: Health Insurance"
</blockquote>

Now I think I can can add the most interesting item from the excavation:

<div style="align:center"><div class="zemanta-img mt-image-center" style="margin: 1em auto; display: block; float: none; width: 500px;"><a href="http://www.flickr.com/photos/37182874@N04/8422986063" target="_blank"><img src="http://farm9.static.flickr.com/8359/8422986063_a4ea87510e.jpg" alt="Business card collection" class="zemanta-img-configured" width="500" /></a><p class="zemanta-img-attribution" style="font-size:0.8em">Business card collection (Photo credit: <a target="_blank" href="http://www.flickr.com/photos/37182874@N04/8422986063">pdweinstein</a>)</p></div></div>

<div class="zemanta-pixie" style="margin-top:10px;height:15px"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=4345db19-e4cf-45b4-882b-57240f0cda48" style="border:none;float:right" /></div>
A collection of business cards from contacts and interestes from a few years ago hiding&nbsp;among&nbsp;a stash of old passwords. The <a href="http://www.thawte.com/">Thawte</a>, <a href="http://oreilly.com/">O'Reilly</a> and daemonnews cards are from contacts I had when I did more <a href="http://pdw.weinstein.org/work/publications/index.html">technical writing</a>, which started out on topics of SSL and Apache. The Google card is from a recruiter I had contact with at the time (still waiting on a job Google ;-)&nbsp;<div><br /></div><div>I had the pleasure of working with <a href="http://www.eddie.com/">Eddie Codel</a> and Scott Beale on Webzine events and even "server sat" <a href="https://laughingsquid.us/">Laughing Squid's hosting setup</a> one Labor Day weekend while Scott and crew went to <a href="http://www.burningman.com/">Burning Man</a>.</div><div><br /></div><div>Ah memories...</div><p></p>]]>
        
    </content>
</entry>

<entry>
    <title>PHP, Nagios and MySQL Replication</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2012/11/php-nagios-and-mysql-replication.html" />
    <id>tag:pdw.weinstein.org,2012://2.255</id>

    <published>2012-11-05T13:45:03Z</published>
    <updated>2012-11-05T02:31:37Z</updated>

    <summary> Overview MySQL replication is a handy way to distribue database processes across several servers. For example, a simple &quot;master-slave&quot; step up allows for a continuous backup of data from a primary database server, the master to a secondary backup...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Development" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Information Technology" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="database" label="Database" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mysql" label="MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="nagios" label="Nagios" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="replication" label="Replication" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="servers" label="servers" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sql" label="SQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<div>
<p><b>Overview</b></p><p>
<a class="zem_slink rdfa" href="http://www.mysql.com" title="MySQL" rel="ctag:means homepage" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/mysql" property="ctag:label">MySQL</a> replication is a handy way to distribue database processes across several servers. For example, a simple "master-slave" step up allows for a continuous backup of data from a primary database server, the master to a secondary backup server, the slave. But what if the slave server stops replicating for some reason? Not much of a good backup, if it fails to copy data for some undermined length of time.
<br /><br />
The good news is that MySQL provides a <a href="http://dev.mysql.com/doc/refman/5.1/en/replication-administration-status.html">simple, detailed query</a> for checking if replication is taking place and will report errors, should they occur. The trick of course is getting notified when an issue does occur quickly. Given an existing <a class="zem_slink rdfa" href="http://www.nagios.org/" title="Nagios" rel="ctag:means homepage" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/nagios" property="ctag:label">Nagios</a> setup for service monitoring at a <a class="zem_slink rdfa" href="http://www.php.net" title="PHP" rel="ctag:means homepage" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/php" property="ctag:label">PHP</a> shop the only missing piece is some code.
<br /><br /><b>The Details</b><br />
First off, Nagios has the ability to supply arguments to a script as a script being invoked at the command-line. One common set of arguments for Nagios scripts are warning and critical thresholds. For example, a disk allocation script might take arguments to send a warning notification if the amount of free disk space reaches 20% and a critical notification if free space is 10% or less.
<br /><br />
With MySQL replication one area of concern is the network. Any latency between the two servers can induce lag in synchronizing the slave server with the master server. Given this, why not pass along a threshold to our script setting checking how many seconds the secondary server is behind the primary.
<br /><br />
For processing command line short form and long form options in PHP there is the <a href="http://php.net/manual/en/function.getopt.php">getopt</a> function:
</p>
</div>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">        $shortopts  = "";
        $shortopts .= "w:"; // Required value for warning
        $shortopts .= "c:"; // Required value for critical

        $longopts  = array(
                // No long form options
        );

	// Parse our options with getopt
        $options = getopt( $shortopts, $longopts );

        // If slave is x second behind for warning state
        $delayWarn = $options['w'];

        // If slave is x second behind for a critical state
        $delayCritical = $options['c'];
</pre></div>
<div><br /><p>       
Besides being in a critical or warning state, Nagios also has conditions for normal and unknown. Each state is associated with a status code that will be set upon completion of the script, hence the following associative array:
</p></div>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23)">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">        // Nagios conditions we can be in
        $statuses = array( 'UNKNOWN' =&gt; '-1', 'OK' =&gt; '0', 'WARNING' =&gt; '1', 'CRITICAL' =&gt; '2' );
</pre></div><div><br /><p>
For the moment, we don't know what condition our replication setup is in. Nor do we have any additional information about the current state, so let's go ahead and define that as such:
</p></div>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">        $state = 'UNKNOWN';
        $info = '';
</pre></div><div><br /><p>
The next step is to go ahead and connect to our slave MySQL instance and query its status using "SHOW SLAVE STATUS;"
</p></div>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">		$db = new mysqli( $dbHost, $dbUser, $dbPasswd );

		// Prepare query statement &amp; execute
		$query = $db-&gt;prepare( "SHOW SLAVE STATUS" )) {
		$query-&gt;execute();
</pre></div><div><br /><p>The MySQL query is going to return a number of columns in a single result row. Of immediate concern is if the slave is in error state or not. For that we take a look at the columns labeled Slave_IO_Running, Slave_SQL_Running and Last_Errno. 
</p></div>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">        // If Slave_IO_Running OR Slave_SQL_Running are not Yes 
        // OR Last_Errno is not 0 we have a problem
        if (( $SlaveIORunning != 'Yes' ) OR ( $SlaveSQLRunning != 'Yes' ) 
        	OR ( $Last_Errno != '0' )) {

            	$state = 'CRITICAL';
</pre></div><div><br /><p>
If the slave server is not in error, then we'll go ahead and check how far behind it is, and set a warning or critical state given the earlier parameters from the beginning of the script:
</p></div>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">        } else if (( $row['Slave_IO_Running'] == 'Yes' ) OR ( $row['Slave_SQL_Running'] == 'Yes' ) OR ( $row['Last_Errno'] == '0' )) {

        	// So far so, good, what about time delay, how behind is the slave database?
			if ( $row['Seconds_Behind_Master'] &gt;= $delayCritical ) {

            	$state = 'CRITICAL';

            } else if ( $row['Seconds_Behind_Master'] &gt;= $delayWarn ) {

            	$state = 'WARN';

            } else {

            	$state = 'OK';

            }

		}
</pre></div><div><br /><p>
Now that we have determined the state of the secondary database server, we can pass along some information for Nagios to process.
</p></div><p></p>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">        // What to output?
        switch ( $state ) {

                case "UNKNOWN":
                        $info = 'Replication State: UNKNOWN';
                        break;

                case "OK":
                        $info = 'Replication State: OK Master Log File: ' .$MasterLogFile. ' Read Master Log Position: ' .$ReadMasterLogPos. ' Replication Delay (Seconds Behind Master): ' .$SecondsBehindMaster;
                        break;

                case "WARNING":
                        $info = 'Replication State: WARNING Master Log File: ' .$MasterLogFile. ' Read Master Log Position: ' .$ReadMasterLogPos. ' Replication Delay (Seconds Behind Master): ' .$SecondsBehindMaster;
                        break;

                case "CRITICAL":
                        $info = 'Replication State: CRITICAL Error: ' .$LastErrno. ': ' .$Last_Error. ' Replication Delay (Seconds Behind Master): ' .$SecondsBehindMaster;
                        break;

        }
</pre></div><div><br /><p>
All that is left is to transfer our information to Nagios via standard out and an exit code:
</p></div><div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">        // Need to set type to integer for exit() to handle the code properly
        $status = $statuses[$state];
        settype( $status, "integer" );

        fwrite( STDOUT, $info );
        exit( $status );
</pre></div><div><p>
Putting it all together we get something like this:
</p></div>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre style=" white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">#!/usr/bin/php
&lt;?php

	$shortopts  = "";
	$shortopts .= "w:"; // Required value for warning
	$shortopts .= "c:"; // Required value for critical

	$longopts  = array( 
		// No long form options 
	);

	$options = getopt( $shortopts, $longopts );

	// If slave is x second behind, set state as warn
	$delayWarn = $options['w'];

	// If slave is x second behind, set state as critical
	$delayCritical = $options['c'];

	// Nagios conditions we can be in
	$statuses = array( 'UNKNOWN' =----&gt; '-1', 'OK' =&gt; '0', 'WARNING' =&gt; '1', 'CRITICAL' =&gt; '2' );
	$state = 'UNKNOWN';
	$info = '';
	
	$dbUser = 'user';
	$dbPasswd = 'password';
	$dbHost = 'localhost';

	$db = new mysqli( $dbHost, $dbUser, $dbPasswd );

	if ( mysqli_connect_errno() ) {
	
		// Well this isn't good
		$state = 'CRITICAL';
		$info = 'Cannot connect to db server';

	} else {

		// Prepare query statement &amp; execute
		if ( $query = $db-&gt;prepare( "SHOW SLAVE STATUS" )) {

			$query-&gt;execute();

			// Bind our result columns to variables
			$query-&gt;bind_result( $SlaveIOState, $MasterHost, $MasterUser, $MasterPort, $ConnectRetry, $MasterLogFile, $ReadMasterLogPos, $RelayLogFile, $RelayLogPos, $RelayMasterLogFile, $SlaveIORunning, $SlaveSQLRunning, $ReplicateDoDB, $ReplicateIgnoreDB, $ReplicateDoTable, $ReplicateIgnoreTable, $ReplicateWildDoTable, $ReplicateWildIgnoreTable, $LastErrno, $Last_Error, $SkipCounter, $ExecMasterLogPos, $RelayLogSpace, $UntilCondition, $UntilLogFile, $UntilLogPos, $MasterSSLAllowed, $MasterSSLCAFile, $MasterSSLCAPath, $MasterSSLCert, $MasterSSLCipher, $MasterSSLKey, $SecondsBehindMaster, $MasterSSLVerifyServerCert, $LastIOErrno, $LastIOError, $LastSQLErrno, $LastSQLError );

			// Go fetch
			$query-&gt;fetch();

			// Done
			$query-&gt;close();

			// and done
			$db-&gt;close();
	
			// If Slave_IO_Running OR Slave_SQL_Running are not Yes OR Last_Errno is not 0 we have a problem
			if (( $SlaveIORunning != 'Yes' ) OR ( $SlaveSQLRunning != 'Yes' ) OR ( $LastErrno != '0' )) {
		
				$state = 'CRITICAL';	
		
			} else if (( $SlaveIORunning == 'Yes' ) OR ( $SlaveSQLRunning == 'Yes' ) OR ( $LastErrno == '0' )) {
	
				// So far so, good, what about time delay, how behind is the slave database?
	
				if ( $SecondsBehindMaster &gt;= $delayCritical ) {
				
					$state = 'CRITICAL';
				
				} else if ( $SecondsBehindMaster &gt;= $delayWarn ) {
				
					$state = 'WARN';
				
				} else {
	
					$state = 'OK';
		
				}
			
			}
	
	
		} else {
			
			// Well this isn't good
			$state = 'CRITICAL';
			$info = 'Cannot query db server';			
			
		}
	
		// What to output?
		switch ( $state ) {

			case "UNKNOWN":
				$info = 'Replication State: UNKNOWN';
				break;

			case "OK":
				$info = 'Replication State: OK Master Log File: ' .$MasterLogFile. ' Read Master Log Position: ' .$ReadMasterLogPos. ' Replication Delay (Seconds Behind Master): ' .$SecondsBehindMaster;
				break;

			case "WARNING":
				$info = 'Replication State: WARNING Master Log File: ' .$MasterLogFile. ' Read Master Log Position: ' .$ReadMasterLogPos. ' Replication Delay (Seconds Behind Master): ' .$SecondsBehindMaster;
				break;

			case "CRITICAL":
				if ( $info == '' ) {
					
					$info = 'Replication State: CRITICAL Error: ' .$LastErrno. ': ' .$LastError. ' Replication Delay (Seconds Behind Master): ' .$SecondsBehindMaster;
			
				}
			break;
			
		}
	
	}

	// Need to set type to integer for exit to handle the exit code properly
	$status = $statuses[$state];
	settype( $status, "integer" );

	fwrite( STDOUT, $info );
	exit( $status );


?&gt;

</pre></div>

<div class="zemanta-pixie" style="margin-top:10px;height:15px"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=e7dc9344-7910-43f3-ada9-af4aeabb6133" style="border:none;float:right" /></div>]]>
        
    </content>
</entry>

<entry>
    <title>WWDC 2012 Predictions</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2012/06/wwdc-2012-predictions.html" />
    <id>tag:pdw.weinstein.org,2012://2.254</id>

    <published>2012-06-10T23:00:34Z</published>
    <updated>2012-06-10T14:01:02Z</updated>

    <summary>Apple&apos;s Worldwide Developer Conference starts this week, which means it is time for everyone under the sun to make predictions about what will be announced in the conference&apos;s keynote tomorrow.Macbook UpdateFirst off the completely given, new Macbook Airs. Seems a...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Apple" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="apple" label="Apple" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reaction" label="Reaction" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="technology" label="Technology" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<div>Apple's Worldwide Developer Conference starts this week, which means it is time for <a href="http://www.tuaw.com/2012/06/08/the-wwdc-2012-prediction-post-community-edition/">everyone under the sun to make predictions</a> about what will be announced in the conference's keynote tomorrow.</div><div><br /></div><div><br /></div><div><strong>Macbook Update</strong></div><div>First off the completely given, new Macbook Airs. Seems a given that Apple's laptop line will get an update that pushes it more inline with the trend-setting Macbook Air. In other words, we'll see the <a href="http://www.appleinsider.com/articles/12/06/08/inside_apples_rumored_new_macbook_vs_updated_macbook_pro.html">start of a consolidation</a> where most of Apple's laptop options will be thinner, sleeker Air-like with one or perhaps two "Pro" options for the high-end users. The open question seems to be if <a href="http://www.engadget.com/2012/06/04/apple-wwdc-macbook-air-macbook-pro-rumors-retina-display/">the laptops will be getting the rumored "Retina Display"</a> during this refresh or not.&nbsp;</div><div><br /></div><div><br /></div><div><strong>OS X Update</strong></div><div>Back in February Apple previewed the next release of OS X, v10.8 (Mountain Lion). <a href="https://plus.google.com/104233578006014995011/posts/iz9mc6njHDK">I've already noted elsewhere</a> I hope Mountain Lion is a nod to a previous OS X release, Snow Leopard, in that much as the Leopard release introduced a host of new concepts that later got refined in Snow Leopard, Mountain Lion will see lots of optimization of the initial iOS-izing of OS X introduced in Lion.&nbsp;</div><div><br /></div><div>Regardless, Apple promised a late summer release, so WWDC will be where we learn that it's on track, will be out the door soon and look at the cool things it does.</div><div><br /></div><div><br /></div><div><strong>iOS Update</strong></div><div>Keeping to the developer conference theme and moving from one platform to the next we'll get <a href="http://www.appleinsider.com/articles/12/06/08/banner_confirms_ios_6_appearance_at_wwdc.html">our first public viewing of what Apple is cooking up for iOS 6</a>. Rumors have Facebook integration being added into the OS, similar to Apple's Twitter integration along with a move away from default apps using Google-based services such as Maps.</div><div><br /></div><div>I don't doubt Apple is working on supporting Facebook given it's&nbsp;hugely&nbsp;popular. However, I don't see them getting too wild with it. After all, the last thing <a href="http://www.cultofmac.com/171053/apple-in-a-relationship-with-facebook-its-complicated/">Apple wants to do is give Facebook the same kind of treatment it gave Google</a> only to see them turn around and release their own competitive mobile platform. Which of course is why Apple is rumored to be moving away from using Google's services in default apps.</div><div><br /></div><div>Here's a crazy and wild thought, instead of suggesting <a href="http://tech.fortune.cnn.com/2012/04/23/silly-rumor-of-the-day-apple-to-buy-twitter-for-10b/">Apple purchase Twitter</a>, I'm going to suggest Apple purchase Yahoo. Yeah sure, lots of Yahoo services suck and don't really meet Apple's high standards or business needs. But look at what you would get, a whole web and data-based services infrastructure and user base for ads, photo sharing, mapping and text/voice based searching. All things iOS users need or are dependent on. &nbsp;</div><div>&nbsp;</div><div>Speaking of voice-based search, when is a beta release of a new software service not a beta release? When you release it to over 4 million new users and run prime-time commercials featuring A-list celebrities. Yeah, I'm talking about Siri. I know some think Siri is over-promising and under-delivering. I suppose that's true to some extent. But it is only a "beta" release, <a href="http://www.quora.com/Siri-software/Why-is-Apple-calling-Siri-a-beta">whatever that means these days</a>.</div><div><br /></div><div>The real question is, what improvements will Apple in introducing? Is Siri limited to just the iPhone or will it be making a jump to the iPad in iOS 6? Personally, I think Siri makes sense as an iPhone only service. It not only helps differentiate the two, but also keeps Siri where it would be most helpful, in an "on the go" environment where one isn't necessarily fully engaged in the digital moment.</div><div><br /></div><div>But don't expect any new iOS hardware. The iOS preview will be setting the stage for new iOS devices in the fall.</div><div><br /></div><div><br /></div><div><strong>Not so Given</strong></div><div>Other hardware consolidation, but on the desktop? For a long time now, the trend in personal computing has been moving anyway from the desktop. Most people buy laptops these days (or much to Apple's preference, iPads and iPhones). So why does Apple need three distinct desktop models?</div><div><br /></div><div>If most consumers are purchasing laptops, why have an all-in-one desktop system such as the iMac? Yes, the all-in-one has defined the Mac since 1984. But history is one thing Apple tries hard to keep from blinding them to the changing marketplace (floppy and optical drives anyone)?</div><div><br /></div><div>Sure, some people need a machine for heavy-lifting, but Apple hasn't updated the desktop Pro line in 2 years.&nbsp;</div><div><br /></div><div>So which is it the Pro or the iMac as the odd man out?</div><div><br /></div><div>I personally think the iMac will fade away and, per the rumors,<a href="http://www.appleinsider.com/articles/12/06/07/new_mac_pros_rumored_with_8_core_xeon_e5_cpus_thunderbolt_usb_30.html"> the Pro will be getting a much needed update</a> after a hiatus to see if demand still existed for the device. If fact, Apple did the same thing recently with the Mac mini.</div><div><br /></div><div><br /></div><div><strong>Wait and See</strong></div><div>A proper Apple TV. Certainly Apple has been working on something. One only has to look in the Isaacson bio of Steve Jobs where in Jobs says of a TV device, "it will have the simplest user interface you could imagine. I finally cracked it."</div><div><br /></div><div>For me, the problem really isn't technology. The problem is the business. Who is going to partner with Apple on this? Comcast? <a href="http://www.splatf.com/2012/06/tv-industry-collapse/">They have too much to lose</a> from a service perspective, so why be forthcoming with their content (NBC/Universal)?</div><div><br /></div><div>In the past one could count on Disney partnering with Apple because Jobs was the largest single shareholder of Disney (thanks to Disney's purchase of Pixar). But now?</div><div><br /></div><div>So can Apple just bypass Comcast and the like? I don't know.</div><div><br /></div><div>One thing I will predict about an TV offering from Apple is if there is an announcement, it will be a preview of some future availability. Unlike their current devices where pre-announcing an update can hurt sales of existing models, Apple has very little to lose with a preview of new TV device, other than perhaps some small percentage of sales of the current "hobby" Apple TV. In fact, since Apple has no current TV model, pre-announcing actually gives them an advantage, it keeps the marketplace frozen as everyone waits to see the new product up close and in person.</div>]]>
        
    </content>
</entry>

<entry>
    <title>So weird, Connecting HavenCo and Red Hat</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2012/03/so-weird-connecting-havenco-and-red-hat.html" />
    <id>tag:pdw.weinstein.org,2012://2.253</id>

    <published>2012-04-01T03:30:28Z</published>
    <updated>2012-04-01T03:52:09Z</updated>

    <summary>It&apos;s a bit weird to be reading about Red Hat posting $1 billion in revenue in a year for the first time or this Ars article by James Grimmelmann about HavenCo since, to me personally that&apos;s part of my past....</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Information Technology" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Red Hat" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="c2net" label="C2Net" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="history" label="History" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opensource" label="Open Source" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="politics" label="Politics" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reaction" label="Reaction" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="redhat" label="Red Hat" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p class="p1">It's a bit weird to be reading about <a href="http://www.wired.com/wiredenterprise/2012/03/red-hat/">Red Hat posting $1 billion in revenue in a year</a> for the first time or <a href="http://arstechnica.com/tech-policy/news/2012/03/sealand-and-havenco.ars/1">this Ars article</a> by <a href="http://james.grimmelmann.net/">James Grimmelmann</a> about <a class="zem_slink rdfa" href="http://en.wikipedia.org/wiki/HavenCo" title="HavenCo" rel="ctag:means wikipedia" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/havenco" property="ctag:label">HavenCo</a> since, to me personally that's part of my past.
<br /><br />
See, as Grimmelmann notes, HavenCo's chairman of the board was <a class="zem_slink rdfa" href="http://en.wikipedia.org/wiki/Sameer_Parekh" title="Sameer Parekh" rel="ctag:means wikipedia" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/sameer_parekh" property="ctag:label">Sameer Parekh</a> whom I worked with/for at a different internet security company, <a href="http://en.wikipedia.org/wiki/C2Net">C2Net Software</a>. Almost everything Grimmelmann writes about I remember first-hand. I even remember reading the Wired articles he references (and how could I forget <a class="zem_slink rdfa" href="http://www.nealstephenson.com/" title="Neal Stephenson" rel="ctag:means homepage" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/neal_stephenson" property="ctag:label">Neil Stephenson</a>'s <a href="http://www.amazon.com/gp/product/B004R96U4A/ref=as_li_ss_tl?ie=UTF8&amp;tag=weinsteinorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B004R96U4A">Cryptonomicon</a>, it's still one of my favorite novels).
<br /><br />
Around the same time, <a class="zem_slink rdfa" href="http://en.wikipedia.org/wiki/Steven_Levy" title="Steven Levy" rel="ctag:means wikipedia" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/steven_levy" property="ctag:label">Steven Levy</a> wrote the non-fiction book <a href="http://www.amazon.com/gp/product/0140244328/ref=as_li_ss_tl?ie=UTF8&amp;tag=weinsteinorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0140244328">Crypto</a>, which tells part of the history of securing communications and modern computing networks; from <a class="zem_slink rdfa" href="http://en.wikipedia.org/wiki/Whitfield_Diffie" title="Whitfield Diffie" rel="ctag:means wikipedia" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/whitfield_diffie" property="ctag:label">Whitfield Diffie</a> and the initial concerns of privacy to Netscape and the creation of SSL.
<br /><br />
Alas, Levy's book is already 10 years old. While it covers the basis for the cryptography that powers today's Internet, it doesn't necessarily tell the whole story. Parts of the story that are missing, such as the short comings of SSL and its open standard successor, <a class="zem_slink rdfa" href="http://en.wikipedia.org/wiki/Transport_Layer_Security" title="Transport Layer Security" rel="ctag:means wikipedia" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/transport_layer_security" property="ctag:label">TLS</a>, the adoption of "virtual private networks", that allow the use of primarily public networks, such as the Internet, to connect remote points&nbsp;securely, as if part of a central private network or that much of today's emails remain in "<a href="http://en.wikipedia.org/wiki/Plaintext">plaintext</a>", despite the availability of encryption methods such as <a href="http://en.wikipedia.org/wiki/Pgp">PGP</a>, is missing.
<br /><br />
Most of what happens on today's Internet every moment, took root around the same time of Levy's work, 1999-2001, when I was right there working for C2Net with its own vision on how to secure everyday communications on the "<a class="zem_slink rdfa" href="http://en.wikipedia.org/wiki/Information_superhighway" title="Information superhighway" rel="ctag:means wikipedia" target="_blank" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/information_superhighway" property="ctag:label">Information Superhighway</a>".
<br /><br />
And what happened to C2Net? Well it was sold, to......Red Hat of which I become an employee of (and then ex-employee of).
<br /><br />
So yeah, I have this odd, I remember that (HavenCo) and oh, good for them (Red Hat). Then I think wow, I wasn't just a part of the some pioneering companies "back in the day", but also witnessed some completely cutting edge stuff that's only now being understood by the world at large.
<br /><br />
So weird.</p>

<div class="zemanta-pixie" style="margin-top:10px;height:15px"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=e264b70b-1d25-4291-b826-455581a3f0d2" style="border:none;float:right" /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Chicago Open Data at Work</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2012/01/chicago-open-data-at-work.html" />
    <id>tag:pdw.weinstein.org,2012://2.252</id>

    <published>2012-01-23T14:59:26Z</published>
    <updated>2012-01-23T03:15:06Z</updated>

    <summary>A few years ago Blagica Bottigliero started the website Gals&apos; Guide as an online forum for young women moving out on their own an into the &quot;big city&quot;. Recently, I&apos;ve been working with her on taking the site to the...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="development" label="Development" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opendata" label="Open Data" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="services" label="Services" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="socialweb" label="Social Web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p>A few years ago <a href="http://www.blagica.com/">Blagica Bottigliero</a> started the website <a href="http://www.galsguide.com/">Gals' Guide</a>
as an online forum for young women moving out on their own an into the
"big city". Recently, I've been working with her on taking the site
to the next step; building a web application utilizing the growing sets of data
about life in Chicago.<a style="" href="#_ftn1" name="_ftnref1" title=""><span class="MsoFootnoteReference"><span style=""><span class="MsoFootnoteReference"><span style="font-size: 11pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">[1]</span></span></span></span></a>
<br /><br />
<a href="http://map.galsguide.com/">The Gals' Guide Map App</a> is
designed to combine different datasets about the city's various neighborhoods
into one, assisting one in finding right place to live.
<br /><br />
The web app is, somewhere between alpha and beta stages, not
ready for general use or even rigorously browser tested, but ready for
feedback. To that end, we've started showing the app to our various networks to
gather feedback as it moves towards a general, full public release.</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="galsguide.png" src="http://pdw.weinstein.org/files/galsguide.png" class="mt-image-center" style="text-align: center; display: block; margin: 0pt auto 20px;" width="500" height="300" /></span>

<p>The map and features therein have been influenced by other map
mashups out there, such as the recent work done by the Chicago Tribune's News Applications
team.<a style="" href="#_ftn2" name="_ftnref2" title=""><span class="MsoFootnoteReference"><span style=""><span class="MsoFootnoteReference"><span style="font-size: 11pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">[2]</span></span></span></span></a>
<br /><br />
Currently it incorporates data from the U.S. Census, the
City of Chicago and Groupon. But, that's just the tip of the iceberg. There are
plenty of other datasets about the city from sources such as county and state, Everyblock, Yelp, Grubhub and others.
<br /><br />
Go, check it out and leave some feedback.</p>
<br />
<hr size="1" width="33%" align="left">



<div style="" id="ftn1">

<p class="MsoFootnoteText"><a style="" href="#_ftnref1" name="_ftn1" title=""><span class="MsoFootnoteReference"><span style=""><span class="MsoFootnoteReference"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">[1]</span></span></span></span></a>
This is also the next logical step for me from coding up PHP classes for the
CTA's API and the City of Chicago's open data portal I started working on back
in July.</p>

</div>

<div style="" id="ftn2">

<p class="MsoFootnoteText"><a style="" href="#_ftnref2" name="_ftn2" title=""><span class="MsoFootnoteReference"><span style=""><span class="MsoFootnoteReference"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">[2]</span></span></span></span></a>
The team has a <a href="http://blog.apps.chicagotribune.com/">blog</a> which includes a nice series of post on their work, I
recommend taking a look.</p>

</div>



 ]]>
        
    </content>
</entry>

<entry>
    <title>The Power of mod_proxy</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/11/the-power-of-mod-proxy.html" />
    <id>tag:pdw.weinstein.org,2011://2.251</id>

    <published>2011-11-28T16:39:53Z</published>
    <updated>2011-11-27T16:18:38Z</updated>

    <summary>An Introduction to Proxy Servers and Load Balancers with Apache HTTP Server</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Apache" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="apache" label="Apache" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="apachecon" label="ApacheCon" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mod_proxy" label="mod_proxy" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opensource" label="Open Source" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="servers" label="servers" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p>
<b>The Power of mod_proxy: An Introduction to Proxy Servers and Load Balancers with Apache HTTP Server</b>
<br />
Presentations slides from my mod_proxy presentation at ApacheCon NA 2011 earlier this month. In addition to this slideshow, the presentation can be downloaded in <a href="http://archive.apachecon.com/na2011/presentations/10-Thursday/E-Servers-HTTPD/E_1430_Weinstein_mod_proxy.ppt">PPT</a> and <a href="http://www.feathercast.org/podcasts/ApacheConNA2011/Thursday/E_03_weinstein_mod_proxy.mp3"> MP3</a>



</p>
<br />
<div style="width: 575px; margin-left: 50px;">
<iframe frameborder="0" src="http://public.iwork.com/embed/?d=The_Power_of_mod_proxy.key&amp;a=p574108&amp;h=768&amp;w=1024&amp;sw=458" style="width: 460px; height: 375px; "></iframe><br />
<audio src="http://www.feathercast.org/podcasts/ApacheConNA2011/Thursday/E_03_weinstein_mod_proxy.mp3" controls="" preload=""> </audio></div>]]>
        
    </content>
</entry>

<entry>
    <title>Adding SQL Server Support in PHP on Linux</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/10/adding-sql-server-support-in-php-on-linux.html" />
    <id>tag:pdw.weinstein.org,2011://2.250</id>

    <published>2011-10-31T23:00:36Z</published>
    <updated>2011-10-31T23:19:41Z</updated>

    <summary>Back in July I outlined a method for establishing a SSH tunnel between Linux and Windows machines. The goal of the connection was to enable a PHP script on a front-end Linux web server access to information stored on the...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Apache" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Development" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="apache" label="Apache" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="development" label="Development" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="microsoft" label="Microsoft" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opensource" label="Open Source" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="servers" label="servers" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p>Back in July I outlined a method for <a href="http://pdw.weinstein.org/2011/07/establish-and-maintain-an-ssh-tunnel-between-linux-and-windows.html">establishing a SSH tunnel between Linux and Windows</a> machines.  The goal of the connection was to enable a PHP script on a front-end Linux web server access to information stored on the back-end private Windows server running SQL Server.
<br><br>
What I didn't mention at the time was how I enabled PHP support for Microsoft's SQL Server. 
<br><br>
The most common deployments of PHP on Linux include support for MySQL or Postgres, depending largely on other factors such has the organization's preference, experience and
requirements. Since PHP can be deployed on Windows, there is support for Microsoft's SQL Server. Such support is nontrivial to enable in PHP on Linux.&nbsp;It is however possible:
<br><br>
To enabled SQL Server support in PHP on Linux, the PHP extension that provides said support requires the <a href="http://www.freetds.org/"> FreeTDS </a> library to build against. FreeTDS is an open source
implementation of C libraries originally marketed by Sybase and Microsoft to enable access to their database servers.
<br><br>
Downloading the source code, building and installing FreeTDS is straightforward:</p>
<br>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre>$ wget \
ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
$ gunzip freetds-stable.tgz
$ tar xf freetds-stable
$ cd freetds
$ ./configure
$ make
$ make install
</pre>
</div>
<br>
<p>The next step is to build the PHP source code against the FreeTDS libraries to include SQL Server support. This can be done one of two ways; build PHP from scratch or build the specific PHP extension. Since I was working on a server with a preexisting install of PHP, I opted for door number two:
<br><br>
Locate or download the source code for the preexisting version of PHP. Next, copy the mssql extension source code from the PHP source code into a separate <i>php_mssql</i>
directory:</p>
<br>
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre>$ cp ext/mssql/config.m4 ~/src/php_mssql
$ cp ext/mssql/php_mssql.c ~/src/php_mssql
$ cp ext/mssql/php_mssql.h ~/src/php_mssql
</pre>

</div>
<br>
<p>Now build the source code, pointing it to where FreeTDS has been installed:</p>
<br>
<div style="padding:10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre>$ phpize
$ ./configure --with-mssql=/usr/local/freetds
$ make
</pre>
</div>
<br>
<p>There should now be a mssql.so file in <i>~/src/php_mssql/modules/</i> that can be copied into the existing PHP install. Once copied the last remaining steps are to enable the extension by modify the <i>php.ini</i> file and restarting the Apache HTTP Server. 
<br><br/>
Additional Information can be found here: <a href="http://www.robert-gonzalez.com/2008/03/31/connecting-php-on-linux-to-mssql-on-windows/">Connecting PHP on Linux to MSQL on Windows </a></p>]]>
        
    </content>
</entry>

<entry>
    <title>Accessing Chicago, Cook and Illinois Open Data via PHP</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/09/accessing-chicago-cook-and-illinois-open-data-via-php.html" />
    <id>tag:pdw.weinstein.org,2011://2.249</id>

    <published>2011-09-30T20:38:07Z</published>
    <updated>2012-01-23T03:14:26Z</updated>

    <summary>In Accessing the CTA&apos;s API with PHP I outlined a class file I created1 for querying the Chicago Transit Authority&apos;s three web-based application programming interfaces (APIs). However, that isn&apos;t the only open data development I&apos;ve been working on recently, I&apos;ve...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="development" label="Development" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opendata" label="Open Data" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="services" label="Services" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p><a href="http://pdw.weinstein.org/2011/08/accessing-the-ctas-api-with-php.html">In Accessing the CTA's API with PHP</a> I
outlined a class file I created<a class="sdfootnoteanc" name="sdfootnote1anc" href="#sdfootnote1sym"><sup>1</sup></a>
for querying the <a href="http://www.transitchicago.com/developers/default.aspx">Chicago Transit Authority's three web-based
application programming interfaces</a> (APIs). However, that isn't the
only open data development I've been working on recently, I've also
been working on a class file for accessing the City of Chicago's Open
Data Portal. 
<br /><br />
The <a href="http://data.cityofchicago.org/">City of Chicago's Open Data Portal</a> is driven by a web application developed
by <a href="http://www.socrata.com/">Socrata</a>. Socrata's platform provides a number of web-based API
methods for retrieving published datasets<a class="sdfootnoteanc" name="sdfootnote2anc" href="#sdfootnote2sym"><sup>2</sup></a>.
<a href="https://github.com/pdweinstein/PHP-Wrapper-for-Chicago-s-Data-Portal/blob/master/class.windy.php">class.windy.php</a> provides the definition for a PHP object that wraps
around Socrata's API providing PHP written apps access in turn to the city's open data.</p>
<br />
<p><b>Installation and Instantiation</b><br />
The first step is
to <a href="https://github.com/pdweinstein/PHP-Wrapper-for-Chicago-s-Data-Portal/tarball/master">download the class.windy.php</a> file from GitHub and save it in a
location that the PHP application can access. 
<br /><br />
The next step is
to include the file using the <i>include </i>function in the PHP
application itself:
<br />
</p><div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>	// Load our class file and create our object.
	include_once( 'class.windy.php' );
</pre>
</div>
<br />
Once the class file has been loaded, the next step is to instantiate the class: 
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>	// Create an object to get city data
	$chicago = new windy( 'city' );
</pre>
</div>
<br />
Note that
initialization of of the new object requires providing the keyword
'city'. Since the City of Chicago, Cook County and the State of
Illinois all currently use Socrata's platform for sharing government
data, class.windy.php supports accessing all three data portals -
more on accessing county and state data later. 
<br /><br />
Extra parameters
can be provided during the construction of the object for additional
customization. For example, by default, this class will request data
in JSON form. But, Socrata does support other data formats<a class="sdfootnoteanc" name="sdfootnote3anc" href="#sdfootnote3sym"><sup>3</sup></a>
so the PHP developer can have a bit of a choice as to how to handle
and process the raw data, if desired. 
<p>
<br />
</p><p><b>Chicago Data</b><br />
Let's say for
example that one is looking for information about Chicago's roughly
200 neighborhoods. More specificity information about the rough
boundaries around Chicago neighborhoods. Using the <i>getViews<a class="sdfootnoteanc" name="sdfootnote4anc" href="#sdfootnote4sym"><sup>4</sup></a></i>
method that class.windy.php provides, one can query for any dataset
where the description might include the keywords 'neighborhood
boundaries' and are tagged as <a class="zem_slink rdfa" href="http://en.wikipedia.org/wiki/Keyhole_Markup_Language" title="Keyhole Markup Language" rel="ctag:means wikipedia" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/keyhole_markup_language" property="ctag:label">KML</a>:
<br />
</p><div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>	// Let's find any views that describe themselves as about 
	// Chicago's neighborhood boundaries and are tagged with 
	// KML data
	$views = $chicago-&gt;getViews( 
		'', '', 
		'neighborhood boundaries', 'kml', 
		'', 'false', '', '' 
	);
	
	echo "Here are the views with a description including 
	     'neighborhood boundaries' and are tagged as KML:\n";
	foreach ( $views as $view ) {
	
		echo "View ID: ".$view-&gt;id. " is named " 
		     .$view-&gt;name. " and is described as a " 
		     .$view-&gt;description. "\n\n";
		
	}
</pre>
</div>
<br />
Depending on what
datasets are available the output of this query may include the follow result:
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
View ID: buma-fjbv is named Boundaries - Neighborhoods - KML and is described as a KML file of neighborhood boundaries in Chicago. To view or use these files, special GIS software, such as Google Earth, is required.
</div>
<br />
Perhaps, using
Google Maps, one wishes to create an interactive map of Chicago
neighborhoods? Or better yet a closer look at the boundaries of a
specific area in the city? Retrieval of the KML file can be done via
the <i>getFileByViewID</i> function:
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>		// With our foreknowledge of datasets the file with 
		// view id buma-fjbv looks interesting, let's get 
		// that file
		if ( $view-&gt;id == 'buma-fjbv' ) {
					
			$file = $chicago-&gt;getFileByViewID( 
				$view-&gt;blobId, $view-&gt;id 
			);

			// Since KML is an XML notation for 
			// expressing geographic annotation, 
			// let's use SimpleXML to parse this data
			// Note: SimpleXML requires the libxml 
			// PHP extension
			$xml = simplexml_load_string( $file );
</pre>
</div>
<br />
The above chunk of
code nested in the previous example code's <i>foreach</i> loop
compared the $view-&gt;id value of each dataset looking for a match
to the specific KML file of Chicago neighborhoods. Once found, the
<i>getFileByViewID</i> method, given the file id, found in
$view-&gt;blobID and the known view id sends a query for and
retrieval of the file from data portal. 
<br /><br />
Once the file has
been loaded, the KML file, a type of XML format, can be parsed using 
the <i>simplexml_load_string</i> function which returns a SimpleXML
object and can be traversed as needed:
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>			// Ok, now let's find out what the 
			// boundaries are for Albany Park
			foreach ( 
			     $xml-&gt;Document-&gt;Folder-&gt;Placemark 
				as $hood 
			) {
			
				if ( preg_match( 
					'/Albany Park/', 
					$hood-&gt;description 
				)) {
				
					echo "Here are 
						Albany Park's 
						boundaries: " 
						.$hood-&gt;
						MultiGeometry-&gt;
						Polygon-&gt;
						outerBoundaryIs-&gt;
						LinearRing-&gt;
						coordinates. "\n";
				
				}
			
			}
</pre>
</div>
<br />
Thus the output of
our search for the boundaries of Chicago's Albany Park neighborhood
results in the the following geographic data points:
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>Here are Albany Park's boundaries:  
-87.724211,41.975689,0.000000
-87.724081,41.975576,0.000000 -87.723951,41.975578,0.000000
-87.723773,41.975580,0.000000 -87.723544,41.975583,0.000000
-87.723355,41.975585,0.000000 -87.722786,41.975592,0.000000
-87.721267,41.975605,0.000000 -87.720888,41.975608,0.000000
-87.720859,41.974088,0.000000 -87.720825,41.974085,0.000000
-87.720636,41.974088,0.000000 -87.720561,41.974079,0.000000
-87.720501,41.974061,0.000000 -87.720370,41.974010,0.000000
-87.720264,41.973981,0.000000 -87.720135,41.973962,0.000000
-87.719949,41.973890,0.000000 -87.719723,41.973819,0.000000
-87.719616,41.973775,0.000000 -87.719252,41.973625,0.000000
-87.719147,41.973578,0.000000 -87.719074,41.973535,0.000000
-87.718948,41.973461,0.000000 -87.718826,41.973396,0.000000
-87.718714,41.973346,0.000000 -87.718388,41.973226,0.000000
-87.718366,41.973218,0.000000 -87.718291,41.973195,0.000000
-87.718069,41.973097,0.000000 -87.717935,41.973023,0.000000
-87.717737,41.972915,0.000000 -87.717479,41.972781,0.000000
-87.717195,41.972637,0.000000 -87.717132,41.972604,0.000000
-87.716961,41.972517,0.000000 -87.716548,41.972280,0.000000
-87.716203,41.972086,0.000000 -87.715963,41.971978,0.000000
-87.715918,41.971968,0.000000 -87.715808,41.971941,0.000000
-87.715666,41.971921,0.000000 -87.715501,41.971920,0.000000
-87.715076,41.971932,0.000000 -87.714697,41.971930,0.000000
-87.714681,41.971930,0.000000 -87.714619,41.971930,0.000000
-87.714614,41.971930,0.000000 -87.714547,41.971937,0.000000
-87.714479,41.971942,0.000000 -87.714435,41.971949,0.000000
-87.714385,41.971952,0.000000 -87.714305,41.971954,0.000000
-87.714227,41.971960,0.000000 -87.714178,41.971965,0.000000
-87.714026,41.971969,0.000000 -87.713652,41.972033,0.000000
-87.713466,41.972078,0.000000 -87.713254,41.972129,0.000000
-87.712834,41.972277,0.000000  ...
</pre>
</div>
<p></p>
<br />
<p><b>Cook and Illinois Data Portals</b><br />
</p><p>As previously
mentioned the Cook County and the State of Illinois  also currently
use Socrata's platform for sharing government data. For the moment
that makes supporting city, county and state open data with one class
file a trivial manner:
<br />
</p><div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>// Create an object to get county data
$cook = new windy( 'county' );

// Let's find any views that describe the boundaries of the 
// county forest preserves
$views = $cook-&gt;getViews( 
	'', '', '', 'county park boundaries', '', 'false', '', '' 
);
	
echo "Here are the views with a description including 
	'county park boundaries':\n";
foreach ( $views as $view ) {
	
	echo "View ID: ".$view-&gt;id. " is named " 
		.$view-&gt;name. " and is described as a " 
		.$view-&gt;description. "\n\n";
	
}
</pre>
</div>
<p></p>
<br />
<p><b>In Review </b><br />
class.widy.php is
a single PHP class file that primarily provides access to City of
Chicago's data portal. The class implements functions for accessing
all API methods and by default returns an object that a PHP
developer can use to incorporate information about the City of
Chicago into their PHP based application. 
<br /><br />Since Cook County
and the State of Illinois have also adopted Socrata's data platform,
support for these additional data portals using Socrata's Open Data
Platform has been included as a secondary feature of the class file.</p>
<br />
<hr>
<br />
<div id="sdfootnote1">
	<p class="sdfootnote" style="margin-left: 0in; text-indent: 0in;"><a class="sdfootnotesym" name="sdfootnote1sym" href="#sdfootnote1anc">1</a> And which can be found on GtHub</p>
</div>
<div id="sdfootnote2">
	<p class="sdfootnote" style="margin-left: 0in; text-indent: 0in;"><a class="sdfootnotesym" name="sdfootnote2sym" href="#sdfootnote2anc">2</a> Known as SODA, a standards-based, RESTful application programming interface.</p>
</div>
<div id="sdfootnote3">
	<p class="sdfootnote" style="margin-left: 0in; text-indent: 0in;"><a class="sdfootnotesym" name="sdfootnote3sym" href="#sdfootnote3anc">3</a> Such as XML, RDF, XLS and XLSX (Execl), CSV, TXT and PDF. 
	</p>
</div>
<div id="sdfootnote4">
	<p class="sdfootnote"><a class="sdfootnotesym" name="sdfootnote4sym" href="#sdfootnote4anc">4</a> <i>getViews</i>
	is one of a collection of methods Socrata refers to as ViewsService.
	This collection  of API calls provide for the retrieval and
	manipulation of datasets and metadata about datasets. &nbsp;&nbsp;</p>
</div>

<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=bfe1364a-0461-4b7a-9486-6368ebf563c5" style="border: medium none; float: right;" /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Accessing the CTA&apos;s API with PHP</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/08/accessing-the-ctas-api-with-php.html" />
    <id>tag:pdw.weinstein.org,2011://2.248</id>

    <published>2011-08-22T14:00:34Z</published>
    <updated>2012-01-23T03:13:27Z</updated>

    <summary>Overview Last month the City of Chicago arranged for a Open Data Hackaton in which a collection of programmers gathered together to develop and write programs that utilize a new resource, open access to city information. For my part, I...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Development" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Services" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="development" label="Development" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="informationtechnology" label="Information Technology" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opendata" label="Open Data" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p><b>Overview</b>
<br />Last month the City of Chicago arranged for a <a href="http://pdw.weinstein.org/2011/08/chicagos-technology-scene-circa-2011.html">Open Data Hackaton</a> in which a collection of programmers gathered together to develop and write programs that utilize a new resource, open access to city information. 
<br /><br />
For my part, I spent the data writing a PHP class file that wraps around the <a href="http://www.transitchicago.com/">Chicago Transit Authority</a>'s web-based application programming interface, enabling access to CTA bus, rail and service information for PHP driven applications. As I've noted in the <a href="https://github.com/pdweinstein/PHP-Wrapper-for-CTA-APIs/blob/master/README">README</a> file, "this class brings all three APIs together into one object with related methods." 
<br /><br />
The following in a quick rundown of how to incorporate this new class file into a working PHP application.</p>
<br />
<p><b>Installation</b>
<br />The first step is to <a href="https://github.com/pdweinstein/PHP-Wrapper-for-CTA-APIs/tarball/master">download</a> the <a href="https://github.com/pdweinstein/PHP-Wrapper-for-CTA-APIs/blob/master/class.cta.php">class.cta.php</a> file from <a href="http://github.com/">GitHub</a> and save it in a location that the PHP application has read access. 
<br /><br />
The next step is to include the file using the <i><a href="http://us3.php.net/manual/en/function.include.php">include</a></i> (or similar <i><a href="http://us3.php.net/manual/en/function.require.php">require</a></i>) function in the PHP application itself:
<br />
</p><div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>// Load the class file in our current directory
include_once( 'class.cta.php' );
</pre>
</div>
<br />
Once the class file has been loaded, the next step is to instantiate the class:
<br />
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>$transit = new CTA ( 
	'YOUR-TRAIN-API_KEY_HERE', 
	'YOUR-BUS-API-KEY-HERE', false 
);
</pre>
</div>
<br />
Notice that initialization of <i>transit</i> includes providing two API keys. API Keys can be requested from the CTA. For an API Key for Train Tracker, use the <a href="http://www.transitchicago.com/developers/traintrackerapply.aspx">Train Tracker API
Application form</a>. For Bus Tracker, first sign into <a href="http://www.ctabustracker.com/bustime/login.jsp">Bus Tracker</a>, then
request an Developer Key under "My Account".<a class="sdfootnoteanc" name="sdfootnote1anc" href="#sdfootnote1sym"><sup>1</sup></a>
<br /><br />
If no valid API keys are provided the only methods that will return valid information are the Customer Alert functions for system status information. Specificity the two functions <i>statusRoutes</i> and <i>statusAlerts</i>. This is because the Customer Alert API does not require an API key for access. 
<p></p>
<br />
<p><b>Execution</b>
<br />
To invoke a method simply use the object and related function, providing any additional information as parameters, if required. For example, to get information about all of the bus stops the east-bound route 81 bus makes:
<br />
<br />
</p><div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>// Get an array result of all stops for an east-bound 81 bus.
$EastBoundStops = $transit-&gt;busGetStops( '81', 'East Bound' ));
</pre>
</div>
<br />
All methods return an array which can be accessed to retrieve desired information. PHP's <i>print_r</i> or <i>var_dump</i> functions provide insight into all information returned by a specific function:
<br /><br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>echo '&lt;pre&gt;';
print_r( $transit-&gt;busGetStops( '81', 'East Bound' ));
echo '&lt;/pre&gt;';
</pre>
</div>
<br />
The output will look something akin to this:
<br />
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>SimpleXMLElement Object
	(
	    [stop] =&gt; Array
	        (
	            [0] =&gt; SimpleXMLElement Object
	                (
	                    [stpid] =&gt; 3751
	                    [stpnm] =&gt; 2900 W Lawrence
	                    [lat] =&gt; 41.968500785328
	                    [lon] =&gt; -87.701137661934
	                )
...
	            [49] =&gt; SimpleXMLElement Object
	                (
 	                   [stpid] =&gt; 3725
	                    [stpnm] =&gt; Milwaukee &amp; Higgins
	                    [lat] =&gt; 41.969027266773
	                    [lon] =&gt; -87.761798501015
	                )

 	       )

	)
</pre>
</div>
<br />
In order to generate the following output listing the location of the Lawrence &amp; Kimball stop:
<br />
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>Lawrence &amp; Kimball (Brown Line)
At 41.968405060961 North and -87.713229060173 West
</pre>
</div>
<br />
The following PHP code will provide the latitude and longitude of the Kimball stop, which is also a transfer point to the El's Brown Line:
<br />
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>$EastBoundStops = $transit-&gt;busGetStops( '81', 'East Bound' );
foreach( $EastBoundStops as $stop ) {

     if ( preg_match( '/kimball/i', $stop-&gt;stpnm )) {
		
          echo $stop-&gt;stpnm;
          echo 'At ' .$stop-&gt;lat. 'North and ' .$stop-&gt;lon. ' West';
		
     }
	
}
</pre>
</div>
<br />
Notice that while the list of stops is provided in an array, each element in the array is a SimpleXMLElement object, thus the use of the object syntax for accessing each element.
<br />
<br />
The <i>train</i> function will allow for the determination of rail information, for example when the next Brown line train will be leaving the Kimball stop. However, while the previous example included a stop id for the route 81 bus at Kimball, the stop id is unique to the route 81 bus and does not translate to the stop id of the Brown line El at Kimball. Therefore, the first step is to locate the relevant GTFS<a class="sdfootnoteanc" name="sdfootnote2anc" href="#sdfootnote2sym"><sup>2</sup></a> data for the Kimball station:
<br />
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>/*	Per the CTA's website, El routes are identified as follows:

	Red = Red Line
	Blue = Blue Line
	Brn = Brown Line
	G = Green Line
	Org = Orange Line
	P = Purple Line
	Pink = Pink Line
	Y = Yellow Line
		
	Which means our Brown line is 'brn' 
*/
$brownStops = $transit-&gt;train( '', '', '', 'brn' );
foreach( $brownStops as $stop ) {

	if ( preg_match( '/kimball/i', $stop-&gt;staNm )) {
		
		echo "$stop-&gt;staNm train is destined for $stop-&gt;stpDe ";
		echo "Scheduled to arrive/depart at $stop-&gt;arrT";
		
	}
	
}
</pre>
</div>
<br />
Which provides output similar to the following:
<br />
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>Kimball train is destined for Service toward Loop</pre><pre>Scheduled to arrive/depart at 20110821 17:17:01
</pre>
</div>
<br />
One should note that the Brown line stop at Kimball is the northern end point for the Brown line, which means any trains leaving the station will only be bound in one direction, south, toward the Loop. If the string comparison is changed to 'irving' for the Irving Park station, the output changes to something similar, with trains running in both directions:
<br />
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);"> 
<pre>Irving Park train is destined for Service toward Kimball</pre><pre>Scheduled to arrive/depart at 20110821 17:19:34
<br /></pre><pre>Irving Park train is destined for Service toward Kimball</pre><pre>Scheduled to arrive/depart at 20110821 17:23:13</pre><pre><br /></pre><pre>Irving Park train is destined for Service toward Loop&nbsp;</pre><pre>Scheduled to arrive/depart at 20110821 17:19:44</pre><pre><br /></pre><pre>Irving Park train is destined for Service toward Kimball&nbsp;</pre><pre>Scheduled to arrive/depart at 20110821 17:32:19 </pre>
</div>
<br />
<p></p>
<p><b>In Review</b>
<br />
<i>class.cta.php</i> is a single PHP class file that provides access to all three CTA APIs for Bus, Train and Service information. The class implement functions for access to all API methods and returns an array of SimpleXMLElement objects that a PHP developer can use to incorporate real-time information about Chicago's public transit system.
<br /><br />
Additional information about the CTA's APIs, including terms of use and how to request API Keys, can be found on the <a href="http://www.transitchicago.com/developers/default.aspx">CTA's Developer page</a>.</p>
<br />
<hr>
<br />
<div id="sdfootnote1">
	<p class="sdfootnote"><a class="sdfootnotesym" name="sdfootnote1sym" href="#sdfootnote1anc">1</a> Why
	two different API Keys, one for train and one for bus information?
	Due to the evolution of the CTA's API interfaces, there are three
	distinct APIs, one for Bus, Train and Customer Alerts information.
	As a result there are three distinct URI endpoints and two distinct
	API keys. 
	</p>
</div>
<div id="sdfootnote2">
	<p class="sdfootnote"><a class="sdfootnotesym" name="sdfootnote2sym" href="#sdfootnote2anc">2</a> The
	CTA provides its data based on the <a href="http://code.google.com/transit/spec/transit_feed_specification.html">Google Transit Feed Specification</a>
	(GTFS) which is becoming a common format for public transportation
	agencies to publishing schedules and associated geographic
	information. The <a href="http://www.transitchicago.com/developers/gtfs.aspx">CTA generates and distributes</a>, about once a week,
	an up-to-date zip compressed collection of files that includes basic
	agency information, route, transfer and stop locations, and other
	related service information. Note that ids 0-29999 are bus stops,
	ids 30000-39999 are train stops and 40000-49999 train stations
	(parent stops).</p>
</div> ]]>
        
    </content>
</entry>

<entry>
    <title>Chicago&apos;s Technology Scene, circa 2011</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/08/chicagos-technology-scene-circa-2011.html" />
    <id>tag:pdw.weinstein.org,2011://2.247</id>

    <published>2011-08-02T18:00:00Z</published>
    <updated>2011-08-02T17:31:17Z</updated>

    <summary>Roughly this time two years ago, I attended an entrepreneur and startup event in D.C. called Social Matchbox which I noted in a subsequent blog post of the same name. While I know organizations and companies like those exists in...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Development" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Information Technology" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Politics" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="politics" label="Politics" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reaction" label="Reaction" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="technology" label="Technology" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p style="margin-bottom: 0in;">Roughly this time two years ago, I
attended an entrepreneur and startup event in D.C.  called <a href="http://socialmatchbox.com/">Social
Matchbox</a> which I noted in a subsequent <a href="http://pdw.weinstein.org/2009/08/social-matchbox.html">blog post of the same name</a>.</p>
<br />
<p style="margin: 0in 0.5in;">
While I know organizations and
companies like those exists in many places I have yet to find a loose
confederation of those individuals, organizations and companies
similar to what I experienced in the Bay Area here in Chicago where I
currently reside. I have however found such a network in Washington,
DC and it is known as Social Matchbox. 
</p>
<br />
<p style="margin-bottom: 0in;"><a href="http://pdw.weinstein.org/2010/09/the-chicago-tech-scene-a-study-in-contradiction.html">Last year, I asked</a> with all the things
going for Chicago, high profile tech companies, top tier universities
and a diverse population, "why don't tech people think of Chicago
along the lines of a San Francisco, Seattle, New York, Boston or
Austin?" Perhaps, I surmised, it was simply "that Midwestern work
ethic, if we just work hard; the rewards and recognition will come on
their own."
<br /><br />
This year, I watched as the Chicago
tech community rallied around <a href="http://techweek.com/">TechWeek</a>, a "celebration of a new
technology epicenter unique among major world cities." 
<br /><br />
It's a start.
<br /><br />
Alas, while I didn't get to attend any
TechWeek specific events, someone has to keep an eye on the servers
and write code for all these newfangled ideas, I did get a chance to
meet up with a few other developers at the Chicago Open Data
Hackathon. As <a href="http://blogs.wttw.com/moreonthestory/2011/07/22/first-ever-chicago-techweek-begins/">a WTTW article wrote:</a></p>
<br />
<p style="margin: 0in 0.5in;">
Chicago's city government
has worked on developing its high-tech cred by initiatives such as
publishing new city data sets online weekly and refreshing those sets
nightly in order to increase the city's transparency ... On July
16, Google Chicago hosted a Chicago Open Data Hack Day. The event
gathered 60 engineers, designers, and entrepreneurs to share ideas
about using the City's open data to create new products and
services."<a class="sdfootnoteanc" name="sdfootnote1anc" href="#sdfootnote1sym"><sup>1</sup></a></p>
<br />
<p style="margin-bottom: 0in;">
In my own participation of the
hackathon, I did get a chance to create, what I hope will be, <a href="https://github.com/pdweinstein/PHP-Wrapper-for-CTA-APIs">a
useful PHP library</a> (more on that later).
<br /><br />
It's good to see Chicago get a little
more boisterous about its tech creds. But it is also good to see
Chicago go about about business as most Chicagoans do, as I did last
week. As Orbit's Andy Crestodina <a href="http://www.chicagolandchamber.org/wdk_cc/innovation_and_knowledge_/2011_news/i_went_to_techweek.jsp">notes</a> "in a refreshing way,
TechWeek was nothing new. Chicago has been doing this a long time and
the tech community is an experienced crowd, many of whom have seen
the boom and bust (and more booms and more busts) and lived to tell
about it." 
<br /><br />
There is an end in all this technology
means. We build apps to communicate. We open data to map
relationships and piece out new meaning. The technology isn't an end
unto itself. We work in technology to get something done. <br /><br />And that's the innovation Chicago can bring to the table, even if it mostly goes unheralded.</p>

<br /><hr><br />

<div id="sdfootnote1">
	<p class="sdfootnote"><a class="sdfootnotesym" name="sdfootnote1sym" href="#sdfootnote1anc">1</a> I
	don't recall 60 people offhand, I probably would have put the count
	at around 30-40. But the hackathon was an all-day event and I know
	some people came and left, so, 60 total for the whole maybe true.</p>
</div>]]>
        
    </content>
</entry>

<entry>
    <title>Establish and Maintain an SSH Tunnel between Linux and Windows</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/07/establish-and-maintain-an-ssh-tunnel-between-linux-and-windows.html" />
    <id>tag:pdw.weinstein.org,2011://2.246</id>

    <published>2011-07-06T14:00:16Z</published>
    <updated>2011-07-21T17:11:35Z</updated>

    <summary>The Situation Over the years, I&apos;ve worked in numerous computing environments and have come to appreciate heterogeneous systems. In my mind, all system administrators should experience how different platforms solve similar problems, just as all programmers should be exposed to...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Apache" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Development" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="apache" label="Apache" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="microsoft" label="Microsoft" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="windows" label="Windows" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p><strong>The Situation</strong>
<br />Over the years, I've worked in numerous computing
environments and have come to appreciate heterogeneous systems. In my mind, all
system administrators should experience how different platforms solve similar
problems, just as all programmers should be exposed to different programming
languages.
<br /><br />
Of course this means being able to play well with others. Sometimes, that's easier said than done.
<br /><br />
A recent project requirement stipulated being able to
connect a public web server with a private database system. Not an uncommon
requirement, but it did place a hurdle immediately in the way. The web
application, developed with the Linux, Apache, MySQL and PHP (LAMP) stack, needed
a method to connect to the private database system securely, which, for fun was
not MySQL but instead Microsoft's SQL Server. </p>

<p><strong>The Problem</strong>
<br />The initial requirement called on connecting to the SQL
Server using Microsoft's virtual private network (VPN) solution, <a href="http://en.wikipedia.org/wiki/MPPE">Microsoft
Point-to-Point Encryption</a> (MPPE). Not impossible, since support for MPPE on any
Linux distribution simply requires modifying the Linux kernel and recompiling
the kernel in Linux is usually a non-issue.
<br /><br />
However, in this case the web application would be running
on a basic <a href="http://en.wikipedia.org/wiki/Virtual_private_server">virtual private server</a> (VPS) and a Linux VPS doesn't run its own
kernel. Instead Linux VPSes run on a shared kernel used by all the different
virtualized servers running on the same hardware.
<br /><br />
Net result, no modification of the Linux kernel would be possible on the VPS.
<br /><br />
One alternative to this hurdle would have been to switch
from a Linux VPS to a Windows VPS. This would have been technically possible
since Apache, MySQL and PHP have viable Windows ports. Alas, the hosting
provider in question didn't yet offer Windows VPSes. They would shortly, but
couldn't guarantee that their Windows VPS solution would be available in time
for this particular project's deadline.
<br /><br />
A second alternative could have been to upgrade from a
virtualized server to a dedicated server. But that would have added more computing resources than what was required. From a business perspective, the added monthly cost wasn't justifiable. Not when a third alternative existed. </p>

<p><strong>A Workable Solution</strong>
<br />
VPN is one of those terms that can refer to something
generic as well as something very specific<sup><a style="" href="#_ftn1" name="_ftnref1" title="">1</a></sup>.
This distinction setups up alternative number three. The secure network
connection requirement would remain, the implementation could simply change<sup><a style="" href="#_ftn2" name="_ftnref2" title="">2</a></sup>.
<br /><br />
Specifically the secure connection would be implemented via SSH instead of via MPPE.
<br /><br />
With SSH an encrypted tunnel through an open port in the
private network's firewall can be established. This tunnel forwards network
traffic from a specified local port to a port on the remote machine, securely. 
<br /><br />
Most Linux distributions these days install <a href="http://openssh.org/">OpenSSH</a> as part
of their base system install. OpenSSH is a free and open version of the SSH
protocol and includes client and server software. For those distributions that
don't install it by default installing OpenSSH is usually a trivial matter via
the distribution's package manager.
<br /><br />
Windows, on the other-hand, has no such base installation of
an SSH implementation. There are a number of free software versions for
Windows. For the case at hand, <a href="http://www.freesshd.com/">freeSSHD</a> was selected to provide a free, open
source version of the SSH server software.
<br /><br />
Configuring <i>freeSSHD</i> to enable tunneling requires the
following steps:</p>

<ol>
<li>Click on the "Tunneling" tab</li>
<li>Check to enable port forwarding and apply the
change</li>
<li>Click on the "Users" tab</li>
<li>Create or edit a user and enable tunnel access</li>
</ol>

<p>Once the firewall has been configured to allow SSH traffic
on port 22, establishing the tunnel from the Linux client to the Windows server
is as simple as typing the following at the Linux command-line:</p>
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre>ssh -f -N -L 127.0.0.1:1433:192.168.1.2:1433 username@example.org
</pre>
</div>
<br />
<p>In which <i>ssh </i>will create and send to the background a ssh
tunnel (-f option) without executing any remote commands (-N option) that
begins at the localhost port 1433 (127.0.0.1:1433) terminates at the remote
address and port (192.168.1.2:1433) and authenticates using the remote username
at the remote location (the public IP address or domain name for the private
network).</p>

<p><strong>But Wait There's More</strong>
<br />
There is however a minor problem with this SSH tunnel. As
described, the establishment of the SSH tunnel is an interactive process. The
command needs to be executed and the password for the user provided for
authentication. In most cases a simple shell script, executed by cron would solve
this minor issue. However, for the sake of security OpenSSH doesn't provide a
command-line option for providing passwords.
<br /><br />
This authentication step can be managed in one of two ways.
One is the use of a key management program such as <a href="http://en.wikipedia.org/wiki/Ssh-agent">ssh-agent</a>. The second, more
common option is to create a passphrase-less key.
<br /><br />
The first step in creating a passphrase-less key is to first
generate a private/public key pair&gt;sup&gt;<a style="" href="#_ftn3" name="_ftnref3" title="">3</a>.
In Linux this is done by issuing the command:</p>
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre>ssh-keygen -t rsa
</pre>
</div>
<br />

<p>Which generates a private/public key pair based on either
the <a href="http://en.wikipedia.org/wiki/RSA">RSA</a> or <a href="http://en.wikipedia.org/wiki/Digital_Signature_Algorithm">DSA</a> encryption algorithm, depending on what is provided in the
command-line option.
<br /><br />
When prompted to enter a passphrase for the securing of the
private key simply press enter. To confirm the empty passphrase simply press
enter again.
<br /><br />
The next step, after copying the public key onto the Windows
server, is to enable the use of the public key for authentication. In <i>freeSSHD
</i>the steps are:</p>

<ol>
<li>Click on the "Users" tab</li>
<li>Select a user and click on "Change"</li>
<li>Select "Public Key" from the "Authorization" drop-down</li>
<li>Click on "OK" to save changes to users</li>
<li>Next click on the "Authentication" tab</li>
<li>Using the browse button, select the directory with the users public key are kept</li>
<li>Enable public-key authentication by choosing the "Allowed" button under "Public-Key Authentication"</li>
<li>Click on "OK" to save the changes to authentication</li>
</ol>

<p>With the passphrase-less keys in place, the last step is to
automate the tunnel itself. In this case, instead of a shell script, I opted to
use program called <a href="http://www.harding.motd.ca/autossh/">autossh</a>.
<br /><br />
<i>autossh </i>is a program that can start a copy of ssh and
monitor the connection, restarting it when necessary. All <i>autossh </i>needs to know
is what local port to monitor, so our one-time initial startup of ssh tunnel
looks similar to the previous example, but with autossh and the addition of the
-M option</p>
<br />
<div style="padding: 10px; background-color: rgb(0, 0, 0); color: rgb(23, 240, 23);">
<pre>autossh -M 1433 -f -N -L 127.0.0.1:1433:192.168.1.2:1433 
username@example.org</pre><meta charset="utf-8">
</div>
<br />

<div><br />

<hr align="left" size="1" width="33%">

<br />

<div style="" id="ftn1">

<p class="MsoFootnoteText"><a style="" href="#_ftnref1" name="_ftn1" title=""><span class="MsoFootnoteReference"><span style=""><!--[if !supportFootnotes]--><span class="MsoFootnoteReference"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">[1]</span></span><!--[endif]--></span></span></a>
This means alas, it is also one of those terms that can cause confusion,
especially between technical and non-technical people, if not defined at the
outset.</p>

</div>

<div style="" id="ftn2">

<p class="MsoFootnoteText"><a style="" href="#_ftnref2" name="_ftn2" title=""><span class="MsoFootnoteReference"><span style=""><!--[if !supportFootnotes]--><span class="MsoFootnoteReference"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">[2]</span></span><!--[endif]--></span></span></a> This
is one of those places where knowledge of different solutions solving a similar
problem becomes handy.</p>

</div>

<div style="" id="ftn3">

<p class="MsoFootnoteText"><a style="" href="#_ftnref3" name="_ftn3" title=""><span class="MsoFootnoteReference"><span style=""><!--[if !supportFootnotes]--><span class="MsoFootnoteReference"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">[3]</span></span><!--[endif]--></span></span></a>
For user authentication SSH can either be password-based or key-based. In
key-based authentication, SSH uses public-key cryptography where the public key
is distributed to identify the owner of the matching private key. The passphase
is in this case is used to authenticate access to the private key. </p>

</div>

</div>

]]>
        
    </content>
</entry>

<entry>
    <title>Speaking at ApacheCon NA 2011</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/06/speaking-at-apachecon-na-2011.html" />
    <id>tag:pdw.weinstein.org,2011://2.245</id>

    <published>2011-06-13T13:30:53Z</published>
    <updated>2011-06-13T13:23:15Z</updated>

    <summary>I&apos;ll be presenting at ApacheCon NA 2011 on the mod_proxy family of modules</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Apache" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="apache" label="Apache" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opensource" label="Open Source" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="servers" label="servers" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="technology" label="Technology" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p>At the moment November, and another hockey season, seems a long way off. But I'm already making plans to be in Vancouver from the 9<sup>th</sup> to the 11<sup>th</sup> for the North American edition of ApacheCon.
<br /><br />
That is because, at present, I am schedule to present at ApacheCon on <a href="http://na11.apachecon.com/talks/19333">The Power of the mod_proxy Modules</a>:
<br />
</p><blockquote>This presentation reviews the concepts of web proxies and load balancing, covers the creation and maintenance of proxies (forward and reverse) for HTTP, HTTPS and FTP using Apache and mod_proxy and how mod_proxy_balancer can be used to provide a basic load balancing solution. Configuration Examples of implementing proxies and load balancer will be discussed including; how and when mod_proxy modules can help, configuring mod_proxy for forward or reverse proxy and configuring mod_proxy_balancer for one or more backend web servers.</blockquote>
<br />
A preview of this upcoming presentation can be found in a previous talk from ApacheCon EU 2006, entitled <a href="http://pdw.weinstein.org/work/presentations/apacheconeu06/lb/">Apache 2.2 and mod_proxy_balancer</a>.
<br /><br />
For those who might be interested, this year's ApacheCon is set to cover:
<br />
<ul>
<li>Enterprise Solutions</li>
<li>Cloud Computing</li>
<li>Emerging Technologies &amp; Innovation</li>
<li>Community Leadership</li>
<li>Data Handling, Search &amp; Analytics</li>
<li>Pervasive Computing</li>
<li>Servers, Infrastructure &amp; Tools</li>
</ul>
<br />More information, including full schedule and registration, can be found at: <a href="http://na11.apachecon.com/">http://na11.apachecon.com/</a><p></p>]]>
        
    </content>
</entry>

<entry>
    <title>16 of 20: Personal Artifacts from the Early Years of Linux</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/05/16-of-20-personal-artifacts-from-the-early-years-of-linux.html" />
    <id>tag:pdw.weinstein.org,2011://2.244</id>

    <published>2011-05-30T17:45:00Z</published>
    <updated>2011-06-12T14:34:05Z</updated>

    <summary> As the story goes, in 1991 Linus Torvalds, then a student at the University of Helsinki, began work on the core component, the kernel, of his own operating system based off of Andrew S. Tanenbaum&apos;s teaching operating system MINIX....</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Information Technology" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Red Hat" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="history" label="History" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opensource" label="Open Source" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="redhat" label="Red Hat" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="technology" label="Technology" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="viddler" label="Viddler" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="video" label="Video" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p>
As the story goes, in 1991 Linus Torvalds, then a student at the University of Helsinki, began work on the core component, the kernel, of his own operating system based off of <a class="zem_slink rdfa" href="http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum" title="Andrew S. Tanenbaum" rel="ctag:means wikipedia" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/andrew_s_tanenbaum" property="ctag:label">Andrew S. Tanenbaum</a>'s teaching operating system <a class="zem_slink rdfa" href="http://www.minix3.org/" title="MINIX" rel="ctag:means homepage" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/minix" property="ctag:label">MINIX</a>. 
<br><br>
Since releasing the source code 20 years ago, and under his guidance ever since, the <a class="zem_slink rdfa" href="http://www.kernel.org/" title="Linux kernel" rel="ctag:means homepage" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/linux_kernel" property="ctag:label">Linux kernel</a> has become central to the development of devices from smartphones to super computers. 
<br><br>
But for most people, when they think of Linux, they think of Linux distributions,  software that includes the Linux kernel and supporting resources that complete the basic requirements of an operating system. 
<br><br>
A few weeks ago the <a href="http://www.linux.com/component/content/article/197-stories-of-linux/441699-the-story-of-linux-a-look-at-slackware-linux">Linux.com</a> Editorial Staff posted <a href="http://www.linux.com/component/content/article/197-stories-of-linux/441699-the-story-of-linux-a-look-at-slackware-linux">an article on one of the earliest distributions of Linux</a>, Slackware. That in turn got me thinking about some of my early exposure to Linux in the late 90s, and what media I might still have from that time. </p>
<br>
<p align="center"><a="" href="http://www.flickr.com/photos/pdweinstein/5776569178/" title="Linux by pdweinstein, on Flickr"><img src="http://farm3.static.flickr.com/2536/5776569178_9f47d435a7.jpg" width="500" height="374" alt="Linux"><br><i>My personal copy of Andrew S. Tanenbaum's Modern Operating Systems from my Computer Science days along with Daniel A. Tauber's The Complete Linux Kit and Randy Hootman's Linux - Installation and Beyond</i>&nbsp;<br><br></a=""></p>
A quick scan of my bookshelf revealed a couple of interesting artifacts. One is a copy of a book, "<a href="http://www.amazon.com/gp/product/0782116698/ref=as_li_ss_tl?ie=UTF8&amp;tag=weinsteinorg-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0782116698">The Complete Linux Kit</a>", a 1995 title that included a CD-ROM with the <a class="zem_slink rdfa" href="http://www.slackware.com/" title="Slackware" rel="ctag:means homepage" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/slackware" property="ctag:label">Slackware Linux</a> distribution<a style="mso-footnote-id: ftn1" title="" href="#_ftn1" name="_ftnref1"><sup>1</sup></a> that was compiled by Daniel A. Tauber and printed by Sybex. <br><br>The second is a video, "Linux - Installation and Beyond" which is described as a "three hour seminar showing installation of <a class="zem_slink rdfa" href="http://www.redhat.com" title="Red Hat" rel="ctag:means homepage" xmlns:ctag="http://commontag.org/ns#" typeof="ctag:Tag" resource="http://rdf.freebase.com/ns/en/red_hat" property="ctag:label">Red Hat</a> Linux, Slackware Linux, <a href="http://en.wikipedia.org/wiki/Yggdrasil_Linux">Yggdrasil Plug-and-Play Linux</a>" featuring Randy Hootman and was distributed by Yggdrasil Computing. Alas while Red Hat and Slackware still exist, in one form or another, the Yggdrasil distribution is no longer maintained and the company no longer exists.<br><br>
In a small effort to share what Slackware was like, "back in the day" I offer this copy of Randy Hootman's tutorial on installing and using Slackware Linux version 2.3:<p></p>
<p align="center" <object="" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="370" id="viddler_pdweinstein_6"><param name="movie" value="http://www.viddler.com/player/b02dad3f/"><param name="allowScriptAccess" value="always"><param name="allowNetworking" value="all"><param name="allowFullScreen" value="true"><param name="flashVars" value="f=1&amp;autoplay=f&amp;disablebranding=f"><embed src="http://www.viddler.com/player/b02dad3f/" width="437" height="370" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" allownetworking="all" name="viddler_pdweinstein_6" flashvars="f=1&amp;autoplay=f&amp;disablebranding=f"></embed></p>

<p>As a small bonus, and because <a href="http://pdw.weinstein.org/2009/12/y2k-c2net-hks-and-red-hat.html">I personally worked for Red Hat, once upon a time</a>, here is Randy on Red Hat Linux v2.0:</p>
<p align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="370" id="viddler_pdweinstein_5"><param name="movie" value="http://www.viddler.com/player/a73e1196/"><param name="allowScriptAccess" value="always"><param name="allowNetworking" value="all"><param name="allowFullScreen" value="true"><param name="flashVars" value="f=1&amp;autoplay=f&amp;disablebranding=f"><embed src="http://www.viddler.com/player/a73e1196/" width="437" height="370" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" allownetworking="all" name="viddler_pdweinstein_5" flashvars="f=1&amp;autoplay=f&amp;disablebranding=f"></embed></object></p>
<br>
<p align="center"><a href="http://www.flickr.com/photos/pdweinstein/5822243851/" title="GNOME Linux Desktop v1  by pdweinstein, on Flickr"><img src="http://farm6.static.flickr.com/5197/5822243851_45e841dd88.jpg" width="500" height="375" alt="GNOME Linux Desktop v1 "></a><br><i>Speaking of Red Hat, a screenshot of my Linux Workstation in 2000, running GNOME v1</i></p>
<br>
<hr width="33%">
<br>
<div style="mso-element: footnote" id="ftn1">
<p><a style="mso-footnote-id: ftn1" title="" href="#_ftnref1" name="_ftn1">[1]</a>&nbsp;Where the CD has since gone to, I'm note sure . Probably in a book of CD-ROMs in the storage.</p></div><br>

<div class="zemanta-pixie" style="margin-top:10px;height:15px"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=61d62cc3-b090-420b-980c-2fb357228e75" style="border:none;float:right"></div>]]>
        
    </content>
</entry>

<entry>
    <title>The Beginning of the End of the Ballmer Era at Microsoft?</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/05/the-beginning-of-the-end-of-the-ballmer-era-at-microsoft.html" />
    <id>tag:pdw.weinstein.org,2011://2.243</id>

    <published>2011-05-16T13:30:00Z</published>
    <updated>2011-05-16T13:48:24Z</updated>

    <summary>Something has been puzzling me for awhile now. I&apos;ve been wondering, where is the outrage, the angst and the out right hostility toward Microsoft CEO Steve Ballmer? I mean where are the industry pundits, Wall Street analysts, shareholders and Microsoft...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Information Technology" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="business" label="Business" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="microsoft" label="Microsoft" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reaction" label="Reaction" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p>Something has been puzzling me for awhile now. I've been wondering, where is the outrage, the angst and the out right hostility toward Microsoft CEO Steve Ballmer? I mean where are the industry pundits, Wall Street analysts, shareholders and Microsoft insiders calling for his head? <br /><br />And then I saw Ben Brooks' blog post this past week entitled <a href="http://brooksreview.net/2011/05/ballmer/">The Ballmer Days are Over </a>and I realized, here it is, the beginning of the end of Steve Ballmer at Microsoft. <br /><br /><b>What am I babbling about?</b> <br />Microsoft is Microsoft because of exactly two pieces of software, Windows and Office. Without Windows and Office there would be no Microsoft. No Xbox, no Windows Phone. Nor would they have been able to buy their way online with Hotmail or Skype.</p>
<p align="center"><img src="http://static1.businessinsider.com/image/4b7337bc0000000000a10a91/chart-of-the-day-msft-operating-profit.gif" width="90%" height="90%" /></p><br />
<p>But Microsoft has a problem. The market for its crown jewels have matured. The PC industry has stagnated. Sure, Microsoft can release a new version of Window or Office every few years, but customers, individuals and businesses, no longer feel compelled to spend several hundred dollars on the very latest version of either product. <br /><br />Worst yet, sentiment seems to have turned away from Microsoft, if I'm replacing an old PC with a new one, the consumer thinking seems to go, why not just go ahead and get a Mac?<a style="mso-footnote-id: ftn1" title="" href="#_ftn1" name="_ftnref1"><sup>1</sup></a> <br /><br />So, what is Microsoft's future, if not Windows and Office upgrades? <br /><br /><b>The Internet Tidal Wave</b> <br />Since <a href="http://www.wired.com/thisdayintech/2010/05/0526bill-gates-internet-memo/">May 1995</a>, Bill Gates' company has set its sight on a future dominating the online world in a manner similar to the desktop. But from AOL to Facebook, someone always seems to beat them to the punch.<a style="mso-footnote-id: ftn2" title="" href="#_ftn2" name="_ftnref2"><sup>2</sup></a> <br /><br />That in itself probably explains their $8.5 billon acquisition of Skype, beat Google or Facebook for once. <br /><br />But beat them to what exactly? As Andy Ihnatko pointed out on his own blog, <a href="http://ihnatko.com/2011/05/10/microsoft-buys-skype-for-8-5-billion/">there are three reasons</a> why Tech Company A might buy Tech Company B. Note that none of them are "beat Tech Company C to the punch." <br /><br />The closest justifiable reason from Ihnatko's list is "Company A gets to 'level up' instantly without having to spend years engaged in a long, expensive and uncertain dungeon crawl." <br /><br />Yet, it is not like Skype is the hot new <i>it</i> online and as Brooks hints at, how many mistakes would Microsoft have to make to make $8.5 <i>billon</i> a reasonable trade off to "level up"? Surely nobody thinks "Apple spent anything close to $1 billion dollars building FaceTime?" <br /><br />Sure Microsoft gets a technology it can instantly drop into Windows and Office their by given users a reason to upgrade. But, if they had developed something on their own, dropped that technology into Windows and Office for free, they could have tens of millions of potential paying customers of their own online conferencing service instantly for potential a lot less money.<a style="mso-footnote-id: ftn3" title="" href="#_ftn3" name="_ftnref3"><sup>3</sup></a> <br /><br />Yes, of course the business unit that makes money off of Windows and Office upgrades loses money on a free upgrade, but remember Windows and Office are the past, online is the future. <br /><br />Well, maybe online is the future? Here's the rub, and why I've been thinking Ballmer's days are numbered for awhile now, Microsoft doesn't know what exactly their future online is. Don't believe me? Take a look at this:</p>
<p align="center"><img src="http://static2.businessinsider.com/image/4db9cd554bd7c8d93c280000/chart-of-the-day-microsoft-online-operating-income-mar-2011.jpg" width="90%" height="90%" size="1" left? /> <br /><br />
<p>Microsoft is chasing everybody online and gaining on nobody, they a literally losing millions of dollars each quarter. Add in the setbacks Microsoft has had in other business areas; mobile, with <a href="http://en.wikipedia.org/wiki/Zune">Zune</a> and <a href="http://en.wikipedia.org/wiki/Microsoft_KIN">Kin</a> and the challenges ahead for the next generation of gaming consoles against their one true success, the Xbox and well, one has to wonder, how much longer does Steve Ballmer have as CEO of Microsoft? </p>
<br/>
<hr width="33%">
<br />
<div style="mso-element: footnote" id="ftn1">
<p><a style="mso-footnote-id: ftn1" title="" href="#_ftnref1" name="_ftn1">[1]</a> Apple loves to tell people that since the opening of their stores 10 years ago, <a href="http://gigaom.com/mobile/half-of-macs-sold-in-apple-stores-are-to-first-time-buyers/">the majority of customers walking out with a new computer are first time Mac owners</a>.</p></div><br />
<div style="mso-element: footnote" id="ftn2">
<p><a style="mso-footnote-id: ftn2" title="" href="#_ftnref2" name="_ftn2">[2]</a> Think about it, Internet Explorer the answer to Netscape, MSN and Hotmail was Microsoft's answer to AOL, Bing to Google, et al.</p></div><br />
<div style="mso-element: footnote" id="ftn3">
<p><a style="mso-footnote-id: ftn3" title="" href="#_ftnref3" name="_ftn3">[3]</a> Of course, we can't forget the legal trouble Microsoft got itself into the last time it tried to integrate online features into the core of Windows.</p></div>
<div></div>]]>
        
    </content>
</entry>

<entry>
    <title>Saying No to Transparency Budget Cuts</title>
    <link rel="alternate" type="text/html" href="http://pdw.weinstein.org/2011/04/saying-no-to-transparency-budget-cuts.html" />
    <id>tag:pdw.weinstein.org,2011://2.242</id>

    <published>2011-04-13T12:36:54Z</published>
    <updated>2011-04-13T13:17:35Z</updated>

    <summary>In the past few years we have seen an explosion in our ability to access information at anytime and from just about anywhere. The Internet in general has a lot to do with this explosion. Being able to access the...</summary>
    <author>
        <name>Paul Weinstein</name>
        <uri>http://pdw.weinstein.org</uri>
    </author>
    
        <category term="Information Technology" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Politics" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="obama" label="Obama" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="politics" label="Politics" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reaction" label="Reaction" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="technology" label="Technology" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://pdw.weinstein.org/">
        <![CDATA[<p>In the past few years we have seen an explosion in our ability to access information at anytime and from just about anywhere. The Internet in general has a lot to do with this explosion. Being able to access the Internet from just about anywhere has simply reinforced its importance. <br /><br />A secondary development that has impacted our relationship to information is known as "Web 2.0". The central tenant of Web 2.0 is that websites not only facilitate in the sharing of information, but also the interoperability of information across the Internet. <br /><br />To do this web developers separate out their concerns, the design of the website from its logical behavior, the information from the logic. This allows greater flexibility in developing the over all web-based application, applying computing resources specific to the concern in question, say storage of application data, as needed. <br /><br />Given a proper interface a web developer can create a website "mashup" pulling data from numerous "outside" resources into a unique and useful application. One of earliest examples of this type of web application was a website called <a href="hthttp://www.holovaty.com/writing/chicagocrime.org-launch/">chicagocrime.org</a></font><a style="mso-footnote-id: ftn1" title="" href="http://www.chicagocrime.org" name="_ftnref1"><span class="MsoFootnoteReference"><span style="mso-special-character: footnote"><span class="MsoFootnoteReference"><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri', 'sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">[1]</span></span></span></span></a> that combined Google Maps with the Chicago Police "blotter" to provide a digital map in which a user could locate informtion about criminal activity at a given location in the city. <br /><br />Recently the Obama Administration launched a number of government transparency initiatives designed to create data stores of federal information, akin to the local police blotter. By providing these data stores the administration's goal was to increase public access to high value information in a format that could be easily incorporated into a larger web application. <br /><br />Yet, some of the most important technology programs that keep these data stores available are in danger of being eliminated. <a href="http://www.data.gov">Data.gov</a>, <a href="http://www.usaspending.gov">USASpending.gov</a>, the <a class="zem_slink" title="IT Dashboard" href="http://it.usaspending.gov/" rel="homepage">IT Dashboard</a> and other federal data transparency and government accountability programs are facing a massive budget cut, from $34 million to $8 million or less. <br /><br />Government information must be available online, in real time and in machine-readable formats. Doing so can increase involvement in our democracy as non-for-profit organizations, for-profit businesses and independent developers find new ways to enable us in accessing and sharing information. <br /><br />It seems stupid to let these new initiatives go dark. After all, why should we be able to know what is going on in our neighborhood, but not in our country as a whole?</p>
<p><iframe title="YouTube video player" height="349" src="http://www.youtube.com/embed/6dyTnlpcZsc" frameborder="0" width="560" allowfullscreen></iframe></p>
<p>Take action now to Save the Data, <a href="http://sunlightfoundation.com/savethedata">http://sunlightfoundation.com/savethedata</a></p>
<div style="mso-element: footnote-list"><br clear="all" /><font color="#000000" size="3">
<hr align="left" size="1" width="33%">
<br /></font>
<div style="mso-element: footnote" id="ftn1">
<p style="MARGIN: 0in 0in 0pt" class="MsoFootnoteText"><a style="mso-footnote-id: ftn1" title="" href="#_ftnref1" name="_ftn1"><span class="MsoFootnoteReference"><span style="mso-special-character: footnote"><span class="MsoFootnoteReference"><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri', 'sans-serif'; FONT-SIZE: 10pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">[1]</span></span></span></span></a><font size="2"><font color="#000000"> Chicagocrimes.org has since morphed into <a href="http://www.everyblock.com/">EveryBlock.com</a>, a site focused on collecting all of the news and civic goings-on related to a specific city neighborhoods, As of March 2010 they cover 16 metropolitan cities in America and their neighborhoods, providing a "news feed" for a given city neighborhood or block.<o:p></o:p></font></font></p>
<p style="MARGIN: 0in 0in 0pt" class="MsoFootnoteText"><o:p><font color="#000000" size="2">&nbsp;</font></o:p></p></div></div>
<div style="MARGIN-TOP: 10px; HEIGHT: 15px" class="zemanta-pixie"><img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; FLOAT: right; BORDER-TOP: medium none; BORDER-RIGHT: medium none" class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=e50529c6-c3f6-49d7-bbaf-18ca99853f9c" /><span class="zem-script more-related pretty-attribution">
<script type="text/javascript" defer src="http://static.zemanta.com/readside/loader.js"></script>
 </span></div>]]>
        
    </content>
</entry>

</feed>
