<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5135517</id><updated>2012-01-01T04:39:56.718-08:00</updated><category term='lisp'/><category term='smalltalk'/><title type='text'>Making it stick.</title><subtitle type='html'>"I have a mind like a steel... uh... thingy." Patrick Logan's weblog.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default?start-index=101&amp;max-results=100'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2267</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5135517.post-4362743829019195015</id><published>2011-12-07T15:06:00.001-08:00</published><updated>2011-12-07T16:05:11.010-08:00</updated><title type='text'>Calling Prolog from Java with Prolog Cafe</title><content type='html'>&lt;p&gt;A couple two, three more details from yesterday's post. The first is how to establish the package name for a Prolog source file being compiled to Java:&lt;br /&gt;
&lt;p&gt;Simply put the following at the top of the Prolog source:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
:- package 'com.example.foo'.&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;Now, calling predicates from Java: each predicate and arity is compiled from Prolog to its own Java class. For example the following Prolog source:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
&lt;pre&gt;main :-
 queens(8, Qs), write(Qs), nl, fail.

queens(N,Qs) :-
 range(1,N,Ns),
 queens(Ns,[],Qs).

queens([],Qs,Qs).
queens(UnplacedQs,SafeQs,Qs) :-
 select(UnplacedQs,UnplacedQs1,Q),
 not_attack(SafeQs,Q),
 queens(UnplacedQs1,[Q|SafeQs],Qs).

