<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>

		<title>jtolds.com</title>
		<link>http://www.jtolds.com/</link>
		<description>JT Olds' RSS Feed</description>

		<language>en-us</language>
		<copyright>Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License</copyright>

<item>
	<title><![CDATA[Pants]]></title>
	<author>JT Olds</author>

    <link><![CDATA[http://www.jtolds.com/projects/p/pants]]></link>

	<guid>1325650212</guid>
	<pubDate>Wed, 4 Jan 2012 04:10:12 +0000</pubDate>
	<description><![CDATA[<p>Over a year ago, for fun, I started creating a programming language. My favorite part of it, hands down, is the name.</p>

<p>Pants is a simple, stackless, dynamically typed, compiled, multiparadigm, statically but optionally hygienically dynamically scoped (holy adverbs), garbage-collected, continuation-based language. MLIA.</p>

<p>More information on the official Pants website.</p>

<table style="width:700px;">

<tr>

<td>
<b>Project links</b>
</td>



</tr>

<tr>
<td>
<ul>

<li><a href="http://www.pants-lang.org/">pants-lang.org</a><br/>

Official site

</li>

</ul>
<img src="/images/blank.gif" alt="" width="300" height="1"/>
</td>




</tr></table>
]]></description>
</item>

<item>
	<title><![CDATA[2011 in pictures]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2012/1/4/2011-in-pictures]]></link>

	<guid>1325649451</guid>
	<pubDate>Wed, 4 Jan 2012 03:57:31 +0000</pubDate>
	<description><![CDATA[<p><img src="/static/newsletter/images/2011/00.jpg"/></p>
<p><img src="/static/newsletter/images/2011/01.png"/></p>
<p><img src="/static/newsletter/images/2011/02.png"/></p>
<p><img src="/static/newsletter/images/2011/03.jpg"/></p>
<p><img src="/static/newsletter/images/2011/04.jpg"/></p>
<p><img src="/static/newsletter/images/2011/05.jpg"/></p>
<p><img src="/static/newsletter/images/2011/06.jpg"/></p>
<p><img src="/static/newsletter/images/2011/07.jpg"/></p>
<p><img src="/static/newsletter/images/2011/08.jpg"/></p>
<p><img src="/static/newsletter/images/2011/09.jpg"/></p>
<p><img src="/static/newsletter/images/2011/10.jpg"/></p>
<p><img src="/static/newsletter/images/2011/11.jpg"/></p>
<p><img src="/static/newsletter/images/2011/12.jpg"/></p>
<p><img src="/static/newsletter/images/2011/13.png"/></p>
<p><img src="/static/newsletter/images/2011/14.png"/></p>
<p><img src="/static/newsletter/images/2011/15.jpg"/></p>
<p><img src="/static/newsletter/images/2011/16.jpg"/></p>
<p><img src="/static/newsletter/images/2011/17.jpg"/></p>
<p><img src="/static/newsletter/images/2011/18.jpg"/></p>
<p><img src="/static/newsletter/images/2011/19.jpg"/></p>
<p><img src="/static/newsletter/images/2011/20.png"/></p>
<p><img src="/static/newsletter/images/2011/21.jpg"/></p>
<p><img src="/static/newsletter/images/2011/22.png"/></p>
<p><img src="/static/newsletter/images/2011/24.png"/></p>
<p><img src="/static/newsletter/images/2011/23.png"/></p>
<p><img src="/static/newsletter/images/2011/25.jpg"/></p>
<p><img src="/static/newsletter/images/2011/26.jpg"/></p>
<p><img src="/static/newsletter/images/2011/27.jpg"/></p>
<p><img src="/static/newsletter/images/2011/28.jpg"/></p>
<p><img src="/static/newsletter/images/2011/29.jpg"/></p>
<p><img src="/static/newsletter/images/2011/30.jpg"/></p>
<p><img src="/static/newsletter/images/2011/31.jpg"/></p>
<p><img src="/static/newsletter/images/2011/32.jpg"/></p>
<p><img src="/static/newsletter/images/2011/33.jpg"/></p>
<p><img src="/static/newsletter/images/2011/34.jpg"/></p>
<p><img src="/static/newsletter/images/2011/35.jpg"/></p>

<p>To everyone who made my year the amazing and wonderful year it was, thank you so much!</p>]]></description>
</item>

<item>
	<title><![CDATA[Mozy Code Launch]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2010/10/21/mozy-code-launch]]></link>

	<guid>1287691125</guid>
	<pubDate>Thu, 21 Oct 2010 19:58:45 +0000</pubDate>
	<description><![CDATA[<p>I've been working on this for what feels like years, but we finally got through all our internal hurdles.</p>
<p>Check out my post on the <a href="http://mozy.com/blog/announcements/open-source-and-mozy-the-debut-of-mozy-code/">Mozy Blog</a>.</p>]]></description>
</item>

