<?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>Utahcon.com &#187; Coding</title>
	<atom:link href="http://blog.utahcon.com/category/computers/coding/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.utahcon.com</link>
	<description></description>
	<lastBuildDate>Wed, 25 Jan 2012 14:18:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>#hackUTOS June 2010</title>
		<link>http://blog.utahcon.com/computers/code/hackutos-june-2010?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hackutos-june-2010</link>
		<comments>http://blog.utahcon.com/computers/code/hackutos-june-2010#comments</comments>
		<pubDate>Thu, 03 Jun 2010 21:48:36 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[#hackUTOS]]></category>
		<category><![CDATA[caffeine]]></category>
		<category><![CDATA[coffee]]></category>
		<category><![CDATA[gathering]]></category>
		<category><![CDATA[Geeks]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[utos]]></category>
		<category><![CDATA[UTOSC]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=487</guid>
		<description><![CDATA[Ceiling Cat announces: #hackUTOS is is happening tomorrow, Friday June 4th, at CoffeeConnection! Here&#8217;s how it works. #hackUTOS is a gathering of the hacking inclined. There is a main project (ConMan) that is being hacked on for the purpose of volunteering for Utah Open Source Conference 2010. More details on ConMan in a minute. If [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_488" class="wp-caption alignleft" style="width: 330px"><a href="http://blog.utahcon.com/wp-content/uploads/2010/06/ceiling_cat.png" rel="lightbox[487]"><img class="size-full wp-image-488" title="ceiling_cat" src="http://blog.utahcon.com/wp-content/uploads/2010/06/ceiling_cat.png" alt="Ceiling Cat" width="320" height="211" /></a><p class="wp-caption-text">Ceiling Cat</p></div>
<p>Ceiling Cat announces:</p>
<blockquote><p>#hackUTOS is is happening tomorrow, Friday June 4th, at CoffeeConnection!</p></blockquote>
<p>Here&#8217;s how it works. #hackUTOS is a gathering of the hacking inclined. There is a main project (<a href="http://github.com/herlo/ConMan" target="_blank">ConMan</a>) that is being hacked on for the purpose of volunteering for <a href="http://2010.utosc.com" target="_blank">Utah Open Source Conference 2010</a>. More details on ConMan in a minute.</p>
<p>If you are looking to generally gather with geeks then this is the premier event in June for your geekiness! We will be gathering at <a href="http://saltlakecoffeeconnection.com/" target="_blank">CoffeeConnection</a> who has great caffeinated beverages for sale (as well as food) and we will be getting our Geek on.</p>
<p>Want to get your geek on, but can&#8217;t make it in person&#8230; we are going to be on IRC too! Find us on <a href="http://freenode.net/" target="_blank">Freenode</a> at <a href="irc://irc.freenode.org:6667/#hackUTOS" target="_blank">#hackUTOS</a></p>
<p>If you are not interested in hacking on ConMan, we still encourage you to come on down! We want all geeks to come by and share in the glory of #hackUTOS. That means you can even bring your own project. Think of #hackUTOS as a <a href="http://workatjelly.com/" target="_blank">Jelly</a> or CoWork (for 1 night). Come share your project and your ideas, find people, network, and generally have a good time.</p>
<p>Now some details on ConMan!</p>
<p>ConMan is the Conference Management software used by UTOS for the UTOS Conference. It is written in <a href="http://python.org" target="_blank">Python</a>, using the <a href="http://www.djangoproject.com" target="_blank">Django</a> framework. It is hosted at <a href="http://github.com" target="_blank">GitHub</a> and it is open to the public. If you don&#8217;t hack python do not turn and run just yet. We are in need of things besides python coding. We need folks who are willing to conceptualize, we need graphic designers to help make the app look pretty, we need people to help with bug reporting, and more. If you are reading this blog post you are more than qualified to come help us tomorrow (and at any other #hackUTOS event).</p>
<p>Alright&#8230; I am tired of typing, and Ceiling cat is starting to freak me out&#8230; see you at #hackUTOS</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/computers/code/hackutos-june-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#hackUTOS March 9th, 2010</title>
		<link>http://blog.utahcon.com/computers/coding/hackutos-march-9th-2010?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hackutos-march-9th-2010</link>
		<comments>http://blog.utahcon.com/computers/coding/hackutos-march-9th-2010#comments</comments>
		<pubDate>Tue, 09 Mar 2010 14:31:33 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[utos]]></category>
		<category><![CDATA[UTOSC]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=396</guid>
		<description><![CDATA[Hey everyone, it is time to #hackUTOS again! What is #hackUTOS? UTOS has been sponsoring Open Source technologies in Utah for years now. This is a chance for all the members (and potential members) to come out meet some of the UTOS hackers including herlo, utahcon, and DexterTheDragon. We will be hacking on ConMan, the [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone, it is time to <strong>#hackUTOS</strong> again!</p>
<h2>What is #hackUTOS?</h2>
<p><a href="http://utos.org/" target="_blank">UTOS</a> has been sponsoring Open Source technologies in Utah for years now. This is a chance for all the members (and potential members) to come out meet some of the UTOS hackers including <a href="http://sexysexypenguins.com/" target="_blank">herlo</a>, <a href="http://utahcon.com">utahcon</a>, and <a href="http://dexterthedragon.com/" target="_blank">DexterTheDragon</a>.</p>
<p>We will be hacking on <a href="http://github.com/herlo/ConMan" target="_blank">ConMan</a>, the Open Source Conference Management system used by <a href="http://utosc.com/pages/home/" target="_blank">UTOSC</a>! This is a great chance for you to participate, learn,teach, and get credit toward attending the conference for a discounted price!</p>
<h2>When is #hackUTOS?</h2>
<p>We will be meeting Tuesday March 9th, 2010 at 7:00PM MST.</p>
<h2>Where is #hackUTOS?</h2>
<h3>Online</h3>
<p>Along with meeting in person (details below) you can find us online in IRC. We are on the Freenode network in #utos-dev</p>
<h3>IRL</h3>
<p>Since the meeting place worked out well last time we will be meeting again at the <a href="http://saltlakecoffeeconnection.com/" target="_blank">Salt Lake Coffee Connection</a>.</p>
<p>Located at:</p>
<blockquote><p><strong>1588 South State Street, Salt Lake City, UT 84115</strong></p></blockquote>
<p>The Salt Lake Coffee Connection is a really great place to meet. They have a great internet connection (provided by our good friends at Xmission), awesome drinks (check out the Dirty Chai!) and good food! The prices are good, and internet access is included with all purchases.</p>
<h2>What Language?</h2>
<p>ConMan is written in <a href="http://www.python.org/" target="_blank">Python</a>, using the <a href="http://www.djangoproject.com/" target="_blank">Django framework</a>. We run it on <a href="http://mysql.com" target="_blank">MySQL</a> and <a href="http://www.sqlite.org/" target="_blank">SQLite</a> databases.</p>
<p>Don&#8217;t know Python, or Django? Don&#8217;t worry, we are all open to helping you get started. Please realize we are here to mainly work on our project, we are happy to offer light support to get you up and running.</p>
<p>If you aren&#8217;t interested in working on ConMan bring your own Open Source project! We would love to have you in the house for some great co-working!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/computers/coding/hackutos-march-9th-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#hackUTOS</title>
		<link>http://blog.utahcon.com/computers/coding/hackutos?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hackutos</link>
		<comments>http://blog.utahcon.com/computers/coding/hackutos#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:12:34 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[conman]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[event revolution]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Salt Lake Coffee Connection]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[utos]]></category>
		<category><![CDATA[UTOSC]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=392</guid>
		<description><![CDATA[Hey everyone! It is time to do it again. Our monthly #hackUTOS What is #hackUTOS? UTOS has been sponsoring Open Source technologies in Utah for years now. This is a chance for all the members (and potential members) to come out meet some of the UTOS hackers including herlo, utahcon, and DexterTheDragon. We will be [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone!</p>
<p>It is time to do it again. Our monthly <strong>#hackUTOS</strong></p>
<h2>What is #hackUTOS?</h2>
<p><a href="http://utos.org/" target="_blank">UTOS</a> has been sponsoring Open Source technologies in Utah for years now. This is a chance for all the members (and potential members) to come out meet some of the UTOS hackers including <a href="http://sexysexypenguins.com/" target="_blank">herlo</a>, <a href="http://utahcon.com">utahcon</a>, and <a href="http://dexterthedragon.com/" target="_blank">DexterTheDragon</a>.</p>
<p>We will be hacking on <a href="http://github.com/herlo/ConMan" target="_blank">ConMan</a>, the Open Source Conference Management system used by <a href="http://utosc.com/pages/home/" target="_blank">UTOSC</a>! This is a great chance for you to participate, learn,teach, and get credit toward attending the conference for a discounted price!</p>
<h2>When is #hackUTOS?</h2>
<p>We will be meeting Tuesday March 2nd, 2010 at 7:00PM MST.</p>
<h2>Where is #hackUTOS?</h2>
<h3>Online</h3>
<p>Along with meeting in person (details below) you can find us online in IRC. We are on the Freenode network in #utos-dev</p>
<h3>IRL</h3>
<p>Since the meeting place worked out well last time we will be meeting again at the <a href="http://saltlakecoffeeconnection.com/" target="_blank">Salt Lake Coffee Connection</a>.</p>
<p>Located at:</p>
<blockquote><p><strong>1588 South State Street, Salt Lake City, UT 84115</strong></p></blockquote>
<p>The Salt Lake Coffee Connection is a really great place to meet. They have a great internet connection (provided by our good friends at Xmission), awesome drinks (check out the Dirty Chai!) and good food! The prices are good, and internet access is included with all purchases.</p>
<h2>What Language?</h2>
<p>ConMan is written in <a href="http://www.python.org/" target="_blank">Python</a>, using the <a href="http://www.djangoproject.com/" target="_blank">Django framework</a>. We run it on <a href="http://mysql.com" target="_blank">MySQL</a> and <a href="http://www.sqlite.org/" target="_blank">SQLite</a> databases.</p>
<p>Don&#8217;t know Python, or Django? Don&#8217;t worry, we are all open to helping you get started. Please realize we are here to mainly work on our project, we are happy to offer light support to get you up and running.</p>
<p>If you aren&#8217;t interested in working on ConMan bring your own Open Source project! We would love to have you in the house for some great co-working!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/computers/coding/hackutos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come Support Open Source!!!</title>
		<link>http://blog.utahcon.com/computers/code/come-support-open-source?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=come-support-open-source</link>
		<comments>http://blog.utahcon.com/computers/code/come-support-open-source#comments</comments>
		<pubDate>Fri, 26 Feb 2010 17:21:30 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[conman]]></category>
		<category><![CDATA[event revolution]]></category>
		<category><![CDATA[geek lunch]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=382</guid>
		<description><![CDATA[Geek Lunch Meet at the nearest location to you at 12:30pm this Friday, February 26, 2010.  If you have never been, look for the group with this logo at their table.  Geek Lunch is organized by the Utah Open Source Foundation, but you must pay for your meal.  We look forward to seeing all of [...]]]></description>
			<content:encoded><![CDATA[<h2>Geek Lunch</h2>
<p>Meet at the nearest location to you at 12:30pm this Friday, February 26, 2010.  If you have never been, look for the group with <a href="http://dl.dropbox.com/u/149379/img/geek_lunch.pdf" target="_blank">this logo</a> at their table.  Geek Lunch is organized by the Utah Open Source Foundation, but you must pay for your meal.  We look forward to seeing all of you there.</p>
<h3>When:</h3>
<p>Date: Friday,February 26, 2010<br />
Time: 12:30pm – 2:00pm</p>
<h3>Where:</h3>
<p>We have geeks all over Utah, and as such we like to spread the love to more than just 1 pub, so we have two (because Utah county is slacking) locations to choose from.</p>
<p><strong> Salt Lake County</strong><br />
The Green Pig<br />
31 East 400 South<br />
Salt Lake City, Utah 84111<br />
Website: <a href="http://www.thegreenpigpub.com/" target="_blank">http://www.thegreenpigpub.com/</a><br />
Map: <a href="http://snipr.com/uhhox" target="_blank">http://snipr.com/uhhox</a><br />
Phone: (801) 532-7441</p>
<p><strong>Weber / Davis Counties</strong><br />
Roosters<br />
748 Heritage Park Boulevard<br />
Layton, Utah 84041<br />
Website: <a href="http://roostersbrewingco.com/" target="_blank">http://roostersbrewingco.com/</a><br />
Map: <a href="http://snipr.com/uhizp" target="_blank">http://snipr.com/uhizp</a><br />
Phone: (801) 774-9330</p>
<p><strong>Utah County</strong><br />
There is currently no place planned for in Utah county due to low turnout.  If you would like to help organize a Geek Lunch in Utah county, please email <a href="mailto:clint@utos.org?subject=Geek Lunch">clint@utos.org</a>.</p>
<h2>ConMan Hack Night</h2>
<p>Did you attend UTOSC last year? Are you going to attend this year? Did you like how the process to register and attend was super easy? That is all thanks to ConMan, the Conference Management software that the Utah Open Source Foundation created, and maintains.</p>
<p>If you want to make sure things stay smooth at the conference, and participate in an open source project then you are invited to come down and help us code the project to the next milestone!</p>
<p><strong>Where:</strong></p>
<p>Salt Lake Coffee Connection</p>
<p>1588 South State Street, Salt Lake City UT</p>
<p><a href="http://saltlakecoffeeconnection.com/map-directions/">Directions</a></p>
<p><strong>When:</strong> 7pm &#8211; ??</p>
<p>You see the ?? means you can come and code as late as you want! The coffee house is open really late, and you are welcome to stay and code till they kick you out!</p>
<p><strong>What:</strong></p>
<p>So we get together each week to work on the project, cause we think ConMan can be the best conference management software ever! We simply would love to have some more people who love open source, and know python and django come down and contribute to the code base!</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 890px; width: 1px; height: 1px;">http://saltlakecoffeeconnection.com/map-directions/</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/computers/code/come-support-open-source/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP, Soap and WSDL Caching</title>
		<link>http://blog.utahcon.com/computers/code/php-soap-and-wsdl-caching?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-soap-and-wsdl-caching</link>
		<comments>http://blog.utahcon.com/computers/code/php-soap-and-wsdl-caching#comments</comments>
		<pubDate>Tue, 16 Feb 2010 15:27:10 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[wsdl]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=367</guid>
		<description><![CDATA[Today I was offered a free lesson in how PHP handles Soap, and more specifically WSDL caching. When you instantiate a PHP Soap Class you pass it a WSDL (Web Services Description Language) and it looks like this: Depending on how your caching is setup, this will go out to the WSDL provided, pull in [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was offered a free lesson in how PHP handles Soap, and more specifically WSDL caching.</p>
<p>When you instantiate a PHP Soap Class you pass it a WSDL (Web Services Description Language) and it looks like this:</p>
<pre class="brush: php; title: ; notranslate">

$client = new SoapClient('http://example.com/services/thescript.php?wsdl');
</pre>
<p>Depending on how your caching is setup, this will go out to the WSDL provided, pull in the document and store it in a cache. The default cache for PHP is 86400 seconds. If you are familiar with time in seconds you know that that is 24 hours. So by default you only actually read the WSDL once in a 24 hour period. Normally this is not a problem.</p>
<h2>What is a WSDL?<strong><br />
</strong></h2>
<p>For that answer let&#8217;s turn to the W3 site:</p>
<blockquote><p>WSDL is an XML format for describing network services as a set of endpoints operating on messages containing either document-oriented or procedure-oriented information.</p></blockquote>
<p>So in English that means it is a map to the services provided by the provider. Basically you get a copy of the map, and follow the endpoints to the answers you need.</p>
<p>One basic function of this is that it tells you want methods (services) are available on your fresh client.</p>
<h2>When WSDLs go bad</h2>
<p>So today one of my providers, without warning, updated their WSDL. This wreaked havoc on my system because I had cached the WSDL on my side for 24 hours (remember, the PHP default). The change was a super simple change, a change in URL for a service, that&#8217;s it!</p>
<p>The problem was that since PHP had already read the file within 24 hours it didn&#8217;t care that there was a new file, that the URLs had changed, and so it continued to work as it had before.</p>
<p>The real problem wasn&#8217;t that the URLs changed, that would have been fine if the provider hadn&#8217;t shut off the previously reported URLs.</p>
<h2>Turn off the cache</h2>
<p>So you are left with two options when something like this happens. First, you can sit and wait up to 24 hours for the problem to fix itself. This was not an option for us. The second is to clear your cache and try again.</p>
<p>Now PHP (on Linux) stores the cache for the Soap WSDL in /tmp and I wasn&#8217;t sure which one of the many files was the actual cache for this particular provider so I decided I would have to tell PHP to not cache the WSDL and try again.</p>
<p>Into php.ini I went, located the <em>soap.wsdl_cache_enabled</em> flag. I changed it from 0 to 1</p>
<pre class="brush: plain; title: ; notranslate">

soap.wsdl_cache_enabled=0
</pre>
<p>I saved the file and restarted Apache.</p>
<p>The service continued to fail. I was perplexed. I thought maybe I flubbed the save so I opened the php.ini again located my line and it was fine. So I looked around there to see if maybe I missed another important flag. The only thing I could find was <em>soap.wsdl_cache_ttl</em> listed as the &#8220;(time to live) Sets the number of second while cached file will be used instead of original one&#8221; I promptly changed this to 0 as well</p>
<pre class="brush: plain; title: ; notranslate">

soap.wsdl_cache_ttl=0
</pre>
<p>Restarted Apache, and finally my script stopped failing.</p>
<p>I have since re-enabled my cache ttl and enabled flags, as reading the WSDL every time is a resource hog that doesn&#8217;t need to be in place.</p>
<h2>The Lesson Learned</h2>
<p>The lesson learned by all today is be aware of your caching, and be aware of the changes you make to your live/production systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/computers/code/php-soap-and-wsdl-caching/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SLLUG Daytime and Vim</title>
		<link>http://blog.utahcon.com/computers/coding/sllug-daytime-and-vim?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sllug-daytime-and-vim</link>
		<comments>http://blog.utahcon.com/computers/coding/sllug-daytime-and-vim#comments</comments>
		<pubDate>Wed, 10 Feb 2010 22:01:54 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Geeks]]></category>
		<category><![CDATA[Google Docs]]></category>
		<category><![CDATA[Lunch]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[SLLUG]]></category>
		<category><![CDATA[SLLUG Daytime SIG]]></category>
		<category><![CDATA[Vi]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=362</guid>
		<description><![CDATA[I would like to give a big thanks to all the folks who attended today&#8217;s Salt Lake Linux User Group Daytime Special Interest Group (SLLUG Daytime SIG). We had a great time covering the basics of vi(m) and I think everyone walked away knowing something new. I created my slides using Google Docs, so you [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Vim Logo" src="http://www.vim.org/images/vim_header.gif" alt="Vim Logo" width="180" height="45" />I would like to give a big thanks to all the folks who attended today&#8217;s Salt Lake Linux User Group Daytime Special Interest Group (SLLUG Daytime SIG). We had a great time covering the basics of vi(m) and I think everyone walked away knowing something new.</p>
<p>I created <a href="http://docs.google.com/present/edit?id=0AY1WnevfkZtPZDR4NmhoaF8wZHBmOGg5Z3c&amp;hl=en" target="_blank">my slides</a> using Google Docs, so <a href="http://docs.google.com/present/edit?id=0AY1WnevfkZtPZDR4NmhoaF8wZHBmOGg5Z3c&amp;hl=en" target="_blank">you can see them too</a>!</p>
<p>I want to thank Joe Brockmeier, and Linux.com for the source material and here is a list of places you can find equally great (actually better) presentations and tutorials on vi(m):</p>
<ul>
<li><a href="http://www.linux.com/search/vim/%252F?ordering=newest&amp;searchphrase=all&amp;limit=20&amp;areas[0]=content" target="_blank">Linux.com</a> &#8212; just click the link to search the site for vim <img src='http://blog.utahcon.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li><a href="http://www.linux.com/learn/tutorials/228600-vim-101-a-beginners-guide-to-vim" target="_blank">Vim 101</a></li>
<li><a href="http://www.linux.com/learn/tutorials/243002-vim-201-an-intermediate-guide-to-vim" target="_blank">Vim 201</a></li>
<li><a href="http://www.viemu.com/vi-vim-cheat-sheet.gif" rel="lightbox[362]" target="_blank">Viemu Cheat Sheet</a> (herlo pimped this during my presentation)</li>
</ul>
<p>Also to learn more about vi(m) read up on these:</p>
<ul>
<li><a href="http://www.linux.com/learn/tutorials/262147-vim-301-getting-adept-at-vim" target="_blank">Vim 301</a></li>
<li><a href="http://www.linux.com/learn/tutorials/264315-vim-401-extending-vim-and-more" target="_blank">Vim 401</a></li>
</ul>
<p>There are thousands of other articles on vi(m) around the net, so if this doesn&#8217;t give you your fix, search Google.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/computers/coding/sllug-daytime-and-vim/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP and Josso &#8211; Transparency Rocks!</title>
		<link>http://blog.utahcon.com/computers/code/php-and-josso-transparency-rocks?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-and-josso-transparency-rocks</link>
		<comments>http://blog.utahcon.com/computers/code/php-and-josso-transparency-rocks#comments</comments>
		<pubDate>Wed, 20 Jan 2010 22:15:38 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Josso]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[Single Signon]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=315</guid>
		<description><![CDATA[Bogdan recently asked in my comments: I can&#8217;t seem to find a call like josso_authenticate($name, $pass), returning an array to be appended to user&#8217;s SESSION. I was expecting such a method, because SOAP is already used everywhere, so it shouldn&#8217;t be too hard implementing this. Has anyone had success implementing this kind of &#8220;transparent&#8221; login? [...]]]></description>
			<content:encoded><![CDATA[<p>Bogdan recently asked in my comments:</p>
<blockquote><p>I can&#8217;t seem to find a call like josso_authenticate($name, $pass), returning an array to be appended to user&#8217;s SESSION. I was expecting such a method, because SOAP is already used everywhere, so it shouldn&#8217;t be too hard implementing this.</p>
<p>Has anyone had success implementing this kind of &#8220;transparent&#8221; login?</p></blockquote>
<p>JOSSO simply doesn&#8217;t make it easy to log people in with a single call. Instead you need to make an interface to the API to do so. I just so happen to have an example of such a wrapper function.</p>
<p><span id="more-315"></span></p>
<h2>Logging In A User</h2>
<p>To do everything and make it easy for future reuse I built two classes. The first is a Login Class and the second a Josso Class (below). My Login Class is pretty sparse, but it includes a wrapper to handle all the tasks required to login a user through Josso and get back the Josso details for that user.</p>
<p>The full code of each class is down at the bottom of the post, just expand the code block, but here is the function that is really what you are looking for Login-&gt;authorize()</p>
<h2>Login-&gt;authorize()</h2>
<pre class="brush: php; title: ; notranslate">public function authorize($username, $password){

 # make sure we have a valid username
 if(empty($username)){
 # return invalid username
 throw new LoginException('Invalid username');
 } else {
 $this-&gt;username = $username;
 }

 # make sure we have a valid password
 if(empty($password)){
 # return invalid username
 throw new LoginException('Invalid password');
 }

 # check that user exists
 if( ! $this-&gt;josso-&gt;userExists($this-&gt;username)){
 throw new LoginException('Invalid username');
 }

 # check Josso with username and password
 $this-&gt;assertion = $this-&gt;josso-&gt;assertIdentityWithSimpleAuthentication($username, $password);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Invalid username/password combination');
 }

 # resolve Authentication Assertion
 $this-&gt;token = $this-&gt;josso-&gt;resolveAuthenticationAssertion($this-&gt;assertion);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;session = $this-&gt;josso-&gt;getSession($this-&gt;token);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;user = $this-&gt;josso-&gt;findUserInSession($this-&gt;token);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;cleanUpUser();

 $this-&gt;roles = $this-&gt;josso-&gt;findRolesByUsername($this-&gt;username);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;cleanUpRoles();

 $this-&gt;user-&gt;sosPermissions =&amp; $this-&gt;roles;
 }</pre>
<h2>What That Actually Did</h2>
<p>As you can see you simply pass the $username and $password to the function and it runs through a ton of work for you.</p>
<p>First it validates the input, make sure you aren&#8217;t working for no reason.</p>
<p>Next it makes sure the <strong><em>userExists()</em></strong>, this will save you heartache later when JOSSO pretends a user exists, but really doesn&#8217;t.</p>
<p>Then I <strong><em>asserIdentityWithSimpleAuthentication()</em></strong> which literally means I pass those to JOSSO and wait for an answer. The answer returned is an <strong>assertion_id</strong>, which really doesn&#8217;t mean anything.</p>
<p>You then take the <strong>assertion_id</strong> returned and call <strong><em>resolveAuthenticationAssertion()</em></strong>, this will return your <strong>session_id</strong> if the login was valid.</p>
<p>With the <strong>session_id</strong> you call <em><strong>getSession()</strong></em>. This returns all the details of the session that JOSSO now has open. This varies depending on who setup your JOSSO implementation but you should have an identifying is (user_id) if nothing else.</p>
<p>I go on to make sure that JOSSO hasn&#8217;t forgotten anything by calling <em><strong>findUserInSession()</strong></em>, which literally just tells me who I am supposed to be working with.</p>
<p>The <em><strong>cleanUpUser()</strong></em> you could probably ignore, but our system returns an object with dots ( . ) in the name and I can&#8217;t stand that, so I change them to underscores ( _ ).</p>
<p>Finally I call back to my JOSSO install to get any roles the user has, again this will vary if your JOSSO doesn&#8217;t handle roles.</p>
<h2>Login Class</h2>
<pre class="brush: php; collapse: true; light: false; title: ; toolbar: true; notranslate">

class Login {

 public $token;
 public $username;
 public $session;
 public $roles;
 public $user;
 public $request;
 private $assertion;
 # this will hold the instance of Josso Controller we need
 private $josso;

 function Login($request = null){

 $this-&gt;josso = new Josso;
 if(!empty($request)){
 $this-&gt;request = $request;
 }
 }

 #validate an existing token
 public function validateToken($user_token){
 $session = $this-&gt;josso-&gt;accessSession($user_token);

 /*
 * For whatever reason Josso returns nothing if the session is valid
 * and the operation has been completed.
 */
 if( empty($session)){
 return true;
 }

 if($this-&gt;josso-&gt;error){
 throw new LoginException('Internal Error [Login]: '. __LINE__);
 }
 return false;
 }

 # authorize a user with password
 public function authorize($username, $password){

 # make sure we have a valid username
 if(empty($username)){
 # return invalid username
 throw new LoginException('Invalid username');
 } else {
 $this-&gt;username = $username;
 }

 # make sure we have a valid password
 if(empty($password)){
 # return invalid username
 throw new LoginException('Invalid password');
 }

 # check that user exists
 if( ! $this-&gt;josso-&gt;userExists($this-&gt;username)){
 throw new LoginException('Invalid username');
 }

 # check Josso with username and password
 $this-&gt;assertion = $this-&gt;josso-&gt;assertIdentityWithSimpleAuthentication($username, $password);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Invalid username/password combination');
 }

 # resolve Authentication Assertion
 $this-&gt;token = $this-&gt;josso-&gt;resolveAuthenticationAssertion($this-&gt;assertion);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;session = $this-&gt;josso-&gt;getSession($this-&gt;token);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;user = $this-&gt;josso-&gt;findUserInSession($this-&gt;token);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;cleanUpUser();

 $this-&gt;roles = $this-&gt;josso-&gt;findRolesByUsername($this-&gt;username);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;cleanUpRoles();

 $this-&gt;user-&gt;sosPermissions =&amp; $this-&gt;roles;
 }

 public function createLoginFromToken($token){

 $this-&gt;user = $this-&gt;josso-&gt;findUserInSession($token);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;cleanUpUser();

 $this-&gt;roles = $this-&gt;josso-&gt;findRolesByUsername($this-&gt;user-&gt;name);
 if($this-&gt;josso-&gt;error){
 throw new LoginException('Interal Error [Login]: '. __LINE__);
 }

 $this-&gt;cleanUpRoles();

 $this-&gt;user-&gt;sosPermissions =&amp; $this-&gt;roles;
 }

 # get a Josso hashed version of a password
 public function getPassHash($password){
 $passhash = $this-&gt;josso-&gt;getPassHash($password);
 return $passhash;
 }

 # acquire roles for the user from josso
 public function getUserRoles(){
 return $this-&gt;roles;
 }

 # send the signal to Josso to signoff (closes all sessions)
 public function signoff($session_id = null){
 if( ! $session_id &amp;&amp; ! $this-&gt;session-&gt;id){
 return false;
 }

 if(!$session_id){
 if(!empty($this-&gt;session)){
 if($this-&gt;josso-&gt;globalSignoff($this-&gt;session-&gt;id)){
 return true;
 }
 } else {
 return false;
 }
 } else {
 if($this-&gt;josso-&gt;globalSignoff($session_id)){
 return true;
 }
 }
 return false;
 }

 private function cleanUpUser(){
 if(!empty($this-&gt;user)){
 foreach($this-&gt;user-&gt;properties as $prop =&gt; $details){
 $name = $details-&gt;name;
 if($pos = strpos($name, '.')){
 $name = explode('.',$name);
 $name = $name[0] . ucwords($name[1]);
 }
 $this-&gt;user-&gt;$name = $details-&gt;value;
 }
 unset($this-&gt;user-&gt;properties);
 }
 }

 private function cleanUpRoles(){
 if(!empty($this-&gt;roles)){
 foreach($this-&gt;roles as $key =&gt; $details){
 $tmpRoles[$key] = $details-&gt;name;
 }
 $this-&gt;roles = $tmpRoles;
 }
 }
}
?&gt;</pre>
<h2>Josso Class</h2>
<pre class="brush: php; collapse: true; light: false; title: ; toolbar: true; notranslate">
&lt;pre&gt;class Josso {

 var $SSOIdentityManager;
 var $SSOSessionManager;
 var $SSOIdentityProvider;
 var $JossoPashHash;
 var $error;

 function Josso(){

 // create the soapclients
 $this-&gt;SSOIdentityManager = new Soapclient(JOSSO_SERVER .'/josso/services/SSOIdentityManager?wsdl', array('Trace' =&gt; 1));
 $this-&gt;SSOSessionManager = new Soapclient(JOSSO_SERVER .'/josso/services/SSOSessionManager?wsdl', array('trace' =&gt; 1));
 $this-&gt;SSOIdentityProvider = new Soapclient(JOSSO_SERVER .'/josso/services/SSOIdentityProvider?wsdl', array('trace' =&gt; 1));
 }

 function accessSession($session_id){
 try{
 $accessSession = $this-&gt;SSOSessionManager-&gt;accessSession($session_id);
 // we expect a null
 return $accessSession;
 } catch(Exception $e){
 $this-&gt;error = $e;
 return false;
 }
 }

 // check if a user exists
 function userExists($username){
 try {
 $userExists = $this-&gt;SSOIdentityManager-&gt;userExists($username);
 return true;
 } catch (Exception $e){
 $this-&gt;error = $e;
 return false;
 }
 }

 // assert a login
 function assertIdentityWithSimpleAuthentication($username, $password){
 try{
 $loginAssertion = $this-&gt;SSOIdentityProvider-&gt;assertIdentityWithSimpleAuthentication($username, $password);
 return $loginAssertion;
 } catch (Exception $e){
 $this-&gt;error = $e;
 return false;
 }
 }

 // check assertion and get session
 function resolveAuthenticationAssertion($loginAssertion){
 try{
 $session = $this-&gt;SSOIdentityProvider-&gt;resolveAuthenticationAssertion($loginAssertion);
 return $session;
 } catch (Exception $e){
 $this-&gt;error = $e;
 return false;
 }
 }

 // get session details
 function getSession($session){
 try {
 $sessionDetails = $this-&gt;SSOSessionManager-&gt;getSession($session);
 return $sessionDetails;
 } catch (Exception $e){
 $this-&gt;error = $e;
 return false;
 }
 }

 // make sure the session we found belongs to our user
 function findUserInSession($session){
 try {
 $userInSession = $this-&gt;SSOIdentityManager-&gt;findUserInSession($session);
 return $userInSession;
 } catch (Exception $e){
 return false;
 }
 }

 // not used
 function findUser($username){
 try{
 $userDetails = $this-&gt;SSOIdentityManager-&gt;findUser($username);
 return $userDetails;
 } catch (Exception $e){
 return $e;
 }
 }

 // get a users roles
 function findRolesByUsername($username){
 try {
 $userRoles = $this-&gt;SSOIdentityManager-&gt;findRolesByUsername($username);
 return $userRoles;
 } catch (Exception $e){
 $this-&gt;error = $e;
 return false;
 }
 }

 function globalSignoff($session){
 try {
 $signoff = $this-&gt;SSOIdentityProvider-&gt;globalSignoff($session);
 } catch (Exception $e){
 $signoff = $e;
 }
 unset($_SESSION['josso']);
 return $signoff;
 }

 function getPassHash($password){
 try{
 $result = $this-&gt;JossoPashHash-&gt;hash($password);
 return $result;
 } catch (Exception $e){
 return $e;
 }
 }

}</pre>
<h2>That&#8217;s It!</h2>
<pre>I hope I have at least in part helped with your quest to make logging people in through JOSSO more bearable.</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/computers/code/php-and-josso-transparency-rocks/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s Get Open!</title>
		<link>http://blog.utahcon.com/computers/code/lets-get-open?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lets-get-open</link>
		<comments>http://blog.utahcon.com/computers/code/lets-get-open#comments</comments>
		<pubDate>Mon, 11 Jan 2010 20:40:22 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Funny]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[CAD Comic]]></category>
		<category><![CDATA[Chrome OS]]></category>
		<category><![CDATA[Chrome OS Zero]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Hexxeh]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=278</guid>
		<description><![CDATA[Being that it is Monday and I am really not feeling it today I thought I would dig up what is happening around the nets and share with you. Chrome OS Zero Looks like Hexxeh has been hard at work getting a cleaned up version of Chrome OS called Chrome OS Zero out to the [...]]]></description>
			<content:encoded><![CDATA[<p>Being that it is Monday and I am really not feeling it today I thought I would dig up what is happening around the nets and share with you.</p>
<h2>Chrome OS Zero</h2>
<p>Looks like Hexxeh has been hard at work getting a cleaned up version of Chrome OS called <a href="http://chromeos.hexxeh.net/" target="_blank">Chrome OS Zero</a> out to the masses. Reading through the <a href="http://chromeos.hexxeh.net/wiki/doku.php" target="_blank">Wiki</a> and <a href="http://chromeos.hexxeh.net/wiki/doku.php?id=faq" target="_blank">FAQ</a> things look pretty nice and clean. I may take a stab at playing with this in the next week or so. Thanks <a href="http://blog.hexxeh.net/" target="_blank">Hexxeh</a>!</p>
<h2>Droids</h2>
<p>Tim at <a href="http://www.cad-comic.com/" target="_blank">CTRL-ALT-DEL Comic</a> has this silly for us today:</p>
<p><img class="alignnone" src="http://www.cad-comic.com/comics/sillies/20100111.gif" alt="" width="625" height="237" /></p>
<p>Thanks Tim!</p>
<h2>Nexus One</h2>
<p>We all know about <a href="http://www.google.com/phone" target="_blank">Google&#8217;s latest move in the Android</a> field by now, right? Well it looks like the Nexus One is selling well, and people are having<a href="http://www.informationweek.com/news/security/vulnerabilities/showArticle.jhtml?articleID=222300397" target="_blank"> problems with the 3G service that T-mobile is offering on the Nexus One</a>. Being a T-mobile customer myself I can tell you the problems are not limited to the Nexus One. My phone refused to stay on 3G this weekend too, oh well.</p>
<h2>PHP</h2>
<h3>References</h3>
<p><a href="http://schlueters.de/blog/archives/125-Do-not-use-PHP-references.html" target="_blank">Johannes Schluter discusses how references in PHP work</a>, and suggests that maybe we should not use them anymore.</p>
<blockquote><p>Last year I spoke at eight conferences and attended a few more multiple times at most of them I found myself in discussions about references and PHP as many users seem to have wrong understandings about them. Before going to deep into the subject let&#8217;s start with a quick reminder what references are and clear some confusion about objects which are &#8220;passed by reference.&#8221;</p></blockquote>
<h3>Patterns</h3>
<p><a href="http://giorgiosironi.blogspot.com/" target="_blank">Giorgio Sironi</a><em><a href="http://giorgiosironi.blogspot.com/" target="_blank"> </a></em><a href="http://giorgiosironi.blogspot.com/" target="_blank">has two new blog posts</a> about patterns in PHP. The first is on <a href="http://giorgiosironi.blogspot.com/2010/01/practical-php-patterns-abstract-factory.html" target="_blank">Abstract Factory patterns</a>:</p>
<blockquote><p>The major problem that creational patterns try to solve is that objects need collaborators: we often pass them in the constructor of a <strong>Client</strong> class to aid decoupling, as every class should know <em>only</em> what it really needs to get its job done. With the verb <em>know</em> I mean that they just know that the other part exist at all.</p></blockquote>
<p>The second is on <a href="http://giorgiosironi.blogspot.com/2010/01/practical-php-patterns-builder.html" target="_blank">Builder patterns</a>:</p>
<blockquote><p>The Builder pattern&#8217;s intent is to encapsulate the details (the <em>new</em> operators and other wiring) of the object creation process under a common interface. Though, the Builder can actually change the internal representation of an object, as it is not a black box.</p></blockquote>
<p>Both blog posts were great reads, and I suggest all my <a href="http://uphpu.org" target="_blank">UPHPU</a> buddies hit them up.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/computers/code/lets-get-open/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coders At Work</title>
		<link>http://blog.utahcon.com/books/coders-at-work?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=coders-at-work</link>
		<comments>http://blog.utahcon.com/books/coders-at-work#comments</comments>
		<pubDate>Wed, 25 Nov 2009 15:09:03 +0000</pubDate>
		<dc:creator>utahcon</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Apress]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[Hackers]]></category>
		<category><![CDATA[History]]></category>

		<guid isPermaLink="false">http://blog.utahcon.com/?p=210</guid>
		<description><![CDATA[I recently finished reading Coders at Work, written by Peter Seibel (@peterseibel), and published by Apress. What an amazing book to read, I can&#8217;t even begin to express how much I actually enjoyed this book, and I know I am gushing, but this was a real treat for me. I have always been amazed by [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignleft" style="width: 135px"><img title="Coders At Work " src="http://apress.com/resource/bookcover/9781430219484?size=medium" alt="Cover Art" width="125" height="185" /><p class="wp-caption-text">Cover Art</p></div>
<p>I recently finished reading <em><a href="http://apress.com/book/view/1430219483" target="_blank">Coders at Work</a></em>, written by <a href="http://gigamonkeys.com/" target="_blank">Peter Seibel</a> (<a href="http://twitter.com/peterseibel" target="_blank">@peterseibel</a>), and published by <a href="http://apress.com">Apress</a>. What an amazing book to read, I can&#8217;t even begin to express how much I actually enjoyed this book, and I know I am gushing, but this was a real treat for me.</p>
<p>I have always been amazed by the past of computing, the idea of computers as large as houses, filling entire warehouses for simple punch card technology, hell <a href="http://en.wikipedia.org/wiki/Punched_card" target="_blank">punch cards</a>! I love hearing the stories of how things were, getting the first networks going, writing the first program for any technology, making something that everyone everywhere now uses and doesn&#8217;t think twice about why it works the way it works.</p>
<p>In <em>Coders At Work</em> Peter Seibel interviews some of the legends of technology including <a href="http://norvig.com/" target="_blank">Peter Norvig</a> (Director of Research at Google Inc.), <a href="http://www.jwz.org/" target="_blank">Jamie Zawinkski</a> (major Mozilla contributor, <a href="http://twitter.com/Jwz" target="_blank">@jwz</a>), and plenty more.</p>
<p><span id="more-210"></span>The book was written in the same tune as <em>Writers at Work</em>, and <a href="http://apress.com/book/view/1590597141" target="_blank"><em>Founders at Work</em></a>, to showcase the beginnings of coding, and to give an idea of how the world of coding as we know it has come to be.</p>
<p>There is no magic code revealed in the book, and there are no tutorials, just a bunch of old hackers explaining why they did what they did and how and what they learned from the experience.</p>
<p>As of this writing Apress hasn&#8217;t made available a sample chapter, which is too bad, it would be a great tease and only make you want more of this book.</p>
<p>To give you an idea of what you would be investing in, here is an excerpt from the first chapter of the book, where Peter is interviewing Jamie Zawinski an early Netscape/Mozilla developer. Peter has asked Zawinski about working with Peter Norvig at Berkely, here is his response:</p>
<blockquote><p>Yeah. That was a very strange job. They had a whole bunch<br />
of grad students who’d been doing research on natural language<br />
understanding; they were basically linguists who did some<br />
programming. So they wanted someone to take these bits and pieces<br />
of code they’d left behind and integrate them into one thing that<br />
actually worked.<br />
That was incredibly difficult because I didn’t have the background to<br />
understand what in the world they were doing. So this would happen<br />
a lot: I’d be looking at something; I’d be completely stuck. I have no<br />
idea what this means, where do I go from here, what do I have to read<br />
to understand this. So I’d ask Peter. He’d be nice about it—he’d say,<br />
“It totally makes sense that you don’t understand that yet. I’ll sit down<br />
and explain it to you Tuesday.” So now I’ve got nothing to do. So I<br />
spent a lot of time working on windows system stuff and poking<br />
around with screen savers and just the kind of UI stuff that I’d been<br />
doing for fun before.<br />
After six or eight months of that it just felt like, wow, I’m really just<br />
wasting my time. I’m not doing anything for them, and I just felt like I<br />
was on vacation. There have been times when I was working really a<br />
lot when I’d look back at that and I’m like, “Why did you quit the<br />
vacation job? What is wrong with you? They were paying you to write<br />
screen savers!”</p></blockquote>
<p>A good deal of the book is great history of how integrated the coding world really is, and you see a lot of the progression of technology through the book.</p>
<p>If you are the sort of person who enjoys sitting with the masters of your field, and listening to the stories and pondering what it would have been like to have to program everything in Assembly, or possibly in LISP, then you have to read Coders at Work, and then leave it in your reading room, and make sure others get a chance to read it as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/books/coders-at-work/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beginning Silverlight 2</title>
		<link>http://blog.utahcon.com/books/beginning-silverlight-2?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=beginning-silverlight-2</link>
		<comments>http://blog.utahcon.com/books/beginning-silverlight-2#comments</comments>
		<pubDate>Tue, 10 Feb 2009 16:32:33 +0000</pubDate>
		<dc:creator>TagGerr</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Rich Internet/Interactive Applications]]></category>
		<category><![CDATA[RIIA]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://utahcon.com/blog/?p=188</guid>
		<description><![CDATA[In web development, it&#8217;s important to keep current on new and updated technologies to avoid falling behind in the field. As a designer-turned-coder, I enjoy reading about and following up on the latest tools available for design and interface programming. Having designed and programmed in Flash for almost 10 years now, I was excited to [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignleft" style="width: 135px"><img title="Beginning Silverlight 2: From Novice to Professional" src="http://apress.com/resource/bookcover/9781590599525?size=medium" alt="Beginning Silverlight 2: From Novice to Professional" width="125" height="164" /><p class="wp-caption-text">Beginning Silverlight 2: From Novice to Professional</p></div>
<p>In web development, it&#8217;s important to keep current on new and updated technologies to avoid falling behind in the field. As a designer-turned-coder, I enjoy reading about and following up on the latest tools available for design and interface programming. Having designed and programmed in Flash for almost 10 years now, I was excited to read this book and see how Microsoft was tackling Rich Internet/Interactive Applications.</p>
<p>The author, <a href="http://robertlair.net/">Robert Lair</a>, starts out the book with an introduction to Silverlight and the benefits of building interactive applications using Silverlight and its related tools. After the brief introduction, the real work begins and the reader is quickly involved in writing Silverlight applications. Robert does a great job walking the reader through the various tools available while building each application, and each example builds on or incorporates the previous examples, effectively &#8216;stair-stepping&#8217; the reader up to building their own Silverlight applications.<span id="more-188"></span></p>
<p>Robert suggests that the reader be prepared with some knowledge of C#, JavaScript, and XML, but still keeps the code and examples simple enough to follow quickly and open enough to continue building as the reader&#8217;s knowledge expands. Possibly the only break from this learning curve flow is the final chapter, where Robert describes and builds a custom control for Silverlight, a button with an extra &#8216;cool down&#8217; function that isn&#8217;t possible using just the predefined Silverlight controls. This is definitely one of the most exciting areas in Silverlight, and while it seems a bit abrupt to dive right into coding a custom control, there isn&#8217;t a great way to teach such a high-level process without hitting it head-on. Robert handles that extremely well by walking through the code in steps and giving detailed explanations on each piece of the control.</p>
<p>Following the book from beginning to end, the reader will certainly have the tools and enough starting experience to create and deploy Silverlight applications. As with most design and interface tools, the only limit is the imagination and creativity of the person behind the tools. This book provides an excellent starting point for anyone interested in learning about Silverlight and its capabilities.</p>
<p>As I finished the book, I found myself even more excited about Silverlight applications. While I&#8217;m not prepared to run around shouting &#8216;Flash is dead!&#8217;, I am thrilled to see a contender to Adobe&#8217;s Flash and Flex. It&#8217;s also good to see an option for the .NET developers to build the Rich Internet Applications while using the programming language and tools they are accustomed to. This book will put those developers on the fast track to rivaling even the best Flash/Flex applications available today.</p>
<p>You can pick up Apress&#8217;s Beginning Silverlight 2: From Novice to Professional from <a href="http://apress.com/book/view/1590599527">Apress.com</a> or <a href="http://www.amazon.com/gp/product/1590599527?ie=UTF8&amp;tag=utahconcom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1590599527">Amazon.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.utahcon.com/books/beginning-silverlight-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

