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

<channel>
	<title>Saalon Muyo &#187; Coding</title>
	<atom:link href="http://www.saalonmuyo.com/category/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.saalonmuyo.com</link>
	<description>Flashlights and Explosions</description>
	<lastBuildDate>Sat, 13 Mar 2010 03:46:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Railscasts Is Awesome</title>
		<link>http://www.saalonmuyo.com/2010/02/05/railscasts-is-awesome/</link>
		<comments>http://www.saalonmuyo.com/2010/02/05/railscasts-is-awesome/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 15:13:32 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=772</guid>
		<description><![CDATA[I&#8217;ve been learning Ruby on Rails for new job, and that means a lot of frustrating Google searches to find the answer to what you think are really simple questions.  Every once and a while, I&#8217;d come across a site called Railscasts that would seem to have the answer, but in video-podcast form.  Since I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been learning Ruby on Rails for new job, and that means a lot of frustrating Google searches to find the answer to what you <em>think</em> are really simple questions.  Every once and a while, I&#8217;d come across a site called <a title="Railscasts" href="http://railscasts.com" target="_blank">Railscasts</a> that would seem to have the answer, but in video-podcast form.  Since I was impatient, and because the audio card in my work computer was non-functional, I&#8217;d grimace and move along.</p>
<p>Yesterday, while looking for the proper Railsy way of doing dynamic sidebars, it became clear that breaking down and watching <a title="Layouts and content_for" href="http://railscasts.com/episodes/8-layouts-and-content-for" target="_blank">the railscast that specifically covered the topic</a> was the right thing to do.  An hour and a few failed driver installs later, I had sound and was ready to go.</p>
<p>I shouldn&#8217;t have waited this long.</p>
<p>I&#8217;m naturally skeptical of video podcasts, or really podcasts of any kind, when I&#8217;m looking for the answer to a problem.  Generally I can read faster than I can listen, and I have that cranky Luddite gene that makes me skeptical of newfangled ways of doing things.  The irony of being adverse to change while working on a newfangled web development platform does not escape me.  But sometimes &#8211; maybe a lot of the time -  you&#8217;re wrong, and I was dead wrong here.</p>
<p>Railscasts is run by <a title="Ryan Bates" href="http://workingwithrails.com/person/6491-ryan-bates" target="_self">Ryan Bates</a>.  He does great job of covering useful topics and doing it succinctly.  Most of the casts are around 5 minutes long, which strikes me as a sweet spot for answering a question in video form without being irritating.  I had about a dozen questions about Rails when I found it; questions that weren&#8217;t technical enough to look up in a reference guide.  It&#8217;s one thing to search for the syntax for removing whitespace from a string in Ruby (strip, by the way).  It&#8217;s another to find something a little higher level, problems you have <em>a</em> technical solution for, but probably not the <em>right</em> one.  Railscasts nails these topics, and nails an awful lot of them.</p>
<p>Kudos, Ryan, and thanks for the help.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2010/02/05/railscasts-is-awesome/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using form_tag in Ruby on Rails</title>
		<link>http://www.saalonmuyo.com/2010/01/27/using-form_tag-in-ruby-on-rails/</link>
		<comments>http://www.saalonmuyo.com/2010/01/27/using-form_tag-in-ruby-on-rails/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 18:41:05 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=743</guid>
		<description><![CDATA[I had some trouble finding a less than simplistic example of using the form_tag in Rails yesterday and, after griping on twitter about it was called out and told to do it myself.  Good advice.  Here we go.
In Rails you&#8217;ve got two ways to create a form:  form_for and form_tag.  You see examples for form_for [...]]]></description>
			<content:encoded><![CDATA[<p>I had some trouble finding a less than simplistic example of using the form_tag in Rails yesterday and, after <a href="http://twitter.com/saalon/statuses/8236785574">griping</a> on twitter about it was <a href="http://twitter.com/techburgh/statuses/8236800625">called out</a> and told to do it myself.  Good advice.  Here we go.</p>
<p>In Rails you&#8217;ve got two ways to create a form:  <strong>form_for</strong> and <strong>form_tag</strong>.  You see examples for form_for everywhere, because that&#8217;s what you use to directly interact with the models you created in your database.  But a lot of times you need to create a form that has no interaction with your database and that isn&#8217;t mapped to any data model.  Enter form_tag.</p>
<p>There are two syntatic differences between forms created with form_for and those with form_tag.  First, you typically declare form_for like this:</p>
<pre>&lt;% form_for(@person) do |f| %&gt;</pre>
<p>And from then on you add fields using the <strong>f</strong> variable you just defined, like <strong>f.text_field</strong> or <strong>f.select</strong>.  The other difference is that the way you declare the fields themselves changes.  <strong>text_field</strong> becomes <strong>text_field_tag</strong>,<strong> select </strong>becomes<strong> select_tag</strong> and so on.  The reason is that text_field is meant, just like form_for, to interact with a defined object model.  All those ones ending in _tag are for unbound forms.</p>
<pre>&lt;% form_tag(create_ticket_path, :method=&gt;'post', :multipart =&gt; true) do %&gt;</pre>
<p>In the example, you see a couple of things.  First, when defining a form_tag you can&#8217;t just pass it an object and let rails figure out what needs to happen.  You need to tell it, first, what URL to point at and, second, what HTTP call to make (typically post or put).  Those are the first two parameters. In my case, I have a path defined in my routes.rb for create_ticket, so I can call create_ticket_path to get it. And I&#8217;m creating a support ticket, so I&#8217;m going to use the &#8216;post&#8217; method.</p>
<p>The third parameter is where you pass your options, which are roughly the same as the options you can pass form_for.  You&#8217;ll see in mine I passed it <strong>:multipart =&gt; true</strong>.  I do that to define a multipart form so that I can let people upload a file on submission.</p>
<p>The other thing to note is when defining the input fields.  When using form_for, you can just pass, say, <strong>text_field</strong> the symbol for the field you want it bound to. So, if you were creating a field for the subject of a support ticket request, you&#8217;d do:</p>
<pre>&lt;%= f.text_field :subject %&gt;</pre>
<p>Rails figures out the rest.  Without the model, we need to do it ourselves and define the field&#8217;s id.  (If you wanted to have a default value, you&#8217;d put it in the second parameter, but for this example it doesn&#8217;t really make sense).</p>
<pre>&lt;%= text_field_tag "subject" %&gt;</pre>
<p>Pretty simple, I know.  But sometimes you just need to see how the syntax works, and it felt like every tutorial assumed every form would either use Rails&#8217; models and form_for, or your form_tag usage would be hilariously simple.  The full example of the form is below.  Just like when you use form_for, if you&#8217;re catching this with a rails controller, everything will be available through the <strong>params[]</strong> array.  So, to catch that <strong>text_field_tag &#8220;subject&#8221;</strong> all you have to do in your controller is grab for <strong>params[:subject] </strong>.</p>
<p>File uploads are their own story, but to get you started, it&#8217;ll be in params just like everything else. Just be sure to use :multipart =&gt; true or your form will quietly ignore that an attachment was chosen.</p>
<p>Easy, right?</p>
<pre>&lt;% form_tag(create_ticket_path, :method=&gt;'post', :multipart =&gt; true) do %&gt;
 &lt;p&gt;
   Subject:&lt;br /&gt;
   &lt;%= text_field_tag "subject" %&gt;
 &lt;/p&gt;
 &lt;p&gt;
   Priority: &lt;br /&gt;
   &lt;%= select_tag("priority", options_for_select([['Critical', '1'],
                 ['Important', '2'],['Standard','3']], '3')) %&gt;
 &lt;/p&gt;
 &lt;p&gt;
   Describe your problem:&lt;br /&gt;
   &lt;%= text_area_tag "description", "", :size=&gt;"50x20" %&gt;
 &lt;/p&gt;
 &lt;p&gt;
   Add an attachment:&lt;br /&gt;
   &lt;%= file_field_tag "attachment" %&gt;
 &lt;/p&gt;
 &lt;p&gt;
   &lt;%= submit_tag 'Submit' %&gt;
 &lt;/p&gt;
&lt;% end %&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2010/01/27/using-form_tag-in-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hate Everything About This</title>
		<link>http://www.saalonmuyo.com/2010/01/27/hate-everything-about-this/</link>
		<comments>http://www.saalonmuyo.com/2010/01/27/hate-everything-about-this/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 16:18:43 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=732</guid>
		<description><![CDATA[Have I talked about my new job yet? I&#8217;m not sure, and I&#8217;m too lazy to look.  At least, I know I haven&#8217;t really talked about it yet.
Whatever. It&#8217;s only tangential to this.  I&#8217;ll get there later.  Oh, and the title isn&#8217;t referring to my job.  That&#8217;s going pretty well.  Anyway.
My first real assignment here [...]]]></description>
			<content:encoded><![CDATA[<p>Have I talked about my new job yet? I&#8217;m not sure, and I&#8217;m too lazy to look.  At least, I know I haven&#8217;t really <em>talked</em> about it yet.</p>
<p>Whatever. It&#8217;s only tangential to this.  I&#8217;ll get there later.  Oh, and the title isn&#8217;t referring to my job.  That&#8217;s going pretty well.  Anyway.</p>
<p>My first real assignment here was to create a web portal to our support ticket system: <a title="HEAT Help Desk" href="http://www.frontrange.com/heat.aspx" target="_blank">HEAT</a>. We&#8217;d had the system for  a year, but my two predecessors had been unable to get a web front end running for it. HEAT apparently comes with its own front end, HEAT Self Service, so why there had been so much trouble was not clear.  I started to get really worried when my co-worker told me her nickname for the system:  <strong>Hate Everything About This</strong>.</p>
<p>Ok. So it sucks.  But how much can a support ticket system really suck? This would be my third system I&#8217;d be throwing code at, and I&#8217;d seen some noxious stuff, but nothing that would have kept me from adding a ticket to the system through its API.  And you know what? As far as the coding went, I was mostly right.  The API worked.  I got tickets back. I could create them, too.  After understanding its slightly confusing attachment system (you send it a link to the attachment, but save the actual file yourself somewhere), there wasn&#8217;t anything all that difficult about it.</p>
<p>Then I loaded up the application itself and started to use it. That&#8217;s about when the hate began.</p>
<p>I&#8217;ve seen support ticket systems be clunky.  I&#8217;ve seen them have UIs that were confusing and even nonsensical.  I&#8217;ve seen an action that should take one click take three.  But I&#8217;ve never seen a support system so completely embody every single bad design idea possible all in one package.</p>
<p>Let&#8217;s say a new ticket just got into the system, into the general queue and isn&#8217;t assigned to anyone yet.  You see it and it&#8217;s one of those things where you can just rattle off an answer and close it immediately. What do you have to do if you want that ticket to show as <em>Closed</em>? Well.</p>
<hr />
<ol>
<li>Click on the <em>Assignments</em> tab.</li>
<li>Click <em>New</em> to create a new assignment.</li>
<li>Pick your group then pick yourself out of the nested drop-down lists.</li>
<li>Save the Assignment.</li>
<li>Enter information into the <em>Assignment</em> resolution.  Note, this is <strong>not</strong> the call resolution. You are just resolving your part in the ticket.</li>
<li>Click <em>Resolve</em> for the assignment.</li>
<li>Go into the main Call Info tab and enter <em>Resolution</em> information there.</li>
<li>Now click <em>Resolve</em> to resolve the call.</li>
<li>Click File-&gt;Quick Close (you can start laughing now).</li>
</ol>
<hr />
<p>If you fail to do any of this, the call will not let you close it.  Thankfully, it will at least tell you what you&#8217;re missing, but when it tells you you have more work to do closing the ticket than you did to fix the problem, you probably won&#8217;t be feeling very gracious.</p>
<p>The whole system is laid out that way. Getting from the list of calls to the list of customers is, at best, perplexing.  As is the as-yet-mysterious handling of its Call Groups, which make it very easy to not see a ticket and not realize that you are not seeing a ticket.</p>
<p>I hope that someone reading this is considering buying HEAT and that this post has just made their decision for them.  That&#8217;d make this all worth it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2010/01/27/hate-everything-about-this/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Templation</title>
		<link>http://www.saalonmuyo.com/2009/11/10/templation/</link>
		<comments>http://www.saalonmuyo.com/2009/11/10/templation/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 16:36:41 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=695</guid>
		<description><![CDATA[I&#8217;ve been thinking a bit about the different ways platforms handle html and web content recently.  Probably because I&#8217;m right in the middle of working on my company&#8217;s Customer Center and struggling to shift from the work I&#8217;ve done recently in PHP to the ASP.Net platform my company uses.
PHP supports a model that&#8217;s a lot [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking a bit about the different ways platforms handle html and web content recently.  Probably because I&#8217;m right in the middle of working on my company&#8217;s Customer Center and struggling to shift from the work I&#8217;ve done recently in PHP to the ASP.Net platform my company uses.</p>
<p>PHP supports a model that&#8217;s a lot closer to the way I think, though I don&#8217;t know if it&#8217;s actually a <em>good</em> model.  You create your page, include other pages to fill in chunks of that page (like loading the header and footer) and, when needed, slap in some code amidst the page itself to dynamically load pieces.  If you need a person&#8217;s name to appear in the top of the page when they&#8217;ve logged in, you can just put in the function call to getUserName(); and whatever that function returns gets put into the page.  It&#8217;s a very procedural way of thinking through your page, and it&#8217;s comfortable.</p>
<p>ASP.Net &#8211; the default way,  not their newer Model-View-Controller pattern &#8211; does things in this weird hybrid way that&#8217;s a totally uncomfortable way of thinking.  You still create your base page &#8211; index.aspx or whatever &#8211; and into that page you can stick includes for other code and you can also call a templated header/footer file like you would in PHP.  But the implementation is oddly circular.  In an effort to avoid a separate header and footer file, ASP.Net uses Master Pages.   Unlike PHP, you don&#8217;t get to say, on the page itself, &#8220;Stick the header here, then do this other stuff, then stick the footer here.&#8221;</p>
<p>Instead you build a Master Page that you lay out like a normal page, except that where the content would go, you put an asp:contentplaceholder tag.  Then, at the top of the actual page, when you&#8217;re declaring the namespace for the page and where the code file lies, you say, essentially &#8220;Use this Master Page&#8221; which tells ASP.Net to take everything you wrote on the actual page and shove it into the place where the contentplaceholder tag is sitting.  It makes a sort of sense, but it forces you to think about the page layout from two different directions, and to build your actual code in a way that doesn&#8217;t map to the way the page will look when it&#8217;s done.</p>
<p>This isn&#8217;t helped by the fact that additional included code is done using User Controls, that feel like another type of file just to have a different type of file.  I guess it&#8217;s comfortable if you need a certain amount of forced abstraction, but it makes for pages that are really hard to pick apart.  Nor does the ASP.Net model of separating the HTML part of the page from the code itself help with the clarity.  They&#8217;ve got a fancy term for it &#8211; Code Behind &#8211; but it just means more time figuring out what&#8217;s loading and in what order.</p>
<p>PHP&#8217;s model certainly does not reward clarity, nor does it punish obscurity, but my experience with ASP.Net is that it enforces a certain opacity that isn&#8217;t good for development.  The model works &#8211; I&#8217;ve used it for years and gotten good work done with it &#8211; but it&#8217;s uncomfortable.</p>
<p>But is it wrong?  Is PHP&#8217;s procedurally minded comfort just a crutch?  And is Model-View-Controller, which I haven&#8217;t delved into yet, a help or is it just another flawed abstraction that confuses as much as it clarifies?  The whole nature of web development is coming up with ways of building templates that we can easily shove different things into as we need.  What works for you? Anything? Nothing?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2009/11/10/templation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Of Makers and Managers</title>
		<link>http://www.saalonmuyo.com/2009/08/01/of-makers-and-managers/</link>
		<comments>http://www.saalonmuyo.com/2009/08/01/of-makers-and-managers/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 15:12:58 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creating]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=542</guid>
		<description><![CDATA[There&#8217;s a thing about scheduling that anyone who&#8217;s ever programmed, or written or designed for a job knows that people who haven&#8217;t have trouble understanding.  Meetings don&#8217;t just keep you from working while you&#8217;re at them. They screw you up when you know it&#8217;s coming up and they screw you up for an hour or [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s <a href="http://www.paulgraham.com/makersschedule.html" target="_blank">a thing</a> about scheduling that anyone who&#8217;s ever programmed, or written or designed for a job knows that people who haven&#8217;t have trouble understanding.  Meetings don&#8217;t just keep you from working while you&#8217;re at them. They screw you up when you know it&#8217;s coming up and they screw you up for an hour or two after they&#8217;re done.  Paul Graham talks about this discrepancy between &#8220;makers&#8221; and &#8220;managers.&#8221;</p>
<blockquote><p>When you&#8217;re operating on the maker&#8217;s schedule, meetings are a disaster. A single meeting can blow a whole afternoon, by breaking it into two pieces each too small to do anything hard in. Plus you have to remember to go to the meeting. That&#8217;s no problem for someone on the manager&#8217;s schedule. There&#8217;s always something coming on the next hour; the only question is what. But when someone on the maker&#8217;s schedule has a meeting, they have to think about it.</p>
<p>For someone on the maker&#8217;s schedule, having a meeting is like throwing an exception. It doesn&#8217;t merely cause you to switch from one task to another; it changes the mode in which you work.</p></blockquote>
<p>I recently finished up a huge project at work.  We moved basically every system but one in the company to a new system, and we did it in less than six months.  This meant that every single department in the company had a significant piece of their job being moved from a familiar system to some new thing that no one fully understood.  That meant someone had to talk to the departments so that we, the development team, could build out the new system properly.</p>
<p>That someone turned to be the development team itself.</p>
<p>The bulk of our work was done over a three month period, during which we had to find out what department heads wanted, find out if what we had done met what they wanted and then make sure what they wanted didn&#8217;t clash with what other department heads wanted.  This meant a lot of meetings. A. Lot. Of. Meetings.</p>
<p>There were weeks where I had meetings every other hour.  Those were the weeks I got nothing done.  There was no way for me to get out of a meeting, sort out what we had just talked through and prepare for the next meeting in the hour I had free.  So that also meant I got no design and no programming done either.  Those four hours of meetings might as well have been eight.  At a certain point, your day is segmented that you never get any momentum.</p>
<p>When I&#8217;m getting ready to write or program, I spend some time doing what looks like nothing. I skip between websites, send off a brief, no-thought e-mail or two, drop a few pointless notes on twitter.  Stuff like that.  I know when my wife looks at me flitting between websites, she thinks I&#8217;m not working and thinks she can talk to me without interrupting anything.  I can&#8217;t blame her, but what I&#8217;m doing is part of working.  I&#8217;m clearing my head, getting into a place where I can do what I have to do.  Things like phone calls from co-workers and my wife showing me funny things on her computer screw that process up.  And meetings?  They absolutely demolish it.</p>
<p>In the creative world this is less of a problem.  Writers work from home, so at the least they don&#8217;t have to worry about management meetings and status calls.  Programmers are forced to deal with a half dozen people who think that an hour meeting really only steals an hour out of their day.  In fact, suggesting otherwise is met by a mixture of puzzlement and outright hostility.</p>
<p>But hey, who wants your people to get stuff done when they can have a meeting about the things that could be working on if they weren&#8217;t actually in the meeting?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2009/08/01/of-makers-and-managers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Brief Note On Open Source</title>
		<link>http://www.saalonmuyo.com/2009/07/13/534/</link>
		<comments>http://www.saalonmuyo.com/2009/07/13/534/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 23:01:51 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=534</guid>
		<description><![CDATA[Planet Money posted about a software engineer for Goldman Sachs who&#8217;s been charged with stealing proprietary code.  As part of the case, the developer mentions that he was only looking to take home the open source code and not all of it.
I don’t think the description of open source software on the post got to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.npr.org/blogs/money/2009/07/whats_the_deal_with_that_goldm.html" target="_blank">Planet Money posted about a software engineer for Goldman Sachs</a> who&#8217;s been charged with stealing proprietary code.  As part of the case, the developer mentions that he was only looking to take home the open source code and not all of it.</p>
<p>I don’t think the description of open source software on the post got to the heart of things. One of the listeners gave a fair description, but missed some areas that I thought were important. She was correct in saying that the license the software is under is what&#8217;s actually important, not just that it&#8217;s &#8220;open source,&#8221; but the way this applies to Aleynikov’s case deserves clarification.</p>
<p>Open source tends to mean something different depending on who you ask. The Open Source Initiative has a definition of what they would like it to mean, but in practice it gets used in all kinds of often incorrect ways. But let&#8217;s use the OSI&#8217;s definition as a starting point.</p>
<p>Open source licenses cover distribution and modification of software. In a general sense, an Open Source Software license says that if you let me download an application, you also need to give me the source code for it and you can&#8217;t stop me from making changes or sending the application to someone else.</p>
<p>It’s more complicated than it sounds. Programmers tend to take chunks of code and insert them into something else. If I downloaded an e-mail application and liked how they handled text searching, I might take that and put it into my support ticket software. Does that mean my support ticket software is now open source, too?</p>
<p>It depends on the license. Some say &#8220;If you take any code, your application must use the same license we did.&#8221; Others say, &#8220;You don&#8217;t have to use the same license, but you&#8217;ve got to use one that follows the OSI definition.&#8221; Some don&#8217;t care at all; you can use the code however you want. Most licenses that see wide use don&#8217;t care at all until I actually give my program to someone else.</p>
<p>Here’s the thing about this case: This is about an employee of a company taking code with him when he left. This gets into much hairier legal ground over ownership and what other agreements the employee signed. Even when an employee uses code covered by an open source license at work, that doesn&#8217;t necessarily give them the right to determine how it will be distributed.</p>
<p>Let&#8217;s say I was working for a company when I was building that support ticket system, and the code I used came from one of those licenses that said &#8220;Hey, use this however you want with no restrictions.&#8221; At that point, the employer owns the code and it&#8217;s up to them how that code can be used. It doesn&#8217;t matter that the original code was free to use. This stays true even if the code was covered by a license saying any derivative works needed to use the same license. Since the license covers redistribution, and the decision to distribute stays with the owner of the code, it&#8217;s still under the employer&#8217;s control.</p>
<p>(Thanks to <a title="p1k3" href="http://p1k3.com" target="_blank">Brennen</a> for looking over this and making some important corrections)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2009/07/13/534/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Killing Your Brand</title>
		<link>http://www.saalonmuyo.com/2009/07/13/on-killing-your-brand/</link>
		<comments>http://www.saalonmuyo.com/2009/07/13/on-killing-your-brand/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 15:24:43 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=529</guid>
		<description><![CDATA[When it comes to Microsoft, I can be unforgiving.  Years of forced reliance on Windows as the de facto standard has not left a great deal of goodwill or patience.  That they can&#8217;t turn something as simple as their default web browser into a usable option doesn&#8217;t help.  When Microsoft fails, I no longer give [...]]]></description>
			<content:encoded><![CDATA[<p>When it comes to Microsoft, I can be unforgiving.  Years of forced reliance on Windows as the de facto standard has not left a great deal of goodwill or patience.  That they can&#8217;t turn something as simple as their default web browser into a usable option doesn&#8217;t help.  When Microsoft fails, I no longer give them the benefit of the doubt.</p>
<p>This doesn&#8217;t mean I don&#8217;t praise them when it&#8217;s due.  Microsoft Office didn&#8217;t become the standard office suite by accident.  It was the best option, and has been for years.  Certainly Microsoft engaged in their typical format games to help; Word&#8217;s obscured, proprietary standard meant that every time a new version of Office came out, the alternative application you had been using couldn&#8217;t read the new Word files until someone managed to untangle their format.  So once Office became the standard, it was &#8211; as it usually is with Microsoft products &#8211; less than simple to find a reasonable alternative.</p>
<p>There was one problem with Office: it was expensive.  This was a throwback to the days when productivity software was a specialty field.  People literally in offices used Word Processor software like Microsoft Office. Everyone else could stick with WordPerfect or those electronic word processing machines that looked like typewriters.  Though the market for office software changed radically, pricing did not.  Or at least, the normal pricing model did not.  When I went to college, Microsoft Office started offering student and teacher pricing, but for years the only way to get it was through educational resellers that demanded to see a school ID.  This was a sloppy way to address a more serious problem: people at home wanted to use Microsoft Word and Excel, but not enough to spend $400 for the privilege.</p>
<p>In the past few years, some significant changes make Office&#8217;s continued corporate pricing strategy look far out of date.  First, the switch to more open document formats means that cheaper alternatives can read and write files that came from Office.  The OpenOffice project has produced some great products, like Symphony and Neo Office, that make owning the Microsoft variety a luxury.</p>
<p>Compounding the problem is that whole World Wide Web thing.  Google, in particular, is salivating over becoming the next tech monopoly and is just giving the whole office productivity suite away for free without even asking you to install anything.  Google Apps isn&#8217;t near the level of Office in terms of functionality, but for most people, Google Docs does everything they need from Word with the added benefit of real time document sharing and the ability to access things from any computer.</p>
<p>Yet Microsoft continues to charge for Office like productivity software is a specialty niche.  With totally free alternatives on the market, some of which are nearly as good as Office itself, what exactly is Microsoft&#8217;s strategy?  The barriers to leaving the Office platform are gone, meaning the only thing that would keep people using Microsoft Office is inertia.  I know Word so I&#8217;ll stick with Word.  But even inertia is subject to friction, and $200 is a lot of friction when there are free alternatives.  Yet rather than just change their pricing model and risk corporate buyers &#8211; who are likely Microsoft&#8217;s primary source of income &#8211; getting Office for cheaper, they&#8217;ve done things like selling the Student and Teacher edition of Office in stores everywhere.  So the Student and Teacher edition is essentially Cheaper Office for Everyone without anyone coming out and saying it.</p>
<p>I&#8217;d guess the ship is about to sail on Office&#8217;s hegemony one way or another, but if Office 2010 doesn&#8217;t do something significant with its pricing they risk losing more than a near monopoly.  They could end up being a has been, which would be too bad.  Office is one of Microsoft&#8217;s best products.</p>
<p>In fact, maybe it&#8217;s already too late.  Many of my friends have switched to OpenOffice already.  Even I haven&#8217;t purchased a new version of Word since 2003.  Its superior formatting features are all it has left, and I can&#8217;t justify spending over $100 for better control over my Headers and Footers.  Pretty soon, those big corporate buyers are going to lose their willingness to pay more for convenience, too.  At that point, what is Microsoft Office but another software package, scraping out some market share?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2009/07/13/on-killing-your-brand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greetings Earthlings</title>
		<link>http://www.saalonmuyo.com/2009/06/10/greetings-earthlings/</link>
		<comments>http://www.saalonmuyo.com/2009/06/10/greetings-earthlings/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 17:38:55 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=523</guid>
		<description><![CDATA[If you&#8217;ve found your way here from my newly live Planet Money Race to Refinance, welcome to my underground lair.  I&#8217;d love to be able to live up to all the awesome things Laura Conaway wrote about me, but, sadly, I cannot.  The only true word in &#8220;certifiable Web genius&#8221; is certifiable, but I&#8217;ll accept [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve found your way here from my newly live <a title="Amazing: Race to Refinance" href="http://www.npr.org/blogs/money/2009/06/amazing_race_to_refinance.html" target="_blank">Planet Money <em>Race to Refinance</em></a>, welcome to my underground lair.  I&#8217;d love to be able to live up to all the awesome things Laura Conaway wrote about me, but, sadly, I cannot.  The only true word in &#8220;certifiable Web genius&#8221; is <em>certifiable</em>, but I&#8217;ll accept the compliment gracefully nonetheless.</p>
<p>The timeline project was done on a whim, because Laura tossed out the challenge that something like this would be neat and because I can&#8217;t turn down a good challenge.  In the end, it was a great opportunity to stretch my skills.</p>
<p>I have to take a moment to thank my good friend <a title="Fish, not weapon" href="http://p1k3.com" target="_blank">Brennen Bearnes</a>, who pointed me to the Simile timeline widget in the first place and who checked my code for craptacularity. He also made some nice, elegant CSS adjustments that took my timeline page from Minimalist Ugly to Minimalist Clean.  He&#8217;s perhaps more certifiable than me, but he&#8217;s definitely more of a web genius.</p>
<p>Anyway, it&#8217;s nice to have you. If you decide to stay, or if you just want to leave me a nice or nasty comment, feel free.  Thanks to Laura Conaway and Caitlin Kenney of NPR&#8217;s Planet Money for giving me the chance to do this.  It was a blast.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2009/06/10/greetings-earthlings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Structural Integrity</title>
		<link>http://www.saalonmuyo.com/2009/06/08/structural-integrity/</link>
		<comments>http://www.saalonmuyo.com/2009/06/08/structural-integrity/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 19:18:59 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creating]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=519</guid>
		<description><![CDATA[Starting work on a new novel right now and I&#8217;m finding myself stuck in a familiar ditch.  At some point early in everything I write I end up here and, as frustrating as it is, it&#8217;s not something I can avoid.
Structure, you are my master.
There are things you do early into a story that are [...]]]></description>
			<content:encoded><![CDATA[<p>Starting work on a new novel right now and I&#8217;m finding myself stuck in a familiar ditch.  At some point early in everything I write I end up here and, as frustrating as it is, it&#8217;s not something I can avoid.</p>
<p>Structure, you are my master.</p>
<p>There are things you do early into a story that are very hard to unwind later.  If you write half of your book with short chapters all from the same character&#8217;s point of view before realizing one character&#8217;s POV isn&#8217;t enough, you can&#8217;t unwind that by dropping new chapters in-between the others.  At least, <em>I</em> can&#8217;t unwind it like that without stressing myself into tossing the book aside for a couple of weeks.</p>
<p>I do the same thing when I program. I spend a lot of time figuring out how I want to name things, how I want to structure my classes and methods so that it all makes sense in the larger scheme of the project.  This doesn&#8217;t put me behind schedule, and in fact it usually pays of at some point, but it can feel like a lot of spinning your wheels while it&#8217;s going on.</p>
<p>So while a part of me wants to just start slinging words onto the page, I&#8217;m keeping the parking break on.  Because I know that at some point in the future of every project I&#8217;ll hit a point when taking the time to make elegant changes is no longer an option.  This is the point in programming when someone dumps some unmentioned critical business process onto your desk and needs it in by go-live.  Your only option is to race madly through everything you&#8217;ve already done and patch the hell out of your work.  There&#8217;s no time to think about how it should best be structured, not anymore.  It&#8217;s fire and motion and crossed fingers.</p>
<p>And when that happens, when I hit some point in the story and realize the ending will only work if I add in some unthought of plot threat, I have to hope that the structure of the story is sturdy enough to support a little extra weight.  When you get into the rhythm of something &#8211; a story, an application, whatever &#8211; you kind of get an instinct for how it all fits together.  That instinct is all you have to guide you when you need to start patching your work midway through.</p>
<p>At times like this, all you can do is hope that you&#8217;ll fit the pieces together quickly.  There&#8217;s a price to pay for jumping the gun, and that price is a third of an unfinished novel that you hate too much to think about.  It&#8217;s hard enough finishing these things. I don&#8217;t need to give myself any more reasons than I already have.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2009/06/08/structural-integrity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Cathedral and the Bizarre</title>
		<link>http://www.saalonmuyo.com/2009/01/19/the-cathedral-and-the-bizarre/</link>
		<comments>http://www.saalonmuyo.com/2009/01/19/the-cathedral-and-the-bizarre/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 17:35:25 +0000</pubDate>
		<dc:creator>saalon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creating]]></category>

		<guid isPermaLink="false">http://www.saalonmuyo.com/?p=438</guid>
		<description><![CDATA[As a writer and a programmer, one of the most difficult things to which I&#8217;ve come to terms is this: The people who inspire us in our craft can disappoint and infuriate us when they discuss any other topic.  A novelist whose books idealize everything you want to be as a writer can open his [...]]]></description>
			<content:encoded><![CDATA[<p>As a writer and a programmer, one of the most difficult things to which I&#8217;ve come to terms is this: The people who inspire us in our craft can disappoint and infuriate us when they discuss any other topic.  A novelist whose books idealize everything you want to be as a writer can open his mouth, talk about politics or race and drive you insane.  This is the person who I respected?  This is what they really believe?</p>
<p>This has happened over and over again, and I suspect the rise of the Internet has only made this problem worse.  Fifty years ago, for a novelist&#8217;s private thoughts to be published, someone needed to believe they would make them money.  Now, all it takes is a one-click install of Wordpress and anyone can sound off with the whole world watching.  Orson Scott Card can write close-minded, reactionary <a title="Card On Homosexuality" href="http://www.nauvoo.com/library/card-hypocrites.html" target="_blank">tracts about homosexuality</a>; Dan Simmons can write <a title="Ugh" href="http://www.dansimmons.com/news/message/2006_04.htm" target="_blank">time-travel psuedo-essays</a>; Eric S. Raymond can say <a title="Racial IQ Statements" href="http://esr.ibiblio.org/?p=129" target="_blank">ugly, racist</a> things.  Can I go back to their writings that I love, that changed me as an artist or as a programmer and still respect them?</p>
<p>I came to the decision that I had to separate out the things I loved from the people who wrote them.  The worth of <em>Ender&#8217;s Game</em> is not related to how much I want to talk to Orson Scott Card; it&#8217;s that when I read it, it meant something specific and important to me.   It might change how I see their future novels, now that I&#8217;m seeing the subtext of their writing differently, but what they did that mattered still matters.</p>
<p>That said.</p>
<p>I&#8217;d feel better if, as my heroes demolished themselves before me that they would leave alone their seminal works.  I listened today to the <a title="ESR on ET" href="http://www.econtalk.org/archives/2009/01/eric_raymond_on.html" target="_blank">EconTalk podcast</a>, which had Eric S. Raymond on as a guest.  EconTalk is, as you may have guessed, an economics podcast, and for this episode had Raymond discussing <em><a title="The Cathedral and the Bazaar" href="http://www.catb.org/~esr/writings/cathedral-bazaar/" target="_blank">The Cathedral and the Bazaar</a>.</em> I was concerned as soon as I saw the pairing.</p>
<p>Russell Roberts, the George Mason University economics professor who hosts EconTalk, has shown himself to be  a smarmy, intemperate ideologue.  He spends more time bashing liberals, the government and Keynes than he does presenting actual evidence in support of his  supply-side Chicago/Austrian economic theories.  I&#8217;m still unsure how he keeps getting time on <a title="Planet Money" href="http://npr.org/money/" target="_blank">Planet Money</a>.  And as for Raymond, it wasn&#8217;t long after I read and loved <a title="The Art of Unix Programming" href="http://www.catb.org/~esr/writings/taoup/" target="_blank"><em>The Art of Unix Programming</em></a> that <a href="http://p1k3.com" target="_blank">Brennen</a> directed me to his disappointing, extremist political blog posts.  I did not want to see <em>The Cathedral and the Bazaar</em> get dragged into the middle of our country&#8217;s complicated economic debate as proof of anything at all.</p>
<p>Thankfully it never devolved into the free-market = open source software praisefest I was afraid it would become, but that didn&#8217;t stop them from scooting over to the issue when they could, including the end when Roberts decided to talk about the fiscal stimulus proposal as if it has anything to do with software development at all.  It&#8217;s a perfect example of the danger of having worthy and important thoughts in one field and trying to apply them to another field about which you are more passionate than knowledgeable.  Their brief digressions into analogies between open source organizations and the way the free market organizes itself were unwelcome and unsupported.  The model for open source software relates to scientific peer review of theory, not to macroeconomic policy.</p>
<p><em>The Cathedral and the Bazaar</em> is useful in understanding the quality of software in relation to how it was designed and developed,  not the saleability of that software, nor of the economic forces that affect the industry as a whole.  Raymond just sounded silly when suggesting that The GIMP was not developed because Photoshop was too expensive, but because the developers thought it would be fun to develop a photo application.  I&#8217;m not saying they didn&#8217;t think it would be fun, but are we supposed to ignore The GIMP&#8217;s similarities to Photoshop in this? If Photoshop cost $30, would The GIMP&#8217;s user base be as large?  Would it have been worked on to the level of polish that it has been by the development community?</p>
<p>There are interesting economic anaologies to draw between <em>The Cathedral and the Bazaar</em> and the way the market functions, but it has very little to do with Central Planning vs. unregulated free markets, or whether or not the government should spend money on things.  If the financial system was software, the privately owned credit rating agencies would be closed source software, in contrast to an open, peer reviewed system of corporate accounting practices and financial balance sheets.  Or, in examining the problems of government actions in the market, consider this: is it that the market is analogous to Linux?   Or that the lack of public transparency and democratic control over our government&#8217;s actions is depressingly similar to the closed source software we are often forced to purchase if we wish to get our jobs done?</p>
<p>At least this phenomenon of good writers going crazy isn&#8217;t new.  After all, once Martin Luther was through reforming Christianity, he decided he had some<a title="Antisemitism" href="http://en.wikipedia.org/wiki/Luther_and_antisemitism" target="_blank"> ill advised things</a> to say about Jewish people. In comparison, Dan Simmons pretending a time traveler came to tell him that Muslims are evil seems almost quaint.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saalonmuyo.com/2009/01/19/the-cathedral-and-the-bizarre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.347 seconds -->