<item>
	<title><![CDATA[Thoughts on Go]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2010/9/3/thoughts-on-go]]></link>

	<guid>1283477196</guid>
	<pubDate>Fri, 3 Sep 2010 01:26:36 +0000</pubDate>
	<description><![CDATA[<p>This is the first post of a new newsletter category entitled <a href="http://www.jtolds.com/newsletter/category/research">Research</a>. I aim to update Thursdays with what will likely end up being only mild regularity.</p>

<p>I'm looking at <a href="http://golang.org/">Go</a> to see what people are currently doing with programming languages to try and make parallel computing easier. I've only spent two days with Go, but here are my most salient impressions.</p>

<ul>
<li>This isn't news, but Go is warty. It feels incredibly inconsistent across almost all aspects of the language. It kinda seems like the language design strategy was to respond to problems with tweaks instead of reconsidering the design. I read countless posts about this initial reaction when Go was first launched, so I won't belabor the point.</li>
<li>Goroutines are a nice idea, but as far as I can tell are simply lightweight threads, maybe more like fibers (who knows if they swap around). They have this explanation saying "goroutines are different than all these other things like coroutines and threads!" but their argument wasn't compelling. The <code>go</code> keyword seems to be equivalent to forking a command to the background in bash (like with &amp;, admittedly in the same address space), but with no job control. You can't say you want to rejoin, wait, block, nothing. To provide constructs to mimic that, Go gives you:</li>
<li>Channels. First-order channels are actually a pretty sweet idea, and certainly the thing I was most excited about (message-passing FTW!). Certainly they got stuff right: any type can be passed across a channel, including other channels. That's pretty sweet. And they do the obvious thing where writing to a channel blocks your goroutine until there's space in the buffer, and reading from a channel blocks until there's stuff to read; but there's a huge caveat that just sort of kills it for me: channels are forever. Once you make a channel, as long as you have any reference to it, it is assumed to be open. Even if no one is writing to the channel you're reading from, your read will block indefinitely. So, that sucks. My suggestion for fixing this problem in a minute.</li>
<li>The <code>defer</code> keyword is pretty cool. I'm not sure I'm sold on its complete replacement of destructors, but I do like the idea. Basically - you can schedule an operation to run at the end of a function call, LIFO. Because this gives you most of the features people typically use destructors for, objects in Go don't have destructors.</li>
<li>The thing I'm far and away most sold on is Go's implementation of interfaces. Go does not have class hierarchies; instead, Go does what amounts to static duck typing. You provide an interface, which is a list of object methods, and if the object you have has implementations of all of the same method signatures, it is considered an object that implements that interface. So, that's pretty sweet for dependency injection and flexibility, without having to worry about inheritance trees (or even multiple inheritance) or any other complications class hierarchies give you, to much the same end.</li>
<li>Now, this is just speculation from my light reading, but it appears you can add methods to library objects in your own code. That's something the Scala designers have always been proud of: basically unsealed method sets on an object. The syntax for adding an object method is done after the object's definition much like a regular function, and a few of the code examples even have code that adds new methods to built-in types. It's unclear to me if you have to typedef the built-in type to some new typename to make use of this behavior though. Either way, if I understand correctly, that's pretty sweet. Being able to add your own methods to objects of some other package definitely eases friction between library developers and library users.</li>
<li>It appears you can assign variables of many types the nil value. This is terrible and gross. Unfortunately, this means that object methods need to check to make sure the object they were called on is not nil it seems (much of the tutorial code involves nil checks in method definitions).</p>
</ul>

<p>So, let's talk about how to fix the channel issue I mentioned up above. I think the knee-jerk reaction to the idea of a channel is to make channels full duplex. This makes some sense in an IPC context (certainly TCP), but the more I think about it, the less sense I think it makes inside of a process. Most of the channel idioms I've seen so far in Go code don't use the bidirectional nature of channels. Channels seem to be used to either write only or read only. So, if we exploit that, then we can very naturally introduce the concept of closing a channel. Instead of <code>make(chan int)</code> (or equivalent) returning just the new channel, it should instead return the input side and the output side of the channel separately. Then, specific sides of the channel can be force-closed or closed when garbage collected, and the other side of the channel can then throw an error. Note that while I realize you can close any single direction of a channel without requiring the two objects instead of one, having a specific channel-in object and a channel-out object allows most of this channel closing maintenance to be handled by the garbage collector.</p>
<p>Allowing for closing channels, or signaling that a channel is over ("I've generated all the data I can, cap'n!") allows for idioms that indefinitely compute some string of values, but only until it's no longer needed. Conversely, you could make channels that return a limited amount of data, and the reader could easily ascertain that the data stream has ended. Right now, if you create a goroutine that continuously fills or reads from a channel, it will do so until the program ends, at which point it is forcibly terminated. Of course, it is currently possible to work around this by providing another control channel to the goroutine, but that seems (like much of the rest of the language) kind of hacky. If they did this right you could simulate lazy lists or delayed computations in a nicely abstracted and parallel way.</p>
<p>I suppose the suggestion of a channel that you're reading from or writing to closing and throwing an error brings up the whole issue of exceptions. Go doesn't have exceptions, and instead sticks with the C idiom of return values indicating error status. Luckily, Go provides multiple return value support so you can do things like <code>rv, ok = call()</code>, and then check the value of <code>ok</code> for success; however, I really think exception throwing would be useful here, mainly in simplifying boiler-plate code. It's not like you can't implement exceptions with goroutines or something.</p>
<p>Anyway, that's my impression. I really wish Go wasn't so warty, because it seems like it could be real cool. On the other hand, I appreciate how much work it leaves to do in this field :).</p>]]></description>
</item>

