<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>Arete</title>
      <link>http://blog.lib.umn.edu/saintx/arete/</link>
      <description></description>
      <language>en</language>
      <copyright>Copyright 2009</copyright>
      <lastBuildDate>Wed, 31 Oct 2007 17:57:55 -0600</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=4.25</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <item>
	
         <title>Refining the Bravo Core</title>
         <description><![CDATA[<p>When I started working on the Bravo core this February, I had only the vaguest concept of how a modal logic platform would behave, and any aporetic concerns occupied a distant second place in my limited attention span.  I was surprised, and still am, how unified the concerns of building a modal logic and an aporetics platform have been.</p>

<p>The key concepts that allowed me to fuse these concerns and make progress in either of them only through making progress in each, was that of the contradiction.</p>

<p>The Java language and all programming languages which I have had dealings with thus far do not encapsulate the concept of a logical contradiction as an element of the language.  For most practical concerns that we are taught in programming classes, the languages needn't do so.  However, in logic the concept of a contradiction is one of absolute importance, because of its innate relationship to truth and falsehood.</p>

<p>Just about any program you can write ultimately needs to make binary choices of how it proceeds, depending on the circumstances of its environment.  The behavioral complexity of most programs are usually constrained by the variations in data, and the relationships between your conditional expressions is "taken for granted" by the program.  In other words, the programming language and compiler usually trust that you know what you are doing.</p>

<p>This is reasonable, because when you write software code you do so in the context of your program's internals.  The relationships are evident to the programmer, because they're kept in that programmer's short term memory (attention).  OOP constructs and other techniques are used to create abstraction barriers that shield the programmer from the complexity of having to know how everything works, and the logic is free to become more complex as a result of these encapsulation barriers.</p>

<p>However, encapsulation barriers necessarily permit and in some cases even encourage reproduction of software code, and ultimately of decision making logic.  The result of this relationship between encapsulation and executive logic duplication is that the executive logic becomes fixed and very difficult to change.  Arguably, better software architecture and finer-grained class libraries could mitigate this problem.  However, in languages like Java,  the entire environment within which a conditional expression might draw its path of action must be passed around because of the inability to pass the expression itself using a lambda-like semantic common to Scheme and JavaScript.  The architectural acrobatics necessary to place a conditional expression within a meaningful environmental context to secure a dependable and sufficiently complex result does not lend itself well to most modern programming languages.</p>

<p>And so, conditional expressions are littered throughout a program's structure, duplicated in different classes, and difficult or impossible to locate or update in a timely manner.  Worse, these factors combine to obscure any meaningful relationship that might exist <em>between</em> the conditional expressions, and the very notion of this level of relational analysis is usually left to runtime debugging and long-term software maintenance.</p>

<p>The Arete rule engine addresses all of the issues enumerated above in a variety of ways.  First, it provides a robust way to decouple the structure of conditional expressions and logical behavior of a program from the environment within which these expressions must operate.  It does this by inverting the relationship between data and logic.  In elementary programs, logical code runs in the context of a data-rich environment.  In the Arete rule engine, the logical code is broken down into a type of data itself, and is recombined in response to the needs of the environment, <em>as indicated by the original environmental facts, and the rule developers analysis of the relationship between these facts and the logical responses to them</em>.  Because complex conditional expressions can be reconstructed from more primitive elements in this simulated way, Arete encourages an even greater degree of code reuse than can be easily gotten inside of a simple Object-Oriented mechanism.</p>

<p>A secondary benefit of this large level of code reuse is the ability to analyze the relationships between our pieces of logic.  We can now construct complex implication trees with much less code, and even begin to help the developer pinpoint logical contradictions in the subtle relationships that exist between our conditional expressions.  This in turn leads to metarelational analysis which can identify maximally consistent subsets of rule assertions, and even automated aporetic resolution strategies.</p>

<p>But all of this aporetic functionality requires the simple concept of a "contradiction" taking primacy to concepts of "truth" and "falsehood" within the context of the engine environment.</p>

<p>It is not difficult to write a simple rule engine that does nothing more than help you decompose and recombine conditional expressions, but the many benefits of this granularity cannot be realized without the ability to draw relations and implications from your rule declarations.</p>

<p>So, this is the present course of R&D on the Arete project.  I am implementing a fully aporetics-capable modal logic platform, based on previous experiences with rule engineering and my early success with Arete's Alpha Core.  The second engine core will not replace, but instead complement and refine the workings of the first engine core.  Arete's architecture permits me to create multiple operation centers that each do specialized variants of the heavy lifting, depending on what the developer needs.  The software in the alpha-06 release is really just a very limited proof-of-concept for a rapidly evolving platform.</p>

<p>I'm trying at each turn to make sure that my architecture is theoretically grounded and that I'm not writing myself into a corner.  I'd like to be able to support <strong>intensional semantics</strong> and <strong>possible worlds syntax</strong>, which are really necessary for any useful Alethic or Tense logic implementation.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/10/refining_the_bravo_core.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/10/refining_the_bravo_core.html</guid>
         <category>Modal Logic</category>
         <pubDate>Wed, 31 Oct 2007 17:57:55 -0600</pubDate>
      </item>
      
      <item>
	
         <title>Researching the &quot;bravo core&quot;</title>
         <description><![CDATA[<p>It's been a long, fine summer and autumn, and working on the Arete rule engine has been a lot of fun and a great challenge.  Most nights it's all I can do to make dinner and try to get in a few hours of coding before sleep and preparations for the day job beckon.  Weekends at the library, camped out somewhere with a WAN and power outlet and not too much noise is usually the only chance I have to get any serious work done.  Much less blogging.</p>

<p>So, the result is that I have made more advancements in the Arete and CORM projects than I have shared with the public.</p>

<p>The first, and most significant advancement has been the purchase of $750 worth of server and network hardware, and the installation and hardening of the Solaris 10 OS on these machines.  I had to teach myself Solaris administration, which was not trivial.  Establishing the machines on the network in a secure manner was also not trivial.  I registered a domain and set up port forwarding so that I could access these machines remotely, not without help and encouragement from Catharine.</p>

<p>Then, two weeks ago, I made the most important upgrade to the system to date.  This was the purpose of the entire hardware and system setup.</p>

<p>I installed Subversion on my Solaris server.</p>

<p>Now Catharine and I can work on our three projects in truly collaborative terms.  </p>

<p>As an aside, I have fought for a long time to get SVN at the University of Minnesota, but there is no funding at the University of Minnesota for Open Source research and development.  They like to use the software, but don't have the organizational vision to foster a developer community here.  At least not in the Office of Information Technology. </p>

<p>I hold out hope that the Institute of Technology could pick up the torch on this and move it forward.  I know the students are interested, but I don't know whether the departments have any idea how to integrate the Open Source methods with their classroom instructional methods.  I'm taking two computer science classes this autumn (nothing glorious, but rather reclaiming a bit of dignity on my transcript from early years when I was working to support myself as an undergrad and underperforming in college), and I can see how using standardized unit testing frameworks would really ease the lives of the TAs in the computer science departments.  If there were a central directory for people to upload their packaged code, the TAs could effectively grade by running standard tests against student's homework assignment code, which would precisely mirror the method we use in Open Source: implement the test code.  You're done when my tests run.</p>

<p>/end rant</p>

<p>The result of all this effort is a new sense of acceleration in R&D.  In particular, CORM is getting a lot of my attention in the last three weeks.  I've been absolutely <strong>amazed</strong> by the discovery of the <a href="http://jscience.org">JScience.org</a> project, and immediately moved to integrate it into the CORM project, as it implements the entire quantity pattern much better than Arlow recommended, and does a decent first shot at the Money archetype pattern.</p>

<p>The most drastic changes I've made to my plans for the CORM project have been completely scrapping the Rules archetype pattern and moving to implement the rules in Arete.  I think that Arlow's model fails to respect certain inversion of control principles that help us test and write good code.  As such, we've inverted the paradigm and decided that CORM will remain a purely passive data storage model.  All business logic will be implemented in a rule container, and the CORM objects will reside within that container and under its management.</p>

<p>But none of this is why I'm writing today.  Today I'm writing to introduce the second official engine core of the Arete project.  The first engine core was appropriately called "Alpha", and I'm calling the second logic core "Bravo".  The Bravo Core implements the foundation for both a modal logic platform and for a real Aporetic analysis platform.  The purpose of an aporetics platform is to analyze relationships between rules and find the subtle contradictions that arise in our short-sighted implementations, then to employ  resolution strategies to isolate and resolve these apories.</p>

<p>The basis of such a system is a simple implementation of "K", Kripke's logic.  In "K" I made the concept of <em>Contradiction</em> primary to that of boolean truth within the context of the Bravo Core, and by doing so managed to disconnect the imperative structure of Java from that of my rule assertions.  In other words, truth and falsehood are no longer merely boolean values in the system, but are  <em>conditions for contradiction</em>.  The system will allow you to declare something to be true, and a second later to declare it to be false, but will throw a Contradiction to alert you to the discontinuity in your logic.  This replaces the standard behavior of <em>assignment operators</em> in modern programming languages.</p>

<p>Anyway, I tagged a release today.  Finally.  It's at the Arete Download page.</p>

<p>Example code is limited to test classes right now, but the Bravo Core is fully tested and operational.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/10/researching_the_bravo_core.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/10/researching_the_bravo_core.html</guid>
         <category>Modal Logic</category>
         <pubDate>Sat, 27 Oct 2007 10:15:00 -0600</pubDate>
      </item>
      
      <item>
	
         <title>The plausibility corruption principle as an aporetic strategy</title>
         <description><![CDATA[<p>The last week of development has been consumed with implementing various aspects of K, a propositional logic system popularized by Saul Kripke.  However, mine is no simple implementation, but involves a distinction in the logic core between the retraction of a declaration, and the negation of a declaration.  Consider if we declared the following two hypotheses into the engine core:</p>

<p>&alpha;: A --&gt; B<br />
&beta;: B --&gt; C</p>

<p>Both of these conditional statements are related in an easily determined way: the <em>apodosis</em> of &alpha; is the <em>protasis</em> of &beta;.  If both of these are declared in the core, the core can automatically determine the implication that:</p>

<p>&gamma;: A --&gt; C</p>

<p>This is clearly a reasonable implication.  The goal is that our user should be able to declare:</p>

<p>&delta;: ~(A --&gt; C)</p>

<p>And cause a contradiction to occur in the core.  But suppose they did not declare &delta;  Suppose instead they <em>retracted</em> &gamma; explicitly.  By implication, either &alpha; or &beta; would also need to be retracted by the engine core.  How does the engine decide which one to retract?</p>

<p>Because this does not involve negation, we cannot opt for a simple disjunctive solution.  At this point we are no longer in the realm of mere propositional logic.  We have officially entered the realm of aporetics, which focuses on apory (paradox) resolution strategies.  The grey ground here comes partially from our distinction between <em>negation</em> and <em>retraction</em>.  A declaration of A is a positive assertion which can be altered in one of two ways.  Either we can contradict the original declaration and say "~A" and cause a logical paradox in the system, or we can simply retract the original declaration.  The retraction still allows for the possibility of "A", and constitutes a sort of clean slate.</p>

<p>Negation, by contrast, is a positive declaration in the following form:</p>

<p>&eta: A --&gt; !</p>

<p>This reads "If A, then there exists a contradiction".  The difference between a naive logical negation using boolean operators in Java and this concept of active contradiction is that the latter doesn't permit unacknowledged change in the logical tenets of the system.  You cannot declare "A" and a minute later declare "not A", thus overwriting your initial assertion.  This is because "not A" might be the unforseen consequence of a complicated set of rules.  While this is harmless in an imperative logical environment such as Java, the proper way to deal with negation in a declarative platform is to explicitly declare something to be the condition for a contradiction in the system, and then use standard exception handling to initiate one or more aporetic strategies at runtime.</p>

<p>It might be that the distinction between retraction and negation is lost in text books because so many texts are trying to communicate the absolutely basic relationships between different axioms and arguments.  But in the real world, the world of practice, people and machines are busy declaring truths, contradicting themselves, catching their errors and, unless they're simple ideologues, retracting their earlier declarations.  The aporetic process is so second nature to us that we've rarely afforded ourselves the opportunity to give it a name.  And, while examples in text do not lend themselves well to retraction--for how do you retract a written statement?--today's logical workbench gives us every opportunity to do so.</p>

<p>So, what strategy will we use for resolving the above paradox?  One strategy involves maximally consistent subsets, and the other involves assigning plausibility values to all declarations.  A combination of these is likely what I will use.  These plausibility values will be explicitly determined by the operator as the lattice of logical declarations is framed.  The most immediate challenges to completing the implementation of this feature revolves around determining the plausibility of implications, a topic that was not covered in books on aporetics which the author has yet read.</p>

<p>My instinct is to play upon a variant of the "truth corruption" principle that I currently use in logic.  The truth corruption principle states that if any part of the logical statement is false, the truth of the statement is corrupted entirely.  <em>Within every lie may lie a truth / But truths may never be composed of lies.</em>  A variant of this, the "plausibility corruption" principle might state that the plausibility value of an implied declaration is never greater than that of its least plausible implicative.  An implication's implicatives are those declarations whose contextual relationship directly led to its inclusion in the latticework of logical statements.</p>

<blockquote><em>As an aside, I wasn't kidding about creating that ontology--I don't even like the word 'ontology'-- but my esteemed friend Mr. Bringman convinced me that it ranked among my major obstacles in creating this engine and the community around it.  I promise that these terms will all be explained in a glossary of terms soon.  I'll even add that task to the JIRA.</em></blockquote>

<p>There must be distinct types of implicative relationship, then.  Some implications are bidirectional, tautological, unidirectional, and can involve other implications.  It is this implicative latticework that lies at the heart of a real analytics framework.  It informs analysis but also distinguishes a truly declarative system from the imperative bias of all modern logical computing languages.</p>

<p>More on this implementation as it unfolds.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/05/the_plausibility_corruption_pr.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/05/the_plausibility_corruption_pr.html</guid>
         <category>Declarative Logic</category>
         <pubDate>Wed, 23 May 2007 17:01:49 -0600</pubDate>
      </item>
      
      <item>
	
         <title>Work on the new modal logic core is underway</title>
         <description><![CDATA[<p>Now that the project structure overhaul is done, I can focus my attention on the modal logic core.  My first steps in this arena are wobbly, as they involve a complete overhaul of the core algorithms that undergird our system, and even a reevaluation of the API terminology.</p>

<p>Before I can instantiate an alethic system, I must first determine the core architecture of an extensible propositional logic language, based on "K".  I'm exploiting Java's built-in concept of exceptions to handle the behavior of contradictions in the logic core, and encapsulating contradiction as a foundational principle of the entire logical system.  This idea comes directly from Garson's text on modal logic.</p>

<p>Right now I'm experimenting with the concept of a sentence, and trying to build propositions, contradictions, and conditionals all as sentences.  One challenge is that a conditional uses two sentences and I wish to keep the API distinct for the time being from the imperative logic API that I've been using thus far.  So, I might be spending some time with the Organon to find meaningful vocabulary.  I'll also be returning to the <a href="https://wiki.umn.edu/twiki/bin/view/Arete/Lexicon">logical lexicon</a> I established earlier this month.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/05/work_on_the_new_modal_logic_co.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/05/work_on_the_new_modal_logic_co.html</guid>
         <category>Modal Logic</category>
         <pubDate>Sun, 13 May 2007 21:17:05 -0600</pubDate>
      </item>
      
      <item>
	
         <title>M2 build environment postponed until next release</title>
         <description><![CDATA[<p>I'm officially moving <a href="http://umjira.umn.edu/browse/ARETE-84">[ARETE-84]</a> back to the alpha-06 release, as it is presently beyond me why the BCEL code generation bits fail to work with Maven 2.x.  I'm going to have to write some sort of classloader dump to troubleshoot the classloader oddities.  So, we're sticking with maven 1.0 for now.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/05/m2_build_environment_postponed.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/05/m2_build_environment_postponed.html</guid>
         <category>Development</category>
         <pubDate>Mon, 07 May 2007 01:03:48 -0600</pubDate>
      </item>
      
      <item>
	<enclosure url="http://blog.lib.umn.edu/saintx/arete/images/arete_site_after-thumb.png" length="108672" type="image/png" /><enclosure url="http://blog.lib.umn.edu/saintx/arete/images/arete_site_after.png" length="92243" type="image/png" /><enclosure url="http://blog.lib.umn.edu/saintx/arete/images/arete_site_before-thumb.png" length="153634" type="image/png" /><enclosure url="http://blog.lib.umn.edu/saintx/arete/images/arete_site_before.png" length="136788" type="image/png" />
         <title>Pushing the edges of design on the UMWiki</title>
         <description><![CDATA[<p>I wanted to take a second to show off a brief glimpse of what can be done with a firm understanding of CSS to one's UMWiki web.  Now, I don't recommend this if you don't know CSS, and I definitely recommend it if you're looking to learn CSS.  The UMWiki is a great case study in what you can do with style sheets.</p>

<p>Here's what the Arete project page would look like in the UMWiki if I just used the standard template.</p>

<a href="http://blog.lib.umn.edu/saintx/arete/images/arete_site_before.png"><img alt="arete_site_after.png" src="http://blog.lib.umn.edu/saintx/arete/images/arete_site_before-thumb.png" width="243" height="185" /></a>

<p>And here is what it looks like after my style customizations:</p>

<a href="http://blog.lib.umn.edu/saintx/arete/images/arete_site_after.png"><img alt="arete_site_after.png" src="http://blog.lib.umn.edu/saintx/arete/images/arete_site_after-thumb.png" width="243" height="185" /></a>


<p>Finally, here is a list of topics that show how I did it:</p>
<ul>
<li><a href="https://wiki.umn.edu/twiki/bin/view/Arete/WebPreferences">https://wiki.umn.edu/twiki/bin/view/Arete/WebPreferences</a> (I use nat skin)</li>
<li><a href="https://wiki.umn.edu/twiki/bin/view/Arete/WebCss">https://wiki.umn.edu/twiki/bin/view/Arete/WebCss</a> (ultra-secret topic that lets me customize things)</li>
</ul>

<p>Everything aside from customizing the cascading style sheets and switching to the nat skin involved saving a copy of one the WebHome topic to my desktop so that I could peer into its tag structure and what the element classes are.  <a href="http://www6.informatik.uni-erlangen.de/people/michael/">Michael Daum</a> did a great job with the Nat skin, and proper respect is owed to him.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/05/pushing_the_edges_of_design_on.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/05/pushing_the_edges_of_design_on.html</guid>
         <category>Development</category>
         <pubDate>Sun, 06 May 2007 23:35:04 -0600</pubDate>
      </item>
      
      <item>
	
         <title>Digging through JLog interpreter source</title>
         <description><![CDATA[<p>At the suggestion of Dr. Kac from the Philosophy Department, I downloaded the source code for JLog today, which is a Java-based Prolog interpreter.  I was able to spelunk its architecture and look around for how it manages grammatical structures in its interpreter.  I was hoping to derive some insight in how to differentiate the API terms for an imperative language structure dedicated to controlling the flow of action and change in a computer system, from a more propositional language structure dedicated to analysis of the flow control logic itself.</p>

<p>I intend to support these two sentence types in the same logic core:
<ol><li>An imperative type which initiates change in the system as a result of a specific anticipated state of conditions, and </li>
<li>A propositional type which analyses the structure of and relationships between both the state of conditions in the system and the imperative sentences created by the knowledge experts.</li>
</ol></p>

<p>In order to do this, I'm building a <a href="https://wiki.umn.edu/twiki/bin/view/Arete/Lexicon">Lexicon</a>, and while I draw the line far from finding the quiddity of these terms, I do want to assemble enough nouns to allow myself to be both expressive and correct in the core APIs.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/04/digging_through_jlog_interpret.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/04/digging_through_jlog_interpret.html</guid>
         <category>Development</category>
         <pubDate>Mon, 30 Apr 2007 17:21:41 -0600</pubDate>
      </item>
      
      <item>
	
         <title>Coming to an ontology</title>
         <description><![CDATA[<p>The problem with the computerized logical systems which I have used prior to today, is this.  With almost perfect consistency, the underlying goal of the logic in popular computer systems is to assemble a mechanism to control the flow of change in the system.  These systems are <em>imperative</em> in nature.</p>

<p>Imperative systems direct the actions which a computer program performs.  They are perhaps the most common and practical systems in use today.  Less common, though ultimately no less practical, are logical systems that evaluate the truth of certain logical arguments.  Telling a computer how to perform certain functions is useful, but dangerous if the reasoning behind our commands is flawed.</p>

<p>So, I'm interested in building systems that can provide a means to analyse our logics as well as to execute them.  That's what I'm trying to build with Arete.  However, the effort requires visible public progress as an Open Source project before I can get some of the needed infrastructure to continue more advanced development.  This requires an iterative approach to building the platform.</p>

<p>The problem with this iterative approach is that there is scant and often contradictory literature to help me distinguish the two types of logic listed above.  Often terms are used interchangeably between the two types of logic to describe what are essentially different things.  Theorems, premises, antecedents, consequents, hypotheses, sentences, clauses, instructions, protasis, sumperasma, arguments.  Logical literature today is a mixed bag of ambiguity and industry buzz-words.</p>

<p>So, I'm trying today to come to terms, to fashion an ontology I can use moving forward in development.  It is fun but demanding work, and I've not yet eaten.  I think I should see to that.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/04/coming_to_an_ontology.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/04/coming_to_an_ontology.html</guid>
         <category>Declarative Logic</category>
         <pubDate>Sun, 29 Apr 2007 12:16:24 -0600</pubDate>
      </item>
      
      <item>
	
         <title>ARETE-USER mailing list is up and running!</title>
         <description><![CDATA[<p>The <a href="http://lists.umn.edu/cgi-bin/wa?A0=ARETE-USER">arete-user mailing list</a> is up and running!  I've posted information and instructions to <a href="https://wiki.umn.edu/twiki/bin/view/Arete/WebHome#Mailing_Lists">subscribe and unsubscribe to the arete-user list</a> at the <a href="https://wiki.umn.edu/twiki/bin/view/Arete/WebHome">Arete project home page</a>.</p>

<p>These lists will be open to the public, and the <a href="http://lists.umn.edu/cgi-bin/wa?A0=ARETE-USER">arete-user list archives</a> are searchable from the <a href="http://lists.umn.edu">University of Minnesota LISTSERV homepage.</a></p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/04/areteuser_mailing_list_is_up_a.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/04/areteuser_mailing_list_is_up_a.html</guid>
         <category>Mailing Lists</category>
         <pubDate>Thu, 26 Apr 2007 18:00:00 -0600</pubDate>
      </item>
      
      <item>
	
         <title>Arete 1.0-alpha-04 Released!</title>
         <description><![CDATA[<p>After an invigorating two-week-long codebender, I can proudly announce the release of <a href="http://sourceforge.net/project/showfiles.php?group_id=193279&package_id=227609&release_id=503337">Arete-1.0-alpha-04</a>!  This version seriously beefs up the infrastructure of the project, and includes the following improvements:</p>
<ol>
<li>An improved project directory structure brings us much closer to a Maven2 build</li>
<li>100% unit test coverage!</li>
<li>The addition of a new example application--a Rock-Paper-Scissors game simulation.</li>
<li>A <em>vastly</em> improved I/O subsystem, with much more robust error checking and reporting for XML files</li>
</ol>
<p>But that's not the end.  Really, the project is maturing at a steady pace, and with full unit test coverage we can begin to turn our attention to a boat-load of new features that are in our project JIRA, including more and better example applications and advanced engine cores.  It is an exciting time in Minneapolis.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/04/arete_10alpha04_released.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/04/arete_10alpha04_released.html</guid>
         <category>New Releases</category>
         <pubDate>Mon, 23 Apr 2007 19:36:37 -0600</pubDate>
      </item>
      
      <item>
	
         <title>Project mailing list is on its way</title>
         <description><![CDATA[<p>The project mailing list is on its way!  I heard back from the University's IS department, which oversees the creation of new mailing lists on the campus listserv system. They have heard the cry, and hopefully we'll have a mailing list by the weekend.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/04/project_mailing_list_is_on_its.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/04/project_mailing_list_is_on_its.html</guid>
         <category>Mailing Lists</category>
         <pubDate>Mon, 23 Apr 2007 18:49:37 -0600</pubDate>
      </item>
      
      <item>
	
         <title>No word yet on setting up a project mailing list</title>
         <description><![CDATA[<p>Earlier this week I requested an arete-user mailing list address here at the University, but have not yet heard anything about it.  I have a sinking feeling that the request for setting up the project mailing list could be denied, which would open up a new front in infrastructure requirements for the general UMFoundry effort.</p>

<p>The good news is that the blog got a face lift last evening, and is looking pretty sharp.  Once the mailing list goes online, I'll report with updates.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/04/no_word_yet_on_setting_up_a_pr.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/04/no_word_yet_on_setting_up_a_pr.html</guid>
         <category>Mailing Lists</category>
         <pubDate>Fri, 20 Apr 2007 14:58:59 -0600</pubDate>
      </item>
      
      <item>
	
         <title>Arete project goals</title>
         <description><![CDATA[<p>Now that I'm working more or less full time (nights and weekends U.S. central time zone) on Arete, and especially now that I've finally stamped a public release of the source code, it's a legitimate Open Source product.  But this is not yet a legitimate Open Source <em>project</em>.  Here's the difference: Open Source <em>projects</em> have <em>community</em>, and Arete <em>doesn't</em>.  I intend to change this right away.</p>

<p>Here's the big plan.  I'm going to get the following for this project:</p>

<p><li>A User mailing list, so we can chat</li><br />
<li>A Clover license, for generating test coverage reports</li><br />
<li>An IntelliJ IDEA license, so I can upgrade and build a rule-authoring plugin</li></p>

<p>I'm working on three more sample applications for Arete.  </p>

<p>The first application is none other than Miss Manners.  That's right, she's back in full effect.  I've currently got her cranking out very VERY large seating plans, and while she's not perfect just yet, it's really just a matter of time.</p>

<p>The second application, which I'm pretty excited about, is a deck analysis program for Magic the Gathering.  I'm experimenting with MTG because the game rules involve manifold modes of truth assertion.  At the moment, my attention is focused on the data gathering and data modeling aspects of the application.</p>

<p>The final application is a network diagnostics tool.  I'm going to write something to help my colleagues in 1-HELP troubleshoot network problems at the University.  Of course the application will have limited use, because so many of the core systems at the University which we use for diagnostics do not expose public interfaces.  This is fine.  I'm going for the 80/20 approach.</p>

<p>Hopefully these three sample applications will garner some interest and attract a few interested developers.  I think the best way to see why modal logic is important is to try to model a system for something that involves a lot of timing, possibility analysis, and permission / obligation rules.</p>

<p>With any fortune, I'll be able to show some respectable progress to the IntelliiJ license granting team in the next couple of months.  Until then, my friend Nate's going to have to use Eclipse.</p>

<h3>Coding Tonight</h3>
My pal Nate and I are going to be pair programming at Little Tijuana on West 26th and Nicollet tonight.  The subject of our attention will be unit tests for the engine core.  Cheers!
]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/04/arete_project_goals.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/04/arete_project_goals.html</guid>
         <category>Development</category>
         <pubDate>Tue, 17 Apr 2007 20:05:00 -0600</pubDate>
      </item>
      
      <item>
	
         <title>Arete QuickStart manual published</title>
         <description><![CDATA[<p>I launched the <a href="https://wiki.umn.edu/twiki/bin/genpdf/Arete/QuickStartGuide">Arete Developer's QuickStart Guide</a> today from the <a href="https://wiki.umn.edu/twiki/bin/view/Arete">Arete project home page</a>.  I think that the University has more ability than it really understands when it comes to using the UMWiki platform for publications.  We're really quite fortunate to have this system in place.</p>

<p>Documentation authoring is simple on UMWiki.  I used to publish a lot of articles in various online tech journals such as Java.net and TheServerSide.org, but the ability to push out professional-quality documentation and keep it up-to-date on a minute-by-minute basis was never something that my publishers could offer.  I would rather write and publish for free on the UMWiki platform than get paid to write for my old publishers, not because I have something against the publishers--they were great.  But this technology really puts me where I want to be, which is in the driver's seat.</p>

<p>Anyway, enjoy the quickstart manual.  I'll be writing a lot of these in the near future, I think.  There are dozens of projects here on campus that could use documentation like this.</p>]]></description>
         <link>http://blog.lib.umn.edu/saintx/arete/2007/04/arete_quickstart_manual_publis.html</link>
         <guid>http://blog.lib.umn.edu/saintx/arete/2007/04/arete_quickstart_manual_publis.html</guid>
         <category>Publications</category>
         <pubDate>Tue, 17 Apr 2007 19:54:49 -0600</pubDate>
      </item>
      
   </channel>
</rss>
