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

<channel>
	<title>Open Source Solutions for Small Business Problems</title>
	<atom:link href="http://opensourcesmall.biz/feed/" rel="self" type="application/rss+xml" />
	<link>http://opensourcesmall.biz</link>
	<description>The living site of the book by John Locke</description>
	<pubDate>Sat, 23 Aug 2008 18:57:48 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Business Social Networking Geography: Yes Location matters</title>
		<link>http://opensourcesmall.biz/archives/2008/08/business-social-networking-geography-yes-location-matters/</link>
		<comments>http://opensourcesmall.biz/archives/2008/08/business-social-networking-geography-yes-location-matters/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 18:57:48 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[11. Management]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=269</guid>
		<description><![CDATA[Esther Schindler wrote a thought-provoking column on CIO.com last week, Business Social Networking Geography: Does It Matter Where My Contacts Are?
Although the Internet is global, and you may do business with people anywhere in the world, most people tend to look for people-networks close to home. Or do they? Should they? If the point of [...]]]></description>
			<content:encoded><![CDATA[<p>Esther Schindler wrote a thought-provoking column on CIO.com last week, <a href="http://advice.cio.com/esther_schindler/business_social_networking_geography">Business Social Networking Geography: Does It Matter Where My Contacts Are?</a></p>
<blockquote><p>Although the Internet is global, and you may do business with people anywhere in the world, most people tend to look for people-networks close to home. Or do they? Should they? If the point of social networking is to connect with other people, ought it to matter where we are?</p></blockquote>
<p>At <a href="http://freelock.com">Freelock</a>, we have a handful of remote clients, but upwards of 90% of our clients are local. I founded the business on the assumption that people want to know who they&#8217;re doing business with, be able to see them face to face, and grow to trust them over time. Nothing breaks the ice like talking about a project in person, over a coffee or better yet, a margarita.</p>
<p>Good or bad, business gets done through personal relationships. How many deals have been cemented on the golf course? It&#8217;s a lot harder to say no in person, than it is with a quick dismissive email. So much communication happens non-verbally, through body language, tone of voice, and other channels that just aren&#8217;t available online. A video conference is a poor substitute for a face-to-face meeting.</p>
<p>I&#8217;ve gotten quite a bit of help from IRC. We have a private company jabber server so when we&#8217;re not in the same room, we can still have the feel of a team. We&#8217;ve had people helping us out from Bellingham, 120 miles north. The Internet enables some amazing things, and I definitely think it&#8217;s possible to work effectively at a distance. Many professions, including writing and coding, can be done quite effectively by individuals working by themselves, anywhere in the world. </p>
<p>But you can&#8217;t directly diagnose a connectivity issue in an office in Bellevue when you&#8217;re in India, or replace a hard drive. You can&#8217;t assemble a car from the other side of the world. And even for creative types who can work effectively on their own, relationships and trust only truly get cemented by meeting their editors, testers, or project managers in person.</p>
<p>Another founding principle of my business is that it&#8217;s much easier to ensure quality by having people work in person. If team members can do impromptu code reviews of each other&#8217;s work, quality goes up. The solitary developer working late at night may bang his head for hours against a problem that a colleague could solve in a 5 minute conversation. Having a team of people with complementary talents and different strengths working in one place leads to better results.</p>
<p>Once you&#8217;ve established that level of trust, remote work becomes more effective. You know when somebody&#8217;s cracking a joke, and it doesn&#8217;t sound so strange. You&#8217;re more likely to ask a quick question in a chat when you can preface it with a comment about an outside shared interest.</p>
<p>Yes, location matters. It&#8217;s not everything, and the Internet makes it possible to work together from a distance&#8211;but it still matters.</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/08/business-social-networking-geography-yes-location-matters/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SOAP, Web Services, and PHP</title>
		<link>http://opensourcesmall.biz/archives/2008/08/soap-web-services-and-php/</link>
		<comments>http://opensourcesmall.biz/archives/2008/08/soap-web-services-and-php/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 17:52:04 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[soap]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=266</guid>
		<description><![CDATA[One of my projects in the past few weeks has been to put together a SOAP server for a client. So suddenly I&#8217;ve had to learn a lot of the nitty gritty details about what works and what doesn&#8217;t&#8230;
While they&#8217;re fresh, let me jot them down here. WARNING: Extremely technical content ahead.

First of all, SOAP [...]]]></description>
			<content:encoded><![CDATA[<p>One of my projects in the past few weeks has been to put together a SOAP server for a client. So suddenly I&#8217;ve had to learn a lot of the nitty gritty details about what works and what doesn&#8217;t&#8230;</p>
<p>While they&#8217;re fresh, let me jot them down here. WARNING: Extremely technical content ahead.<br />
<span id="more-266"></span><br />
First of all, SOAP is supposed to stand for &#8220;Simple Object Access Protocol.&#8221; It&#8217;s anything but simple. There is a lot of SOAP software out there, but subtle implementation gotchas that can be quite difficult to figure out.</p>
<p>We chose the native PHP SoapServer in PHP 5.2 to implement the project, mainly because we&#8217;re a PHP shop, and a little smoke testing revealed it was quite quick to get set up and going. It turns out that it&#8217;s quite hard to debug. For its good points, it can read in a WSDL and automatically map methods to methods on a class, and it converts arrays, simple objects, or complex objects to a valid response object, and request objects into simple or complex objects on the incoming side.<br />
<strong><br />
Problems with PHP&#8217;s SOAP Server:</strong></p>
<ul>
<li>No validation of incoming or outgoing documents.</li>
<li>No warnings, exceptions, or errors if it can&#8217;t convert a document to fit the schema&#8211;it just dies.</li>
<li>No debugging information about what it&#8217;s doing.</li>
<li>No ability to manage namespaces, especially if they need to be copied from the SOAP envelope into the payload.</li>
<li>Difficult to test.</li>
<li>No access to the raw XML of either the request or the response.</li>
</ul>
<p>Using PHP&#8217;s SoapServer is quite simple, except when things aren&#8217;t perfect&#8230;</p>
<p>Here&#8217;s what the code looks like for the simple case:</p>
<p><code><br />
< ?php<br />
  $xml = $GLOBALS['HTTP_RAW_POST_DATA']; // or file_get_contents('php://input');<br />
  // make sure you have something to process, throw an error if $xml is empty<br />
  $soap = new SoapServer('http://path/to/your.wsdl');<br />
  $soap->setClass(&#8217;mySoapClass&#8217;);<br />
  $soap->handle($xml);<br />
?><br />
</code><br />
That&#8217;s basically it. You declare methods on &#8216;mySoapClass&#8217; that correspond to the SOAP methods. These handler methods receive a simple object as a parameter, and you can do whatever you need to do with that data. Then it needs to return some data structure that can be serialized to the expected type defined in the WSDL. The return data structure can be an array, a simple object, or an object of a class you define that can serialize appropriately.</p>
<p>Great. With this much, it took me about a day to have a working web service with 8 methods and a bunch of complex data objects. The problems started when people connected with different SOAP software.</p>
<p>The web service I was implementing defines a specific SOAP Fault document, so if I did run across a problem, I could simply throw an exception of that type. My wrapper object kindly passed the custom fields defined in the WSDL.</p>
<p><strong>Problem #1: Validation</strong></p>
<p>As I said before, there is none. If the SoapServer gets anything it doesn&#8217;t like, it doesn&#8217;t send any response at all. And since all you get inside your method handlers is an already-converted object, you don&#8217;t have any way to validate the response without using a global variable or a call to a singleton.</p>
<p>In our case, the project specified that we strip out the payload from the SOAP header and store the payload XML on the disk as a document for several methods, and do processing on other methods. Processing a SOAP request was not a problem. Storing a valid XML document was. Several methods just stored the XML on the disk, with another method retrieving it and returning it to the caller. The problem we had was that the Soap Response was more picky than the Soap Request&#8211;so documents that we loaded from the disk and returned as the response would fail with no explanation.</p>
<p>Our solution was to load the raw XML into a DOM Document, and validate it against the schema. This mostly worked, until we had to deal with a request generated from Jitterbit. More on that later.</p>
<p>The question is, what to validate? We weren&#8217;t supposed to store the entire SOAP envelope&#8211;just the payload. So how to extract it? The simple way was to grab the first child of the Body element, append it to the DOMDocument itself, remove the original root, and call the normalize() method. This did generate a warning, but not a fatal error, and did the right thing. Furthermore, we could also access the raw libxml validation specifics, by calling libxml_use_internal_errors(true), and then when a document fails to validate, using libxml_get_errors() and libxml_get_error() to grab the details.</p>
<p><strong>Problem #2: Returning valid XML responses</strong></p>
<p>The root of all of our problems in this project has to do with where namespaces are defined. One limitation of libxml appears to be that you can only point it to one schema for validation at a time. We can validate against the SOAP Schema, or our custom schema, but not both at the same time, unless one includes the other. So our validation options consist of:</p>
<ol>
<li>Include the SOAP Schema in the custom schema, and validate the entire SOAP body, or</li>
<li>Extract the payload from the SOAP body, and validate only that against our schema.</li>
</ol>
<p>#2 is clearly the correct way&#8211;we really don&#8217;t care about the SOAP envelope once we have the message. But the problem is, many SOAP clients put the namespace declarations on the SOAP Envelope, and not the payload root element. In fact, the XML generated by the PHP SoapServer class does this itself.</p>
<p>So our first task was to generate the proper XML Namespace declarations on our generated payloads.</p>
<p>To do this, we could no longer rely on the PHP SoapServer&#8217;s automatic conversion of simple objects or arrays to XML&#8211;we had to generate our own XML, and tell the SOAP server to use that instead. This turned out to be difficult to track down, so here&#8217;s the answer:</p>
<p><code><br />
< ?php<br />
  class dataClass{<br />
    /* Serialize XML as desired here.<br />
        Omit the XML declaration, start with the root element<br />
        You can also simply build the XML as a string from object properties<br />
    */<br />
     function toXml(){<br />
         $this->myDom->documentElement->setAttribute(&#8217;xmlns&#8217;,'http://my.custom.namespace/version_1&#8242;);<br />
         $xml = $this->myDom->saveXML();<br />
         preg_match(&#8217;%< \?.*=\?>(.*)$%s&#8217;,$xml,$match); //strip XML declaration<br />
         return $match[1];<br />
   }<br />
}</p>
<p>// snip to end of actual SOAP handler method:<br />
   $out = new SOAPVar($data->toXML(),XSD_ANYXML);<br />
   return $out;<br />
}<br />
</code><br />
The SOAPVar object allows you to control the output of the SoapServer a bit better, with support for namespaces, raw XML, or casting objects in a certain way.</p>
<p><strong>Problem #3: Jitterbit</strong></p>
<p>Validating a clean payload without namespace prefixes seems to work fine. Our technique of moving the nodes around with the DOM seemed to keep most of the namespaces intact, so even if there was no xmlns declaration on the payload root, we could still validate just the payload effectively, and serialize/de-serialize without issue.</p>
<p>Except for Jitterbit.</p>
<p>Now, I loaded up Jitterbit yesterday, and it didn&#8217;t do this&#8211;this might be a problem with an earlier version. The problem is, Jitterbit is extremely verbose, specifying not just a namespace prefix on every element, but also an xsi:type. And even that&#8217;s not enough to break it&#8211;except that the value for its xsi:type also contained a namespace declaration. And if this namespace declaration was not the root namespace, suddenly our validation broke.</p>
<p>It broke for us on types declared as ns:token, ns:string, ns:integer &#8212; the simple types specified by XSD itself, which Jitterbit put into a namespace prefixed with ns: and declared on the SOAP Envelope.</p>
<p>For example, here&#8217;s the start of a problem document:</p>
<p><code><br />
< ?xml version="1.0" encoding="UTF-8" standalone="no" ?><br />
<soapenv :Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"<br />
                  xmlns:ns="http://www.w3.org/2001/XMLSchema"<br />
                  xmlns:oi="http://ws.outdoorindustry.org/v1_2/"<br />
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"<br />
                  xmlns:ws="http://ws.outdoorindustry.org/v1_2/ws/"<br />
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"<br />
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
><br />
</soapenv><soapenv :Body><br />
<tns1 :submitPO<br />
                  xmlns:tns1="http://ws.outdoorindustry.org/v1_2/"<br />
               xsi:type="tns1:PO"><br />
               </tns1><tns1 :DocumentID>06AB4EF9-6AF157E7-3F8441AB-AB499933</tns1><br />
               <tns1 :POType>Preseason</tns1><br />
               <tns1 :Vendor xsi:type="tns1:VendorType"><br />
                   </tns1><tns1 :VendorID xsi:type="ns:token">999</tns1><br />
                   <tns1 :VendorName xsi:type="ns:token">Sample Vendor</tns1></p>
<p></soapenv></code></p>
<p>The first validation error was on the VendorID, with xsi:type=&#8221;ns:token&#8221;. If I copied xmlns:ns=&#8221;http://www.w3.org/2001/XMLSchema&#8221; into the tns1:submitPO element, it validated fine. The PHP DOMDocument seems to be able to keep track of namespaces on elements and attribute names even after the envelope is gone. But not attribute values.</p>
<p>After hours of banging on this, we came up with 3 workarounds for this:</p>
<ol>
<li>Completely regenerate the XML, after processing. To do this, we would need to create a custom data class for each incoming object, provide a classmap to the SoapServer, and then generate brand new XML out of the data object. This is perhaps the best approach, but I didn&#8217;t think of it until the project was over&#8211;I was thinking about writing out the data to the database and then loading our custom objects and serializing them as we do for our responses. The biggest drawback here is that we need to model the entire complexity of the request, as allowed in the schema. And this was a really complex object&#8230; lots of work to implement, when we&#8217;re only going to store this XML for passing to other systems.</li>
<li>Hack the XML to get the offending namespace into the stored document. This turned out to be easy to program, but uses lots of CPU resources&#8211;DOMDocuments are expensive to use. It&#8217;s also the most brittle approach, only catching this single case&#8211;if the namespace prefix changes, or a different required namespace is necessary, it&#8217;ll break. To do this, we created a new DOM Document, imported the root node of the payload, appended it to the document, and used setAttribute to set an &#8220;xmlns:ns&#8221; attribute on the root. This did not actually get the namespace recognized for validation, and normalizeDocument did not fix it&#8211;but creating a third DOMDocument, and doing $doc->loadXML($doc2->saveXML) did make the namespace recognized by the object so we could successfully validate.</li>
<li>Hack the XSD to validate the entire SOAP request. By including the SOAP schema in our custom schema (using xs:import), we could validate the raw SOAP request, then extract the payload and save it. The saved XML does not validate on its own, but we know it validates. So we can remove our validation check on the outgoing document, and as long as the other system does not explicitly validate the standalone XML, we&#8217;re okay.</li>
</ol>
<p>Whew. Hope this helps somebody&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/08/soap-web-services-and-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Interesting Juxtaposition: John McCain is concerned about &#8220;piracy,&#8221; while his campaign commits it</title>
		<link>http://opensourcesmall.biz/archives/2008/08/interesting-juxtaposition-john-mccain-is-concerned-about-piracy-while-his-campaign-commits-it/</link>
		<comments>http://opensourcesmall.biz/archives/2008/08/interesting-juxtaposition-john-mccain-is-concerned-about-piracy-while-his-campaign-commits-it/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 17:29:35 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=264</guid>
		<description><![CDATA[I generally try to stay out of politics on this blog, but couldn&#8217;t help it today when I ran across two stories today.
First, McCain has released his technology platform, which among other bits states his support for protecting the recording industry from piracy. Meanwhile, the Ohio Republican party used Jackson Browne&#8217;s &#8220;Running on Empty&#8221; in [...]]]></description>
			<content:encoded><![CDATA[<p>I generally try to stay out of politics on this blog, but couldn&#8217;t help it today when I ran across two stories today.</p>
<p>First, McCain has released his technology platform, which among other bits states his support for protecting the recording industry from piracy. Meanwhile, the Ohio Republican party used Jackson Browne&#8217;s &#8220;Running on Empty&#8221; in a commercial without permission. </p>
<p><a href="http://www.johnmccain.com/Informing/Issues/cbcd3a48-4b0e-4864-8be1-d04561c132ea.htm">John McCain 2008 - John McCain for President</a>:</p>
<blockquote><p>
John McCain Will Protect The Creative Industries From Piracy. The entertainment industry is both a vital sector of the domestic economy and among the largest U.S. exporters. While the Internet has provided tremendous opportunity for the creators of copyrighted works, including music and movies, to distribute their works around the world at low cost, it has also given rise to a global epidemic of piracy. John McCain supports efforts to crack down on piracy, both on the Internet and off.</p></blockquote>
<p><a href="http://blog.wired.com/music/2008/08/jackson-browne.html">Wired Magazine - First Paris, Now This: Jackson Browne Sues John McCain</a></p>
<blockquote><p>Indeed, some irony lies in a candidate who is running a law-and-order campaign being sued for intentional copyright infringing and appropriating someone else&#8217;s identity without their permission. </p></blockquote>
<p>Apparently Browne is a well-known Obama supporter.</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/08/interesting-juxtaposition-john-mccain-is-concerned-about-piracy-while-his-campaign-commits-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Random thoughts on OSCON08</title>
		<link>http://opensourcesmall.biz/archives/2008/07/random-thoughts-on-oscon08/</link>
		<comments>http://opensourcesmall.biz/archives/2008/07/random-thoughts-on-oscon08/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 06:27:51 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[Economic Musings]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[oscon08]]></category>

		<category><![CDATA[polymath]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=256</guid>
		<description><![CDATA[This week I&#8217;m at the Open Source Convention in Portland, aka OSCON. First impression, before showing up: it seems all focused on big business. Big ticket price. Lots of enterprise-related topics, and sponsors. Not really the meeting of geniuses and thought leaders as years past&#8211;or so I thought.
Second impression: Tim O&#8217;Reilly asking Brian Aker and [...]]]></description>
			<content:encoded><![CDATA[<p>This week I&#8217;m at the Open Source Convention in Portland, aka OSCON. First impression, before showing up: it seems all focused on big business. Big ticket price. Lots of enterprise-related topics, and sponsors. Not really the meeting of geniuses and thought leaders as years past&#8211;or so I thought.</p>
<p>Second impression: Tim O&#8217;Reilly asking Brian Aker and Monty Widenius about the importance of various proprietary companies: Sun, Adobe, Microsoft. Their answer to Microsoft? Irrelevant. And Tim came back apologizing to the Microsoft sponsors. This just after the presentation that talked about the open source &#8220;tribe&#8221;, and introducing Tim as the leader of the cult. Was feeling a bit like I may have made a mistake, plopping down cold hard cash to support the cult of O&#8217;Reilly.</p>
<p>Fortunately, that thought was momentary. The rest of the event has been extremely rewarding, and very worthwhile.</p>
<p>At home, in my usual networks, I&#8217;m the token Linux guy. Beyond our company and some family I&#8217;ve converted to Linux, almost none of my friends use open source, and in business circles, I&#8217;m the resource for not just Linux, but web technologies, programming, system administration, and most anything computer related. I come to OSCON and I&#8217;m a mere end user, still damp behind the ears. There is true genius wandering the convention center. And suddenly, I&#8217;m one of the least technical people in the room, though still listened to for my experience trying to bring these projects to the small business world, identifying pitfalls and areas for improvement. </p>
<p>A few years back, I came to OSCON and it seemed that the worse dressed a person was, the higher up in the ranks of alpha geek he was. This year people looked much more presentable. That might be as far as the influence of corporate culture went.</p>
<p>I met R0ml at that previous OSCON I attended, at a BOF session led by Doc Searls. A &#8220;BOF&#8221;, if you&#8217;re not familiar with software conferences, is a &#8220;Birds of a Feather&#8221;, a mini, informal discussion about a particular topic led by anybody who puts an idea for one up on a bulletin board. I doubt R0ml remembers me, but it was an interesting discussion we had that evening that paralleled his talk today about elevating open source development from the realm of Techne to Praxis&#8211;from mere &#8220;making&#8221; of stuff to &#8220;doing&#8221; something to influence and lead people. He took issue with the assertion in an earlier keynote about Franklin and Jefferson being our founding geeks&#8211;mainly because while everybody needs a geek these days to make computers do their bidding, that&#8217;s a useful, technical, thing that puts us squarely in the realm of Techne. What Jefferson and Franklin really were, according to R0ml, were Polymaths, and that is also a better description of open source practitioners. We&#8217;re Renaissance people.</p>
<p>More later&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/07/random-thoughts-on-oscon08/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TLLTS vs. TWIT: Linux support slam-a-thon</title>
		<link>http://opensourcesmall.biz/archives/2008/07/tllts-vs-twit-linux-support-slam-a-thon/</link>
		<comments>http://opensourcesmall.biz/archives/2008/07/tllts-vs-twit-linux-support-slam-a-thon/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 23:29:00 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[01. Open Source]]></category>

		<category><![CDATA[04. Desktop]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[innovation]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[podcasts]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=252</guid>
		<description><![CDATA[The Linux Link Tech Show (TLLTS) has a great segment dissecting the criticisms/wild flames put forth on a series of shows on the TWIT network. Wanted to add a couple comments missing from their discussion.
First of all, the Mac Break Weekly show apparently spends some time bashing the open source community, calling out Drupal, and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.tllts.org/dl.php?episode=253">The Linux Link Tech Show</a> (TLLTS) has a great segment dissecting the criticisms/wild flames put forth on a series of shows on the <a href="http://twit.tv/">TWIT network</a>. Wanted to add a couple comments missing from their discussion.</p>
<p>First of all, the Mac Break Weekly show apparently spends some time bashing the open source community, calling out Drupal, and how difficult it is to solve &#8220;simple&#8221; problems like uploading images for blog posts. In practically the same breath, the hosts claim that the open source community never has any innovation behind it. Irony drips:</p>
<ul>
<li>In the world of content management systems (CMSs), most of the innovation starts in open source projects these days, and Drupal is at the cutting edge of this with its powerful system of taxonomies, and hundreds of add-ons freely available.</li>
<li>I can think of a grand total of 2 proprietary CMSs that have anywhere near as widespread use as most of the open source CMS systems. One has turned open source itself: Movable Type. The other is Sharepoint, and it&#8217;s widespread because Microsoft has shipped it out on lots of its server products.</li>
<li>Complain about usability all you want, but name a proprietary product as powerful as Drupal, that&#8217;s easier to install, administer, and configure.</li>
<li>The TWIT.tv site itself is running on Drupal.</li>
</ul>
<p>So let&#8217;s talk a little about innovation. While Photoshop may still dominate the world of graphic design, but the lines aren&#8217;t so clear when it comes to animation. The <a href="http://www.blender.org/">Blender project</a> recently released its second short animated film, <a href="http://www.bigbuckbunny.org/">Big Buck Bunny</a>. While you might argue about the strength of its story, you cannot deny that the technical effects are as stunning as any major animated film coming out from the big studios. And it was created by 7 people in 9 months, using open source software. Even the big studios like Pixar, Dreamworks, and Industrial Light and Magic rely on open source software to deliver their magic, such as CinePaint, POVray, and <a href="http://www.linuxmovies.org/software.html">several others</a>.</p>
<p>On the subject of innovation, <a href="http://www.groklaw.net/article.php?story=20080710131440951">KDE4 is breaking new ground and stirring up controversy</a>, laying a bedrock that promises the ability to do things beyond the standard &#8220;Desktop&#8221; paradigm that was invented over 30 years ago and we&#8217;ve all used ever since. Meanwhile, the GNOME team is <a href="http://live.gnome.org/OnlineDesktop/Vision">working on creative ways to embed web applications into your desktop</a>.</p>
<p>But the real innovations of the open source community are all a few layers deeper in the application stack, all the plumbing that powers the Internet. Microsoft itself borrowed its early networking stack from BSD, one of the earliest open source operating systems. Domain Name Service (DNS) and email were first implemented on the Internet using open source software (BIND and Sendmail).</p>
<p>The open source community tends to snicker whenever Apple claims to be innovative. Its core &#8220;innovations&#8221; were all invented somewhere else:</p>
<ul>
<li>The Mac Desktop interface borrowed heavily from Xerox PARC labs</li>
<li>OS X uses BSD under the hood</li>
<li>&#8220;Spaces&#8221; were in use in Unix systems for a decade before they arrived on the Mac</li>
<li>The &#8220;Time Machine&#8221; functionality in Leopard is standard in many source code management tools</li>
</ul>
<p>To its credit, Apple polishes these features better than anybody else, making them easier to find and use by normal people. But many, if not most of its innovations come from somebody else.</p>
<p>Read <a href="http://opensourcesmall.biz/archives/2008/07/how_open_source_support_is_different/">the previous post</a> for more discussion about Linux support.</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/07/tllts-vs-twit-linux-support-slam-a-thon/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How Open Source support is different</title>
		<link>http://opensourcesmall.biz/archives/2008/07/how_open_source_support_is_different/</link>
		<comments>http://opensourcesmall.biz/archives/2008/07/how_open_source_support_is_different/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 23:26:59 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[01. Open Source]]></category>

		<category><![CDATA[02. Servers]]></category>

		<category><![CDATA[04. Desktop]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[podcasts]]></category>

		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=255</guid>
		<description><![CDATA[I started writing a response to a discussion in the latest &#8220;Linux Link Tech Show&#8221; episode, but ended up with something far too long, so I&#8217;ve split it up into 4 posts. The next post is about the TLLTS vs TWIT debate, and introduces this set of post. The previous two are about open source [...]]]></description>
			<content:encoded><![CDATA[<p>I started writing a response to a discussion in the latest &#8220;<a href="http://www.tllts.org/dl.php?episode=253">Linux Link Tech Show</a>&#8221; episode, but ended up with something far too long, so I&#8217;ve split it up into 4 posts. The next post is about <a href="http://opensourcesmall.biz/archives/2008/07/tllts-vs-twit-linux-support-slam-a-thon/">the TLLTS vs TWIT debate</a>, and introduces this set of post. The previous two are about open source support&#8211;a <a href="http://opensourcesmall.biz/archives/2008/07/an-example-of-open-source-support/">true story of a support incident</a> I had, and <a href="http://opensourcesmall.biz/archives/2008/07/the-unwritten-rules-of-open-source-support/">the unwritten rules of open source support</a>. In this post, I analyze the fundamental differences between Windows, Apple, and Linux when it comes to support.</p>
<p>Dann and Linc had a quite spirited debate about the merits of having a company hire low-end tech support with scripts (Dann) versus having an experienced, savvy, tech professional able to really solve the user&#8217;s problem (Linc). Dann&#8217;s point was that it can easily be more cost-effective for both the support company and the end user to go straight to reinstalling a system if rebooting doesn&#8217;t solve the user&#8217;s problem, while Linc seemed to think a savvy tech person could get to the root of the issue much quicker, and brought up the point that there&#8217;s a cost to the frustration of users being put through the whole front-line support nightmare.</p>
<p>I&#8217;d suggest the situation is even more complex than that, but it also differs greatly between the open source projects and proprietary operating systems. First, let me make a bold statement:</p>
<p><strong>Linux support is far better than Windows or Mac.</strong></p>
<p>But it also has a completely different set of rules. Learn those rules, and you&#8217;ll be able to solve your problems more satisfactorily than it&#8217;s possible to do in the proprietary world. Let&#8217;s talk about these differences, looking specifically at a who, where, what, and how long.</p>
<p><strong>Who can help with your problem?</strong></p>
<p>Let&#8217;s take a look at who can help with your problem:</p>
<table border="1">
<tr align="left">
<th>Level of support</th>
<th>Windows</th>
<th>Mac</th>
<th>Linux</th>
</tr>
<tr valign="top" align="left">
<td>Very basic help, no charge</td>
<td>Friends<br />
Family computer guy<br />
Newspaper columnists<br />
Web Forums</td>
<td>Friends (fewer than Windows)<br />
Family computer guy<br />
Mac User groups<br />
Web Forums</td>
<td>Friends (if you know any)<br />
Local Linux User groups<br />
Web forums<br />
Mailing lists<br />
Developers on main applications or distributions</td>
</tr>
<tr valign="top" align="left">
<td>Paid support</td>
<td>Local IT consultant<br />
Franchises like Geek Squad<br />
Microsoft, application companies
</td>
<td>Mac consultant<br />
Apple Genius Bar
</td>
<td>Linux consultants (like Freelock)<br />
Distribution companies (Red Hat, Novell, Canonical, others)<br />
Linux support companies (SpikeSource, SourceLabs, etc)<br />
Application companies (SugarCRM, MySQL/Sun, Command Prompt)<br />
Developers
</td>
</tr>
</table>
<p>The bottom line here is that while you probably know fewer people personally who can help you with Linux, there are more options for commercial support, and you can reach people who can do more to solve your problem for free, than you can with either Mac or Windows.</p>
<p>The fundamental reason for this is that anybody can read the raw source code of any open source product out there, and with enough skill and talent, can solve your problem without needing to pay anybody for the right to do so. In the proprietary world, only one company can help beyond a certain point: for Windows problems, that&#8217;s Microsoft. For problems in an application, it&#8217;s the application developer.</p>
<p>So the next question is:</p>
<p><strong>Where can you get help?</strong><br />
Again, let&#8217;s compare the options:</p>
<table border="1">
<tr align="left">
<th>Type of problem</th>
<th>Windows</th>
<th>Mac</th>
<th>Linux</th>
</tr>
<tr valign="top" align="left">
<td>Very basic usage help</td>
<td>Google<br />
Friends/family<br />
Forums<br />
IT consultants<br />
Seminars<br />
Paid support from vendor</td>
<td>Google<br />
Friends/family<br />
Forums<br />
Mac consultants<br />
Seminars<br />
Paid support from vendor</td>
<td>Google<br />
Friends/family<br />
Distribution Forums<br />
Distribution mailling lists<br />
IRC<br />
Linux consultants<br />
Seminars<br />
Paid support from dozens of companies</td>
</tr>
<tr valign="top" align="left">
<td>Hardware problems</td>
<td>Google<br />
IT consultants (may or may not be able to help)<br />
Microsoft<br />
Hardware vendor</td>
<td>Google<br />
Mac consultants (may or may not be able to help)<br />
Apple<br />
Hardware vendor</td>
<td>Google<br />
Linux consultants (may or may not be able to help)<br />
Distribution paid support (Red Hat, Novell, Canonical)<br />
Hardware vendor (support for many vendors is improving)<br />
Kernel developer<br />
Linux users with the same hardware<br />
Application developers for applications that use that hardware</td>
</tr>
<tr valign="top" align="left">
<td>Bug in operating system</td>
<td>Microsoft</td>
<td>Apple</td>
<td>RedHat<br />
Novell<br />
Canonical<br />
IBM<br />
HP<br />
Sourcelabs<br />
Many other independent developers</td>
</tr>
<tr valign="top" align="left">
<td>Bug in application</td>
<td>Application vendor</td>
<td>Application vendor</td>
<td>Linux consultant<br />
Developer<br />
Application vendors (often more than one can help)</td>
</tr>
<tr valign="top" align="left">
<td>Bug in interaction between applications</td>
<td>You&#8217;re screwed. Report it to both vendors and hope they will work it out.</td>
<td>You&#8217;re screwed.</td>
<td>Report it to both applications, and get guidance on how to address the issue.<br />
Hire a developer to create a workaround.<br />
Hire somebody to work with each application to integrate a real fix.</td>
</tr>
<tr valign="top" align="left">
<td>Help switching to another application</td>
<td>Application vendor (and you may have to pay them dearly)</td>
<td>Application vendor (and you may have to pay them dearly)</td>
<td>Application vendor, either old or new<br />
Any application that uses the same open format<br />
Any developer with knowledge of the underlying format</td>
</tr>
</table>
<p>The main point of the table above is that in the proprietary world, the harder your problem is to solve, the fewer people can help you solve it. You quickly get down to one place to go, and if it&#8217;s in the operating system, it might be expensive or not possible to fix. In the open source world, it&#8217;s nearly the opposite case&#8211;it can be harder to find the simple quick answer to your question, but the harder and deeper your problem, the more places you can go to get help.</p>
<p>Where do you look for help first? This is the single stumbling block for most otherwise tech-savvy users new to Linux. To learn Windows or Mac you can take a class, talk to neighbors and friends, and find lots of very low-end help that way. For Linux, unless you&#8217;re friends with some hard-core geeks, you need to go online to find help. Once you&#8217;re there, it really depends on where your problem lies.</p>
<p>For just figuring out how to use a system, go to the forums for your distribution. The Ubuntu forums are a great place to ask general questions. Be specific about what you&#8217;re trying to do and you&#8217;re more likely to get help. Remember that this level of support is free, and people helping you are volunteering their time and knowledge. While you&#8217;re there, see if you can answer somebody else&#8217;s question&#8211;the more help you give, the more you&#8217;ll get in return.</p>
<p>The other fantastic place to go for help, especially for quick questions, is IRC. IRC is a system that provides chat rooms and instant messaging. Most open source projects with any community behind them have a chat room on irc.freenode.net. Install an IRC program like Chatzilla, Konversation, Pidgin, or any number of others, connect to irc.freenode.net, pick a nickname to use, and join the channel for the program or distribution you&#8217;re having trouble with. Ask your question nicely, and if you don&#8217;t get a response immediately, keep your chat program open for a few hours&#8211;not everybody is watching the channel every minute.</p>
<p><strong>What kinds of problems can you solve?</strong><br />
Let&#8217;s look at the same types of problems as before, and look at the resolutions:</p>
<table border="1">
<tr align="left">
<th>Type of problem</th>
<th>Windows</th>
<th>Mac</th>
<th>Linux</th>
</tr>
<tr valign="top" align="left">
<td>Very basic usage help or problems</td>
<td>Reboot.<br />
Lots of good help available: documentation, classes, seminars, tutorials, books</td>
<td>Some help available: documentation, classes, seminars, tutorials, books</td>
<td>Same types of help available, but far less widespread.<br />
In many cases, the software interfaces aren&#8217;t as polished, and the help content is more menu- and feature-oriented than task-oriented&#8211;they explain the options, without telling you how to do what you&#8217;re trying to do.
</td>
</tr>
<tr valign="top" align="left">
<td>Hardware problems</td>
<td>Obtain driver from the vendor, and install.<br />
Hardware vendors almost universally provide support for Windows.
</td>
<td>If it&#8217;s supported by Mac, install the driver. If it&#8217;s not supported, you&#8217;re out of luck. Most external devices are supported on the Mac. Internal devices, you have far less choice than Windows or Linux.</td>
<td>More and more devices have manufacturers providing Linux support. Many devices have solid drivers written by the Linux community, without help from manufacturers. A few devices have no Linux support whatsoever. Usually if you can&#8217;t get it working in Linux, it&#8217;s either brand new, or there&#8217;s a legal reason it hasn&#8217;t been done yet. Do your homework before you buy, and only buy hardware others have gotten working in Linux.</td>
</tr>
<tr valign="top" align="left">
<td>Bug in operating system</td>
<td>Wait for a patch or service pack, cross your fingers and hope they fix it<br />
Get a premium support contract, and pay Microsoft to fix your bug (note: even with the best support package, they may not do this for you)</td>
<td>Wait for a new release of the Operating system</td>
<td>Report a bug, wait for the next release<br />
Hire a developer to fix it<br />
Find other people affected by the bug, and pool your resources to fix it</td>
</tr>
<tr valign="top" align="left">
<td>Bug in application</td>
<td>Report it to application vendor, wait for them to fix it (or pay them to fix it)</td>
<td>Report it to application vendor, wait for them to fix it (or pay them to fix it)</td>
<td>Report it to application vendor, wait for them to fix it (or pay them to fix it)<br />
Hire a developer to fix it yourself</td>
</tr>
<tr valign="top" align="left">
<td>Bug in interaction between applications</td>
<td>You&#8217;re screwed. You&#8217;re completely at the mercy of one or both vendors.</td>
<td>You&#8217;re screwed.</td>
<td>Report it to both applications, and get guidance on how to address the issue.<br />
Hire a developer to create a workaround.<br />
Hire somebody to work with each application to integrate a real fix.</td>
</tr>
<tr valign="top" align="left">
<td>Help switching to another application</td>
<td>Pay the company for access to your data<br />
Pay a developer to reverse-engineer the data formats and extract it</td>
<td>You may be screwed&#8211;Apple has a reputation of making it really difficult to get your data back out of any of its applications</td>
<td>Open source applications usually use open data formats. You may have other options that require no changes to your data. Anybody with knowledge can help.</td>
</tr>
</table>
<p>What&#8217;s the key thing in this section? Addressing actual problems is within your control, when you&#8217;re working with open source. In the proprietary world, you&#8217;re entirely at the mercy of a single software vendor. If your problem is in the interaction between two different applications, you&#8217;re really stuck &#8212; there&#8217;s nothing you can do.</p>
<p>But in the open source world, there&#8217;s always something you can do. You can hire anybody with the skills to solve your problem, and fix it in the software itself. You don&#8217;t need any blessing from any single software vendor. </p>
<p>Open formats are perhaps more valuable than open source software, for most businesses. Because this is such a compelling advantage of open source software, many proprietary programs are beginning to open up their formats to allow other software to read them&#8211;their customers are demanding it.</p>
<p><strong>How long will it take to solve your problem?</strong><br />
I&#8217;m not going to bother with a table for this one. The answer is nearly always &#8220;too long,&#8221; regardless of the operating system.</p>
<p>Actually, that&#8217;s not quite always the case&#8211;it depends on whether somebody has already solved the problem or not, as well as whether the solution is a fix or a workaround.</p>
<p>Many, many problems in Windows are not really fixes, they&#8217;re just workarounds. The only real &#8220;fix&#8221; for a virus-infected machine is the workaround of reinstalling your operating system. The only fix for lots of other minor issues that cause your system to slow down over time is to reboot. These are not fixes, they&#8217;re workarounds.</p>
<p>Real fixes take a lot longer, and need acknowledgment that the problem is real. Workarounds are band aids to get you through until there&#8217;s a real fix. And there are some real differences between the entire approaches of each operating system around these fixes.</p>
<p>Windows is chock-full of workarounds. Because Microsoft has gone to great lengths to maintain backwards compatibility of just about everything that&#8217;s been released for Windows since Windows 95, it&#8217;s full of workarounds to keep the old behavior. Rather than fixing behavior that might really be undesirable, they&#8217;ve had to patch it with workarounds because too many existing applications turned out to depend on that bad behavior. That, fundamentally, is why Windows is so big, bloated, slow, and painful to work with.</p>
<p>Apple suffers a different problem: changing their closed libraries too quickly for external developers to keep up. Each release, they break lots of things, and don&#8217;t always tell 3rd party developers ahead of time. This means the number of third party developers of Apple software is shrinking&#8211;they&#8217;ve managed to alienate quite a few. So their polish and high quality comes at the price of having a healthy thriving developer community outside the walls of Apple. There&#8217;s little transparency in this process, so developers outside Apple are always playing catch-up, and having to work around these changes in behavior.</p>
<p>Linux has its share of problems, too. Linux does not attempt to maintain &#8220;binary&#8221; compatibility between versions, though it does its best to maintain compatibility in source code. There is endless debate about the &#8220;correct&#8221; way to fix a problem, and competition between fixes. The challenge of this is that it can be hard for application developers to keep up, especially if they want to keep their source code closed and only ship software in binary form.</p>
<p>But the process is completely, utterly transparent. Anybody can see the progress on any fixes to any part of the system, and can jump in with their own solution at any time. It&#8217;s a true meritocracy, with those doing the actual work and providing the best solutions winning out over time.</p>
<p>The whole open source ecosystem is nimble enough to provide real fixes to technical problems, rather than just simple workarounds. If the source of the problem is design, it can take a long time to get the right design in place and resolve all the issues that changing the design causes in other applications. But when a bug gets fixed, it&#8217;s really fixed and usually doesn&#8217;t appear again.</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/07/how_open_source_support_is_different/feed/</wfw:commentRss>
		</item>
		<item>
		<title>An example of open source support</title>
		<link>http://opensourcesmall.biz/archives/2008/07/an-example-of-open-source-support/</link>
		<comments>http://opensourcesmall.biz/archives/2008/07/an-example-of-open-source-support/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 23:20:12 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[01. Open Source]]></category>

		<category><![CDATA[02. Servers]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[dspam]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=254</guid>
		<description><![CDATA[In my early Linux system administration days, when I was first trying to set up a mail server with spam filtering, I ran across a really puzzling bug in Dspam, the software I was trying to get working. While all the other users of the software were getting great results, with Dspam catching 99%+ of [...]]]></description>
			<content:encoded><![CDATA[<p>In my early Linux system administration days, when I was first trying to set up a mail server with spam filtering, I ran across a really puzzling bug in Dspam, the software I was trying to get working. While all the other users of the software were getting great results, with Dspam catching 99%+ of all their spam, it was only catching about 70% of my spam after quite a bit of training.</p>
<p>I posted my results, and confusion, to the Dspam mailing list. The original developer of this software (which has thousands of users), Jonathan Zdziarski, responded that that did not sound right. He asked if he could log into my server and see what was wrong.</p>
<p>I created a test account for him, and logged in to the same screen so I could watch what he was doing. As I watched, he put debugging messages into his code, ran several tests, and within 10 minutes had identified the problem: the 19-digit number he put into the database (MySQL) was different than the 19-digit number he got out. It was a storage error in somebody else&#8217;s software causing the problem, a rounding error. He filed a bug in MySQL, and it was fixed within a month or two. But he also had a workaround for me: change the data type to a set of characters instead of an integer. Problem solved.</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/07/an-example-of-open-source-support/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The unwritten rules of open source support</title>
		<link>http://opensourcesmall.biz/archives/2008/07/the-unwritten-rules-of-open-source-support/</link>
		<comments>http://opensourcesmall.biz/archives/2008/07/the-unwritten-rules-of-open-source-support/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 23:19:14 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[01. Open Source]]></category>

		<category><![CDATA[02. Servers]]></category>

		<category><![CDATA[04. Desktop]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=253</guid>
		<description><![CDATA[What&#8217;s extraordinary about the open source community is that this level of support happens all the time, every day, without charge, in hundreds, thousands of projects out there. People that can get to the bottom of a problem and fix it at the source, not just provide a workaround, are directly reachable and motivated to [...]]]></description>
			<content:encoded><![CDATA[<p>What&#8217;s extraordinary about the open source community is that this level of support happens all the time, every day, without charge, in hundreds, thousands of projects out there. People that can get to the bottom of a problem and fix it at the source, not just provide a workaround, are directly reachable and motivated to see their software work as well as possible. They&#8217;re not hidden away from the public behind a large corporation, unreachable with layers of clueless support script readers stuffed between you and them. Here are some rules for getting open source support directly from the projects:</p>
<ul>
<li>Before asking anybody, do your homework. Use Google, read the project FAQ, make some attempt to learn the basics without pestering people with questions they&#8217;ve already answered hundreds of times. Nine times out of ten, your problem has already been encountered and somebody has figured out a workaround.</li>
<li>Limit the scope of your question to the fundamental problem. Get to the point. I&#8217;m obviously guilty of being tremendously long-winded at times, but unless your question is right at the top and asked directly, you&#8217;ll probably get ignored. Developers are busy, they don&#8217;t want to read a novel, but they&#8217;re usually happy to answer a question.</li>
<li>Provide supporting details after asking your question. Many programs will create a log with lots of information that can help somebody diagnose your problem. Find what looks relevant in the logs. Specify what version of operating system, distribution, application, etc. Specify what you were trying to do, what you expected, and what really happened. But provide this stuff after asking your initial question&#8211;people aren&#8217;t going to wade through a long email to find your question.</li>
<li>Contribute something. The easiest way you can contribute is by answering other people&#8217;s questions. The whole thing works because people help each other, and this help goes both ways. If you always ask questions and never answer anybody else&#8217;s, or provide any other sort of contribution, you&#8217;ll eventually start getting ignored.</li>
<li>Always, always, be positive, respectful, and polite when asking your questions. Developers have a lot invested in their project, and insulting it won&#8217;t gain you any favors. Developers are under no obligation to help you either&#8211;you haven&#8217;t paid for it. Common courtesy is valuable. Complements are welcome. </li>
<li>Be patient. Sometimes the person who has the answer to your question is away from the computer. Usually you&#8217;ll get your problem solved quicker than you would calling some tech support line, but there are times it&#8217;s going to take a while. If you don&#8217;t get any response in a reasonable period of time (judged by how active the list or forum is, reasonable could be a couple hours or a couple days), there are several likely reasons: You haven&#8217;t been specific enough in your question; you&#8217;re in the wrong forum (e.g. users when it&#8217;s a developer question); nobody else is trying to do what you&#8217;re doing (in which case you may need to hire someone with the right skills); the project is dead (it happens sometimes&#8211;find another one); or the developers are swamped (give them more time, or come up with a new scenario that sheds light on your problem in a different way).</li>
</ul>
<p>That list describes how we get open source support at Freelock. Aside from a couple unsupported hardware devices, or issues with proprietary programs, we have yet to get stumped, in over 6 years of extremely heavy Linux and open source use. We&#8217;ve never paid a dime for this support, though we have provided help to many others in return.</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/07/the-unwritten-rules-of-open-source-support/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What&#8217;s git, and why do you use it?</title>
		<link>http://opensourcesmall.biz/archives/2008/06/whats-git-and-why-do-you-use-it/</link>
		<comments>http://opensourcesmall.biz/archives/2008/06/whats-git-and-why-do-you-use-it/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 19:46:17 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[01. Open Source]]></category>

		<category><![CDATA[09. Document Management]]></category>

		<category><![CDATA[Economic Musings]]></category>

		<category><![CDATA[Technical]]></category>

		<category><![CDATA[code management]]></category>

		<category><![CDATA[dojo]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[joomla]]></category>

		<category><![CDATA[ledgersmb]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=250</guid>
		<description><![CDATA[At Freelock, we&#8217;re always trying to figure out ways to do things better. Recently I started digging into a developer tool that&#8217;s making, as Bryan over at the Linux Action Show would say, my head explode.
For a long time, we&#8217;ve managed our custom code projects and business documents in a central repository, called Subversion (also [...]]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://freelock.com">Freelock</a>, we&#8217;re always trying to figure out ways to do things better. Recently I started digging into a developer tool that&#8217;s making, as <a href="http://www.lunduke.com/" target="_blank">Bryan</a> over at the <a href="http://www.jupiterbroadcasting.com/?cat=4" target="_blank">Linux Action Show</a> would say, my head explode.</p>
<p>For a long time, we&#8217;ve managed our custom code projects and business documents in a central repository, called Subversion (also known as svn). Subversion is relatively easy to understand&#8211;it&#8217;s like having a library of files you can check a copy out of, do some work on it, and then check it back in. Subversion is the librarian that tracks who has copies of what, and when they checked it out. So if Erik checks in changes to a brochure, and then Jill goes to submit changes to the same document, Subversion will say &#8220;hey wait a minute, that document has already been changed&#8211;you need to make sure you put Erik&#8217;s changes in your document before I&#8217;ll let you put in your document.&#8221;</p>
<p>This is great for managing conflicts between people working on a single team, or for code that is being developed in relative isolation from the rest of the world.</p>
<p>The problem is, we&#8217;re doing more than that&#8211;we&#8217;re taking code from various open source projects and either customizing it or building new applications on top of it. And so when the outside projects get updated, we need to manually update anything we&#8217;ve written that depends on that code. There is no longer a single repository where we control our code&#8211;there is our code library, plus another one for every project we use.</p>
<p>This makes managing add-ons for projects like Joomla or ZenCart quite challenging, because our add-ons get scattered throughout the filesystem to be able to hook into the right place. And if we have to touch a core file, we&#8217;re going to end up needing to re-implement our change with any update to that core file.</p>
<p>There are other issues we run into, managing our code and hosting, all of which take fairly time-consuming, manual intervention. Here&#8217;s the list:</p>
<ul>
<li>Since we host and provide security updates for Joomla, Word Press, Zen Cart, Drupal, and others, we need to upgrade dozens of installations any time there&#8217;s a new release that has a fix for a security vulnerability. With Joomla this has happened quite a lot, and every Joomla installation needs to be upgraded individually&#8211;and tested. And since each installation is slightly different, we can&#8217;t manage them easily within a single repository, while updating the underlying code.</li>
<li>Templates, modules, components, blocks, themes, plugins, and whatever. Developing these types of add-ons are our bread-and-butter. But code for these often get scattered across an installation, making it quite difficult to manage just our add-ons while we develop them, or roll back to earlier versions if there&#8217;s a problem.</li>
<li><a href="http://dojotoolkit.org" target="_blank">The Dojo Toolkit</a>, and builds. We&#8217;re doing a lot of development with Dojo right now, to add desktop-like functionality such as trees, sortable tables, right-click menus, animations, and lots of other really cool things. However, if you don&#8217;t &#8220;build&#8221; the code after you write it, it&#8217;s painfully slow in a web browser. And due to the nature of how Subversion works, you can&#8217;t easily store a built Dojo tree if you ever want to change it again. Which means you&#8217;d need to build it every place you deploy it. And on some computers, it can take a long time to build&#8211;on our demo server, one of our projects currently takes 8 minutes.</li>
<li>As we get more directly involved with open source projects like <a href="http://ledgersmb.org">LedgerSMB</a>, we&#8217;re finding the need to change core files while we hack away at some particular feature. To do this, you create a branch of the code, work on your feature, and then merge your changes back into the &#8220;trunk.&#8221; If you don&#8217;t have access to save directly to the project repository, doing this gets a lot more complicated.</li>
</ul>
<p>Git to the rescue. Git solves all of these issues. Read on for a technical discussion of how.<br />
<span id="more-250"></span><br />
<strong>Managing lots of installations with Git</strong><br />
We haven&#8217;t yet started doing this, but for projects like Joomla and ZenCart, this is going to be really effective. It&#8217;s not quite as helpful for Drupal, which allows for a bunch of sites to be centrally managed out of the box&#8211;though even there it will help us recover quickly from a failed upgrade.</p>
<p>Here&#8217;s the basic approach:</p>
<ol>
<li>Create a master git repository, either by pulling down the Subversion repository using git svn, or just unpacking tarballs of a release and importing into our git repository for the project.</li>
<li>Create a new git clone for each installation, and drop into each installation directory. Create a current branch for that repository, and rebase it to the current installed version.</li>
<li>Commit local modifications to the repository. Make sure the .git directory is getting backed up, and is not accessible through the web server.</li>
<li>When a new release is available, use git pull to update each local installation. Use git reset HEAD^ &#8211;hard to undo if there&#8217;s a problem.</li>
</ol>
<p><strong>Managing submodules, customizations</strong><br />
This we get pretty much for free by having dedicated repositories for particular problems. Managing add-ons we&#8217;d like to use elsewhere can still be challenging, but we can pull customizations from other repositories to assemble custom packages&#8211;it&#8217;s at least easier to manage these across installations.</p>
<p>The main thing to do is to make sure when you&#8217;re developing on a particular add-on, you&#8217;re always doing it in a branch dedicated to those changes. Then you can merge them into other projects more easily. It&#8217;s also possible to &#8220;cherry-pick&#8221; commits involving particular files, and pull those changes into a new branch if development ended up getting mixed in with different features.</p>
<p><strong>Dojo Toolkit builds</strong><br />
We&#8217;re huge fans of the Dojo Toolkit. It makes developing really sophisticated browser-based applications much easier, not just providing a large set of active widgets but also a data abstraction layer and an encapsulation system for your own code.</p>
<p>Its biggest downside is that every feature you want to use means adding another file that the browser needs to load. And we use a lot of features&#8230; the base package loads about 20 files, and in our applications there are well over a hundred. This takes a long time to load, and isn&#8217;t very scalable.</p>
<p>The solution? Use the Dojo build process. A Java program can build all the features you want to use into a single compressed, stripped, javascript file. The difference in speed is incredible&#8211;applications suddenly load right up. And this build system can easily build your Javascript as well.</p>
<p>The problem is, this build system is not compatible with Subversion, because Subversion scatters its working copy data inside each directory, but the build system deletes the directories every time you build. So you can&#8217;t easily manage built code inside Subversion.</p>
<p>Git stores all of its repository information in the top level directory, so you can easily build and re-build Dojo and manage it without any issues.</p>
<p><strong>Do local development on open source projects</strong><br />
Now here&#8217;s the traditional reason to use git: to allow you to manage changes to open source projects without needing write access to their code repositories. We simply set up git repositories to track their Subversion repository, and then we can use all the features of git to manage our customizations.</p>
<p>When the original project has new releases, we just pull them into our repository and git handles most of the merging for us. If we want to contribute back to the project, we can copy them into our Subversion tracking branch and commit them straight back to Subversion&#8211;or send a patch.</p>
<p>We&#8217;re starting to set up public git repositories for projects we work with extensively. You can browse them here:<a href="http://git.freelock.com"> http://git.freelock.com</a>. You can clone and pull updates from here: git://git.freelock.com/git/&lt;projectname&gt;.git. You can read more about how to manage non-standard Subversion repositories in git <a href="http://freelock.com/kb/Git">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/06/whats-git-and-why-do-you-use-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft breaks WebDAV in Windows XP, Vista</title>
		<link>http://opensourcesmall.biz/archives/2008/06/microsoft-breaks-webdav-in-windows-xp-vista/</link>
		<comments>http://opensourcesmall.biz/archives/2008/06/microsoft-breaks-webdav-in-windows-xp-vista/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 17:45:51 +0000</pubDate>
		<dc:creator>freelock</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://opensourcesmall.biz/?p=251</guid>
		<description><![CDATA[Unbelievable. Microsoft was one of the first places to support WebDAV, and after a little investigation, looks like they&#8217;ve completely changed how they support it&#8211;with security implications, and an amazing amount of brokenness&#8230;
At Freelock, we&#8217;ve used WebDAV to allow our clients to access to our servers since day 1. FTP is fundamentally unsecure, and as [...]]]></description>
			<content:encoded><![CDATA[<p>Unbelievable. Microsoft was one of the first places to support WebDAV, and after a little investigation, looks like they&#8217;ve completely changed how they support it&#8211;with security implications, and an amazing amount of brokenness&#8230;</p>
<p>At Freelock, we&#8217;ve used WebDAV to allow our clients to access to our servers since day 1. FTP is fundamentally unsecure, and as business level hosts, we refuse to allow that. SFTP is a really good option, but it does require us to set up local user accounts on the server and allow a higher level of access&#8211;something we would prefer not to do on our shared servers. WebDAV has long been the clear answer to this, supported by every major operating system with no extra add-ons, and also supported by most web development tools natively. That is, until last year, when Microsoft completely changed the way they do WebDAV. It even breaks compatibility with their own Sharepoint software!</p>
<p>Without testing this fully, this appears to be the situation, version by version:</p>
<p>* Windows 98, 2000, XP (does this still work in SP2/3? Dunno):<br />
- Use Internet Explorer. Go to the File -> Open dialog, check the box to open as web folder, enter the WebDAV URL, and open.<br />
This works really well, though if you bookmark it, it will open it as a web page, no longer a web folder.</p>
<p>* Windows XP SP2:<br />
1. Apply a registry hack to enable basic authentication<br />
2. Open Windows Explorer, and go to Tools -> Map Network Drive<br />
3. Enter the path to the drive (you cannot use https unless you have Office installed) and a drive letter to map. Alternatively, use NET USE on the command line.</p>
<p>* Vista:<br />
1. Apply registry hack to enable basic authentication (or set up server to use Digest authentication, and strip domain name out of user credentials)<br />
2. Set up server to not reject requests to anywhere in the path for OPTIONS and PROPFIND requests</p>
<p>Read on for more details.<br />
<span id="more-251"></span></p>
<p>Microsoft disables basic authentication in Vista and now in Windows XP SP2. To turn it back on, it takes a registry hack:<br />
<a href="http://support.microsoft.com/kb/841215">http://support.microsoft.com/kb/841215</a><br />
<a href="http://www.simple-groupware.de/cms/Main/WebDAV">http://www.simple-groupware.de/cms/Main/WebDAV</a></p>
<p>First of all, it looks like there&#8217;s a Microsoft fix you can download that makes it work SOMETIMES.<br />
<a href="http://kb.iu.edu/data/araf.html">http://kb.iu.edu/data/araf.html</a></p>
<p>Windows XP only supported SSL-secured webdav if MS Office is installed:<br />
<a href="http://www.vistax64.com/vista-general/20684-webdav-windows-vista.html">http://www.vistax64.com/vista-general/20684-webdav-windows-vista.html</a></p>
<p>Also in that thread: instructions for using &#8220;net use&#8221; to mount a webdav folder&#8211;maybe something we can create a batch file for?</p>
<p>Nice instructions, with screenshots:<br />
<a href="http://kb.wisc.edu/luwmad/page.php?id=6280">http://kb.wisc.edu/luwmad/page.php?id=6280</a><br />
<a href="http://www.yale.edu/its/software/win/configuration_instructions/WebDAV-Vista.pdf ">http://www.yale.edu/its/software/win/configuration_instructions/WebDAV-Vista.pdf</a></p>
<p>Something to try: using backslashes in the URL:<br />
<a href="http://www.wensh.net/archive.php/topic/1478.html">http://www.wensh.net/archive.php/topic/1478.html</a></p>
<p>Lots of investigation in this thread:<br />
<a href="http://www.nabble.com/WebDAV-with-Windows-Vista-to9454856.html">http://www.nabble.com/WebDAV-with-Windows-Vista-to9454856.html</a><br />
&#8230; along with the rather astonishing network trace showing how broken it is&#8230;</p>
<p>From the Subversion book: <a href="http://svnbook.red-bean.com/en/1.2/svn.webdav.clients.html">http://svnbook.red-bean.com/en/1.2/svn.webdav.clients.html</a></p>
<blockquote><p><strong>Microsoft Web Folders</strong></p>
<p>Microsoft was one of the original backers of the WebDAV specification, and first started shipping a client in Windows 98, known as “Web Folders”. This client was also shipped in Windows NT4 and 2000.</p>
<p>The original Web Folders client was an extension to Explorer, the main GUI program used to browse filesystems. It works well enough. In Windows 98, the feature might need to be explicitly installed if Web Folders aren&#8217;t already visible inside “My Computer”. In Windows 2000, simply add a new “network place”, enter the URL, and the WebDAV share will pop up for browsing.</p>
<p>With the release of Windows XP, Microsoft started shipping a new implementation of Web Folders, known as the “WebDAV mini-redirector”. The new implementation is a filesystem-level client, allowing WebDAV shares to be mounted as drive letters. Unfortunately, this implementation is incredibly buggy. The client usually tries to convert http URLs (http://host/repos) into UNC share notation (\\host\repos); it also often tries to use Windows Domain authentication to respond to basic-auth HTTP challenges, sending usernames as HOST\username. These interoperability problems are severe and documented in numerous places around the web, to the frustration of many users. Even Greg Stein, the original author of Apache&#8217;s WebDAV module, recommends against trying to use XP Web Folders against an Apache server.</p>
<p>It turns out that the original “Explorer-only” Web Folders implementation isn&#8217;t dead in XP, it&#8217;s just buried. It&#8217;s still possible to find it by using this technique:</p>
<p>  1.      Go to &#8216;Network Places&#8217;.<br />
  2.      Add a new network place.<br />
  3.      When prompted, enter the URL of the repository, but include a port number in the URL. For example, http://host/repos would be entered as http://host:80/repos instead.<br />
  4.      Respond to any authentication prompts.</p>
<p>There are a number of other rumored workarounds to the problems, but none of them seem to work on all versions and patchlevels of Windows XP. In our tests, only the previous algorithm seems to work consistently on every system. The general consensus of the WebDAV community is that you should avoid the new Web Folders implementation and use the old one instead, and that if you need real a real filesystem-level client for Windows XP, then use a third-party program like WebDrive or NetDrive.</p>
<p>A final tip: if you&#8217;re attempting to use XP Web Folders, make sure you have the absolute latest version from Microsoft. For example, Microsoft released a bug-fixed version in January 2005, available at <a href="http://support.microsoft.com/?kbid=892211">http://support.microsoft.com/?kbid=892211</a>. In particular, this release is known to fix a bug whereby browsing a DAV share shows an unexpected infinite recursion.</p></blockquote>
<p>Unbelievable. Of course, this client is the one they dropped from Vista, so now you&#8217;re really stuck&#8230;</p>
<blockquote><p><strong>WebDrive, NetDrive</strong></p>
<p>Both WebDrive and NetDrive are excellent commercial products which allows a WebDAV share to be attached as drive letters in Windows. We&#8217;ve had nothing but success with these products. At the time of writing, WebDrive can be purchased from South River Technologies (<a href="http://www.southrivertech.com">http://www.southrivertech.com</a>). NetDrive ships with Netware, is free of charge, and can be found by searching the web for “netdrive.exe”. Though it is freely available online, users are required to have a Netware license. (If any of that sounds odd to you, you&#8217;re not alone. See this page on Novell&#8217;s website: <a href="http://www.novell.com/coolsolutions/qna/999.html">http://www.novell.com/coolsolutions/qna/999.html</a>)</p></blockquote>
<p>Detailed list of versions and broken-ness:<br />
<a href="http://www.greenbytes.de/tech/webdav/webdav-redirector-list.html">http://www.greenbytes.de/tech/webdav/webdav-redirector-list.html</a><br />
<a href="http://en.wikipedia.org/wiki/WebDAV">http://en.wikipedia.org/wiki/WebDAV</a></p>
<p>Possible clients to try:<br />
EnginSite DataFreeway: <a href="http://www.enginsite.com/Download.htm#Freeware">http://www.enginsite.com/Download.htm#Freeware</a>  (Proprietary, Free)<br />
BitKinex: <a href="http://www.sharewareconnection.com/download-bitkinex-ftp-client-from-sharecon.html">http://www.sharewareconnection.com/download-bitkinex-ftp-client-from-sharecon.html</a> (Shareware)<br />
WebDrive: <a href="http://www.sharewareconnection.com/webdrive.htm">http://www.sharewareconnection.com/webdrive.htm</a> (Free evaluation, $59/year)<br />
NetDrive: <a href="http://www.sharewareconnection.com/netdrive.htm">http://www.sharewareconnection.com/netdrive.htm</a> (Commercial but free)</p>
<p>Server configurations:<br />
It sounds like there are two main new issues to consider when setting up a server for use by the native Vista WebDAV client (if you could call it that):<br />
1. Need to allow WebDAV extensions at the site root for all users&#8211;specifically OPTIONS and PROPFIND.<br />
<a href="http://forums.techarena.in/showthread.php?p=2661117">http://forums.techarena.in/showthread.php?p=2661117</a><br />
<a href="http://www.borlik.net/blog/archives/000157.html">http://www.borlik.net/blog/archives/000157.html</a></p>
<p>2. Might need to rewrite authentication headers to remove the server or host name from the username. Found a link to a Java servlet configuration that did this&#8211;lost it now.</p>
]]></content:encoded>
			<wfw:commentRss>http://opensourcesmall.biz/archives/2008/06/microsoft-breaks-webdav-in-windows-xp-vista/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