%% ...and so on.
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;If you omit the package name then the package defaults to "user" and the compiler creates a "user" directory for the Java source. Otherwise the Java files will be placed in a nested source tree corresponding to the package name you've defined.&lt;br /&gt;
&lt;p&gt;The section of code above defines three predicates: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;main/0&lt;/code&gt; is compiled to a class named PRED_main_0 (i.e. a class for a predicate with no arguments, "arity zero")&lt;/li&gt;
&lt;li&gt;&lt;code&gt;queens/2&lt;/code&gt; is compiled to a class named PRED_queens_2 (i.e. a class for the two-argument predicate, "arity two")&lt;/li&gt;
&lt;li&gt;&lt;code&gt;queens/3&lt;/code&gt; is compiled to a class named PRED_queens_3 (i.e. a class for the three-argument predicate, "arity three")&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;These predicates can be called from Java using the Prolog Cafe API. The predicate &lt;code&gt;main/0&lt;/code&gt; will display the results to standard output using the &lt;code&gt;write/1&lt;/code&gt; and &lt;code&gt;nl/0&lt;/code&gt; predicates which write a given term and write a newline, respectively. Running that predicate was illustrated in yesterday's post.&lt;br /&gt;
&lt;p&gt;If you want to find the values of the logic variables given in a goal, then the Java would look something like:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
&lt;pre&gt;IntegerTerm eight = new IntegerTerm(8);
VariableTerm solution = new VariableTerm();
PRED_queens_2 queens = new PRED_queens_2(eight, solution, Failure.FAILURE);
BlockingPrologControl prolog = new BlockingPrologControl();
prolog.setPredicate(queens);
StringBuffer buf = new StringBuffer();
for (boolean r = prolog.call(); r; r = prolog.redo()) {
    buf.append("A solution: " + solution + "\n");
}
queens_solutions = buf.toString();
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;This Java code creates an instance of the &lt;code&gt;queens/2&lt;/code&gt; predicate corresponding to the following Prolog: &lt;code&gt;queens(8, Qs), fail.&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;Constructors for a predicate instance require a "continuation" argument. Lacking no other interesting continuation, the default choice is &lt;code&gt;Failure.FAILURE&lt;/code&gt;, a built-in predicate telling the search to backtrack for further solutions.&lt;br /&gt;
&lt;p&gt;The &lt;code&gt;IntegerTerm eight&lt;/code&gt; is a constant, telling the application to try to place eight queens. And the &lt;code&gt;VariableTerm&lt;/code&gt; is a logic variable telling the application to unify found solutions with this variable.&lt;br /&gt;
&lt;p&gt;&lt;code&gt;BlockingPrologControl&lt;/code&gt; is going to conduct the search to satisfy its given predicate. The &lt;code&gt;call&lt;/code&gt; method tries to find a solution, and returns &lt;code&gt;true&lt;/code&gt; if it does. Subsequent calls to &lt;code&gt;redo&lt;/code&gt; try to find further solutions, finally returning &lt;code&gt;false&lt;/code&gt; when no more solutions exist.&lt;br /&gt;
&lt;p&gt;The loop iterates once per solution. With each iteration the value of the logic variable, &lt;code&gt;solution&lt;/code&gt;, is unified with the current solution. This code simply builds a string of all of the solutions, and I happened to use just one logic variable in the goal.&lt;br /&gt;
&lt;p&gt;If you're not (yet) a Prolog programmer, note that a clause can have any number of variables, and the search will attempt to satisfy each of them so that the whole solution is true. Given the following definition of &lt;code&gt;append/3&lt;/code&gt;, in which the third term is logically equated to the first term appended to the second term:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
&lt;pre&gt;append([X|Y],Z,[X|W]) :- append(Y,Z,W).
append([],X,X).
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;The following goal will attempt to find values for each of the variables such that the two appends are satisfied:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
append([N], [Y, Z], [X, 2, 3]), append([3], [2, 1], [3, 2, N]).&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;There is one solution:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
&lt;pre&gt;N = 1,
Y = 2,
Z = 3,
X = 1
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
See that the variables &lt;code&gt;N&lt;/code&gt; and &lt;code&gt;X&lt;/code&gt; are unified to each other, and unified to the number 1 as well.&lt;br /&gt;
&lt;p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-4362743829019195015?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/4362743829019195015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=4362743829019195015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4362743829019195015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4362743829019195015'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/12/calling-prolog-from-java-with-prolog.html' title='Calling Prolog from Java with Prolog Cafe'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1978462713057037899</id><published>2011-12-06T12:09:00.001-08:00</published><updated>2011-12-06T12:26:47.670-08:00</updated><title type='text'>Prolog in Java</title><content type='html'>&lt;p&gt;There are a number of implementations of Prolog in Java. Most of them are interpreters, and a number of those implement a complete Prolog system. Most implementations are a bit dated.&lt;br /&gt;
&lt;p&gt;Wanting to get a bit more speed but remain in the JVM, I took a &lt;a href="http://kaminari.istc.kobe-u.ac.jp/PrologCafe/"&gt;look at Prolog Cafe&lt;/a&gt;, which compiles Prolog to Java source. Even better, the source is as recent as 2009.&lt;br /&gt;
&lt;p&gt;Then I looked around to see who might be using Prolog Cafe, and how recently. Even better news: &lt;a href="http://code.google.com/p/gerrit/"&gt;The Gerrit code review system&lt;/a&gt; uses Prolog Cafe for rule checking. The team has been &lt;a href="http://code.google.com/p/prolog-cafe/"&gt;actively supporting a fork&lt;/a&gt; off the last original release of 1.2.5.&lt;br /&gt;
&lt;p&gt;I just began trying Prolog Cafe (the new fork) this morning. The most significant difference so far is the Java package namespace. Below are a few notes illustrating the system, based off &lt;a href="http://kaminari.istc.kobe-u.ac.jp/PrologCafe/manual_en.html"&gt;the original documentation&lt;/a&gt;, using the new namespace, etc.&lt;br /&gt;
&lt;p&gt;&lt;ol&gt;&lt;li&gt;Install SWI Prolog for bootstrapping.&lt;/li&gt;
&lt;li&gt;cd to the prolog-cafe source directory.&lt;/li&gt;
&lt;li&gt;make&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The package namespace has changed from&lt;br /&gt;
&lt;code&gt;jp.ac.kobe_u.cs.prolog.*&lt;/code&gt;&lt;br /&gt;
to: &lt;code&gt;com.googlecode.prolog_cafe.*&lt;/code&gt;.&lt;br /&gt;
&lt;p&gt;Prolog Cafe has an interpreter. Try it:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
&lt;pre&gt;java -cp $PLCAFEDIR/plcafe.jar com.googlecode.prolog_cafe.lang.PrologMain com.googlecode.prolog_cafe.builtin:cafeteria
Prolog Cafe 1.2.5 (mantis)
Copyright(C) 1997-2009 M.Banbara and N.Tamura
| ?- [queens].
{consulting /home/patrick/dev/prolog-cafe-ex/queens.pl ...}
{/home/patrick/dev/prolog-cafe-ex/queens.pl consulted 350 msec}
| ?- main.
[4,2,7,3,6,8,5,1]
[5,2,4,7,3,8,6,1]
[3,5,2,8,6,4,7,1]
[3,6,4,2,8,5,7,1]
...
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;Compile Prolog to Java:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
java -cp $PLCAFEDIR/plcafe.jar com.googlecode.prolog_cafe.compiler.Compiler ../queens.pl&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;Compile the resulting Java:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
javac -d . -cp $PLCAFEDIR/plcafe.jar user/*.java&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;Run the compiled code:&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
&lt;pre&gt;java -cp .:$PLCAFEDIR/plcafe.jar com.googlecode.prolog_cafe.lang.PrologMain com.googlecode.prolog_cafe.builtin:cafeteria

Prolog Cafe 1.2.5 (mantis)
Copyright(C) 1997-2009 M.Banbara and N.Tamura
| ?- main.
[4,2,7,3,6,8,5,1]
[5,2,4,7,3,8,6,1]
[3,5,2,8,6,4,7,1]
[3,6,4,2,8,5,7,1]
[5,7,1,3,8,6,4,2]
[4,6,8,3,1,7,5,2]
[3,6,8,1,4,7,5,2]
[5,3,8,4,7,1,6,2]
[5,7,4,1,3,8,6,2]
[4,1,5,8,6,3,7,2]
...
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1978462713057037899?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1978462713057037899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1978462713057037899' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1978462713057037899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1978462713057037899'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/12/prolog-in-java.html' title='Prolog in Java'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3026977359765212919</id><published>2011-08-27T13:47:00.000-07:00</published><updated>2011-08-27T13:59:20.583-07:00</updated><title type='text'>The Relative Coordinate Systems of Cappuccino's CPView</title><content type='html'>&lt;p&gt;
Cappuccino's Objective-J API is based on the Objective-C source for NeXTStep. NextStep was developed at NeXT in the 1980's. At that time it was considered the premier GUI programming API. As it happens the corresponding Cappuccino API should be considered the premier browser-based, "rich", "single-page app", whathaveyou, programming API.
&lt;p&gt;
I added &lt;a href="https://github.com/patrickdlogan/cappex"&gt;a simple example to github&lt;/a&gt; which illustrates how easy it is to create multiple subdivided views that resize appropriately as the browser window resizes. Or you could use HTML5/CSS3 and write "puns" to trick the web page layout model into behaving like a window system. I find the straightforward approach significantly more productive.
&lt;p&gt;
The best way to solve a complex programming problem is to address simpler problems that add up. The nested views with relative coordinate systems goes back to something like the beginning of computer graphics. Complex layouts become simple combinations of much simpler layouts.
&lt;p&gt;
I'm putting most of my exposition in the README.org and jotting about updates on &lt;a href="http://subjot.com/jot/22272"&gt;subjot, e.g. this one&lt;/a&gt;, or watch the github repository itself.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3026977359765212919?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3026977359765212919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3026977359765212919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3026977359765212919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3026977359765212919'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/08/relative-coordinate-systems-of.html' title='The Relative Coordinate Systems of Cappuccino&apos;s CPView'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7119789108765291278</id><published>2011-08-23T10:31:00.000-07:00</published><updated>2011-08-23T10:35:16.152-07:00</updated><title type='text'>Objective-J Exuberant Ctags Regex</title><content type='html'>&lt;p&gt;
The following does a decent job of indexing Objective-J source using &lt;a href="http://ctags.sourceforge.net/"&gt;Exuberant Ctags&lt;/a&gt; (a ctags/etags replacement with a lot of features). Based on &lt;a href="http://www.gregsexton.org/2011/04/objective-c-exuberant-ctags-regex/"&gt;Greg Sexton's regexps for Objective-C&lt;/a&gt;.
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
--langdef=objj
--langmap=objj:.j
--regex-objj=/^[[:space:]]*[-+][[:space:]]*\([[:alpha:]]+[[:space:]]*\*?\)[[:space:]]*([[:alnum:]]+):[[:space:]]*\(/\1/m,method/
--regex-objj=/^[[:space:]]*[-+][[:space:]]*\([[:alpha:]]+[[:space:]]*\*?\)[[:space:]]*([[:alnum:]]+)[[:space:]]*\{/\1/m,method/
--regex-objj=/^[[:space:]]*[-+][[:space:]]*\([[:alpha:]]+[[:space:]]*\*?\)[[:space:]]*([[:alnum:]]+)[[:space:]]*\;/\1/m,method/
--regex-objj=/^[[:space:]]*\@implementation[[:space:]]+(.*)$/\1/c,class/
&lt;/pre&gt;
&lt;/code&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7119789108765291278?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7119789108765291278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7119789108765291278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7119789108765291278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7119789108765291278'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/08/objective-j-exuberant-ctags-regex.html' title='Objective-J Exuberant Ctags Regex'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3320888592248476209</id><published>2011-08-21T16:26:00.000-07:00</published><updated>2011-08-21T18:32:40.916-07:00</updated><title type='text'>Double Dispatch In Objective-J</title><content type='html'>&lt;p&gt;
My previous post describes a controller for separating an
application's model from Cappuccino's &lt;code&gt;CPOutlineView&lt;/code&gt;. But
there's actually one place where the model and view kind of meet up:
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
- (id)outlineView:(CPOutlineView)outlineView objectValueForTableColumn:(CPTableColumn)tableColumn byItem:(id)item
{
  return (nil == item) ? @"" : [item objectValueForOutlineColumn: tableColumn];
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
I decided to have the controller give a model class access to a
column, which is part of the view. Why?
&lt;p&gt;
This example has four kinds of columns and three kinds of model
classes. Each column wants to display each kind of model element
differently. One obvious solution is to use a conditional expression:
&lt;p&gt;
&lt;q&gt;if the column is a ... and the model element is a ... then ...&lt;/q&gt;
&lt;p&gt;
But even simple object-oriented languages like Objective-J have easy
mechanisms and patterns for reducing the need to test objects for
their class or whether they implement some specific message. Going way
back in Smalltalk lore, &lt;a href="http://en.wikipedia.org/wiki/Double_dispatch"&gt;there's Double Dispatch&lt;/a&gt;.
&lt;p&gt;
The goal is to reveal to a column the presentation object to use in
each of its rows. To do so, the column
view, &lt;code&gt;CPTableColumn&lt;/code&gt;, is subclassed for each kind of
column in the example's outline:
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;SDNavigationColumn&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;SDTopicColumn&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;SDNotesColumn&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;SDDateColumn&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Each of these subclasses implements the following methods:
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;objectValueForTopLevel:&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;objectValueForPriority:&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;objectValueForStuff:&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Each of the model classes
implements &lt;code&gt;objectValueForOutlineColumn:&lt;/code&gt; by sending one of
the above messages to the given column. For
example, &lt;code&gt;SDStuff&lt;/code&gt; is implemented as follows:
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
- (id)objectValueForOutlineColumn:(id)anOutlineColumn
{
  return [anOutlineColumn objectValueForStuff: self]; 
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
This dispatches right back ("double dispatch") to have the column respond with the awareness that it is on a row for detailed stuff. Each
column will be interested in different aspects of the stuff. The
navigation column is only interested in hierarchy and not
details. Here is its implementation, which just returns the empty
string to indicate its disinterest:
&lt;p&gt;
  &lt;code&gt;
&lt;pre&gt;
- (id)objectValueForStuff:(SDStuff)aStuff
{
  return "";
}
&lt;/pre&gt;
  &lt;/code&gt;
&lt;p&gt;
On the other hand the date column is interested in a presentation of
the given date:
&lt;p&gt;
  &lt;code&gt;
&lt;pre&gt;
- (id)objectValueForStuff:(SDStuff)aStuff
{
  return [[[aStuff date] description] substringToIndex: 10];
}
&lt;/pre&gt;
  &lt;/code&gt;
&lt;p&gt;
Although this kind of brings the model and the view together, the
names could be refactored because there is nothing really
"column-specific" about this mini-protocol. Also Objective-J has
"categories" for grouping methods. The intent of this protocol could
be explained by placing the methods in a "presenting" category.
&lt;p&gt;
There are certainly more elaborate mechanisms available for keeping
views and models separated, yet in-sync. &lt;a href="http://en.wikipedia.org/wiki/Double_dispatch"&gt;Double Dispatch is just a simple one&lt;/a&gt; for
reducing the need to test for classes and messages before sending
them.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3320888592248476209?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3320888592248476209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3320888592248476209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3320888592248476209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3320888592248476209'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/08/double-dispatch-in-objective-j.html' title='Double Dispatch In Objective-J'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2651453067553432936</id><published>2011-08-21T13:45:00.000-07:00</published><updated>2011-08-21T15:31:07.181-07:00</updated><title type='text'>Programming with Cappuccino's CPOutlineView</title><content type='html'>&lt;p&gt;
I wrote in &lt;a href="http://patricklogan.blogspot.com/2011/08/on-cappuccino-and-avoiding-modern.html"&gt;my recent post on Cappuccino&lt;/a&gt; about the OK but not great
state of documentation. My learning process has been smooth though. I
have always had a sense of moving forward with little frustration. But
I should attempt to fill some of the documentation gaps myself.
&lt;p&gt;
I recently wanted to understand how to program outline views, but ran
into some of those gaps. And so my second blog post of the day begins
like so.
&lt;p&gt;
&lt;code&gt;CPOutlineView&lt;/code&gt; is a subclass of &lt;code&gt;CPTableView&lt;/code&gt;
however from the code using an outline, the requirements are
different. Rather than providing a two-dimensional array of data, an
application has to provide more of a hierarchy of two-dimensional
data. The way I achieve this in my first example is through defining a
new class, an &lt;code&gt;SDOutlineController&lt;/code&gt;.
&lt;p&gt;
(Don't worry about "SD" - that's just the class prefix I am
using. Class prefixes are a convention going way back with NeXTStep
and before that Smalltalk. Presumably Javascript itself will adopt a
conventional if not standard namespace mechanism, and Objective-J can
piggyback on that. But I digress...)
&lt;p&gt;
This example outline has two groups at the top level: "my stuff" and
"other's stuff". Each top-level group has three second-level groups of
priorities: "high", "medium", and "low". The third level of the
outline are the lists of stuff, themselves. These are arrays of
instances of &lt;code&gt;SDStuff&lt;/code&gt;.
&lt;p&gt;
Here's the class definition for stuff with instance variables for a
date, a topic, and notes:
&lt;code&gt;
&lt;pre&gt;
@implementation SDStuff : CPObject
{
  CPDate   date  @accessors(readonly);
  CPString topic @accessors(readonly);
  CPString notes @accessors(readonly);
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
This is Objective-J, a superset of Javascript. I'm assuming that's
fairly readable even if you've not programmed in Objective-C and
Cocoa. Objective-J can be compiled to Javascript up-front on the
server, or in the browser.
&lt;p&gt;
The SDOutlineController is the C in MVC for this outline. The V is
Cappuccino's CPOutlineView class (and some others). The controller's
job is to work with an application's model (the M) in order to present
it in the view for user interaction. The model in this case is a
little controved, but boils down the essence of a hierarchical model.
&lt;p&gt;
I have defined the top-level of the model hierarchy to be a simple
class with a label and references to it's children, which group stuff
into high, medium, and low priorities:
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
@implementation SDStuffTopLevel : CPObject
{
  CPString       label                     @accessors(readonly);
  SDStuffParent  highPriorityStuffParent   @accessors(readonly);
  SDStuffParent  mediumPriorityStuffParent @accessors(readonly);
  SDStuffParent  lowPriorityStuffParent    @accessors(readonly);
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
The middle of the hierarchy is similarly defined, but the children are
maintained as an array of stuff:
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
@implementation SDStuffParent : CPObject
{
  CPString label @accessors(readonly);
  CPArray  stuff @accessors(readonly);
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
The model classes above organize data into a fairly simple
hierarchical structure. However this structure does not suit all
imaginable hierarchies. And so &lt;code&gt;SDOutlineController&lt;/code&gt; is
designed to avoid having the view depend on any given structure, and
vice-versa. The controller has a reference to the top-level for my
stuff and the top-level for other's stuff:
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
@implementation SDOutlineController : CPObject
{
  SDStuffTopLevel myStuffTopLevel;
  SDStuffTopLevel othersStuffTopLevel;
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
The controller has methods expected by &lt;code&gt;CPOutlineView&lt;/code&gt; for
mediating between the model and the view. The messages are:
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;outlineView:numberOfChildrenOfItem:&lt;/code&gt; is kind of obvious.&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;outlineView:isItemExpandable:&lt;/code&gt; should be YES (true) if the item has children.&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;outlineView:child:ofItem:&lt;/code&gt; should access a hierarchical node's children given an index.&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;outlineView:objectValueForTableColumn:byItem:&lt;/code&gt; should provide an object for representing the given model element in the view.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In this example, the top-level of the model always has two
elements. The protocol for &lt;code&gt;CPOutlineView&lt;/code&gt; uses the
convention of passing &lt;code&gt;nil&lt;/code&gt; (i.e. the Objective-J
equivalent of Javascript's &lt;code&gt;null&lt;/code&gt;.) to indicate the root of
the model. And so I have not implemented the root as a class.
&lt;p&gt;
The following method provides the number of children for any given
model element because I have implemented methods for
the &lt;code&gt;count&lt;/code&gt; message for each model class.
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
- (int)outlineView:(CPOutlineView)outlineView numberOfChildrenOfItem:(id)item
{
  return (item == nil) ? 2 : [item count];
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
Expandability of a hierarchical element is based on the number of
children being greater than zero:
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
- (BOOL)outlineView:(CPOutlineView)outlineView isItemExpandable:(id)item
{
  return 0 &lt; [self outlineView: outlineView numberOfChildrenOfItem: item];
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
Indexing the child of a hierarchical element is a little more
complicated, again just because the root is represented
as &lt;code&gt;nil&lt;/code&gt;. Otherwise I have
implemented &lt;code&gt;objectAtIndex:&lt;/code&gt; for the model classes:
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
- (id)outlineView:(CPOutlineView)outlineView child:(int)index ofItem:(id)item
{
  var result = nil;
  if (nil == item) {
    switch (index) {
    case 0:
      result = myStuffTopLevel;
      break;
    case 1:
      result = othersStuffTopLevel;
      break;
    }
  } else {
    result = [item objectAtIndex: index];
  }
  return result;
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
The remaining method determines the the presentation object for a
given model element. The root is never displayed, but to be compelete,
this method returns the empty string. Every model class
implements &lt;code&gt;objectValueForOutlineColumn:&lt;/code&gt; in order to convert itself to its
presentation object (which is always a string in this example).
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
- (id)outlineView:(CPOutlineView)outlineView objectValueForTableColumn:(CPTableColumn)tableColumn byItem:(id)item
{
  return (nil == item) ? @"" : [item objectValueForOutlineColumn: tableColumn];
}
&lt;/pre&gt;
&lt;/code&gt;
&lt;p&gt;
I will use a follow-up blog post to discuss the implementation
of &lt;code&gt;objectValueForOutlineColumn:&lt;/code&gt;. Perhaps this post
provides a little more clarity than other information I've found on
the web for programming with &lt;code&gt;CPOutlineView&lt;/code&gt;. Let me know
if you have a correction or something to add.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2651453067553432936?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2651453067553432936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2651453067553432936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2651453067553432936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2651453067553432936'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/08/programming-with-cappuccinos.html' title='Programming with Cappuccino&apos;s CPOutlineView'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-5224585848829525537</id><published>2011-08-21T11:37:00.000-07:00</published><updated>2011-08-21T13:15:39.855-07:00</updated><title type='text'>On Cappuccino and Avoiding The Modern "Impedance" Mismatch</title><content type='html'>&lt;p&gt;
Wow. My head is just not geared toward writing a blog any longer. But
I will model through it.
&lt;p&gt;
&lt;a href="http://cappuccino.org/"&gt;Cappuccino&lt;/a&gt; is a great system for
writing rich web applications in the browser, without plugins. There's
finally a growing emphasis on Model/View/Controller among modern
javascript libraries. Most of them rely on HTML and CSS for the View
mechanisms. Which is as you would expect. The problem is the
"impedance mismatch" (if you will) between these mechanisms and the
desired views for traditional rich applications.
&lt;p&gt;
Cappuccino does not suffer such a mismatch, being based on a good
portion of the API
of &lt;a href="http://en.wikipedia.org/wiki/NeXTSTEP"&gt;NeXTStep&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/OpenStep"&gt;OpenStep&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/GNUstep"&gt;GNUStep&lt;/a&gt;,
and Apple's &lt;a href="http://en.wikipedia.org/wiki/Cocoa_(API)"&gt;Cocoa&lt;/a&gt;. And
so the Cappuccino API is essentially 25 years old or so.
&lt;p&gt;
This choice is not without its pro's and con's. The pro's win for me
for applications with these characteristics:
&lt;ul&gt;
&lt;li&gt;At least one display screen greater than 10 inches, i.e. typically used on more than a tablet or phone
&lt;/li&gt;
&lt;li&gt;A good bit more data than would easily fit on a single page, and complex relationships throughout
&lt;/li&gt;
&lt;li&gt;More than a few operations on that data, with a good bit of keyboard input
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Because Cappuccino provides an HTML view, this is not a total
loss. I've not done much with this yet, but the "con" seems to become
a "pro" by allowing for applying HTML and CSS when those mechanisms
are the best fit.
&lt;p&gt;
Another initial "con" for me the first time I poked at Cappuccino
turned "pro" eventually. I'd done a fairly extensive search several
months ago on the state of the art of MVC for javascript. Cappuccino
was low on my list because I wanted to use javascript per se. Just as
Cocoa, et al. are written in Objective-C, Cappuccino is in
Objective-J. 
&lt;p&gt;
I actually like the syntax and class mechanisms, and their similarity
to Objective-C and Smalltalk. (Also emacs' Objective-C mode works
pretty well as-is with Objective-J.) As the javascript runtimes and
tools are adapted to support multiple languages, the tool support for
Objective-J should increase.
&lt;p&gt;
I came back to Cappuccino after frustration with manipulating HTML and
CSS to do my bidding. I don't have any great need for the kind of
styling afforded by HTML and CSS. (And with the fallback to an HTML
view as per above, even less so.) Most of what I need can be provided
satisfactorily using the traditional GUI views going back to
Smalltalk-80's MVC.
&lt;p&gt;
As it happens, I've done a lot of GUI programming in Smalltalk and
several other languages and libraries over the years, so my claim of
the pragmatism of this approach also coincides with my
experience. Some &lt;a href="http://patricklogan.blogspot.com/2007/05/even-more-on-web-again.html"&gt;readers
may recall a few years ago&lt;/a&gt; that I was in favor of programming web
clients using Adobe Flex with ReSTful web services rather than
immature javascript/HTML/CSS libraries.
&lt;p&gt;
The programmability of views from javascript/HTML/CSS is significantly
better now than in 2007. But the majority of libraries are still
immature and incomplete. Cappuccino is the best exception to the rule
I know of. Fortunately one no longer requires a plugin to achieve
Flex's level of productivity.
&lt;p&gt;
&lt;a href="http://cappuccino.org/learn/documentation/"&gt;Cappuccino's class documentation&lt;/a&gt; is good, because the API and
documentation is already 25 years mature. Tutorials and examples are
good, growing, and fortunately supplemented by Cocoa material when the
Capp material iteself is lacking.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-5224585848829525537?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/5224585848829525537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=5224585848829525537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5224585848829525537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5224585848829525537'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/08/on-cappuccino-and-avoiding-modern.html' title='On Cappuccino and Avoiding The Modern &quot;Impedance&quot; Mismatch'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2780936074006700857</id><published>2011-07-22T15:59:00.000-07:00</published><updated>2011-07-22T16:19:09.533-07:00</updated><title type='text'>Kotlin == Harry Potter, Scala == LoTR?</title><content type='html'>&lt;p&gt;
&lt;a href="http://confluence.jetbrains.net/display/Kotlin/Welcome"&gt;kotlin is a new JVM language, from JetBrains&lt;/a&gt;. To understand my title, you may want to read &lt;a href="http://confluence.jetbrains.net/display/Kotlin/Comparison+to+Scala"&gt;a comparison with Scala&lt;/a&gt; from the Kotlin perspective, and &lt;a href="https://groups.google.com/d/topic/scala-debate/k47zvdiOnRY/discussion"&gt;some of the discussion&lt;/a&gt; taking place in the Scala community.
&lt;p&gt;
Perhaps since I recently saw the final Harry Potter movie, the title of this post came immediately to mind. Harry Potter appears to me to be a fun story, whose details exist mainly to support that story. For example, characters seem to have the abilities they require to meet a specific challenge.
&lt;p&gt;
On the other hand, the characters in Middle Earth seem be situated in a world that has its own physics. The stories are based on that world, those characters, and the given physics. My understanding is that this is the intention and the process taken to write the books.
&lt;p&gt;
Arguably, Harry Potter is far simpler than LoTR. But, arguably, Harry Potter has less to offer than LoTR.
&lt;p&gt;
Ten years ago this analogy could have been (and was, essentially) made between Java and Smalltalk. Ten years before *that* the argument had been made between C++ and Smalltalk.
&lt;p&gt;
Java is not "pure". Java is in essence Smalltalk but with the "magic" its authors deemed necessary to make Java more successful.
&lt;p&gt;
Harry's world is not pure. Middle Earth is (minus some of the complications that can also be found in Smalltalk and Scala.)
&lt;p&gt;
Kotlin is a big improvement over Java, but it is merely Java minus some cruft, plus enough magic to be useful in 2011. Scala on the other hand has its own physics that makes sense, and provides for a more rich future than Kotlin.
&lt;p&gt;
Hmmm. Just thinking...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2780936074006700857?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2780936074006700857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2780936074006700857' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2780936074006700857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2780936074006700857'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/07/kotlin-harry-potter-scala-lotr.html' title='Kotlin == Harry Potter, Scala == LoTR?'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6242378812023303645</id><published>2011-04-09T15:42:00.000-07:00</published><updated>2011-04-09T21:11:15.948-07:00</updated><title type='text'>Implementing McCarthy's AMB Operator in Javascript Using a Trampoline</title><content type='html'>&lt;p&gt;
John McCarthy in 1963 wrote about his "AMB" operator for making nondeterministic choices. ("A Basis for a Mathematical Theory of Computation", &lt;a href="http://www-formal.stanford.edu/jmc/basis1.pdf"&gt;PDF&lt;/a&gt;) AMB is also explained in detail in &lt;a href="http://mitpress.mit.edu/sicp/full-text/sicp/book/node89.html"&gt;the (free, online) book Structure and Interpretation of Computer Programs&lt;/a&gt;.
&lt;p&gt;
AMB provides nondeterministic choices with backtracking in the case of failure. This is one of the major components of logic programming, with unification being the other major component. But AMB is useful even without unification. For example AMB makes it easy to collect all permutations of mutliple choices and to generate &lt;a href="http://patrickdlogan.github.com/ambjs/docs/amb-test.html#section-4"&gt;selective&lt;/a&gt; &lt;a href="http://patrickdlogan.github.com/ambjs/docs/amb-test.html#section-6"&gt;permutations&lt;/a&gt;. (Remember writing permutations as a beginning programmer? Yeah - you probably wish you had been taught AMB ahead of that.)
&lt;p&gt;
The SICP book uses Scheme for AMB. Scheme makes this easy, using &lt;code&gt;call/cc&lt;/code&gt; and macros. And Common Lisp makes this manageable and pretty using macros. Javascript should not be too bad either - no continuations, no macros, but first-class functions help.
&lt;p&gt;
Mihai Bazon recently provided &lt;a href="http://mihai.bazon.net/blog/amb-in-javascript"&gt;an implementations of AMB in Javascript&lt;/a&gt;. (Along with some great examples of using AMB, for example to implement N-Queens and Map Coloring).
&lt;p&gt;
Implementing AMB benefits from first-class functions, but they are not necessary. Some mechanism for a dynamic escape is needed. In C this is setjump/longjump. In Javascript (and many other languages) this is throw/catch. C does not have first-class functions, so that part gets ugly. Javascript though is a semi-functional language with first-class functions.
&lt;p&gt;
Rather than throw/catch, another versatile way to implement control structures with dynamic extent is to use a trampoline. A few weeks ago &lt;a href="http://patricklogan.blogspot.com/2011/03/bouncing-back.html"&gt;I wrote here about NCONC, the core of a Scheme interpreter&lt;/a&gt; written in Javascript using a "trampoline" for tail-recursion efficiency as well as for first class continuations.
&lt;p&gt;
The &lt;a href="https://github.com/patrickdlogan/ambjs"&gt;project ambjs is an implementation of AMB&lt;/a&gt; I wrote in Javascript using a trampoline. The source and the tests &lt;a href="http://patrickdlogan.github.com/ambjs/"&gt;are explained using docco&lt;/a&gt;.
&lt;p&gt;
Using trampolines for dynamic-extent control structures can be cleaner, and they can provide more control options. In the case of AMB this implementation exposes fewer mechanisms than Mihai's, the nesting of AMBs is more apparent (to me), and there are fewer rules to be obeyed (and so fewer opportunities for bugs).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6242378812023303645?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6242378812023303645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6242378812023303645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6242378812023303645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6242378812023303645'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/04/implementing-mccarthys-amb-operator-in.html' title='Implementing McCarthy&apos;s AMB Operator in Javascript Using a Trampoline'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8545597560101198320</id><published>2011-04-05T06:32:00.001-07:00</published><updated>2011-04-05T06:39:07.841-07:00</updated><title type='text'>Moby Grape on the Mike Douglas Show</title><content type='html'>&lt;p&gt;
The video is not perfect, and the sound is not a lot better, but Moby Grape plays a couple of really good songs on the Mike Douglas Show. And it looks like they're having fun being there.
&lt;/p&gt;
&lt;iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/-r6eGG6Y-zs" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8545597560101198320?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8545597560101198320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8545597560101198320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8545597560101198320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8545597560101198320'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/04/moby-grape-on-mike-douglas-show.html' title='Moby Grape on the Mike Douglas Show'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/-r6eGG6Y-zs/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6464881195349884460</id><published>2011-04-03T06:08:00.000-07:00</published><updated>2011-04-03T06:47:01.433-07:00</updated><title type='text'>I Have Monkeys In My Clouds</title><content type='html'>&lt;p&gt;
I took advantage of Amazon's offer for a year of 20GB free Cloud Drive storage by purchasing an album stored directly into the cloud. So far I am happy using the Cloud Player from linux, mac, and android. And I am v.happy uploading tons of music that had been spread over several machines and largely unsync'd together in a playable fashion.
&lt;p&gt;
The album I purchased to enable the additional storage &lt;a href="http://www.amazon.com/Head/dp/B00123NXS0/ref=ntt_mus_ep_dpi_2"&gt;is The Monkeys, "Head"&lt;/a&gt;.
&lt;p&gt;
The Monkeys started as a TV show, and most of their work was produced and marketed as such. But they did have some talent, and fought, and broke through occasionally as a group that could sing and perform. On "Head" they reflect on their origins.
&lt;blockquote&gt;
&lt;pre&gt;
Hey, hey, we're The Monkeys
...
The money's in, we're made of tin
We're here to give you more!
&lt;/pre&gt;
&lt;/blockquote&gt;
"Head" is &lt;a href="http://en.wikipedia.org/wiki/Head_%28film%29"&gt;a movie starring The Monkeys and produced by Jack Nicholson.&lt;/a&gt; The music is a soundtrack and a really good album in its own right. It's no more dated than the best music from the late 60s, and it's more fresh because it hasn't been overplayed. Or even played.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6464881195349884460?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6464881195349884460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6464881195349884460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6464881195349884460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6464881195349884460'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/04/i-have-monkeys-in-my-clouds.html' title='I Have Monkeys In My Clouds'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-110929413899222919</id><published>2011-04-02T16:20:00.000-07:00</published><updated>2011-04-02T20:44:03.144-07:00</updated><title type='text'>Practical Common Lisp</title><content type='html'>&lt;p&gt;
&lt;em&gt;I am reposting this from February 24, 2005 - given my renewed interest in Common Lisp. It has been 22 years since programming in CL professionally. I have brought up a CL implementation several times in between, but never to do much of anything real. Most of my Lisping over these years has been in various Scheme dialects.
&lt;p&gt;
I love Scheme and some great Scheme implementations like Gambit. I may not have given up on Scheme forever, but... After all these years the Scheme standard is a kernel and there's not much in the way of a portable registry of libraries.
&lt;p&gt;
There are several commercial and free Common Lisp implementations of very good quality. And an apparently long list of portable libraries. I've only recently tried &lt;a href="http://www.sbcl.org/"&gt;Steel Bank Common Lisp&lt;/a&gt; (derived from CMU CL, which was first &lt;a href="http://en.wikipedia.org/wiki/CMU_Common_Lisp"&gt;implemented in the early 1980s&lt;/a&gt;), but my impression is that any of these high-quality CL implementations is as good a choice as ever. Nothing like Java's base of software, but rich enough to keep exploring nevertheless.
&lt;p&gt;
What about Clojure? I've used Clojure a bit over the last couple of years. Clojure is great, and has access to Java's libraries. However I recently gave up the JVM for Lent. Really I'm just stepping away from the Java platform to see what other things can do. For exploring and fun I felt the need to step away at least temporarily from all the Java-based bits and pieces. I am not really missing anything so far.
&lt;p&gt;
I am happy to move around. There are a lot of good options in the wide web world. One dream not quite yet fulfilled is a world where all these languages can get along with extreme ease. (And by that I do *not* mean "running in the same virtual machine".) They can each get along fairly well with Javascript, running on a server and talking over HTTP. They can get along with each other modestly using JSON or XML, one as the HTTP client, another as the HTTP server. Better than ever, but the difficulties mount rapidly beyond this simple case.
&lt;p&gt;
Oh yeah, I digress. Here's that repost from 2005:
&lt;/em&gt;
&lt;p&gt;
As &lt;a href="http://lemonodor.com/archives/001077.html"&gt;seen on Lemonodor&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
The book &lt;a href="http://www.amazon.com/exec/obidos/ASIN/1590592395/qid=1109294066/sr=2-1/ref=pd_ka_b_2_1/103-3914066-2665435"&gt;Practical Common Lisp&lt;/a&gt; shows the power of Lisp not only in the areas that it has traditionally been noted for—such as developing a complete unit test framework in only 26 lines of code but also in new areas such as parsing binary MP3 files, building a Web application for browsing a collection of songs, and streaming audio over the Web. Many readers will be surprised that Lisp allows you to do all this with conciseness similar to scripting languages such as Python, efficiency similar to C++, and unparalleled flexibility in designing your own language extensions.
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-110929413899222919?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/110929413899222919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=110929413899222919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/110929413899222919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/110929413899222919'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2005/02/practical-common-lisp.html' title='Practical Common Lisp'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1221557601292359316</id><published>2011-04-02T14:03:00.000-07:00</published><updated>2011-04-02T17:55:00.823-07:00</updated><title type='text'>Using SPARQL endpoints and 4store RDF databases from Common Lisp</title><content type='html'>&lt;p&gt;
Jeni Tennison &lt;a href="http://www.jenitennison.com/blog/node/152"&gt;posted an interesting article&lt;/a&gt; using the 4store for RDF databases from Ruby. This was an experiment to see how close one can get to meeting &lt;a href="http://memespring.co.uk/2011/01/linked-data-rdfsparql-documentation-challenge/"&gt;a challenge from Richard Pope&lt;/a&gt;. The challenge puts forth criteria for a set of easy-to-use "linked data" programming tools.
&lt;/p&gt;&lt;p&gt;
I have duplicated the essence of the ruby/4store demonstration, using common lisp. Mainly because I like programming in various lisp dialects, I want to explore using 4store, and I recently decided to pick up common lisp again after, for all intents and purposes, a 20 year hiatus from that particular dialect.
&lt;/p&gt;&lt;p&gt;
The source and sample data is on github at &lt;a href="https://github.com/patrickdlogan/sbcl-4store"&gt;https://github.com/patrickdlogan/sbcl-4store&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
These are just some examples that a reusable package could be based on. The code in &lt;tt&gt;&lt;a href="https://github.com/patrickdlogan/sbcl-4store/blob/master/workspace.lisp"&gt;workspace.lisp&lt;/a&gt;&lt;/tt&gt; includes instructions for installing &lt;a href="http://4store.org/"&gt;4store&lt;/a&gt; on ubuntu, installing &lt;a href="http://www.sbcl.org/"&gt;Steel Bank Common Lisp&lt;/a&gt;, and using the &lt;a href="http://www.quicklisp.org/"&gt;quicklisp&lt;/a&gt; system (think ruby gems) for finding and installing useful libraries.
&lt;/p&gt;&lt;p&gt;
Several functions are defined showing quickly how to load, query, and process RDF data. Two primary functions and their results are listed here:
&lt;/p&gt;&lt;p&gt;
The function &lt;code&gt;extract-rdfs-classes&lt;/code&gt; performs a SPARQL "select" query to select all of the RDFS classes from the sample data. Note: these are not 'object-oriented classes', rather &lt;a href="http://en.wikipedia.org/wiki/RDF_Schema#Classes"&gt;an RDFS class&lt;/a&gt; is more like the identifier of a logical "set" of members which are themselves identifiers.
&lt;p&gt;
The SPARQL query is:
&lt;blockquote&gt;
&lt;pre&gt;
prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
select distinct ?type 
where { 
  ?x a ?type .
} 
order by ?type
&lt;/pre&gt;
&lt;/blockquote&gt;
And running it from the lisp REPL:
&lt;blockquote&gt;
&lt;pre&gt;* (extract-rdfs-classes)

("http://purl.org/linked-data/cube#DataSet"
"http://purl.org/linked-data/cube#DataStructureDefinition"
"http://purl.org/linked-data/cube#Observation"
"http://purl.org/net/opmv/ns#Artifact" "http://purl.org/net/opmv/ns#Process"
"http://purl.org/net/opmv/types/google-refine#OperationDescription"
"http://purl.org/net/opmv/types/google-refine#Process"
"http://purl.org/net/opmv/types/google-refine#Project"
"http://rdfs.org/ns/void#Dataset"
"http://reference.data.gov.uk/def/central-government/AssistantParliamentaryCounsel"
"http://reference.data.gov.uk/def/central-government/CivilServicePost"
"http://reference.data.gov.uk/def/central-government/Department"
"http://reference.data.gov.uk/def/central-government/DeputyDirector"
...
&lt;/pre&gt;
&lt;/blockquote&gt;
The function &lt;code&gt;extract-persons&lt;/code&gt; performs a SPARQL "construct" query to construct a graph of FOAF Person instances along with their FOAF names and other triples having the instance as the subject.
&lt;p&gt;
The SPARQL query is:
&lt;blockquote&gt;
&lt;pre&gt;
prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt;
construct {
  ?person 
    a foaf:Person ;
    foaf:name ?name ;
    ?prop ?value .
} where { 
  ?person a foaf:Person ;
  foaf:name ?name ;
  ?prop ?value .                        
}
&lt;/pre&gt;
&lt;/blockquote&gt;
And running it from the lisp REPL:
&lt;blockquote&gt;
&lt;pre&gt;
* (extract-persons)

(("http://source.data.gov.uk/data/reference/organogram-co/2010-10-31#person189"
  "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
  "http://xmlns.com/foaf/0.1/Person")
 ("http://source.data.gov.uk/data/reference/organogram-co/2010-10-31#person189"
  "http://xmlns.com/foaf/0.1/name" #&lt;"Philip Davies"@en&gt;)
 ("http://source.data.gov.uk/data/reference/organogram-co/2010-10-31#person189"
  "http://reference.data.gov.uk/def/central-government/holdsPost"
  "http://reference.data.gov.uk/id/department/co/post/190")
 ("http://source.data.gov.uk/data/reference/organogram-co/2010-10-31#person189"
  "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
  "http://xmlns.com/foaf/0.1/Person")
 ("http://source.data.gov.uk/data/reference/organogram-co/2010-10-31#person189"
  "http://xmlns.com/foaf/0.1/name" #&lt;"Philip Davies"@en&gt;)
 ("http://source.data.gov.uk/data/reference/organogram-co/2010-10-31#person189"
  "http://xmlns.com/foaf/0.1/mbox"
  "mailto:philip.j.davies@cabinet-office.x.gsi.gov.uk")
 ("http://source.data.gov.uk/data/reference/organogram-co/2010-10-31#person189"
  "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
  "http://xmlns.com/foaf/0.1/Person")
...
&lt;/pre&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1221557601292359316?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1221557601292359316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1221557601292359316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1221557601292359316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1221557601292359316'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/04/using-sparql-endpoints-and-4store-rdf.html' title='Using SPARQL endpoints and 4store RDF databases from Common Lisp'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2895593925031002029</id><published>2011-04-02T10:07:00.000-07:00</published><updated>2011-04-02T11:50:38.399-07:00</updated><title type='text'>Bill Hicks</title><content type='html'>&lt;p&gt;
Netflix now has &lt;a href="http://www.netflix.com/RoleDisplay/Bill_Hicks/20017145"&gt;four "watch instantly" shows regarding Bill Hicks&lt;/a&gt;. Three standups and one posthumous documentary.
&lt;p&gt;
Youtube &lt;a href="http://www.google.com/search?ie=UTF-8&amp;oe=UTF-8&amp;sourceid=navclient&amp;gfns=1&amp;q=youtube+bill+hicks"&gt;has a number of videos too&lt;/a&gt;, including a good portion of the posthumous documentary, and the 2009 Late Show With David Letterman with Bill Hicks' mother. The Late Show decided to &lt;a href="http://en.wikipedia.org/wiki/Bill_Hicks#Censorship_and_aftermath"&gt;censor Hicks' October 1993 appearance&lt;/a&gt;.
&lt;p&gt;
The following February, Hicks died of pancreatic cancer in his early 30's. Letterman had his mother on in 2009, regretted the censorship and the additional pain it caused in Hicks' last months, then aired the censored performance. Letterman had had Hicks on a dozen times, on his previous 12:30am NBC show.
&lt;p&gt;
(Aside: I also recall Letterman had an episode at 12:30am in the 1980s where, during the course of the hour, the broadcast rotated once around the center of the screen. i.e. at 1:00am the show was upside down. An ongoing theme originally was the absurdity of television. There were many ways the show was "toned down" for the 11:30pm slot.)
&lt;p&gt;
There are a handful of social critics/satirists/comedians I continue to rate high my the list:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Mort_Sahl"&gt;Mort Sahl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/George_carlin"&gt;George Carlin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.harryshearer.com/"&gt;Harry Shearer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Bill_Hicks"&gt;Bill Hicks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
I'd have to put &lt;a href="http://en.wikipedia.org/wiki/Monty_python"&gt;the Pythons&lt;/a&gt; on the list too, from my early teens and their series showing up on PBS, waiting each week for the next one, trying to memorize as much as possible in the half-hour. I didn't really recognize the Pythons or Carlin as social critics at the time. And &lt;a href="http://en.wikipedia.org/wiki/Andy_kaufman"&gt;Andy Kaufman&lt;/a&gt;, in his own way. More recently, &lt;a href="http://www.billmaher.com/"&gt;Bill Maher&lt;/a&gt; and probably &lt;a href="http://en.wikipedia.org/wiki/Eddie_Izzard"&gt;Eddie Izzard&lt;/a&gt;.
&lt;p&gt;
Hicks and I were born the same year. I wonder where he'd have gone over the last 17 years. He was pretty far out on the edge back then, and he didn't seem to hold anything back.
&lt;p&gt;
&lt;quote&gt;
"It's just a ride... a choice right now, between fear and love." -Bill Hicks
&lt;/quote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2895593925031002029?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2895593925031002029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2895593925031002029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2895593925031002029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2895593925031002029'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/04/bill-hicks.html' title='Bill Hicks'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8020078925030575689</id><published>2011-04-02T04:04:00.000-07:00</published><updated>2011-04-02T16:13:13.803-07:00</updated><title type='text'>Common Lisp libraries and Quicklisp</title><content type='html'>I made a modest donation to &lt;a href="http://www.quicklisp.org/donations.html"&gt;quicklisp&lt;/a&gt;, a very handy hosted-library system for common lisp. (Think of ruby gems and clojure's clojars) Quicklisp is fairly new, but already worth using at very low effort.
&lt;p&gt;
One thing that strikes me about common lisp libraries, beyond quicklisp per se, is the number of libraries available. I've been away from common lisp for all intents and purposes since 1989. The total number of libraries, and the number of library alternatives in any one feature area, are nowhere near those for the currently popular languages like java, ruby, or python. However I am impressed at the ease I've had finding what I am looking for, and then installing and using these libraries with ease.
&lt;p&gt;
I can simply say my recently renewed engagement with common lisp has been more than satisfactory on this front, and others I'll write about later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8020078925030575689?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8020078925030575689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8020078925030575689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8020078925030575689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8020078925030575689'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/04/common-lisp-libraries-and-quicklisp.html' title='Common Lisp libraries and Quicklisp'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-9115322088358322623</id><published>2011-03-31T21:25:00.000-07:00</published><updated>2011-04-02T16:08:23.164-07:00</updated><title type='text'>Richard Stallman at Portland State - April 7</title><content type='html'>Richard Stallman will be speaking at Portland State University next
Thursday (April 7th) at 7:30.
&lt;p&gt;
Details are now on caligator:
&lt;p&gt;
&lt;a href="http://calagator.org/events/1250460423"&gt;http://calagator.org/events/1250460423&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-9115322088358322623?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/9115322088358322623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=9115322088358322623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/9115322088358322623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/9115322088358322623'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/03/richard-stallman-at-portland-state.html' title='Richard Stallman at Portland State - April 7'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2800852430129215149</id><published>2011-03-25T09:40:00.000-07:00</published><updated>2011-03-25T10:53:45.800-07:00</updated><title type='text'>Building and Running 4store on Ubuntu 10.10</title><content type='html'>&lt;p&gt;
Note to self, if no one else: it's not immediately obvious, but time-saving to know, that &lt;a href="http://4store.org/"&gt;4store 1.1.2&lt;/a&gt; will build with &lt;a href="http://librdf.org/raptor/"&gt;raptor 2.0.2&lt;/a&gt; and &lt;a href="http://librdf.org/rasqal/"&gt;rasqal 0.9.25&lt;/a&gt;.
&lt;p&gt;
&lt;a href="http://4store.org/trac/wiki/Dependencies"&gt;All the other dependencies&lt;/a&gt; are available as packages on Ubuntu 10.10.
&lt;p&gt;
Upon building and installing raptor and rasqal, it is also not immediately obvious, but you might have to run &lt;tt&gt;sudo ldconfig&lt;/tt&gt; for those shared libs to be found by 4store.
&lt;p&gt;
Starting the sparql http server includes one strange message in its output, something like:
&lt;blockquote&gt;4store[31919]: 4s-client.c:129 kb=sample getaddrinfo failed for “fe80::21e:64ff:fe2b:f42%wlan0” with error: Address family for hostname not supported&lt;/blockquote&gt;
&lt;p&gt;
This probably is related to 4store using &lt;a href="http://avahi.org/"&gt;avahi to perform dynamic discoveries&lt;/a&gt;. Running 4store on a single machine, with a single store, this does not seem to be a problem. (Although I don't want to ignore this for long... so if you have any information...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2800852430129215149?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2800852430129215149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2800852430129215149' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2800852430129215149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2800852430129215149'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/03/building-4store-on-ubuntu-1010.html' title='Building and Running 4store on Ubuntu 10.10'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7564379001412790106</id><published>2011-03-16T16:17:00.000-07:00</published><updated>2011-03-16T16:39:00.679-07:00</updated><title type='text'>Bouncing Back</title><content type='html'>&lt;p&gt;
Over the years whenever I've wanted to learn a new programming language, the first significant application I've tried is a Scheme interpreter. Many (most?) Scheme interpreters on the web don't implement &lt;code&gt;call-with-current-continuation&lt;/code&gt; and often do not handle tail calls well (i.e. they blow the implementation language's stack).
&lt;p&gt;
It's not hard to implement these things using simple mechanisms, but the simple mechanisms are not widely known. And as it happens, implementing these two very mechanisms tell you a &lt;em&gt;lot&lt;/em&gt; about the implementation language. (Primarily because most languages have neither, and most languages do not have closures, and so you have to go to widely varying lengths to implement these two things.)
&lt;p&gt;
I've wanted to try out Javascript on a "significant" application. So below is a link to &lt;code&gt;NCONC&lt;/code&gt;, which uses "trampoline style" to trampoline a "continuation-passing style" interpreter written in Javascript. I have a reasonable start on docco-style comments which I will put up asap. I presented this at pdxfunc last Monday and will use my memory of that to write more. 8^D
&lt;p&gt;
Note since I have only put in (parts of) a couple of weekends, and my only interest has been illustrating trampolines and &lt;code&gt;call-with-current-continuation&lt;/code&gt;, you will not yet find more than a handful of implemented standard procedures. (Enough to run some tests.) And you will not find &lt;code&gt;display&lt;/code&gt; so no printing yet. Oh, and no macros yet! But you do have &lt;code&gt;call/cc&lt;/code&gt;.
&lt;p&gt;
&lt;a href="https://github.com/patrickdlogan/nconc"&gt;https://github.com/patrickdlogan/nconc&lt;/a&gt;
&lt;p&gt;
Suggestions for better Javascript style are welcome too. I have a few in mind already, but people wanted to see the code. So.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7564379001412790106?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7564379001412790106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7564379001412790106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7564379001412790106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7564379001412790106'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/03/bouncing-back.html' title='Bouncing Back'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8838732079930395084</id><published>2011-03-12T10:48:00.000-08:00</published><updated>2011-03-12T12:44:53.684-08:00</updated><title type='text'>Node.js and the Javascript Tools Ecosystem</title><content type='html'>I recently have been picking up some javascript tools to test the waters of "serious" programming in that language (browser-side or otherwise). Although I've not used &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt; yet for application development, it curiously shows up in several javascript-based shell tools.
&lt;p&gt;
And it works fine so far. My initial impression was, "Why use a web server to run shell tools?" But, e.g. &lt;a href="http://jashkenas.github.com/docco/"&gt;docco&lt;/a&gt; installed perfectly using &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt; and &lt;a href="http://npmjs.org/"&gt;npm&lt;/a&gt;. 
&lt;p&gt;
Being a skeptic, I first tried &lt;a href="http://fitzgen.github.com/pycco/"&gt;pycco&lt;/a&gt;, a a similar tool but more traditionally installed pythonically. Something wasn't right and it didn't run. This is just one, unfair, data point. But it was a reassuring experience that javascript tools are showing up and working fine.
&lt;p&gt;
Another javascript tool installed and run using node.js and npm is &lt;a href="http://pegjs.majda.cz/"&gt;PEG.js&lt;/a&gt;, a parser generator based on, well, PEGs (&lt;a href="http://en.wikipedia.org/wiki/Parsing_expression_grammar"&gt;parsing expression grammars&lt;/a&gt;).
&lt;p&gt;
These tools run fine, and I'm thinking they startup much more quickly than the java-based &lt;a href="http://www.mozilla.org/rhino/"&gt;rhino javascript runtime&lt;/a&gt; tools. I've not bothered to investigate though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8838732079930395084?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8838732079930395084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8838732079930395084' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8838732079930395084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8838732079930395084'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2011/03/nodejs-and-javascript-tools-ecosystem.html' title='Node.js and the Javascript Tools Ecosystem'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-225348004650231994</id><published>2010-11-10T20:48:00.000-08:00</published><updated>2010-11-10T20:59:37.705-08:00</updated><title type='text'>This is not the one: On Lisp</title><content type='html'>&lt;p&gt;
This is not the post I'm going to write, but it is the one I'm writing. 
&lt;p&gt;
I recently saw a tweet that reads something like, "&lt;i&gt;Nice presentation on Clojure, but any language where you write 1 + 2 as (+ 1 2) is not for me.&lt;/i&gt;" Fair enough. I won't hold it against you if you share that sentiment.
&lt;p&gt;
What about a language where you write 1 + 2 + 3 + ... + 1000 as:
&lt;p&gt;
&lt;code&gt;
&lt;pre&gt;
(apply + (take 1000 (iterate inc 1)))
&lt;/pre&gt;
&lt;/code&gt;
Lisp may seem foreign at first. And looking at a small expression in your language compared to the same in lisp may turn you off lisp forever. Fair enough.
&lt;p&gt;
Maybe your language has something equally as expressive. Fair enough.
&lt;p&gt;
But lisp is more than prefixes and parentheses, and you may want to dig deeper into the benefits of all of lisp's characteristics. Fair enough if you don't.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-225348004650231994?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/225348004650231994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=225348004650231994' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/225348004650231994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/225348004650231994'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2010/11/this-is-not-one-on-lisp.html' title='This is not the one: On Lisp'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3037174080913740482</id><published>2010-11-09T11:15:00.000-08:00</published><updated>2010-11-09T11:16:58.980-08:00</updated><title type='text'>Is This Thing On?</title><content type='html'>Hi!

(Insert animated gif of that guy digging. "Under Construction" - I'm working on a new blog post...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3037174080913740482?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3037174080913740482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3037174080913740482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3037174080913740482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3037174080913740482'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2010/11/is-this-thing-on.html' title='Is This Thing On?'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7224312942824718117</id><published>2009-06-08T15:49:00.000-07:00</published><updated>2009-06-08T15:51:36.970-07:00</updated><title type='text'>Jobs of the Not-Steve Kind</title><content type='html'>&lt;p&gt;
An interesting graph of jobs related to some relatively hot programming language...
&lt;p&gt;
&lt;div style="width:540px"&gt;
&lt;a href="http://www.indeed.com/jobtrends?q=scala%2C+groovy+and+java%2C+erlang%2C+haskell" title="scala, groovy and java, erlang, haskell Job Trends"&gt;
&lt;img width="540" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=scala%2C+groovy+and+java%2C+erlang%2C+haskell" border="0" alt="scala, groovy and java, erlang, haskell Job Trends graph"&gt;
&lt;/a&gt;
&lt;table width="100%" cellpadding="6" cellspacing="0" border="0" style="font-size:80%"&gt;&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.indeed.com/jobtrends?q=scala%2C+groovy+and+java%2C+erlang%2C+haskell"&gt;scala, groovy and java, erlang, haskell Job Trends&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;&lt;a href="http://www.indeed.com/q-scala-jobs.html"&gt;scala jobs&lt;/a&gt; - &lt;a href="http://www.indeed.com/q-groovy-and-java-jobs.html"&gt;groovy and java jobs&lt;/a&gt; - &lt;a href="http://www.indeed.com/q-erlang-jobs.html"&gt;erlang jobs&lt;/a&gt; - &lt;a href="http://www.indeed.com/q-haskell-jobs.html"&gt;haskell jobs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7224312942824718117?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7224312942824718117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7224312942824718117' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7224312942824718117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7224312942824718117'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/06/jobs-of-not-steve-kind.html' title='Jobs of the Not-Steve Kind'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7353213302982991279</id><published>2009-06-08T11:46:00.001-07:00</published><updated>2009-06-08T11:46:48.029-07:00</updated><title type='text'>David Gelernter re: programming for/with clouds, etc.</title><content type='html'>&amp;quot;the reason why our approach was considered radical and strange in the&lt;br&gt;1980&amp;#39;s was the so-called Tuple Space Model — the idea being that if&lt;br&gt;you had a lot of computing agents who needed to communicate, instead&lt;br&gt;of sending messages to each other, essentially like e-mail, if I had&lt;br&gt;information for someone, I&amp;#39;d just write it on a piece of datum and&lt;br&gt;release it and it would just float up into the cybersphere. If I&lt;br&gt;needed information, I&amp;#39;d look around, grab whatever I want, I would&lt;br&gt;read it or, if it were a task to be done, I&amp;#39;d grab it so nobody else&lt;br&gt;could grab it. &amp;quot;&lt;br&gt;-David Gelernter&lt;p&gt;&lt;a href="http://www.edge.org/3rd_culture/gelernter09/gelernter09_index.html"&gt;http://www.edge.org/3rd_culture/gelernter09/gelernter09_index.html&lt;/a&gt;&lt;p&gt;(still beats the pants off all that crap we call integration&lt;br&gt;technology today. -me)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7353213302982991279?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7353213302982991279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7353213302982991279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7353213302982991279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7353213302982991279'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/06/david-gelernter-re-programming-forwith.html' title='David Gelernter re: programming for/with clouds, etc.'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-5840203563497563754</id><published>2009-06-05T14:45:00.001-07:00</published><updated>2009-06-05T14:45:17.542-07:00</updated><title type='text'>On Clojure, Testing the Implementation, and Protecting Your  Investment</title><content type='html'>Over on the Object Mentor blog, Dean Wampler writes about the Clojure&lt;br&gt;programming language and the designer&amp;#39;s stand on testing the&lt;br&gt;implementation. Dean writes that...&lt;p&gt;&amp;quot;TDD provides two important benefits&lt;br&gt;* Driving the design.&lt;br&gt;* Building a suite of automated regression tests. &amp;quot;&lt;p&gt;But another important benefit of a good collection of tests is communication.&lt;p&gt;Clojure is a fine Lisp in many ways. I personally would hesitate to&lt;br&gt;use it for anything in which I had a significant investment given the&lt;br&gt;maintainer&amp;#39;s stand on testing. At least not without a good deal of&lt;br&gt;evidence that Clojure will continue to be maintainable and understood&lt;br&gt;(at the implementation level in particular) by more than one person.&lt;p&gt;Maybe his approach will work over a long period of time, and for a&lt;br&gt;user community that will rely on Clojure for many heavy-duty, valuable&lt;br&gt;production uses. I cannot say that it won&amp;#39;t.&lt;p&gt;I can only say that for _me_ this would be a significant reason to&lt;br&gt;hesitate before taking too significant of a plunge.&lt;p&gt;And that&amp;#39;s saying something because I am a veteran of programming in&lt;br&gt;various Lisps for 29 years, and Lisp generally is my favorite&lt;br&gt;language. I love that Clojure has rejuvenated interest in Lisp.&lt;p&gt;&lt;a href="http://blog.objectmentor.com/articles/2009/06/05/rich-hickey-on-testing"&gt;http://blog.objectmentor.com/articles/2009/06/05/rich-hickey-on-testing&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-5840203563497563754?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/5840203563497563754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=5840203563497563754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5840203563497563754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5840203563497563754'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/06/on-clojure-testing-implementation-and.html' title='On Clojure, Testing the Implementation, and Protecting Your  Investment'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-4295323558405041338</id><published>2009-05-18T19:12:00.001-07:00</published><updated>2009-05-18T19:15:01.574-07:00</updated><title type='text'>TriSano: "Best Project for Government"</title><content type='html'>&lt;p&gt;
Click on this badge to vote for &lt;a href="http://www.trisano.org/"&gt;TriSano&lt;/a&gt; for "Best Project for Government"...
&lt;p&gt;
&lt;a href="http://sourceforge.net/community/cca09/nominate/?project_name=TriSano&amp;project_url=http://www.trisano.org/"&gt;&lt;img src="http://sourceforge.net/images/cca/cca_nominate.png" border="0"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-4295323558405041338?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/4295323558405041338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=4295323558405041338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4295323558405041338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4295323558405041338'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/05/trisano-best-project-for-government.html' title='TriSano: &quot;Best Project for Government&quot;'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-9082439441270593618</id><published>2009-04-10T14:36:00.001-07:00</published><updated>2009-04-10T14:36:29.358-07:00</updated><title type='text'>XPDX April: Bugs Do Not Exist</title><content type='html'>This month&amp;#39;s &lt;a href="http://xpdx.org"&gt;http://xpdx.org&lt;/a&gt; meeting...&lt;p&gt;&lt;a href="http://calagator.org/events/1250456971"&gt;http://calagator.org/events/1250456971&lt;/a&gt;&lt;p&gt;Chris Sterling and Michael Tardiff are coming to Portland and will be&lt;br&gt;running April&amp;#39;s XPDX session:&lt;p&gt;&amp;quot;We know about items on the product backlog, and getting them to&lt;br&gt;&amp;quot;Done.&amp;quot; We know about impediments, and removing them as soon as&lt;br&gt;possible. And agile methods lead us toward shipping software with zero&lt;br&gt;defects, we hope. But bugs remain, for now, and we think of and treat&lt;br&gt;them quite differently from stories, tasks, and other work&lt;br&gt;items—perhaps to our, and our project&amp;#39;s, detriment.&lt;br&gt;Buy why? We need your help finding an answer, or posing better questions.&lt;p&gt;In this interactive session, we&amp;#39;ll explore the wealth of thoughts,&lt;br&gt;opinions, and especially the strong feelings behind the things we call&lt;br&gt;bugs.&amp;quot;&lt;p&gt;&amp;gt;&amp;gt;&amp;gt; Pizza is sponsored by YesMail &amp;lt;&amp;lt;&amp;lt;&lt;p&gt;Pizza arrives at 6:30pm, the session starts at 7pm, and at 9pm we move&lt;br&gt;on to a local bar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-9082439441270593618?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/9082439441270593618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=9082439441270593618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/9082439441270593618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/9082439441270593618'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/04/xpdx-april-bugs-do-not-exist.html' title='XPDX April: Bugs Do Not Exist'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7207358497947593922</id><published>2009-04-10T09:06:00.001-07:00</published><updated>2009-04-10T09:06:08.263-07:00</updated><title type='text'>CHIFOO: Workshop: Interaction Design &amp; Agile Development Techniques</title><content type='html'>From the xpportland yahoo group...&lt;p&gt;&amp;quot;Jeff Patton is giving a one-day workshop on user-centered design and&lt;br&gt;agile methods, organized by CHIFOO. The notice is below, in case&lt;br&gt;you&amp;#39;re interested.&amp;quot;&lt;br&gt;-Arlo&lt;p&gt;&lt;br&gt;Come join the Computer Human Interaction Forum of Oregon (CHIFOO) for&lt;br&gt;a full-day workshop with two leading UX designers and Agile&lt;br&gt;Practictioners...&lt;p&gt;&lt;p&gt;All Together Now: Blending Interaction Design and Agile Development Techniques&lt;p&gt;Lane Halley and Jeff Patton will lead a fast-paced day of fun and&lt;br&gt;learning. Through a combination of lecture and hands-on exercises, you&lt;br&gt;will increase your understanding of both User-Centered Design (UCD)&lt;br&gt;and Agile methods and gain useful techniques you can use immediately.&lt;p&gt;In this full-day workshop, you will learn how to:&lt;br&gt;• Choose appropriate UCD and Agile development techniques for your needs&lt;br&gt;• Successfully collaborate with diverse teams&lt;br&gt;• Understand who your &amp;quot;user&amp;quot; is, and what he or she values&lt;br&gt;• Create compelling design concepts that are shared by the entire team&lt;br&gt;• Iteratively sketch solutions as a group&lt;br&gt;• Translate design concepts into smaller user stories that can be implemented&lt;br&gt;• Prioritize and sequence product construction, without losing sight&lt;br&gt;of the &amp;quot;big picture&amp;quot;&lt;p&gt;This workshop is appropriate for people working in the UCD field, as&lt;br&gt;well as people curious about UCD or Agile.&lt;p&gt;&lt;p&gt;Register Now for Lane Halley and Jeff Patton&amp;#39;s Workshop&lt;p&gt;Registration is now open for Lane Halley and Jeff Patton&amp;#39;s May 7, 2009&lt;br&gt;Workshop,&amp;#160;&amp;quot;All Together Now: Blending Interaction Design and Agile&lt;br&gt;Development Techniques.&amp;quot;&lt;p&gt;CHIFOO members receive a $50 discount off the price of the workshop!&lt;br&gt;Visit &lt;a href="http://www.chifoo.org"&gt;www.chifoo.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7207358497947593922?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7207358497947593922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7207358497947593922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7207358497947593922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7207358497947593922'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/04/chifoo-workshop-interaction-design.html' title='CHIFOO: Workshop: Interaction Design &amp; Agile Development Techniques'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1267208906412806059</id><published>2009-03-27T08:51:00.000-07:00</published><updated>2009-03-27T09:02:50.261-07:00</updated><title type='text'>My Earliest Reference to Erlang (So Far?) - It's Been &gt;10 Years!</title><content type='html'>&lt;p&gt;
I started playing with Erlang and Haskell around 1998. Wow. Over ten years ago. I recently came across &lt;a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-October/021741.html"&gt;a post that may be my first on Erlang&lt;/a&gt;. It's to the Squeak list, suggesting Erlang might be seen in the same "message-passing" family of languages as Smalltalk. Someone had written, "&lt;em&gt;I would like to create an application which runs seamlessly across multiple machines and platforms, but it's too hard because the communication and coordination is a bitch.&lt;/em&gt;". I replied...
&lt;blockquote&gt;
&lt;em&gt;
Another approach is the simple message passing approach. This would be
interesting to consider, given Alan Key's recent email to this list
about "messages" vis-a-vis "objects".
&lt;p&gt;
Consider the programming language named Erlang from Ericsson. It is a
concurrent and distributed language with no shared memory. All
communication is by sending high-level messages. Receivers can pattern
match on messages with time outs, etc. What Erlang calls "processes"
can be linked to each other for high level process control and
reliability.
&lt;p&gt;
There are several production-quality communications programs built
with hundreds of thousands of lines of Erlang code, so it seems to
have some practicality, which may meet the "lots of gain"
requirement. The simplicity of it seems to meet the "little pain"
requirement.
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1267208906412806059?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1267208906412806059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1267208906412806059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1267208906412806059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1267208906412806059'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/my-earliest-reference-to-erlang-so-far.html' title='My Earliest Reference to Erlang (So Far?) - It&apos;s Been &gt;10 Years!'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1426505610248734181</id><published>2009-03-25T21:27:00.000-07:00</published><updated>2009-03-25T21:52:25.614-07:00</updated><title type='text'>Apollo Workstations: Programming Interprocess Communication</title><content type='html'>&lt;p&gt;
This was sitting in a tab in Safari. I don't remember how it got there. &lt;a href="http://www.bitsavers.org/pdf/apollo/005696-00_Programming_With_System_Calls_For_Interprocess_Communications_Jul85.pdf"&gt;It is a pdf of an Apollo document&lt;/a&gt; from 1985. Maybe it was from reading &lt;a href="http://steve.vinoski.net/blog/"&gt;Steve Vinoski's latest&lt;/a&gt; RPC, etc. stuff - Steve worked at Apollo.
&lt;p&gt;
Maybe you're interested in reading it, maybe not. Apollo workstations were the first true "the network is the computer" computer, predating SunOS. I used them at Boeing and at Mentor Graphics in the 80's and 90's.
&lt;p&gt;
The CAD tools I worked on at Mentor Graphics used mailboxes to communicate between components, e.g. back end simulation engines and front end graphics. Note that Pascal is the systems programming language for Apollo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1426505610248734181?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1426505610248734181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1426505610248734181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1426505610248734181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1426505610248734181'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/apollo-workstations-programming.html' title='Apollo Workstations: Programming Interprocess Communication'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6115709912405956152</id><published>2009-03-25T12:39:00.001-07:00</published><updated>2009-03-25T12:39:56.193-07:00</updated><title type='text'>(Programming Language Evolution?)</title><content type='html'>I&amp;#39;m not sure I will ever understand this obsession with &amp;quot;lisp has&lt;br&gt;parentheses&amp;quot;. (&lt;a href="http://bitworking.org/news/419/programming-language-evolution"&gt;http://bitworking.org/news/419/programming-language-evolution&lt;/a&gt;)&lt;p&gt;Jesus: &amp;quot;Dear god, we cannot use lisp. It has parentheses! Please&lt;br&gt;deliver us from evil.&amp;quot;&lt;p&gt;God: &amp;quot;OK, my son. Here&amp;#39;s ruby. It&amp;#39;s a hack. Try writing a correct&lt;br&gt;parser! There&amp;#39;s no &amp;#39;there&amp;#39; there. St. Peter and I gave up. We found it&lt;br&gt;more soothing to go back to lisp.&amp;quot;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6115709912405956152?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6115709912405956152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6115709912405956152' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6115709912405956152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6115709912405956152'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/programming-language-evolution.html' title='(Programming Language Evolution?)'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-5420110201646082299</id><published>2009-03-25T10:41:00.001-07:00</published><updated>2009-03-25T10:41:48.531-07:00</updated><title type='text'>Dynamic Language Symposium 2009</title><content type='html'>The 5th Dynamic Languages Symposium has issues its CFP. Funny&lt;br&gt;description though, seeing Python, Ruby, PHP, and TCL listed as &amp;quot;a new&lt;br&gt;generation&amp;quot;.&lt;p&gt;Clojure? Yes, a new generation.&lt;p&gt;PHP? Ruby? They&amp;#39;re now parents. Smalltalk and Lisp are grandparents.&lt;p&gt;&lt;a href="http://www.hpi.uni-potsdam.de/swa/dls/dls-09/"&gt;http://www.hpi.uni-potsdam.de/swa/dls/dls-09/&lt;/a&gt;&lt;p&gt;&amp;quot;The 5th Dynamic Languages Symposium (DLS) at OOPSLA 2009 is a forum for&lt;br&gt;discussion of dynamic languages, their implementation and application.&lt;br&gt;While mature dynamic languages including Smalltalk, Lisp, Scheme, Self,&lt;br&gt;Prolog, and APL continue to grow and inspire new converts, a new&lt;br&gt;generation of dynamic scripting languages such as Python, Ruby, PHP,&lt;br&gt;Tcl, and JavaScript are successful in a wide range of applications.&amp;quot;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-5420110201646082299?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/5420110201646082299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=5420110201646082299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5420110201646082299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5420110201646082299'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/dynamic-language-symposium-2009.html' title='Dynamic Language Symposium 2009'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-683856871942524746</id><published>2009-03-25T08:08:00.000-07:00</published><updated>2009-03-25T08:14:48.545-07:00</updated><title type='text'>Wiki 14th Birthday</title><content type='html'>&lt;p&gt;
Today is &lt;a href="http://c2.com/cgi/wiki?VisitorsInNinetyFive"&gt;the birthday of Ward's first wiki&lt;/a&gt;. 14 years ago. Wow... I see some familiar names from that first day... &lt;a href="http://patricklogan.blogspot.com/"&gt;Patrick Logan&lt;/a&gt; (oh, hey!), &lt;a href="http://pmuellr.blogspot.com/"&gt;Patrick Mueller&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-683856871942524746?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/683856871942524746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=683856871942524746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/683856871942524746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/683856871942524746'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/wiki-14th-birthday.html' title='Wiki 14th Birthday'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-4980888093340886005</id><published>2009-03-25T06:20:00.000-07:00</published><updated>2009-03-25T06:25:58.747-07:00</updated><title type='text'>Learning from Mistakes — A Comprehensive Study on Real  World Concurrency Bug Characteristics</title><content type='html'>&lt;p&gt;
From &lt;a href="http://pages.cs.wisc.edu/~shanlu/paper/asplos122-lu.pdf"&gt;http://pages.cs.wisc.edu/~shanlu/paper/asplos122-lu.pdf&lt;/a&gt;
&lt;blockquote&gt;
&lt;em&gt;
Some of our ﬁndings are as follows: (1) Around one third of 
the examined non-deadlock concurrency bugs are caused by violation to programmers’ order intentions, which may not be easily 
expressed via synchronization primitives like locks and transac- 
tional memories; (2) Around 34% of the examined non-deadlock 
concurrency bugs involve multiple variables, which are not well 
addressed by existing bug detection tools; (3) About 92% of the 
examined concurrency bugs can be reliably triggered by enforcing 
certain orders among no more than 4 memory accesses. This indi- 
cates that testing concurrent programs can target at exploring possi- 
ble orders among every small groups of memory accesses, instead 
of among all memory accesses; (4) About 73% of the examined 
non-deadlock concurrency bugs were not ﬁxed by simply adding 
or changing locks, and many of the ﬁxes were not correct at the 
ﬁrst try, indicating the difﬁculty of reasoning concurrent execution 
by programmers. 
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-4980888093340886005?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/4980888093340886005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=4980888093340886005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4980888093340886005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4980888093340886005'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/learning-from-mistakes-comprehensive.html' title='Learning from Mistakes — A Comprehensive Study on Real  World Concurrency Bug Characteristics'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2407402658969812055</id><published>2009-03-23T17:21:00.001-07:00</published><updated>2009-03-23T17:21:11.216-07:00</updated><title type='text'>Apache Cloud Computing Edition</title><content type='html'>Something Steve Loughran is taking with him to hackathon...&lt;p&gt;&amp;quot;Slideware on my proposal for an Apache Cloud Computing Edition; an&lt;br&gt;application stack from Apache to provide the app layer for all the low&lt;br&gt;level infrastructure-on-demand hosting services. Someone has to do it,&lt;br&gt;and who else is up to it?&amp;quot;&lt;p&gt;Interesting idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2407402658969812055?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2407402658969812055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2407402658969812055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2407402658969812055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2407402658969812055'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/apache-cloud-computing-edition.html' title='Apache Cloud Computing Edition'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3321392112080006222</id><published>2009-03-21T20:06:00.000-07:00</published><updated>2009-03-21T20:12:26.474-07:00</updated><title type='text'>On Accidentally Pulling The Scroll Bar Off Your Mail System</title><content type='html'>&lt;p&gt;
Dan Ingalls &lt;a href="http://research.sun.com/minds/2007-1107/"&gt;on simple, dynamic languages and systems&lt;/a&gt; like Smalltalk or Lively Kernel vs. the typical language and "API" stratification...
&lt;blockquote&gt;
&lt;em&gt;
Lord knows you can get the Google Web Toolkit and start cranking out Java code for doing these things [browser-based applications]...
&lt;p&gt;
...You can't go in a grab hold of part of it and pull it out or change it the way you can in our system...
&lt;p&gt;
Now at times you don't want that. You don't want people accidentally pulling the scroll bar off their mail system. But my philosophy has always been: Make it first dynamic and malleable and then you can always turn off those capabilities. But you're in much less of a position to go forward in the world if you start out with stuff that can't be changed.
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3321392112080006222?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3321392112080006222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3321392112080006222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3321392112080006222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3321392112080006222'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/on-accidentally-pulling-scroll-bar-off.html' title='On Accidentally Pulling The Scroll Bar Off Your Mail System'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7136793679990196712</id><published>2009-03-14T10:59:00.000-07:00</published><updated>2009-03-14T11:00:45.530-07:00</updated><title type='text'>$1T with a T</title><content type='html'>&lt;p&gt;
&lt;a href="http://i.gizmodo.com/5168339/to-conceptualize-a-trillion-dollars-we-require-computer-visualization"&gt;&lt;img src="http://cache.gawker.com/assets/images/gizmodo/2009/03/pallet_x_10000.jpg" border="0"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7136793679990196712?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7136793679990196712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7136793679990196712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7136793679990196712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7136793679990196712'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/1t-with-t.html' title='$1T with a T'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8244423834388379564</id><published>2009-03-13T09:49:00.001-07:00</published><updated>2009-03-13T09:49:33.101-07:00</updated><title type='text'>Fwd: [xpportland] XPDX Wednesday March 18th: Ping Pong Pairing</title><content type='html'>---------- Forwarded message ----------&lt;br&gt;Subject: [xpportland] XPDX Wednesday March 18th: Ping Pong Pairing&lt;br&gt;To: &lt;a href="mailto:xpportland@yahoogroups.com"&gt;xpportland@yahoogroups.com&lt;/a&gt;&lt;p&gt;&lt;br&gt;Pair Programming has many benefits for a team above and beyond coding,&lt;br&gt;yet it&amp;#39;s still one of the hardest XP practices to get into. Ping Pong&lt;br&gt;pairing is a lot of fun and is my favourite way to pair. It has a&lt;br&gt;game-like style that instils good pairing and TDD practices. So come&lt;br&gt;along to the next XPDX meeting to try it out. It doesn&amp;#39;t matter if&lt;br&gt;you&amp;#39;ve been pairing for years or want to try it for the first time. This&lt;br&gt;will be a chance to learn from each other. We&amp;#39;ll spend a little time&lt;br&gt;getting to know the mechanics of Ping Pong pairing, do a brief&lt;br&gt;demonstration, and then all pair up for over an hour of practice.&lt;p&gt;Absolutely positively bring a laptop with you. We&amp;#39;ll be using Java,&lt;br&gt;JUnit, and Eclipse. A big time saver will be to ensure that you have the&lt;br&gt;Java *SDK* installed beforehand.&lt;p&gt;&amp;gt;&amp;gt;&amp;gt; Thanks to VersionOne there&amp;#39;ll be pizza for thirty! &amp;lt;&amp;lt;&amp;lt;&lt;p&gt;Be there at 6:30pm for the pizza. We&amp;#39;ll start at 7pm. At 9pm we&amp;#39;ll move&lt;br&gt;on to a local bar.&lt;p&gt;Wednesday, March 18, 2009 @ CubeSpace. Details on Calagator:&lt;br&gt;&lt;a href="http://calagator.org/events/1250456785"&gt;http://calagator.org/events/1250456785&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8244423834388379564?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8244423834388379564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8244423834388379564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8244423834388379564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8244423834388379564'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/fwd-xpportland-xpdx-wednesday-march.html' title='Fwd: [xpportland] XPDX Wednesday March 18th: Ping Pong Pairing'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1572110910143101459</id><published>2009-03-11T07:53:00.000-07:00</published><updated>2009-03-11T07:58:51.095-07:00</updated><title type='text'>This Just In: Functional Programmers Can Now Access Memory (Experimentally)</title><content type='html'>&lt;p&gt;
OK, type fanatics, get beyond my inflammatory headline already!
&lt;p&gt;
Actually, &lt;a href="http://lambda-the-ultimate.org/node/3222"&gt;LtU points to an interesting paper&lt;/a&gt; (for some) on a bit of progress toward type systems for describing the correct use of resources.
&lt;p&gt;
Globals! Memory! Files!
&lt;p&gt;
As one comment points out, the pragmatic benefit of this work is sometime out in the future. Type systems will be good when they add more than they subtract.
&lt;p&gt;
They're not there yet, but there's (some) progress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1572110910143101459?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1572110910143101459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1572110910143101459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1572110910143101459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1572110910143101459'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/this-just-in-functional-programmers-can.html' title='This Just In: Functional Programmers Can Now Access Memory (Experimentally)'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3779664999961925912</id><published>2009-03-08T22:52:00.001-07:00</published><updated>2009-03-08T22:52:42.792-07:00</updated><title type='text'>If Douglas Crockford Don't Care Why Should I?</title><content type='html'>At the end of this nice Google Tech Talk about Javascript good parts,&lt;br&gt;listen as Douglas Crockford (creator of JSON) pronounces &amp;quot;JSON&amp;quot;&lt;br&gt;incorrectly! (i.e. &amp;quot;Jason&amp;quot;)&lt;p&gt;Also listen as various audience members pronounce if correctly... &amp;quot;Jay-SAHN&amp;quot;.&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=hQVTIJBZook"&gt;http://www.youtube.com/watch?v=hQVTIJBZook&lt;/a&gt;&lt;p&gt;Of course I am kidding - can&amp;#39;t you PLEASE stop pronouncing it &amp;quot;Jay-SAHN&amp;quot;???&lt;p&gt;But why doesn&amp;#39;t this bug Douglas as much as it does me???&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3779664999961925912?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3779664999961925912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3779664999961925912' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3779664999961925912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3779664999961925912'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/if-douglas-crockford-dont-care-why.html' title='If Douglas Crockford Don&apos;t Care Why Should I?'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1679471106497930908</id><published>2009-03-04T19:56:00.001-08:00</published><updated>2009-03-04T20:04:30.142-08:00</updated><title type='text'>Please, Don't... No, Go Ahead!</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.tweetdeck.com/"&gt;TweetDeck is a popular&lt;/a&gt; Twitter client. I use it. And Phil Windley has included it in his &lt;a href="http://www.windley.com/archives/2009/03/top_ten_list_of_valuable_web_sites_and_services.shtml"&gt;Top Ten List of Valuable Web Sites and Services&lt;/a&gt; ("&lt;em&gt;makes twitter easier to manage/use&lt;/em&gt;").
&lt;p&gt;
TweetDeck is an &lt;a href="http://www.adobe.com/products/air/"&gt;Adobe AIR desktop Flex application&lt;/a&gt;.
&lt;p&gt;
Wait a minute. Doesn't AIR *hurt* the web? Hmm.
&lt;p&gt;
Oh, right. AIR is simply a cross-platform application runtime with useful capabilities for running from and working with the web. Imagine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1679471106497930908?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1679471106497930908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1679471106497930908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1679471106497930908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1679471106497930908'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/please-dont-no-go-ahead.html' title='Please, Don&apos;t... No, Go Ahead!'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7765127963856404648</id><published>2009-03-03T10:13:00.001-08:00</published><updated>2009-03-03T10:13:12.842-08:00</updated><title type='text'>Analysis Patterns and Contradictory Observations</title><content type='html'>I enjoyed _Analysis Patterns_ when Martin Fowler wrote that. Wow, it&amp;#39;s&lt;br&gt;been 16 years. I found the book fascinating by discussing conceptual&lt;br&gt;topics, notdesigns. I really enjoy learning about all the various&lt;br&gt;worlds in which software is applied.&lt;p&gt;Martin recently wrote an update on &amp;quot;observations&amp;quot;...&lt;p&gt;&lt;a href="http://martinfowler.com/bliki/ContradictoryObservations.html"&gt;http://martinfowler.com/bliki/ContradictoryObservations.html&lt;/a&gt;&lt;p&gt;Interesting problems are hardly ever simple. Finding simplifying&lt;br&gt;patterns and (relatively) simple solutions to complex problems is&lt;br&gt;fascinating.&lt;p&gt;As this article points out, &amp;quot;simplifying&amp;quot; can mean finding the essence&lt;br&gt;of what is important without being &amp;quot;simplistic&amp;quot;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7765127963856404648?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7765127963856404648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7765127963856404648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7765127963856404648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7765127963856404648'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/03/analysis-patterns-and-contradictory.html' title='Analysis Patterns and Contradictory Observations'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-5850027004072042182</id><published>2009-02-22T09:13:00.000-08:00</published><updated>2009-02-22T09:40:38.011-08:00</updated><title type='text'>Slim FitNesse</title><content type='html'>&lt;p&gt;
I recently started exploring &lt;a href="http://fitnesse.org/"&gt;FitNesse&lt;/a&gt; for the first time. This began when someone pointed out the relatively new Slim protocol for using Fit tests with Systems Under Test. The primary benefit of Slim, as seen in the diagram below, is reducing the footprint of the framework in the SUT, and sharing a single implementation of the table interpreter. Improvements to the Fit interpreter do not have to be duplicated across multiple Fit implementations by multiple Fit f/w implementors.
&lt;p&gt;
&lt;a href="http://fitnesse.org/FitNesse.TestSystems"&gt;&lt;img src="http://fitnesse.org/files/images/fitnesse_architecture.jpg"&gt;&lt;/a&gt;
&lt;p&gt;
I enjoy learning about various wiki implementations, generally. And FitNesse as a wiki has some interesting features. Mostly these seem geared toward supporting the wiki as a home for tests for multiple projects and multiple developers. I am always torn between the simplest wiki structures, such as the original c2 flat namespace, and structures such as confluence's spaces and hierarchies.
&lt;p&gt;
FitNesse has its own (as far as I know, unique) structure of subwikis. Essentially any page can begin its own sub-hierarchy, and the page name syntax allows for navigating and searching across the hierarchies above and below. This seems like a good thing, but I've not really used it yet.
&lt;p&gt;
Since I'd like a Fit tool for some fun projects, but I don't have modern Fit tools in the languages I'm using, Slim is the quickest path, and the whole FitNesse wiki comes along for free. I'd done a wee bit of integrating Fit and confluence along with &lt;a href="http://twitter.com/ecopony"&gt;http://twitter.com/ecopony&lt;/a&gt; and Slim FitNesse holds more promise for less effort.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-5850027004072042182?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/5850027004072042182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=5850027004072042182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5850027004072042182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5850027004072042182'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/slim-fitnesse.html' title='Slim FitNesse'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1345425471933933369</id><published>2009-02-19T06:08:00.000-08:00</published><updated>2009-02-19T06:12:14.477-08:00</updated><title type='text'>lolcatslisp</title><content type='html'>&lt;p&gt;
From &lt;a href="http://flickr.com/photos/philvarner/"&gt;phil varner's photostream&lt;/a&gt;...
&lt;p&gt;
&lt;a href="http://flickr.com/photos/philvarner/3292384248/"&gt;&lt;img src="http://farm4.static.flickr.com/3410/3292384248_70ea531dfa.jpg?v=0" border="0"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1345425471933933369?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1345425471933933369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1345425471933933369' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1345425471933933369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1345425471933933369'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/lolcatslisp.html' title='lolcatslisp'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-5559249810228887262</id><published>2009-02-18T16:17:00.000-08:00</published><updated>2009-02-18T16:21:41.643-08:00</updated><title type='text'>Roy Orbison</title><content type='html'>&lt;p&gt;
As long as we're in the neighborhood, stop by and say hello to Roy...
&lt;p&gt;
"Mean Woman Blues"...
&lt;p&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/z3HVNzpiKDA&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/z3HVNzpiKDA&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;
"Down the Line"...
&lt;p&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_in2b3jELbk&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/_in2b3jELbk&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-5559249810228887262?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/5559249810228887262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=5559249810228887262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5559249810228887262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5559249810228887262'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/roy-orbison.html' title='Roy Orbison'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-5121638017323189742</id><published>2009-02-18T08:33:00.001-08:00</published><updated>2009-02-18T08:37:00.823-08:00</updated><title type='text'>Rick Nelson</title><content type='html'>&lt;p&gt;
I was listening to, or trying to, Zooey Deschanel sing "Lonesome Town". I started feeling a bit queasy, until hopping over to the youtube to find this much better rendition by the great Rick(y) Nelson...
&lt;p&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mVvIfoNBY3w&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/mVvIfoNBY3w&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;
And here's "Hello, Mary-Lou" for good measure...
&lt;p&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zLkCWT2neuI&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/zLkCWT2neuI&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;
Now doesn't that make you feel so much better?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-5121638017323189742?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/5121638017323189742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=5121638017323189742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5121638017323189742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5121638017323189742'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/rick-nelson.html' title='Rick Nelson'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1473416774316090457</id><published>2009-02-17T19:09:00.001-08:00</published><updated>2009-02-17T19:09:45.260-08:00</updated><title type='text'>Google Tech Talk - Amy Jo Kim - "Game Mechanics"</title><content type='html'>I found this enjoyable and useful - this is probably a topic all&lt;br&gt;software developers should pay some attention to these days...&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=ihUt-163gZI"&gt;http://www.youtube.com/watch?v=ihUt-163gZI&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1473416774316090457?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1473416774316090457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1473416774316090457' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1473416774316090457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1473416774316090457'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/google-tech-talk-amy-jo-kim-game.html' title='Google Tech Talk - Amy Jo Kim - &quot;Game Mechanics&quot;'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1582517552758433331</id><published>2009-02-17T18:53:00.001-08:00</published><updated>2009-02-17T18:53:54.312-08:00</updated><title type='text'>Facilitation Skills</title><content type='html'>Merlyn writes up a piece on facilitation skills based on his&lt;br&gt;participation in AONW 2009 last week...&lt;p&gt;&lt;a href="http://curious-attempt-bunny.blogspot.com/2009/02/aonw-2009-facilitation-skills.html"&gt;http://curious-attempt-bunny.blogspot.com/2009/02/aonw-2009-facilitation-skills.html&lt;/a&gt;&lt;p&gt;One of the &amp;quot;adds&amp;quot; we came up with in our host&amp;#39;s retrospective last&lt;br&gt;Thursday was to add a page (on the wiki, in the packet, somewhere) on&lt;br&gt;facilitation skills for people interested in hosting a session at the&lt;br&gt;next AONW event.&lt;p&gt;Looks like Merlyn&amp;#39;s got a good start, and hopefully we can get him to&lt;br&gt;help as we work on this... maybe a session during or before an XPDX&lt;br&gt;meeting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1582517552758433331?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1582517552758433331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1582517552758433331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1582517552758433331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1582517552758433331'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/facilitation-skills.html' title='Facilitation Skills'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1450767804780686518</id><published>2009-02-09T14:58:00.000-08:00</published><updated>2009-02-09T14:59:00.290-08:00</updated><title type='text'>Where do you use Smalltalk?</title><content type='html'>This question was asked recently at &lt;a href="http://stackoverflow.com/questions"&gt;http://stackoverflow.com/questions&lt;/a&gt;&lt;br&gt;&lt;br&gt;I love the responses that say, &amp;quot;It&amp;#39;s great. But only use it with good developers that do unit testing.&amp;quot;&lt;br&gt;&lt;br&gt;Why would you use anything with any other kind of developer? And is the claim there is a tool that actually _works_ in those situations?&lt;br&gt;&lt;br&gt;BTW this is not a new kind of comment from people. It just never ceases to amaze me that those follow-up questions neither seem to be asked nor answered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1450767804780686518?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1450767804780686518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1450767804780686518' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1450767804780686518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1450767804780686518'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/where-do-you-use-smalltalk.html' title='Where do you use Smalltalk?'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3508073586707601563</id><published>2009-02-06T06:37:00.000-08:00</published><updated>2009-02-06T06:44:42.566-08:00</updated><title type='text'>What Do Nintendo, Squeak Smalltalk, and an EMCAScript-based OS Have in Common?</title><content type='html'>&lt;p&gt;
I knew some people at Nintendo have been doing something with Squeak Smalltalk. At least &lt;a href="http://code.google.com/p/es-operating-system/wiki/UsingES"&gt;this aspect of that was not something I'd expected&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
&lt;h3&gt;Using commands&lt;/h3&gt;
From the command line shell, you can use the programs like below. Most of the commands are written in ECMAScript:
&lt;p&gt;
&lt;pre&gt;
Command Name  Description
cat [file ...]  Prints the contents of files to the screen
cd [dir]  Sets the current directory to dir
clear  Clears the canvas for drawing graphics
date [-u]  Displays the current date and time.
echo [arg ...]  Prints the arguments to the screen
edit [file]  Edits text files
exit  Exits the command line shell
figure  Draws chars using the CanvasRenderingContext2D interface (A demo script)
ls [dir ...]  Lists names of objects in the directory
rm [file ...]  Removes the files
squeak  Squeak - a Smalltalk programming environment
&lt;/pre&gt;
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3508073586707601563?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3508073586707601563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3508073586707601563' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3508073586707601563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3508073586707601563'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/what-do-nintendo-squeak-smalltalk-and.html' title='What Do Nintendo, Squeak Smalltalk, and an EMCAScript-based OS Have in Common?'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2687287262851356948</id><published>2009-02-05T10:50:00.001-08:00</published><updated>2009-02-05T10:50:57.334-08:00</updated><title type='text'>Bertrand / Wm Leler at pdxfunc meeting - Feb 9, 7pm</title><content type='html'>This month, Wm Leler will talk about Constraint Satisfaction Systems&lt;br&gt;and the Bertrand Programming Language. Wm is the creator of Bertrand&lt;br&gt;and the author of the book &amp;quot;Constraint Programming Languages: Their&lt;br&gt;Specification and Generation&amp;quot;.&lt;p&gt;Constraint Satisfaction Systems were a hot topic of research in the&lt;br&gt;80&amp;#39;s -- famous constraint systems include Ivan Sutherland&amp;#39;s Sketchpad,&lt;br&gt;Alan Borning&amp;#39;s ThingLab (built on top of Smalltalk), Guy Steele&amp;#39;s&lt;br&gt;constraint language, and James Gosling&amp;#39;s Magritte. These systems were&lt;br&gt;used for computer graphics, design, and general numeric problem&lt;br&gt;solving, but most of these solvers were domain specific and thus of&lt;br&gt;limited usefulness.&lt;p&gt;Bertrand is an equational programming system whose purpose is to build&lt;br&gt;constraint satisfaction systems using simple equational rules.&lt;br&gt;Bertrand has an purely declarative semantics and an absurdly simple&lt;br&gt;syntax, yet it is a powerful and expressive language, capable of&lt;br&gt;solving problems in a large number of domains including graphics, word&lt;br&gt;problems, electrical circuits, or -- with the right rules -- virtually&lt;br&gt;any mostly-linear domain.&lt;p&gt;Since this is the Functional Programming Study Group, this talk will&lt;br&gt;cover the underlying equational programming language of Bertrand and&lt;br&gt;ways in which it could be extended to make it more powerful.&lt;p&gt;--~--~---------~--~----~------------~-------~--~----~&lt;br&gt;visit this group at &lt;a href="http://groups.google.com/group/pdxfunc?hl=en"&gt;http://groups.google.com/group/pdxfunc?hl=en&lt;/a&gt;&lt;br&gt;-~----------~----~----~----~------~----~------~--~---&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2687287262851356948?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2687287262851356948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2687287262851356948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2687287262851356948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2687287262851356948'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/bertrand-wm-leler-at-pdxfunc-meeting.html' title='Bertrand / Wm Leler at pdxfunc meeting - Feb 9, 7pm'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6371730164220750537</id><published>2009-02-03T20:12:00.000-08:00</published><updated>2009-02-03T20:18:51.644-08:00</updated><title type='text'>Original Hotcake House</title><content type='html'>&lt;p&gt;
I was recently reminded how much I love the Original Hotcake House on Powell Blvd. here in PDX. Really, really, "diner" good. As captured in &lt;a href="http://www.altportland.com/dailydose/original_hotcak_1.shtml"&gt;this review from alt.portland&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
The hot cakes were absolutely hot cake-like, doused in some butter-like substance, and then served with something that is heated, but probably not pure maple syrup. Hell, it may contain no maple syrup for all I know (I saw some patrons bring in their own)!
&lt;p&gt;
...
&lt;p&gt;
The coffee looks scary—we didn't go there.
&lt;/em&gt;
&lt;/blockquote&gt;
The coffee, like everything else, is great. It's just sitting in a pot over there, and you go up and pour yourself a cup, then squirt some milk into it from this big squirter thing.
&lt;p&gt;
Now I have to plan a trip there soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6371730164220750537?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6371730164220750537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6371730164220750537' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6371730164220750537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6371730164220750537'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/original-hotcake-house.html' title='Original Hotcake House'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1904858846920736690</id><published>2009-02-03T15:26:00.001-08:00</published><updated>2009-02-03T15:26:52.154-08:00</updated><title type='text'>PITA</title><content type='html'>Ron Jeffries again...&lt;p&gt;&amp;quot;I often tell teams that apparently my purpose in life is to tell&lt;br&gt;people that the sensation in their butt is called &amp;quot;pain&amp;quot;, and that&lt;br&gt;they should get rid of it.&amp;quot;&lt;p&gt;&lt;a href="http://xprogramming.com/blog/2009/02/02/discovering-essential-technical-practices/"&gt;http://xprogramming.com/blog/2009/02/02/discovering-essential-technical-practices/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1904858846920736690?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1904858846920736690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1904858846920736690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1904858846920736690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1904858846920736690'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/pita.html' title='PITA'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-9133876182007431556</id><published>2009-02-03T10:57:00.001-08:00</published><updated>2009-02-03T11:24:21.314-08:00</updated><title type='text'>Grade: Incomplete</title><content type='html'>&lt;p&gt;
&lt;a href="http://xprogramming.com/blog/2009/01/30/context-my-foot/"&gt;Ron Jeffries writes&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
Jeff Sutherland, co-inventor of Scrum, says he has never seen a Scrum team become hyper-productive without adopting the XP practices. Less elegantly, I have said that teaching Scrum teams how to get Done-Done is why I have such a lovely blue convertible...
&lt;p&gt;
Well, my dear little children, I’ve got bad news for you. It is your precious context that is holding you back. It is your C-level Exeuctives and high-level managers who can’t delegate real responsibility and authority to their people. It is your product people who are too busy to explain what really needs to be done. It is your facilities people who can’t make a workspace fit to work in. It is your programmers who won’t learn the techniques necessary to succeed. It is your managers and product owners who keep increasing pressure until any focus on quality is driven out of the project.
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-9133876182007431556?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/9133876182007431556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=9133876182007431556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/9133876182007431556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/9133876182007431556'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/grade-incomplete.html' title='Grade: Incomplete'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2996860113335879270</id><published>2009-02-03T09:45:00.000-08:00</published><updated>2009-02-03T10:45:03.114-08:00</updated><title type='text'>So Called</title><content type='html'>&lt;p&gt;
I get frustrated listening to smart people talk about things they are only marginally familiar with. Part I of this recording was interesting... people talking about their own experience with specific systems and practices.
&lt;p&gt;
&lt;a href="http://queue.acm.org/detail_audio.cfm?id=1454460"&gt;Part II of this recording&lt;/a&gt; is frustrating because they've not called in anyone with experience with XP, and so debate XP as they understand it. Not that they don't have good experiences and smart things to say here and there. Just that this one could have been much better.
&lt;p&gt;
Good software development evolves from a team's conversation about what's working for them. The heart of XP in my experience are practices that foster a teams conversations. Those practices should themselves evolve from those conversations.
&lt;p&gt;
This recording has some good conversations, but mostly I am frustrated because I'd love to be a part of their conversation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2996860113335879270?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2996860113335879270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2996860113335879270' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2996860113335879270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2996860113335879270'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/so-called.html' title='So Called'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8314568155031077828</id><published>2009-02-01T20:08:00.000-08:00</published><updated>2009-02-01T20:14:44.907-08:00</updated><title type='text'>Agile Open Northwest 2009, Feb. 10-11</title><content type='html'>&lt;p&gt;
We've had two great AONW open space conferences, 2007 in Portland, and 2008 in Seattle.
&lt;p&gt;
This year we are back in Portland, close to the MAX, and as low-cost as ever: $125. There's still a bit of room to sign-up if you don't wait. The conference is Feb 10-11.
&lt;p&gt;
&lt;a href="http://agileopennorthwest.org/"&gt;Agile Open Northwest 2009&lt;/a&gt;, the best open space conference in the world. Learn from each other at AONW 2009...
&lt;blockquote&gt;
&lt;em&gt;
"These two-day Agile Open Northwest conferences are an extremely good value. ..[Y]ou learn directly from practitioners in the agile community what works and what doesn't. I attended the first two of these conferences, they were stunningly good... loads of practical, useful stuff and stimulating discussions." -- Ian Savage, PNSQC Program Chair
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8314568155031077828?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8314568155031077828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8314568155031077828' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8314568155031077828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8314568155031077828'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/02/agile-open-northwest-2009-feb-10-11.html' title='Agile Open Northwest 2009, Feb. 10-11'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2669414443991165099</id><published>2009-01-30T15:07:00.000-08:00</published><updated>2009-01-30T15:14:27.110-08:00</updated><title type='text'>As Scheme Moves Forward</title><content type='html'>&lt;p&gt;
On &lt;a href="http://www.r6rs.org/steering-committee/election/nominees.html"&gt;the Scheme Language Steering Committee Nominees page&lt;/a&gt;, Will Clinger writes...
&lt;blockquote&gt;
&lt;em&gt;
The R6RS has given us the option of writing programs
in the new and more static language it describes.  Two
implementations of the dynamic language most recently
described by the R5RS have added support for this new
mode of execution, and four brand new implementations
of R6 Scheme are well under way.
&lt;p&gt;
That represents a partial success, but this process
has disappointed users of the language formerly
known as Scheme...
&lt;p&gt;
As &lt;a href="http://scheme-punks.org/wiki/index.php?title=ERR5RS:Charter"&gt;demonstrated by ERR5RS&lt;/a&gt;, the
major new features of the R6RS could have been added
without forbidding... the dynamic language
paradigm of IEEE/R5 Scheme...
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2669414443991165099?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2669414443991165099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2669414443991165099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2669414443991165099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2669414443991165099'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/01/as-scheme-moves-forward.html' title='As Scheme Moves Forward'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8774560276258626381</id><published>2009-01-27T19:12:00.001-08:00</published><updated>2009-01-27T19:12:37.152-08:00</updated><title type='text'>Do you practice hygiene (with your macros)?</title><content type='html'>No. God no.&lt;br&gt;&lt;br&gt;Hygienic macro systems are a sign of weakness and a false crutch. If you can&amp;#39;t write a macro that doesn&amp;#39;t inadvertently capture a variable, you shouldn&amp;#39;t be writing programs that write programs.&lt;br&gt;&lt;br&gt;(Been a while since I&amp;#39;ve ranted. Hasn&amp;#39;t it?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8774560276258626381?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8774560276258626381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8774560276258626381' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8774560276258626381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8774560276258626381'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/01/do-you-practice-hygiene-with-your.html' title='Do you practice hygiene (with your macros)?'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3253094267791555005</id><published>2009-01-07T21:51:00.000-08:00</published><updated>2009-01-07T21:54:33.747-08:00</updated><title type='text'>Many, Cooperating, Screens That Compute</title><content type='html'>&lt;p&gt;
John Dowdell &lt;a href="http://blogs.adobe.com/jd/2009/01/thoughts_on_the_unification_of.html"&gt;writes about recent internet-ready TV news from CES&lt;/a&gt;, and extrapolates...
&lt;blockquote&gt;
&lt;em&gt;
We've got to start designing to the range of inter-cooperating display screens a person may use throughout a typical day in 2012.
&lt;p&gt;
And we've really got to work hard at bringing in your friends' and teachers' understandings of what's worth your attention onto those varied screens.
&lt;p&gt;
Future applications will be multi-screened, using the cloud, to connect with your friends. That's where the highgrowth markets are going.
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3253094267791555005?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3253094267791555005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3253094267791555005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3253094267791555005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3253094267791555005'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/01/many-cooperating-screens-that-compute.html' title='Many, Cooperating, Screens That Compute'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8695227375664791791</id><published>2009-01-04T20:24:00.001-08:00</published><updated>2009-01-04T20:26:44.442-08:00</updated><title type='text'>Beavs Beat Trojans All Over Again</title><content type='html'>The Oregon State Beavers basketball team did not win a conference game&lt;br&gt;last year, and had not won a conference game since February 2007.&lt;br&gt;Until today, when they upset the USC Trojans at home, just as the&lt;br&gt;football team did in the fall. Nice for them to have that monkey off&lt;br&gt;their back in just the second conference game this season. The team&lt;br&gt;with nowhere to go but up just elevated themselves a notch.&lt;p&gt;&lt;a href="http://www.latimes.com/sports/la-sp-uschoops5-2009jan05,0,6109731.story"&gt;http://www.latimes.com/sports/la-sp-uschoops5-2009jan05,0,6109731.story&lt;/a&gt;&lt;p&gt;&lt;a href="http://blog.oregonlive.com/behindbeaversbeat/2009/01/haynes_sounds_warning_to_rest.html"&gt;http://blog.oregonlive.com/behindbeaversbeat/2009/01/haynes_sounds_warning_to_rest.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8695227375664791791?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8695227375664791791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8695227375664791791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8695227375664791791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8695227375664791791'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/01/beavs-beat-trojans-all-over-again.html' title='Beavs Beat Trojans All Over Again'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1225224268567759441</id><published>2009-01-04T20:02:00.001-08:00</published><updated>2009-01-04T20:02:48.724-08:00</updated><title type='text'>Tim Riley Podcast Begins</title><content type='html'>Subscribe to Tim Riley&amp;#39;s podcasts. They begin Monday and cost&lt;br&gt;something like $4/month. Definitely worth the few bucks for Tim&lt;br&gt;Riley&amp;#39;s unique approach to local and national news, and everything&lt;br&gt;else. This could be the beginning to a new format for Riley, and&lt;br&gt;perhaps Emerson, that transcends the fickle, short-sighted 20th&lt;br&gt;century media companies.&lt;p&gt;&lt;a href="http://timrileylive.wordpress.com/2008/12/31/we-just-cant-wait-for-2009/"&gt;http://timrileylive.wordpress.com/2008/12/31/we-just-cant-wait-for-2009/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1225224268567759441?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1225224268567759441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1225224268567759441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1225224268567759441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1225224268567759441'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/01/tim-riley-podcast-begins.html' title='Tim Riley Podcast Begins'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6497089450358287005</id><published>2009-01-04T13:06:00.001-08:00</published><updated>2009-01-04T13:06:24.829-08:00</updated><title type='text'>Waiting on WiMax</title><content type='html'>Looks like waiting for more complete reviews and early adopter&lt;br&gt;feedback is warranted before signing up for the WiMax. Mobile is what&lt;br&gt;I would get, but mostly for use indoors.&lt;p&gt;&lt;a href="http://blog.oregonlive.com/siliconforest/2009/01/more_time_with_wimax.html"&gt;http://blog.oregonlive.com/siliconforest/2009/01/more_time_with_wimax.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6497089450358287005?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6497089450358287005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6497089450358287005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6497089450358287005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6497089450358287005'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2009/01/waiting-on-wimax.html' title='Waiting on WiMax'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6953836774986426963</id><published>2008-12-31T17:18:00.001-08:00</published><updated>2008-12-31T17:18:05.441-08:00</updated><title type='text'>The Dark Pools of Finance</title><content type='html'>I am not sure &amp;quot;dark pools&amp;quot; are what&amp;#39;s needed to resolve a crisis&lt;br&gt;worsened by, if not due to, opacity...&lt;p&gt;&lt;a href="http://www.ft.com/cms/s/0/872657de-cf8b-11dd-abf9-000077b07658.html"&gt;http://www.ft.com/cms/s/0/872657de-cf8b-11dd-abf9-000077b07658.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6953836774986426963?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6953836774986426963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6953836774986426963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6953836774986426963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6953836774986426963'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/dark-pools-of-finance.html' title='The Dark Pools of Finance'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3030023854636171904</id><published>2008-12-31T13:39:00.000-08:00</published><updated>2008-12-31T13:51:34.346-08:00</updated><title type='text'>Multnomah County Sheriff’s Office: “Naked Home Invader Captured After Senior Citizen Grabs His ‘Cahoochies.’”</title><content type='html'>&lt;p&gt;
From &lt;a href="http://www.portlandtribune.com/news/story.php?story_id=123069146164189500"&gt;the Portland Tribune&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
Gresham resident Michael Gordon Dick (that’s right), 46, is being held on $104,000 bail on accusations of felony burglary, harassment and private indecency at the Multnomah County Detention Center.
&lt;p&gt;
The 88-year-old victim was in her robe at 6:30 a.m. when she confronted Dick after finding him in her home...
&lt;p&gt;
...the victim reached behind her and grabbed the intruder’s crotch, “giving him a good squeeze,” wrote Deputy Paul McRedmond, a spokesman for the Multnomah County Sheriff’s Office, in a press release titled “Naked Home Invader Captured After Senior Citizen Grabs His ‘Cahoochies.’ ”
&lt;/em&gt;
&lt;/blockquote&gt;
Mr. Dick may have to stay on guard in jail once news of his crime gets around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3030023854636171904?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3030023854636171904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3030023854636171904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3030023854636171904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3030023854636171904'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/multnomah-county-sheriffs-office-naked.html' title='Multnomah County Sheriff’s Office: “Naked Home Invader Captured After Senior Citizen Grabs His ‘Cahoochies.’”'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8982350329342257551</id><published>2008-12-31T09:40:00.001-08:00</published><updated>2008-12-31T09:40:12.081-08:00</updated><title type='text'>New Tim Riley Podcasts</title><content type='html'>Tim Riley begins podcasting on Monday:&lt;p&gt;&lt;a href="http://timrileylive.wordpress.com/2008/12/31/we-just-cant-wait-for-2009/"&gt;http://timrileylive.wordpress.com/2008/12/31/we-just-cant-wait-for-2009/&lt;/a&gt;&lt;p&gt;His xmas christmas special is here:&lt;p&gt;&lt;a href="http://timrileylive.wordpress.com/2008/12/24/1107/"&gt;http://timrileylive.wordpress.com/2008/12/24/1107/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8982350329342257551?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8982350329342257551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8982350329342257551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8982350329342257551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8982350329342257551'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/new-tim-riley-podcasts.html' title='New Tim Riley Podcasts'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2786358814637510056</id><published>2008-12-31T07:49:00.000-08:00</published><updated>2008-12-31T08:52:43.843-08:00</updated><title type='text'>Building Lisps</title><content type='html'>&lt;p&gt;
Some Lisp-related, and just compiler-related papers and things I've been digging up and enjoying all over again...
&lt;dl&gt;
&lt;dt&gt;
&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.4332"&gt;Expansion-Passing Style: A General Macro Mechanism&lt;/a&gt;
&lt;/dt&gt;
&lt;dd&gt;
A simple way to implement macros (no hygiene, thank you). Moreover compared to a basic &lt;code&gt;defmacro&lt;/code&gt;, this approach allows many more kinds of transformations, e.g. currying, call-by-name, call-by-need, macrolet, stepping inspector, etc. Without getting into anything else about compilation, you can plop this thing right on top of your current Lisp and create all kinds of new Lisps and tools.
&lt;/dd&gt;
&lt;dt&gt;
&lt;a href="http://dspace.mit.edu/handle/1721.1/6913"&gt;Rabbit: A Compiler for Scheme&lt;/a&gt;
&lt;/dt&gt;
&lt;dd&gt;
The original Scheme compiler where Steele put all the basic elements together for writing modern compilers for any language.
&lt;/dd&gt;
&lt;dt&gt;
&lt;a href="http://www.iro.umontreal.ca/~boucherd/mslug/meetings/20041020/minutes-en.html"&gt;The 90-minute Scheme-to-C Compiler&lt;/a&gt;
&lt;/dt&gt;
&lt;dd&gt;
This one's fairly recent and has not received enough attention. This is a concise, Cliff Notes, summary of Rabbit, for all intents. Amazingly it is a working Scheme-to-C compiler, of course without optimizations, the full numeric tower, data structures, etc.
&lt;/dd&gt;
&lt;dt&gt;
&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.9.6252"&gt;Realistic Compilation by Program Transformation&lt;/a&gt;
&lt;/dt&gt;
&lt;dd&gt;
A thesis that came out of the Rabbit, Orbit, SML/NJ, etc. school. Explains why most compilers should not be *-to-C but *-to-Lambda. The cheapest way to do this today: *-to-Gambit-to-C. Takes transformation to an extreme: ultimately the source-to-source transformations restrict the names in the program to those that can be directly mapped onto the machine registers, etc. But the representation is still essentially executable source code, e.g. Scheme code.
&lt;/dd&gt;
&lt;dt&gt;
ORBIT: An Optimizing Compiler for Scheme (&lt;a href="http://www.cs.purdue.edu/homes/suresh/502-Fall2008/papers/orbit.pdf"&gt;pdf&lt;/a&gt;)
&lt;/dt&gt;
&lt;dd&gt;
See also &lt;a href="http://mumble.net/~jar/tproject/"&gt;the T Project&lt;/a&gt;. If you've made it this far you are interested in compilers, language implementations, and Lisp. Orbit is Rabbit, but way out there.
&lt;/dd&gt;
&lt;/dl&gt;
I'm not a compiler guru. I've had the courses in school, built some simple Scheme-ish systems, implemented "little languages" dragon-style for employers who had no appetite for Lisp, etc. I just love these papers listed above, among others to be listed some other time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2786358814637510056?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2786358814637510056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2786358814637510056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2786358814637510056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2786358814637510056'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/building-lisps.html' title='Building Lisps'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8833945600471205830</id><published>2008-12-31T05:54:00.001-08:00</published><updated>2008-12-31T05:54:50.820-08:00</updated><title type='text'>qotd, sign of the times</title><content type='html'>&amp;quot;Somebody&amp;#39;s going to hell, is all I know.&amp;quot;&lt;p&gt;&lt;a href="http://blog.oregonlive.com/madaboutmovies/2008/12/stunner.html"&gt;http://blog.oregonlive.com/madaboutmovies/2008/12/stunner.html&lt;/a&gt;&lt;p&gt;(The great Nat Hentoff being let go from the Village Voice.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8833945600471205830?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8833945600471205830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8833945600471205830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8833945600471205830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8833945600471205830'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/qotd-sign-of-times.html' title='qotd, sign of the times'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8980314901694738448</id><published>2008-12-30T20:11:00.001-08:00</published><updated>2008-12-30T20:11:52.828-08:00</updated><title type='text'>pdx sicp grp</title><content type='html'>Some folks in pdx are gathering to study Structure and Interpretation&lt;br&gt;of Computer Programs...&lt;p&gt;&lt;a href="http://groups.google.com/group/pdxfunc/browse_thread/thread/807282d048f7d12e/e75a2dd00a55d33d?show_docid=e75a2dd00a55d33d"&gt;http://groups.google.com/group/pdxfunc/browse_thread/thread/807282d048f7d12e/e75a2dd00a55d33d?show_docid=e75a2dd00a55d33d&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8980314901694738448?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8980314901694738448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8980314901694738448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8980314901694738448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8980314901694738448'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/pdx-sicp-grp.html' title='pdx sicp grp'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2471510554638467959</id><published>2008-12-30T17:40:00.000-08:00</published><updated>2008-12-30T17:59:53.092-08:00</updated><title type='text'>Oh My God, It's a System!</title><content type='html'>&lt;p&gt;
Via &lt;a href="http://blogten.blogspot.com/2008/12/oh-my-god-its-full-of-banks.html"&gt;Andres Valloud&lt;/a&gt;, a list of the Madoff scheme's &lt;a href="http://s.wsj.net/public/resources/documents/st_madoff_victims_20081215.html"&gt;dupes sorted by magnitude of their losses&lt;/a&gt;.
&lt;p&gt;
What this highlights for me is that the worldwide financial system, generally, is both worldwide and a system. It's made of interconnected, independent agents, with varying motivations and levels of self-interest, all feeding back to each other filtered and transformed information, far from ideal, instantaneous knowledge.
&lt;p&gt;
A front page article in the Seattle Times this weekend speculated whether the regional home market would experience a rebound in 2009. The gist of the argument is that that market has been relatively untouched. I could be wrong, and whatever else, Seattle may continue to be less affected than other areas. However what I missed in the article was any recognition that Seattle is part of an overall system that continues to be sinking, and even worse: the home mortgage crisis may be not even halfway through its defaults.
&lt;p&gt;
Belying any glimmer of hope of a recovery, the Madoff list above provides a long list of banks and other financial institutions that clearly do not engage in sufficient diligence when investing billions of dollars. The Madoff case may be the most blatant but I imagine it is exemplary in exposing rampant negligence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2471510554638467959?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2471510554638467959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2471510554638467959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2471510554638467959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2471510554638467959'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/oh-my-god-its-system.html' title='Oh My God, It&apos;s a System!'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-4114691861082155073</id><published>2008-12-30T15:14:00.000-08:00</published><updated>2008-12-30T15:17:12.244-08:00</updated><title type='text'>MallHoo</title><content type='html'>&lt;p&gt;
James Robertson writes &lt;a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Changing_Economy,_Changing_Business_Models&amp;entry=3408006589"&gt;about changing business models of retailers, etc&lt;/a&gt;.
&lt;p&gt;
Fuel prices are definitely a short-term issue. Moreover, on-line vendors have even more opportunities to take advantage of distribution patterns. WallMart manages their supply chain for their stores on-line. Vendors who do not require a storefront near their customers can optimize their supply chain as far down the distribution chain granularity as they desire. And they can outsource as much of the distribution as they desire.
&lt;p&gt;
I am continually surprised at how invisible WallMart is at least to this customer's eyes in building their on-line shopping capabilities. I see Amazon as WallMart's greatest competitor. I still say WallMart should buy Yahoo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-4114691861082155073?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/4114691861082155073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=4114691861082155073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4114691861082155073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4114691861082155073'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/mallhoo.html' title='MallHoo'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8547324275009750983</id><published>2008-12-30T15:00:00.001-08:00</published><updated>2008-12-30T15:00:46.961-08:00</updated><title type='text'>www.WiMaxPDX.info</title><content type='html'>Steven Hall writes that he can help with WiMax in Portland...&lt;p&gt;Just call 503-516-8457 or visit&lt;br&gt;&lt;a href="http://www.wimaxpdx.info"&gt;http://www.wimaxpdx.info&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8547324275009750983?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8547324275009750983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8547324275009750983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8547324275009750983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8547324275009750983'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/wwwwimaxpdxinfo.html' title='www.WiMaxPDX.info'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7266104732416990071</id><published>2008-12-30T11:51:00.001-08:00</published><updated>2008-12-30T11:55:54.951-08:00</updated><title type='text'>Computer Horizons</title><content type='html'>&lt;p&gt;
As &lt;a href="http://steve-yegge.blogspot.com/2008/12/programmers-view-of-universe-part-2.html"&gt;Steve Yegge points out at the end&lt;/a&gt; of his recent piece on embedded systems, his piece is not really about embedded systems per se, but any system that involves humans. The best explanation of this I've found is in what should be required reading for anyone that builds anything that involves humans: &lt;a href="http://www.gurteen.com/gurteen/gurteen.nsf/id/X0000CBBE/"&gt;Winograd and Flores' "Understanding Computers and Cognition&lt;/a&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7266104732416990071?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7266104732416990071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7266104732416990071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7266104732416990071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7266104732416990071'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/computer-horizons.html' title='Computer Horizons'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6428365372025697952</id><published>2008-12-30T11:36:00.000-08:00</published><updated>2008-12-30T11:37:33.470-08:00</updated><title type='text'>Minor Lispage Love Note</title><content type='html'>&lt;p&gt;
&lt;a href="http://patricklogan.blogspot.com/2008/12/ioke-io-lisp-smalltalk-et-al.html"&gt;See previous&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6428365372025697952?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6428365372025697952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6428365372025697952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6428365372025697952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6428365372025697952'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/minor-lispage-love-note.html' title='Minor Lispage Love Note'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8325401612272493477</id><published>2008-12-29T16:28:00.000-08:00</published><updated>2008-12-30T08:37:05.607-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><title type='text'>Lispful</title><content type='html'>&lt;p&gt;
(1984 Edition: Blogger Destroys Ignorance)
&lt;p&gt;
Before leaving on a short holiday adventure following the Northwest Snowpocalypse of 2008, I'd set out to email my blog a short love note to Lisp. After a few helpful comments, blogger destroying same, and Twitter destroying my patience for revising blog posts, I'll try rewriting with previous comments in mind...
&lt;p&gt;
Something I really like about Lisp and Smalltalk is the very small number of rules and the very large bang for the buck. Ioke and io fall into that same realm:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ioke.org/"&gt;http://ioke.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.iolanguage.com/"&gt;http://www.iolanguage.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Although nothing beats Lisp for me. Consider doubling the fraction 3/2.
&lt;p&gt;
In ioke the following expression evaluates to the integer 3:
&lt;p&gt;
&lt;code&gt;3/2 + 3/2&lt;/code&gt;
&lt;p&gt;
Although Smalltalk has fractions (and if it didn't you could add them), the same expression evaluates to the fraction 9/4. Why? Because Smalltalk evaluates binary messages from left to right. There are no "mathematical operators", no "operator precedence", and no syntax for literal fractions. The Smalltalk equivalent to the ioke expression above is:
&lt;p&gt;
&lt;code&gt;(3/2) + (3/2)&lt;/code&gt;
&lt;p&gt;
Or less generally:
&lt;p&gt;
&lt;code&gt;3/2 * 2&lt;/code&gt;
&lt;p&gt;
Smalltalk's fewer rules than the common Algol derivatives are a good thing. As Nat Pryce commented earlier, the mathematical operator precedence rules we learn in grade school are far from universal across all of mathematics anyway. Why cling to them in programming languages?
&lt;p&gt;
Now we get to Lisp:
&lt;p&gt;
&lt;code&gt;(+ 3/2 3/2)&lt;/code&gt;
&lt;p&gt;
Fractions can be expressed truly as literal numbers. This evaluates to 3 and there's never any question about "operator precedence". The fewest rules of all: function application is function application. Absolutely uniform. Absolutely lovely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8325401612272493477?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8325401612272493477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8325401612272493477' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8325401612272493477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8325401612272493477'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/ioke-io-lisp-smalltalk-et-al.html' title='Lispful'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6373869915794117854</id><published>2008-12-19T09:39:00.001-08:00</published><updated>2008-12-19T09:39:37.345-08:00</updated><title type='text'>OK, so it's the wiki or this</title><content type='html'>Just got an email telling me how to add some contact information stuck&lt;br&gt;in a spreadsheet on a sharepoint...&lt;p&gt;&amp;quot;The link below (that [some guy] sent) contains a content transmission&lt;br&gt;ID (basically giving you the view that [he] had).  If you hit the link&lt;br&gt;below (also my personal view with a CTID):&lt;br&gt;&lt;a href="http://blah-dee-blah"&gt;http://blah-dee-blah&lt;/a&gt;&lt;br&gt;and then click on &amp;quot;[blah-dee-blah] Documents&amp;quot; (on the left pane) and&lt;br&gt;then click &amp;quot;Contacts&amp;quot;&lt;br&gt;You should be graced with your own personal view where you should be&lt;br&gt;able to make a checkout on the file, save it, and check it back in.&lt;br&gt;Hope this helps.&amp;quot;&lt;p&gt;Yeah. Or I could edit a wiki page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6373869915794117854?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6373869915794117854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6373869915794117854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6373869915794117854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6373869915794117854'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/ok-so-its-wiki-or-this.html' title='OK, so it&apos;s the wiki or this'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-4347001507603076039</id><published>2008-12-18T17:01:00.001-08:00</published><updated>2008-12-18T17:04:24.716-08:00</updated><title type='text'>a-DOH-bee AIR 1.5 on Linux</title><content type='html'>&amp;quot;Today, we are very pleased to announce the availability of AIR 1.5&lt;br&gt;for Linux. Thousands of AIR applications such as Twhirl (a popular&lt;br&gt;Twitter client), AOL&amp;#39;s Top 100 Videos, and Parleys.com, are now&lt;br&gt;available to millions of Linux users. This announcement also means&lt;br&gt;that web developers can now use the AIR SDK to create a single desktop&lt;br&gt;application that works on Linux, Mac, and Windows without any&lt;br&gt;changes.&amp;quot;&lt;p&gt;&lt;a href="http://blogs.adobe.com/air/2008/12/adobe_air_15_now_available_for.html"&gt;http://blogs.adobe.com/air/2008/12/adobe_air_15_now_available_for.html&lt;/a&gt;&lt;p&gt;Looks like Linux, 32-bit at least, is nearly to the point of&lt;br&gt;simultaneous releases of AIR with Win and Mac.
&lt;p&gt;
64-bit Linux can run AIR 1.5 as well on the alpha Flash 10 runtime.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-4347001507603076039?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/4347001507603076039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=4347001507603076039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4347001507603076039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4347001507603076039'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/doh-bee-air-15-on-linux.html' title='a-DOH-bee AIR 1.5 on Linux'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7061012239085948778</id><published>2008-12-17T20:40:00.001-08:00</published><updated>2008-12-17T20:40:23.373-08:00</updated><title type='text'>The Taking</title><content type='html'>We&amp;#39;ve been took.&lt;p&gt;&lt;a href="http://www.npr.org/blogs/money/2008/12/so_much_for_pay_limits.html"&gt;http://www.npr.org/blogs/money/2008/12/so_much_for_pay_limits.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7061012239085948778?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7061012239085948778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7061012239085948778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7061012239085948778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7061012239085948778'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/taking.html' title='The Taking'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7082182217973667047</id><published>2008-12-13T10:03:00.000-08:00</published><updated>2008-12-13T18:21:22.360-08:00</updated><title type='text'>Multi Core Programming</title><content type='html'>&lt;p&gt;
The presentation and discussion at pdxfunc this week was all about bytecodes, JITs, and performance of dynamic languages, in particular Javascript, in particular for Mozilla. Igal &lt;a href="http://groups.google.com/group/pdxfunc/browse_thread/thread/c799a3fcd3d42893/59ee0f60ba14d7d7?show_docid=59ee0f60ba14d7d7"&gt;took good notes&lt;/a&gt;. The presenter, Jim Blandy of Mozilla, made &lt;a href="http://groups.google.com/group/pdxfunc/browse_thread/thread/c799a3fcd3d42893/70683ad1906626cf?show_docid=70683ad1906626cf"&gt;a few corrections to the notes&lt;/a&gt;. 
&lt;p&gt;
Jim's presentation was well done. Future meetings of pdxfunc may very well be video recorded. Too bad this was not... people with various levels of experience with compiler internals each expressed satisfaction.
&lt;p&gt;
Michael Lucas-Smith was at pdxfunc and arranged for an Industry Misinterpretations podcast with Jim. James Robertson&lt;a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Industry_Misinterpretations_115:_TraceMonkey&amp;entry=3406649909"&gt; has that up on his blog now&lt;/a&gt;. (Aside: MLS is a whirlwind of facts on sci-fi, astro-physics, and other brainy (literally) topics... if you ever have a chance to sit down with him at a pub.)
&lt;p&gt;
One of the interesting highlights of the discussion during Jim's presentation was a brief segue into language compiler and runtime characteristics that do or do not play well with modern CPU architectures, especially regarding caching and off-chip accesses. This led to a brief touch on upcoming many-core chips, and MLS mentioned &lt;a href="http://en.wikipedia.org/wiki/Larrabee_(GPU)"&gt;Intel's Larrabee chip&lt;/a&gt;, which will have many cores, each essentially a simple, small-but-64-bit, Pentium plus vector processor.
&lt;p&gt;
Programming languages and implementations that support small, dynamic, shared-nothing (or at least shared-little), asynchronous processes stand a chance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7082182217973667047?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7082182217973667047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7082182217973667047' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7082182217973667047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7082182217973667047'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/multi-core-programming.html' title='Multi Core Programming'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-5131220800318902220</id><published>2008-12-12T14:00:00.000-08:00</published><updated>2008-12-12T14:34:36.881-08:00</updated><title type='text'>InexpressivenessYet World Wide Webiness</title><content type='html'>&lt;p&gt;
&lt;a href="http://bitworking.org/news/388/broke"&gt;Joe Gregorio writes&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
One of the reasons that I have this feeling is that after programming for the past 25 years the field hasn't really changed.
&lt;/em&gt;
&lt;/blockquote&gt;
I also have the feeling nothing about programming has changed. Except when I have the feeling that a *lot* about programming has changed.
&lt;p&gt;
I'm now in the frame of mind that 25 or 50 years is really not that long, and already programmers have created a world-wide web of information and computation, used by a significant number of people, that seems capable of outlasting any of its current parts. That's something.
&lt;p&gt;
On the other hand programming is still too hard (inexpressive), still too much like it was 25 or so years ago.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-5131220800318902220?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/5131220800318902220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=5131220800318902220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5131220800318902220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/5131220800318902220'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/inexpressivenessyet-world-wide-webiness.html' title='InexpressivenessYet World Wide Webiness'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-4964710039646192944</id><published>2008-12-12T08:40:00.000-08:00</published><updated>2008-12-12T09:08:58.935-08:00</updated><title type='text'>a-DOH-bee *doesn't* hurt the web (mostly)</title><content type='html'>&lt;p&gt;
Via Phil Windley, &lt;a href="http://www.windley.com/archives/2008/12/the_future_of_browsers.shtml"&gt;someone (not sure who) continues to get it wrong&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
The Web is under attack by proprietary platforms like Air, Silverlight, etc. They have clear and obvious advantages but they have one big disadvantage: their lack of openness. Nick says that we need to accelerate the inclusion of the capabilities of these closed platforms in open standards and browsers. "We need more stuff in the browser faster." Mike says that the competition of Web browsers has led to improvements like Javascript being 10x faster now. Joshua thinks that stories about the threat to the Web are highly overrated. The Web has made great strides over the last few years.
&lt;/em&gt;
&lt;/blockquote&gt;
Adobe AIR runs webkit, javascript, etc. just like many other applications. And it has the general ability to connect to HTTP servers, mail servers, XMPP servers, etc. So to claim that "the web is under attack by proprietary platforms like AIR" makes no sense to me.
&lt;p&gt;
Sure, AIR is not "a browser" out of the box. That's a good thing. It is an application development platform. Browsers (in the traditional sense) are not good at that.
&lt;p&gt;
Clearly the browser implementers are finding ways to become more like AIR, out of necessity. Browsers are not the end of evolution, neither is AIR. They are each points along the way to whatever comes next.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-4964710039646192944?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/4964710039646192944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=4964710039646192944' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4964710039646192944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4964710039646192944'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/doh-bee-doesnt-hurt-web-mostly.html' title='a-DOH-bee *doesn&apos;t* hurt the web (mostly)'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2453692875163575808</id><published>2008-12-11T20:37:00.001-08:00</published><updated>2008-12-11T20:37:46.731-08:00</updated><title type='text'>Everything Becomes Lisp</title><content type='html'>&amp;quot;Find out how closures and lambda functions make programming easier by&lt;br&gt;letting you define throwaway functions that can be used in different&lt;br&gt;contexts. This article details how useful closures are as a functional&lt;br&gt;programming construct within PHP V5.3 code.&amp;quot;&lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/index.html?ca=drs-tp5008"&gt;http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/index.html?ca=drs-tp5008&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2453692875163575808?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2453692875163575808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2453692875163575808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2453692875163575808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2453692875163575808'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/everything-becomes-lisp.html' title='Everything Becomes Lisp'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6827242658037907935</id><published>2008-12-10T22:05:00.000-08:00</published><updated>2008-12-10T22:07:41.501-08:00</updated><title type='text'>That's some damn hobby you've got there</title><content type='html'>&lt;p&gt;
Via &lt;a href="http://www.1080thefan.com/pages/2901506.php?itmBlogDomainUrl=http://isaac-kfxx.itmblog.com/2008/12/10/im-easily-amused/"&gt;Isaac Ropp&lt;/a&gt;...
&lt;p&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/TD4g0gmQSLk&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/TD4g0gmQSLk&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6827242658037907935?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6827242658037907935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6827242658037907935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6827242658037907935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6827242658037907935'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/thats-some-damn-hobby-youve-got-there.html' title='That&apos;s some damn hobby you&apos;ve got there'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-163751088610262044</id><published>2008-12-10T16:51:00.001-08:00</published><updated>2008-12-10T16:51:42.677-08:00</updated><title type='text'>a-DOH-bee: Please Don't Hurt The Web</title><content type='html'>From a-DOH-bee...&lt;p&gt;&amp;quot;Adobe(R) Wave™ is an Adobe AIR application and Adobe hosted service&lt;br&gt;that work together to enable desktop notifications. It helps&lt;br&gt;publishers stay connected to your customers and lets users avoid the&lt;br&gt;email clutter of dozens of newsletters and social network update&lt;br&gt;messages. Adobe Wave is a single web service call that lets publishers&lt;br&gt;reach users directly on their desktop: there&amp;#39;s no need to make them&lt;br&gt;download a custom application or build it yourself.&amp;quot;&lt;p&gt;&lt;a href="http://labs.adobe.com/wiki/index.php/Wave"&gt;http://labs.adobe.com/wiki/index.php/Wave&lt;/a&gt;&lt;p&gt;Em, why not use atom format and atom pub?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-163751088610262044?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/163751088610262044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=163751088610262044' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/163751088610262044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/163751088610262044'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/doh-bee-please-dont-hurt-web.html' title='a-DOH-bee: Please Don&apos;t Hurt The Web'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-181943917986234766</id><published>2008-12-08T12:52:00.001-08:00</published><updated>2008-12-08T12:52:07.999-08:00</updated><title type='text'>Sucks - one media downsize too many</title><content type='html'>Tim Riley is hilarious. And the best newsman in Portland, if not the world.&lt;p&gt;&lt;a href="http://www.oregonmediainsiders.com/node/1748"&gt;http://www.oregonmediainsiders.com/node/1748&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-181943917986234766?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/181943917986234766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=181943917986234766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/181943917986234766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/181943917986234766'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/sucks-one-media-downsize-too-many.html' title='Sucks - one media downsize too many'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-8738118219824994523</id><published>2008-12-07T17:37:00.000-08:00</published><updated>2008-12-07T18:09:14.941-08:00</updated><title type='text'>Programming Languages and Concurrency</title><content type='html'>&lt;p&gt;
This is in reponse to some questions from an earlier post...
&lt;blockquote&gt;
&lt;em&gt;
I remember reading posts of yours criticizing STM in the past. Given some of the link love towards Clojure lately, have you softened on STM a bit? What are your opinions on the state of concurrency and the current crop of language out there now?
&lt;/em&gt;
&lt;/blockquote&gt;
I don't know if I have softened on STM. My main concern with STM is that it is experimental, and moving it into widely used languages like Java and C# would be premature, at best. I am happy to see it in languages like Clojure and Haskell, where it can be experimented with.
&lt;p&gt;
Look at Clojure's ref mechanisms: there are several kinds, and now "atoms" are a kind of ref that seems intended to be used *instead* of STM. (Or maybe it is considered an alternate, atomic form of STM isolated from the previous, transactional STM?) That's all fine and good - Clojure is an experiment in concurrent, mostly-functional programming.
&lt;p&gt;
But where will STM bottom out? Will we end up with five kinds of refs? Ten? How many rules and exceptions to rules will we need to use them all effectively?
&lt;p&gt;
Having more people program more real applications with Clojure, Scala, Haskell, Erlang, and so on is great. Clearly we are just at the very beginning of a long evolution of concurrency mechanisms and how they are expressed in programming languages.
&lt;p&gt;
Thank goodness this is happening in widely varying languages, and not just in Java and C#. We'll certainly need multiple languages and mechanisms for addressing different kinds of concurrency problems. And many more than that to explore with enough variety to determine the better ones.
&lt;p&gt;
I am personally interested currently in how simple a language and its concurrency mechanisms can be for the widest variety of problems. While Haskell, Scala, Clojure, etc. are much better than Java or C#, they are still more complex than necessary for many applications.
&lt;p&gt;
Moreover, the "client" aspects of concurrency problems and opportunities continue to be largely negelected. However small and mobile or rich and graphical, we have to get away from the awful browser/ajax model. Yet even more clearly, there is no reason to retreat to the old desktop model per se. I'm afraid we're going to be stuck with crap for a long time here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-8738118219824994523?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/8738118219824994523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=8738118219824994523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8738118219824994523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/8738118219824994523'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/programming-languages-and-concurrency.html' title='Programming Languages and Concurrency'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-4051470771266911642</id><published>2008-12-07T15:02:00.000-08:00</published><updated>2008-12-07T15:11:40.562-08:00</updated><title type='text'>Atoms</title><content type='html'>&lt;p&gt;
Clojure takes another step away from Lisp. &lt;a href="http://clojure.org/atoms"&gt;Clojure now as "atoms"&lt;/a&gt; which are not to be confused with Lisp atoms. Not necessarily a bad thing. I'm just saying.
&lt;p&gt;
Since they are a kind of "shared reference" maybe they could have been called "arefs". Oops. No. That is &lt;a href="http://www.jtra.cz/stuff/lisp/sclr/aref.html"&gt;a ubiquitous Common Lisp function&lt;/a&gt; for arrays. I guess there are only so many terms to be applied. So to speak.
&lt;p&gt;
Lisp is a great vehicle for language experiments. Clojure is a vehicle for that on the JVM, specifically in the area of transactional memory and coordination via shared references. I'm not a big, big fan of this scheme so far, but I'm interested to see where it goes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-4051470771266911642?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/4051470771266911642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=4051470771266911642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4051470771266911642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4051470771266911642'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/atoms.html' title='Atoms'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1311171262531207953</id><published>2008-12-07T10:02:00.000-08:00</published><updated>2008-12-07T10:22:37.994-08:00</updated><title type='text'>Down On Main St.(ream)</title><content type='html'>&lt;p&gt;
Mark Watson &lt;a href="http://markwatson.com/blog/2008/12/haskell-it-is.html"&gt;lines them up&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
Gambit-C Scheme does have the Termite package for concurrency but something more main-stream like Scala or Haskell seemed like a better idea.
&lt;/em&gt;
&lt;/blockquote&gt;
Ouch. Maybe lisp won't be our overlord.
&lt;p&gt;
Actually Gambit does not support multiple cores in one OS process either. It has Erlang-levels for threading, and almost as good for mailboxing, but just on one CPU.
&lt;p&gt;
So then Clojure? Good bit simpler than Scala or Haskell. Much more expressive for symbolic programming as well.
&lt;p&gt;
Mark points to an impressive comparison favoring Haskell over Scala. (Assuming all things being equal.) I wonder what the learning curve is to get really good numbers for various kinds of programs in Haskell, with its laziness, etc. Especially good memory usage numbers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1311171262531207953?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1311171262531207953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1311171262531207953' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1311171262531207953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1311171262531207953'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/down-on-main-stream.html' title='Down On Main St.(ream)'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7646169852226479764</id><published>2008-12-06T21:13:00.001-08:00</published><updated>2008-12-06T21:13:12.288-08:00</updated><title type='text'>If Roundball Had Body Checking</title><content type='html'>Dwight Jaynes&amp;#39; opinion of Kevin Garnett...&lt;p&gt;&amp;quot;At some point, doesn&amp;#39;t an elbow have to be thrown? Or can&amp;#39;t you at&lt;br&gt;least hammer him on a shot attempt? This is enough to make you&lt;br&gt;appreciate hockey, where you can take care of things like this.&amp;quot;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~r/DwightJaynes/~3/477143969/yes-kevin-garnett-is-a-dog"&gt;http://feeds.feedburner.com/~r/DwightJaynes/~3/477143969/yes-kevin-garnett-is-a-dog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7646169852226479764?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7646169852226479764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7646169852226479764' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7646169852226479764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7646169852226479764'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/if-roundball-had-body-checking.html' title='If Roundball Had Body Checking'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6502283115789755259</id><published>2008-12-06T10:17:00.001-08:00</published><updated>2008-12-06T10:17:08.440-08:00</updated><title type='text'>NYC</title><content type='html'>Some really nice photos from Tim Bray of one of my favorite cities,&lt;br&gt;NYC. The photos are nice, and have a different light and angle than&lt;br&gt;the images that come to mind as inner memories...&lt;p&gt;&lt;a href="http://www.tbray.org/ongoing/When/200x/2008/12/05/Fuzzy-New-York"&gt;http://www.tbray.org/ongoing/When/200x/2008/12/05/Fuzzy-New-York&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6502283115789755259?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6502283115789755259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6502283115789755259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6502283115789755259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6502283115789755259'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/nyc.html' title='NYC'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-4884582622650718437</id><published>2008-12-04T16:34:00.000-08:00</published><updated>2008-12-05T13:10:51.460-08:00</updated><title type='text'>government-related twitter and blog directory</title><content type='html'>&lt;a href="http://newthinking.bearingpoint.com/2008/11/20/govtwit-directory/"&gt;http://newthinking.bearingpoint.com/2008/11/20/govtwit-directory/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-4884582622650718437?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/4884582622650718437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=4884582622650718437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4884582622650718437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/4884582622650718437'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/government-related-twitter-and-blog.html' title='government-related twitter and blog directory'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6398934032848000196</id><published>2008-12-03T08:42:00.001-08:00</published><updated>2008-12-03T08:42:11.468-08:00</updated><title type='text'>(loop)</title><content type='html'>&amp;quot;Clojure actually uses fewer parentheses to call java code than java code does.&amp;quot;&lt;p&gt;podcast: &lt;a href="http://podcasts.pragprog.com/2008-12/stuart-halloway-on-programming-clojure.mp3"&gt;http://podcasts.pragprog.com/2008-12/stuart-halloway-on-programming-clojure.mp3&lt;/a&gt;&lt;p&gt;Says this may be controversial to lisp programmers. Stuart obviously&lt;br&gt;has not seen the loop macro. ;-/&lt;p&gt;&lt;a href="http://www.ai.sri.com/pkarp/loop.html"&gt;http://www.ai.sri.com/pkarp/loop.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6398934032848000196?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6398934032848000196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6398934032848000196' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6398934032848000196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6398934032848000196'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/loop.html' title='(loop)'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-897309731292346282</id><published>2008-12-03T06:41:00.001-08:00</published><updated>2008-12-03T06:41:38.679-08:00</updated><title type='text'>()</title><content type='html'>Let me get this straight, just as I am acclimating myself to groovy,&lt;br&gt;the world is coming around to lisp? I&amp;#39;ll believe that when I see it.&lt;br&gt;But 10 years from now, I can imagine a programming community that&lt;br&gt;thinks nothing of the (), which is exactly how one should feel about&lt;br&gt;them.&lt;p&gt;&lt;a href="http://www.dehora.net/journal/2008/12/02/qotd-mock-objects/"&gt;http://www.dehora.net/journal/2008/12/02/qotd-mock-objects/&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.innoq.com/blog/st/2008/12/languages.html"&gt;http://www.innoq.com/blog/st/2008/12/languages.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-897309731292346282?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/897309731292346282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=897309731292346282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/897309731292346282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/897309731292346282'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/blog-post.html' title='()'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-205575121518276968</id><published>2008-12-02T07:47:00.000-08:00</published><updated>2008-12-02T08:28:00.383-08:00</updated><title type='text'>The Transition is Over?</title><content type='html'>&lt;p&gt;
Has there ever been a presidential transition where the outgoing president has so completely disappeared, and the president-elect has so early-on assumed such a presidential presence? Not that I am complaining, because I believe the incoming administration to be more capable. But it seems that if a Mumbai-like attack or a significant-enough non-violent event were to occur in the US between now and Jan 20, who would America expect to see at the presidential podium? Could it cause a constitutional crisis of its own? 
&lt;p&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5z6fTLf3laY&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/5z6fTLf3laY&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-205575121518276968?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/205575121518276968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=205575121518276968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/205575121518276968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/205575121518276968'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/transition-is-over.html' title='The Transition is Over?'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-849710478699971641</id><published>2008-12-02T06:20:00.001-08:00</published><updated>2008-12-02T06:20:55.654-08:00</updated><title type='text'>Best Groovy Book So Far</title><content type='html'>&lt;a href="http://groovygrailsrecipes.com/"&gt;http://groovygrailsrecipes.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-849710478699971641?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/849710478699971641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=849710478699971641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/849710478699971641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/849710478699971641'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/best-groovy-book-so-far.html' title='Best Groovy Book So Far'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-7995834304269816056</id><published>2008-12-02T05:07:00.000-08:00</published><updated>2008-12-02T05:10:01.208-08:00</updated><title type='text'>Monday the 8th at pdxfunc</title><content type='html'>&lt;p&gt;
pdxfunc &lt;a href="http://calagator.org/events/1250456023"&gt;is meeting Dec. 8 at CubeSpace&lt;/a&gt;...
&lt;blockquote&gt;
&lt;em&gt;
Jim Blandy will present trace-based just-in-time compilation techniques, how they're being used in his work at Mozilla with the SpiderMonkey JavaScript implementation, and how these can be applied to functional programming languages. Jim is a contributor to GNU Emacs, Guile, GDB, GLIBC, Mozilla SpiderMonkey, Subversion, and others.
&lt;p&gt;
Julian Blake Kongslie will present his efforts in implementing modern state-based search using Haskell. He'll discuss the problems of search in FP in general and/or how he implemented his present solution. Julian is a graduate student at Portland State University, and author of the Chortl register-transfer language and Riviera continuation-based web framework.
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-7995834304269816056?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/7995834304269816056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=7995834304269816056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7995834304269816056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/7995834304269816056'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/monday-8th-at-pdxfunc.html' title='Monday the 8th at pdxfunc'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-230352131703797076</id><published>2008-12-01T15:30:00.001-08:00</published><updated>2008-12-01T15:30:05.078-08:00</updated><title type='text'>Another Smalltalk in Flash</title><content type='html'>&lt;a href="http://blog.smoaktalk.com/2008/07/simple-smalltalk-interpreter-in-flash.html"&gt;http://blog.smoaktalk.com/2008/07/simple-smalltalk-interpreter-in-flash.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-230352131703797076?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/230352131703797076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=230352131703797076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/230352131703797076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/230352131703797076'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/another-smalltalk-in-flash.html' title='Another Smalltalk in Flash'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-6867983862844271431</id><published>2008-12-01T14:13:00.001-08:00</published><updated>2008-12-01T14:13:30.745-08:00</updated><title type='text'>WiMax in PDX - you can order it now</title><content type='html'>The web site is up to check availability of, and place an order for,&lt;br&gt;WiMax (&amp;quot;mobile broadband&amp;quot;) in the PDX area. Retail locations to open&lt;br&gt;early in 2009.&lt;p&gt;&lt;a href="http://blog.oregonlive.com/siliconforest/2008/12/clearwire_coming_to_pdx_this_m.html"&gt;http://blog.oregonlive.com/siliconforest/2008/12/clearwire_coming_to_pdx_this_m.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-6867983862844271431?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/6867983862844271431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=6867983862844271431' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6867983862844271431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/6867983862844271431'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/wimax-in-pdx-you-can-order-it-now.html' title='WiMax in PDX - you can order it now'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-1513354523624256892</id><published>2008-12-01T12:23:00.001-08:00</published><updated>2008-12-01T12:23:34.833-08:00</updated><title type='text'>Too much information</title><content type='html'>Interesting bit on C#&amp;#39;s LINQ and C#&amp;#39;s &amp;quot;Dynamic Typing&amp;quot; having too much&lt;br&gt;information at compile-time and not enough at run-time...&lt;p&gt;&lt;a href="http://www.infoq.com/news/2008/11/CSharp-LINQ-DLR"&gt;http://www.infoq.com/news/2008/11/CSharp-LINQ-DLR&lt;/a&gt;&lt;p&gt;What&amp;#39;s interesting is that none of this is interesting in simpler languages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-1513354523624256892?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/1513354523624256892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=1513354523624256892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1513354523624256892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/1513354523624256892'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/too-much-information.html' title='Too much information'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-9090716184606482849</id><published>2008-12-01T12:17:00.001-08:00</published><updated>2008-12-01T12:17:53.752-08:00</updated><title type='text'>Winter Coders' Social II - Tuesday, December 9th, 7-10pm, CubeSpace</title><content type='html'>from pdxfunc...&lt;p&gt;&lt;a href="http://calagator.org/events/1250456151"&gt;http://calagator.org/events/1250456151&lt;/a&gt;&lt;p&gt;Last December, many of the local software developer User Groups banded&lt;br&gt;together and had a party (instead of the regular meetings). It was known&lt;br&gt;as the Winter Coders Social. In August, we had a Summer Coder&amp;#39;s Social&lt;br&gt;as the outdoor and sunny successor!&lt;p&gt;Now, we&amp;#39;re having a second Winter Coders&amp;#39; Social. Good and geeky times&lt;br&gt;will be had by all. Come join us.&lt;p&gt;Bring yourself, games if you have them, and a dish to share.&lt;p&gt;Food:&lt;br&gt;Some beverages will be provided.&lt;br&gt;Potluck signup: &lt;a href="http://tinyurl.com/coders-social-potluck-form"&gt;http://tinyurl.com/coders-social-potluck-form&lt;/a&gt;&lt;br&gt;Current potluck list: &lt;a href="http://tinyurl.com/coders-social-potluck-list"&gt;http://tinyurl.com/coders-social-potluck-list&lt;/a&gt;&lt;p&gt;Fun:&lt;br&gt;We&amp;#39;ll be playing games, like last year, so bring &amp;#39;em!&lt;p&gt;There will be a programming competition! Any language welcome, no&lt;br&gt;particular toolkits or api skills necessary. These&amp;#39;ll be problems that&lt;br&gt;just require thought. If enough of you are interested and bring a&lt;br&gt;language that you&amp;#39;re only vaguely familiar with, we&amp;#39;ll have a separate&lt;br&gt;league for language newbies. Prizes? Bragging rights! Plus a surprise&lt;br&gt;or two.&lt;p&gt;Hope to see you there!&lt;p&gt;P.S.: We will need a cleanup crew immediately following the party; if&lt;br&gt;you don&amp;#39;t have to split right away, we&amp;#39;d appreciate your help. :)&lt;p&gt;&lt;br&gt;--~--~---------~--~----~------------~-------~--~----~&lt;br&gt;For more options, visit this group at&lt;br&gt;&lt;a href="http://groups.google.com/group/pdxfunc?hl=en"&gt;http://groups.google.com/group/pdxfunc?hl=en&lt;/a&gt;&lt;br&gt;-~----------~----~----~----~------~----~------~--~---&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-9090716184606482849?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/9090716184606482849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=9090716184606482849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/9090716184606482849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/9090716184606482849'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/winter-coders-social-ii-tuesday.html' title='Winter Coders&apos; Social II - Tuesday, December 9th, 7-10pm, CubeSpace'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-2215129580618620746</id><published>2008-12-01T12:13:00.001-08:00</published><updated>2008-12-01T12:13:52.246-08:00</updated><title type='text'>Geek Meets Art, Dec. 7, PDX</title><content type='html'>&amp;quot;DorkbotPDX brings you Collin Oldham, Shelly Farnham and Steve Davee&lt;p&gt;Come join us for an evening of geek meets art. The fine folks at&lt;br&gt;AboutUs will be hosting us for this event, which takes place December&lt;br&gt;7th at 6PM. AboutUs is located at 107 SE Washington St, Suite 520.&lt;p&gt;The event is free and open to the public. Feel free to bring snacks&lt;br&gt;and drinks to share. Please spread the word!&amp;quot;&lt;p&gt;&lt;a href="http://dorkbotpdx.org/wiki/dorkbotpdx_0x02"&gt;http://dorkbotpdx.org/wiki/dorkbotpdx_0x02&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-2215129580618620746?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/2215129580618620746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=2215129580618620746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2215129580618620746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/2215129580618620746'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/geek-meets-art-dec-7-pdx.html' title='Geek Meets Art, Dec. 7, PDX'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5135517.post-3458403899650171316</id><published>2008-12-01T12:10:00.001-08:00</published><updated>2008-12-01T12:10:13.431-08:00</updated><title type='text'>Emacs and Clojure</title><content type='html'>Bill Clementson&amp;#39;s got some useful info for using Emacs for Clojure...&lt;p&gt;&lt;a href="http://bc.tech.coop/blog/081118.html"&gt;http://bc.tech.coop/blog/081118.html&lt;/a&gt;&lt;br&gt;&lt;a href="http://bc.tech.coop/blog/081120.html"&gt;http://bc.tech.coop/blog/081120.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5135517-3458403899650171316?l=patricklogan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://patricklogan.blogspot.com/feeds/3458403899650171316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5135517&amp;postID=3458403899650171316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3458403899650171316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5135517/posts/default/3458403899650171316'/><link rel='alternate' type='text/html' href='http://patricklogan.blogspot.com/2008/12/emacs-and-clojure.html' title='Emacs and Clojure'/><author><name>Patrick Logan</name><uri>http://www.blogger.com/profile/02088461489050417591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
