<?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-5701472857373132787</id><updated>2011-07-08T05:47:14.531-04:00</updated><title type='text'>The Loki Project</title><subtitle type='html'>he Loki Project is an effort to investigate the feasibility of compiling the Beta language into the Java language, with the hope of eventually producing an implementation.  I have concluded that with some work the effort is feasible: everything that Beta does, Java can somehow manage.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lokibeta.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lokibeta.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>John Cowan</name><uri>http://www.blogger.com/profile/11452247999156925669</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>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5701472857373132787.post-5180032309485954268</id><published>2010-04-30T12:47:00.000-04:00</published><updated>2010-04-30T12:47:02.675-04:00</updated><title type='text'>Simple Attributes</title><content type='html'>Each Beta pattern declares zero or more attributes, which correspond to class members in other OO programming languages, but are more general.  This paper describes the Java implementations of enclosed patterns and static and dynamic references.  Variable-pattern declarations, repetitions, and virtual patterns are discussed elsewhere.&lt;br /&gt;&lt;br /&gt;A pattern declared within another pattern is represented by a Java inner class.  Thus the Beta syntax:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Foo: (#&lt;br /&gt;  Bar: (# ... #)&lt;br /&gt;#)&lt;/pre&gt;&lt;br /&gt;is represented as:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class Foo {&lt;br /&gt;  public class Bar {&lt;br /&gt;  ...&lt;br /&gt;  };&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The Beta superpattern, if present, is declared as a Java superclass.  Note, however, that Beta patterns without a specified superpattern do not extend java.lang.Object, but rather the Beta pattern called &lt;code&gt;Object&lt;/code&gt; (which, considered as a Java class, extends &lt;code&gt;java.lang.Object&lt;/code&gt; like all other Java classes).  This must be explicitly declared in the Java code.&lt;br /&gt;&lt;br /&gt;Static and dynamic references are implemented as instance variables.  Unlike other implementations of Beta, static references are not physically incorporated into the pattern to which they belong.  (At least, not as far as Java source code is concerned.  Java compilers are hypothetically free to do so if they can prove that no user-visible changes result.)  The only difference in the two Java declarations is that static references are declared &lt;code&gt;final&lt;/code&gt;, which tells the Java compiler that their values never change.  The value is automatically initialized by an appropriate expression (see below).  Dynamic references do not have initializers, and are automatically set by Java to &lt;code&gt;null&lt;/code&gt; (the Java equivalent of "none").&lt;br /&gt;&lt;br /&gt;The exact form of the initializer of a static expression depends on the form of the ObjectDescriptor that declares it.  If there is no superpattern, then the form is &lt;code&gt;new beta.Object() { ... }&lt;/code&gt; where &lt;code&gt;...&lt;/code&gt; is the compiled content of the &lt;code&gt;(# ... #)&lt;/code&gt;, a Java anonymous class.  If there is a superpattern, and it is a local (non-remote) reference, then &lt;code&gt;new PatternName() { ... }&lt;/code&gt; results.  However, if the superpattern is remote, then Java requires a more complex construction.  The Beta form:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Foo: (#&lt;br /&gt;  Bar: A.B.C (# ... #)&lt;br /&gt;#)&lt;/pre&gt;&lt;br /&gt;appears as:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class Foo {&lt;br /&gt;  public A.B.C Bar = new A().new B().new C() { ... };&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The form "new A.B.C()" will not compile.&lt;br /&gt;&lt;br /&gt;If there is no MainPart of the ObjectDescriptor (no &lt;code&gt;(# ... #)&lt;/code&gt; portion), then the class contents within the braces, as well as the braces themselves, are simply omitted.&lt;br /&gt;&lt;br /&gt;These rules for instantiation are required not only for static attributes, but also for explicit instantiation with the &lt;code&gt;"&amp;amp;&lt;/code&gt; operator, and for implicit instantiation (a so-called "inserted object").&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5701472857373132787-5180032309485954268?l=lokibeta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lokibeta.blogspot.com/feeds/5180032309485954268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lokibeta.blogspot.com/2010/04/simple-attributes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default/5180032309485954268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default/5180032309485954268'/><link rel='alternate' type='text/html' href='http://lokibeta.blogspot.com/2010/04/simple-attributes.html' title='Simple Attributes'/><author><name>John Cowan</name><uri>http://www.blogger.com/profile/11452247999156925669</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-5701472857373132787.post-7655414269892586963</id><published>2010-04-30T12:35:00.000-04:00</published><updated>2010-04-30T12:35:36.859-04:00</updated><title type='text'>Lexical issues</title><content type='html'>Loki requires a systematic means of mapping Java identifiers to Beta. &amp;nbsp;This must provide each Beta identifier with a unique Java mapping, while&amp;nbsp;still providing a rich space of Java identifiers reserved to the Loki&amp;nbsp;implementation. &amp;nbsp;Some reserved identifiers belong directly to the&amp;nbsp;implementation; others are generated by the Loki compiler from Beta&amp;nbsp;source. &amp;nbsp;These must not overlap.&lt;br /&gt;&lt;br /&gt;The general principle is that every Beta identifier is translated into&amp;nbsp;an identical Java identifier as far as possible. &amp;nbsp;Thus the mapping for&amp;nbsp;the identifier "Beta" is "Beta", and for the identifier "Java" is&amp;nbsp;"Java". &amp;nbsp;However, to provide the space of reserved identifiers, the&amp;nbsp;following systematic change is made: &amp;nbsp;Any Beta identifier ending with an&amp;nbsp;underscore has an additional underscore appended. &amp;nbsp;Thus the mapping for&lt;br /&gt;"Beta_" is "Beta__".&lt;br /&gt;&lt;br /&gt;As a result, every mapped Beta identifier ends either with zero&amp;nbsp;underscores or with two or more underscores. &amp;nbsp;Every Java identifier&amp;nbsp;ending with a single underscore is reserved to the implementation. &amp;nbsp;Of&amp;nbsp;these, those ending with a Latin capital letter are reserved for&amp;nbsp;compiler-generated code. &amp;nbsp;Thus "Beta_" would be reserved for the&amp;nbsp;implementation, and "BetaA_", "BetaB_", ... &amp;nbsp;"BetaZ_" would be reserved&amp;nbsp;for generated code. &amp;nbsp;Each such capital letter represents a distinct&amp;nbsp;group of generated names: &amp;nbsp;thus, "TestM_" would represent the name of&amp;nbsp;the method associated with the name "Test", if "M" were the suffix&amp;nbsp;reserved for method names. &amp;nbsp;(It is.)&lt;br /&gt;&lt;br /&gt;Beta identifiers are case-blind, whereas Java identifiers are&amp;nbsp;case-sensitive. &amp;nbsp;It is necessary, therefore, to have a systematic case&amp;nbsp;rule when generating Java identifiers. &amp;nbsp;Since Beta programmers may use&amp;nbsp;casing to convey human-readable information, the rule is to preserve the casing that&amp;nbsp;appeared when the Beta identifier was defined (any language construct&amp;nbsp;where the identifier is followed by a colon). &amp;nbsp;For comparison purposes&amp;nbsp;within Loki, however, the identifier is stored in a fully lowercase&amp;nbsp;format, since Unicode provides many lowercase letters without an&amp;nbsp;uppercase equivalent.&lt;br /&gt;&lt;br /&gt;The following (case-blind) Beta identifiers, plus any&amp;nbsp;identifier ending in "exception" or "error", need to be given an&amp;nbsp;idiosyncratic mapping, since they have uses within Java that cannot or&amp;nbsp;should not be overridden. &amp;nbsp;These are the defined keywords and literals&amp;nbsp;of Java, the classes of package java.lang, and the methods of class&amp;nbsp;java.lang.Object. &amp;nbsp;The mapping is to append "\u03b2_" to them. &amp;nbsp;(This&amp;nbsp;\u03b2 is GREEK SMALL LETTER BETA.)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;abstract &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; false &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;notifyall &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized&lt;br /&gt;boolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;null &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; system&lt;br /&gt;break &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finalize &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; number &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; thread&lt;br /&gt;byte &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; finally &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;object &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; threaddeath&lt;br /&gt;case &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;package &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;threadgroup&lt;br /&gt;catch &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getclass &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw&lt;br /&gt;char &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; process &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throwable&lt;br /&gt;character &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hashcode &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; protected &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws&lt;br /&gt;class &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;implements &amp;nbsp; &amp;nbsp; &amp;nbsp; public &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tostring&lt;br /&gt;classloader &amp;nbsp; &amp;nbsp; &amp;nbsp;import &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; transient&lt;br /&gt;clone &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;instanceof &amp;nbsp; &amp;nbsp; &amp;nbsp; runnable &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; true&lt;br /&gt;cloneable &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;runtime &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try&lt;br /&gt;compiler &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; integer &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;securitymanager &amp;nbsp;void&lt;br /&gt;const &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;interface &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;short &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;volatile&lt;br /&gt;continue &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; long &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wait&lt;br /&gt;default &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;math &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while&lt;br /&gt;double &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; native &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stringbuffer&lt;br /&gt;equals &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super&lt;br /&gt;extends &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;notify &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch &lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5701472857373132787-7655414269892586963?l=lokibeta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lokibeta.blogspot.com/feeds/7655414269892586963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lokibeta.blogspot.com/2010/04/lexical-issues.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default/7655414269892586963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default/7655414269892586963'/><link rel='alternate' type='text/html' href='http://lokibeta.blogspot.com/2010/04/lexical-issues.html' title='Lexical issues'/><author><name>John Cowan</name><uri>http://www.blogger.com/profile/11452247999156925669</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-5701472857373132787.post-1396113903768754680</id><published>2010-04-30T12:32:00.000-04:00</published><updated>2010-04-30T12:32:19.913-04:00</updated><title type='text'>Character Sets</title><content type='html'>The character set used for Java programming is Unicode. &amp;nbsp;The Mjolner compiler allows&amp;nbsp;only ASCII characters. &amp;nbsp;The ASCII character set is embedded in Unicode,&amp;nbsp;as is the Latin-1 (ISO 8859-1) character set, so that upward&amp;nbsp;compatibility is maintained. &amp;nbsp;This allows non-English-speaking&amp;nbsp;programmers to write identifier names, comments, and text strings&amp;nbsp;belonging to their own languages. &amp;nbsp;Loki will extend this ability to Beta&amp;nbsp;programmers as well. &amp;nbsp;A trivial change to the Mjolner compiler (not&amp;nbsp;involving extending it to Unicode!) will permit easy interchange between&amp;nbsp;Mjolner and Loki Beta programs.&lt;br /&gt;&lt;br /&gt;The Java compiler accepts programs in one of two transformation formats:&amp;nbsp;UTF-8 and Unicode escape mode. &amp;nbsp;Both of these have the useful property&amp;nbsp;that ASCII characters are represented by themselves, so that ASCII-only&amp;nbsp;programs are immediately compatible. &amp;nbsp;UTF-8 is sufficiently documented&amp;nbsp;elsewhere , and I will simply say that Loki&amp;nbsp;will accept it.&lt;br /&gt;&lt;br /&gt;Unicode escape mode is more interesting. &amp;nbsp;Most characters outside the&amp;nbsp;ASCII range is represented by an escape sequence "\uxxxx" where "xxxx" is four&amp;nbsp;hexadecimal digits. &amp;nbsp;(Some characters are represented by two consecutive escape sequences.) &amp;nbsp;These sequences are interpreted immediately on&amp;nbsp;reading in the source code, and thus they may be used anywhere: in&amp;nbsp;identifiers, comments, or strings. &amp;nbsp;It is legal in Java to use values of&amp;nbsp;"xxxx" that represent an ASCII character (0000-007f), but I propose to&amp;nbsp;forbid this usage in Beta code. &amp;nbsp;To the Java compiler, "\u002c" is&amp;nbsp;equivalent to a comma in every way: it can be used to separate arguments&amp;nbsp;in a method call or for any other purpose. &amp;nbsp;This usage makes for nothing&amp;nbsp;but confusion to the reader.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5701472857373132787-1396113903768754680?l=lokibeta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lokibeta.blogspot.com/feeds/1396113903768754680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lokibeta.blogspot.com/2010/04/character-sets.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default/1396113903768754680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default/1396113903768754680'/><link rel='alternate' type='text/html' href='http://lokibeta.blogspot.com/2010/04/character-sets.html' title='Character Sets'/><author><name>John Cowan</name><uri>http://www.blogger.com/profile/11452247999156925669</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-5701472857373132787.post-2580840362319455194</id><published>2010-04-30T12:28:00.000-04:00</published><updated>2010-04-30T12:28:54.529-04:00</updated><title type='text'>Introduction</title><content type='html'>The purpose&amp;nbsp;of the Loki Project, which this blog documents, is to provide a&amp;nbsp;compiler and support classes for translating Beta into the Java&amp;nbsp;language. &amp;nbsp;Although Beta and Java are very different languages in syntax&amp;nbsp;as well as semantics, Java is flexible enough that compiling Beta into&amp;nbsp;it does not seem an utterly impossible proposition.&lt;br /&gt;&lt;br /&gt;The Loki Papers, when complete, will serve as a specification of such a&amp;nbsp;compiler. &amp;nbsp;Obviously, there's more than one way to do it: &amp;nbsp;these papers&amp;nbsp;reflect only my personal views. &amp;nbsp;When I say "Loki does this" or "Loki&amp;nbsp;will have that", that is only for conciseness.&lt;br /&gt;&lt;br /&gt;I do not have the resources to actually write and deliver Loki to the&amp;nbsp;astonished world. &amp;nbsp;I wish I did. &amp;nbsp;However, I am hoping that someone with&amp;nbsp;the necessary time will be able to make a stab at a real implementation. &amp;nbsp;Such an effort should be open source, available under either the GNU&amp;nbsp;Public License or one of the other standard licenses. &amp;nbsp;Obviously, a closed-source&amp;nbsp;implementation is also possible, and I cannot prevent it.&lt;br /&gt;&lt;br /&gt;I will assume a fair knowledge of Java.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5701472857373132787-2580840362319455194?l=lokibeta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lokibeta.blogspot.com/feeds/2580840362319455194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lokibeta.blogspot.com/2010/04/introduction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default/2580840362319455194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5701472857373132787/posts/default/2580840362319455194'/><link rel='alternate' type='text/html' href='http://lokibeta.blogspot.com/2010/04/introduction.html' title='Introduction'/><author><name>John Cowan</name><uri>http://www.blogger.com/profile/11452247999156925669</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>