<item>
	<title><![CDATA[Scheme2CPS2C4Py]]></title>
	<author>JT Olds</author>

    <link><![CDATA[http://www.jtolds.com/projects/p/scheme2cps2c4py]]></link>

	<guid>1283447692</guid>
	<pubDate>Thu, 2 Sep 2010 17:14:52 +0000</pubDate>
	<description><![CDATA[<p>For <a href="http://matt.might.net/teaching/fall-2009-advanced-compilation/">
CS6470</a> at <a href="http://www.cs.utah.edu/">cs.utah.edu</a>, I wrote a
simple <a href="http://en.wikipedia.org/wiki/Scheme_(programming_language)">
Scheme</a>-to-<a href="http://en.wikipedia.org/wiki/C_(programming_language)">C
</a> compiler in <a
href="http://en.wikipedia.org/wiki/Python_(programming_language)">Python</a>,
with Scheme in <a
href="http://en.wikipedia.org/wiki/Continuation-passing_style">CPS</a> as an
intermediary.</p>
<p>I've wanted to put this up for a while, but I persuaded myself that at some
point I would clean it up, write documentation, and add more features. However,
neither is happened, so I'm cutting my losses and just uploading this project.
</p>


<table style="width:700px;">

<tr>

<td>
<b>Project links</b>
</td>



</tr>

<tr>
<td>
<ul>

<li><a href="http://github.com/jtolds/scheme2cps2c4py">GitHub page</a><br/>

More information in the README

</li>

</ul>
<img src="/images/blank.gif" alt="" width="300" height="1"/>
</td>




</tr></table>
]]></description>
</item>

<item>
	<title><![CDATA[Dual N Back]]></title>
	<author>JT Olds</author>

    <link><![CDATA[http://www.jtolds.com/projects/p/dual-n-back]]></link>

	<guid>1269847510</guid>
	<pubDate>Mon, 29 Mar 2010 07:25:10 +0000</pubDate>
	<description><![CDATA[<p>I've always had a bad short-term memory; it's atrocious. For most of my life,
I've gotten by with rough heuristics and systems I've developed for maintaining
some semblence of functionality. Recently, however, my inadequacy in
recollection has begun to take more and more of a toll.</p>
<p>In 2008, some <a href="http://www.pnas.org/content/105/19/6829.abstract">
groundbreaking research</a> was presented in the Proceedings of the National Acadamy of Sciences. This research suggested that not only was our understanding
of <a href="http://en.wikipedia.org/wiki/Fluid_and_crystallized_intelligence">
fluid intelligence</a> being somehow fixed at birth <i>wrong</i>, fluid
intelligence and working memory share many of the same cognitive structures,
<i>and can be improved</i> with simple memory games.</p>
<p>One such game, the so-called <a href="http://en.wikipedia.org/wiki/N-back">
dual <i>n</i>-back</a> continuous performance task, is simple, straightforward,
and can be implemented for <a href="http://www.android.com/">Android</a> in a
weekend, with time to spare for <a href="http://www.alta.com/">skiing</a>. :)
</p>

<p>This is my first Android application, and moreover, my first non-academic
Java application, so it sucks hardcore, and it sucks more than just the standard
amount of suck that Java brings into the equation. But it seems to work okay.
</p>
<p>This is also my first GitHub submission, and it appears GitHub has decided
to hate my mime-types, so you may have to right-click and select "save as" to
download the APK or something screwy. Who knows.</p>

<p>This app requires Android 1.6 or newer due to the use of the built-in voice
synthesis API for the auditory memory task.</p>

<table style="width:700px;">

<tr>

<td>
<b>Project links</b>
</td>
<td style="padding-left: 20px;">


<b>Dependencies</b>
</td>

</tr>

<tr>
<td>
<ul>

<li><a href="http://github.com/jtolds/dualnback/blob/master/README">GitHub README</a><br/>

</li>

<li><a href="http://github.com/jtolds/dualnback/tree/master/releases/">Android Package Releases</a><br/>

</li>

<li><a href="http://dl.dropbox.com/u/129990/DualNBack-1.0.apk">DualNBack-1.0.apk</a><br/>

Dropbox got the mime-type right. Yay!

</li>

</ul>
<img src="/images/blank.gif" alt="" width="300" height="1"/>
</td><td style="padding-left: 20px;">



<ul>

<li><a href="http://www.android.com/">Android 1.6 or newer</a><br/>

for teh voice-synthesizing kthx

</li>

</ul>
<img src="/images/blank.gif" alt="" width="300" height="1"/>
</td>


</tr></table>
]]></description>
</item>

<item>
	<title><![CDATA[Another crazy dream]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2010/1/10/another-crazy-dream]]></link>

	<guid>1263088452</guid>
	<pubDate>Sun, 10 Jan 2010 01:54:12 +0000</pubDate>
	<description><![CDATA[<p><i>I found the following story on my phone this morning. Thank heavens I have a full keyboard on my phone I guess. I've slightly edited it for clarity.</i></p>

<p>I have to write this down before I forget more of it.</p>

<p>I just woke up from watching this amazing Michael Bay/Christopher Guest collaborative summer blockbuster. The only bit of background I remember is that there are these aliens living among us disguised as humans. The main character of the show was this one who looked like one of my professors from the University of Minnesota named Jeremy Rose. Most of the dream has completely faded by now, but I remember some of the final scene. </p>

<p>The Jeremy Rose alien, who I guess was named George Lazlo, just narrowly avoided being destroyed by the evil alien who was hunting him. He did this by turning his 1960s car into a large robot suit and throwing the evil alien somewhere. I don't really remember what happened to the evil alien. Anyway, the Jeremy Rose looking alien is standing there and is negotiating a peace treaty with the local authorities and decides to turn himself in because he has just discovered he is both the last of his kind and the last of the Methodists. So he says, "I, George Lazlo, as the last [some crazy alien race name] and the last Methodist, resolve to live peacefully hence forward," and then he works out details for returning the scrappy band of college friends he made to their familes.</p>

<p>The movie closed with him living in a field with his dog looking at the sky.</p>

<p>I woke up thinking, "this is a fantastic movie! I love how he was so dedicated to being a Methodist," and then it all started to fade and I realized in horror that it wasn't a real movie.</p>

<p>Dear Christopher Guest and Michael Bay, please figure out the rest of the movie as I dreamed it and make it. Please. <i>The Last Methodist</i>. Instant summer blockbuster.</p>]]></description>
</item>

<item>
	<title><![CDATA[Cognitive Dissonance]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2009/4/19/cognitive-dissonance]]></link>

	<guid>1240182618</guid>
	<pubDate>Sun, 19 Apr 2009 23:10:18 +0000</pubDate>
	<description><![CDATA[<p>I just got an email from a friend with the following quote. I'm going to leave the things she bolded as-is.</p>

<p>"Let us consider persons at one extreme end of the range of tolerance for dissonance, that is, persons for whom dissonance is especially painful. One might expect that in such extreme instances a person would act so as to avoid the occurrence of dissonance. Thus, for example, he would undoubtedly have experienced the unpleasantness that exists following a decision since there is almost always dissonance. If such a person, for whom dissonance is extremely painful, attempts to avoid the occurrence of dissonance, <b>one would expect to observe that he tried to avoid making decisions or even becomes incapable of making decisions.</b> At this extreme, of course, it becomes a pathological affair...One would also expect that such a person would react very vigorously to the introduction of dissonance into his cognition. This must follow if, indeed, the inability to make decisions is a reaction to fear of dissonance. There is at least one kind of situation where a person cannot avoid dissonance unless he <b>makes an absolute recluse out of himself</b>. That is, occasionally people discuss things, have disagreements, and voice their disagreements. Since the knowledge that someone like oneself holds one opinion is dissonant with holding a contrary opinion, a person for whom dissonance is extremely unpleasant would be expected to react very vigorously to the expression of disagreement from others. <b>He might argue vigorously, be dogmatic, be stubborn, and the like.</b> This syndrome of inability to make decisions, of being very 'decided' and 'one-sided' about issues, and of reacting vigorously in the face of disagreement from others, is one which would be consistent with an interpretation that the person has such low tolerance for dissonance that he has learned to react in anticipation of it...There are other, milder ways of reacting in anticipation of dissonance in order to avoid it. There are persons who, <b>in avoiding post-decision dissonance, make decisions without making them.</b> This can be done sometimes by <b>assuming a passive role</b> with respect to the environment so that, at least in some instances, <b>decisions get made because the ground, so to speak, has moved under one's feet. Thus the decision is made but the person is not responsible for it</b>...such avoidance of dissonance should exist only for persons who have very low tolerance for dissonance coupled with relatively inefficient mechanisms for reducing dissonance once it occurs."</p>

<p>From <a href="http://books.google.com/books?id=voeQ-8CASacC"><i>A Theory of Cognitive Dissonance</i></a> by Leon Festinger.</p>

<p>I don't know <i>anyone</i> like that. That sounds completely unusual.</p>]]></description>
</item>

<item>
	<title><![CDATA[Cellular Automata Presentation]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2009/4/16/cellular-automata-presentation]]></link>

	<guid>1239914633</guid>
	<pubDate>Thu, 16 Apr 2009 20:43:53 +0000</pubDate>
	<description><![CDATA[<p>I'm presenting very introductory Cellular Automata in <a href="http://www.eng.utah.edu/~cs6100/">CS6100</a> today.</p>

<p>I'm posting my slide deck <a href="http://files.getdropbox.com/u/129990/googlepages/pres.pdf">here</a>.</p>

<p><b>Update:</b> the <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Game of Life</a> simulator I used for the examples was called <a href="http://golly.sourceforge.net/">Golly</a> (<a href="http://packages.ubuntu.com/intrepid/golly">packaged</a> with <a href="http://www.ubuntu.com/">Ubuntu</a> 8.10), and comes with many of the sample patterns I showed. The basic patterns I showed can be found on the Game of Life's <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Wikipedia page</a> and <a href="http://mathworld.wolfram.com/Life.html">Mathworld entry</a>.</p>

<p>The Turing machine pattern came with Golly, but is fully described by its author, Paul Rendell, <a href="http://rendell-attic.org/gol/tm.htm">on his website</a>. Additionally, <a href="http://www.igblan.free-online.co.uk/igblan/ca/index.html">a similar page</a> can be found for Paul Chapman's Universal Minsky Register Machine (with Golly-supported pattern files).</p>

<p>The Wikipedia is also quite thorough with its discussion of <a href="http://en.wikipedia.org/wiki/Rule_110">Rule 110</a> <a href="http://en.wikipedia.org/wiki/Rule_110#The_proof_of_universality">universality</a>, though <a href="http://www.wolframscience.com/nksonline/toc.html">NKS</a> may have a potentially <a href="http://www.wolframscience.com/nksonline/section-11.8">more accessible discussion</a> (<a href="http://www.amazon.com/review/RUGSCP3XBNBUV/ref=cm_cr_rdp_perm">if</a> <a href="http://www.amazon.com/review/R4IW30RUCAVBK/ref=cm_cr_rdp_perm">you</a> <a href="http://www.amazon.com/review/R6B8KO2M32P8G/ref=cm_cr_rdp_perm">can handle it</a>).</p>]]></description>
</item>

<item>
	<title><![CDATA[SHA1 Javascript Tool]]></title>
	<author>JT Olds</author>

    <link><![CDATA[http://www.jtolds.com/projects/p/sha1-javascript-tool]]></link>

	<guid>1238267871</guid>
	<pubDate>Sat, 28 Mar 2009 19:17:51 +0000</pubDate>
	<description><![CDATA[<p>Occasionally, I need a SHA1 hash of something, and I'm not in a convenient place to get one. For instance, it is hard to open up a terminal to run <i>sha1sum</i> on public internet kiosks. It's also obnoxious to have to SSH anywhere from my phone to get access to a SHA1 algorithm.</p>
<p>So, I took Paul Johnston's <a href="http://pajhome.org.uk/crypt/md5/sha1src.html">Javascript implementation</a> and made <a href="/sha1/">a simple webform</a>. Trivial, I know. But I took out unnecessary HMAC calculation code, so it should be relatively easy to examine the source if you're worried about using something secure. The webdesign is, hah, optimized for mobile devices.</p>

<table style="width:700px;">

<tr>

<td>
<b>Project links</b>
</td>



</tr>

<tr>
<td>
<ul>

<li><a href="/sha1/">SHA1 Webform</a><br/>

</li>

</ul>
<img src="/images/blank.gif" alt="" width="300" height="1"/>
</td>




</tr></table>
]]></description>
</item>

	</channel>
</rss>

