1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml"> 4<head> 5<meta http-equiv="Content-Type" content= 6"text/html; charset=us-ascii" /> 7<meta name="generator" content= 8"JSPWikiToWeb. See http://www.ifcx.org/wiki/WikiPublishing.html" /> 9<title>IFCX Wiki: Main</title> 10<link rel="alternate" type="application/rss+xml" title= 11"Main (News + Blog) Feed for IFCX.org" href="/rss/Main.rdf.xml" /> 12<link rel="stylesheet" media="screen, projection" type="text/css" 13href="/templates/default/jspwiki.css" /> 14<link rel="stylesheet" media="screen, projection" type="text/css" 15href="/templates/default/andreas08.css" /> 16</head> 17<body> 18<div id="container"> 19<div id="header"> 20<h1>IFCX : Internet Foundation Classes eXtreme!!!</h1> 21<h2>The Web Is The Computer</h2> 22<h3>Hey!</h3> 23</div> 24<div id="navigation"> 25<ul> 26<li class="selected"><a class="navlink" href= 27"/wiki/Main.html">Main</a></li> 28<li><a class="navlink" href="/wiki/Blog.html">Blog</a></li> 29<li><a class="navlink" href="/wiki/AboutIFCX.html">About</a></li> 30<li><a class="navlink" href= 31"/wiki/ProjectSummary.html">Project</a></li> 32<li><a class="navlink" href="#">Fifth</a></li> 33<li><a class="navlink" href="/wiki/Publish.html">Page 34Index</a></li> 35</ul> 36</div> 37<div id="content"> 38<h2 id= 39"section-Main-WelcomeToIFCXInternetFoundationClassesEXtreme"> 40Welcome to IFCX : Internet Foundation Classes eXtreme!</h2> 41<div class="toc"> 42<div class="collapsebox"> 43<h4>Table of Contents</h4> 44<ul> 45<li class="toclevel-1"><a class="wikipage" href= 46"#section-Main-WelcomeToIFCXInternetFoundationClassesEXtreme" 47shape="rect">Welcome to IFCX : Internet Foundation Classes 48eXtreme!</a></li> 49<li class="toclevel-2"><a class="wikipage" href= 50"#section-Main-JimWhiteSBlog" shape="rect">Jim White's 51Blog</a></li> 52<li class="toclevel-3"><a class="wikipage" href= 53"#section-Main-BlogArchive" shape="rect">Blog Archive</a></li> 54<li class="toclevel-2"><a class="wikipage" href= 55"#section-Main-News" shape="rect">News</a></li> 56<li class="toclevel-3"><a class="wikipage" href= 57"#section-Main-NewsArchive" shape="rect">News Archive</a></li> 58<li class="toclevel-2"><a class="wikipage" href= 59"#section-Main-RecentChanges" shape="rect">Recent Changes</a></li> 60</ul> 61</div> 62</div> 63<h3 id="section-Main-JimWhiteSBlog">Jim White's Blog</h3> 64<div class="weblog"> 65<div class="weblogentry"> 66<div class="weblogentryheading">November 23, 2013 12:21 AM</div> 67<div class="weblogentrytitle">Bundling Local JARs for your Groovy 68scripts the Grape Way</div> 69<div class="weblogentrybody"><a class="wikipage" href= 70"/wiki/Publish.html" shape="rect"></a>A FAQ which often does not 71receive a satisfactory answer is how to add local JAR files to a 72Groovy script without having to fiddle with the dreaded CLASSPATH 73environment variable. Folks see that things are quite nice when 74using <a target="external" class="external" href= 75"http://groovy.codehaus.org/Grape" shape= 76"rect">Grape</a><img class="outlink" src="/images/out.png" alt= 77"" /> with a Maven repository and wish they could do the same with 78local JAR files. When creating <a class="wikipage" href= 79"/wiki/Wings.html" shape="rect">IFCX Wings</a> I implemented 80<a class="wikipage" href="/wiki/GroovyForOpenOffice.html" shape= 81"rect">Groovy For OpenOffice</a> (pre-Grape) which also used Apache 82Ivy for dynamically extending the classpath. One difference though 83is that I directly supported including JAR files which are not in a 84repository but are simply referenced by URL, whether local (file) 85or remote (http/https). It turns out though that Grape can be used 86with local JAR files in fairly nice fashion by keeping them in a 87Maven-format repository in the local filesystem. Here's how to do 88that in pretty friendly manner. 89<h3 id= 90"section-JimWhite_blogentry_231113_1-UseMavenToPutTheJARFilesInALocalRepository"> 91Use Maven to put the JAR files in a Local Repository</h3> 92Maven will install files in a local repository for you without 93fussing around with a POM file. We'll use the <tt>mvn 94deploy-file</tt> command and a local file URL that is relative to 95where our script is located which will be <tt>file:repo</tt> in 96this example. Notice that the file URL has no leading slash and so 97is relative to the working directory. Naturally you'll need to use 98an appropriate groupId and artifactId (please be a good netizen and 99use a groupId that the reverse of a domain name that is assigned to 100you or your organization). For this example I'm demonstrating a 101little script that uses Apache Lucene and I'll use my groupId so 102that Grape will only use my copy. One flaw in this scheme at the 103moment is that transitive dependencies are not managed although it 104should be possible to work that out and I'll look into it later. 105The upshot of that is we have to list each JAR file individually, 106which shouldn't really be an issue since we're already just 107wrangling JAR files by hand anyhow. 108<h4 id= 109"section-JimWhite_blogentry_231113_1-LayoutOfMyWorkingDirectory"> 110Layout of my Working Directory</h4> 111<pre xml:space="preserve"> 112$ find * 113lib 114lib/lucene-analyzers-common-4.5.1.jar 115lib/lucene-core-4.5.1.jar 116whats_new.groovy 117</pre> 118<h4 id="section-JimWhite_blogentry_231113_1-TopOfMyGroovyScript"> 119Top of my Groovy Script</h4> 120<pre xml:space="preserve"> 121#!/usr/bin/env groovy 122 123@GrabResolver(name='script', root='file:repo') 124@Grab(group='org.ifcx.lucene', module='lucene-core', version='4.5.1') 125@Grab(group='org.ifcx.lucene', module='lucene-analyzers-common', version='4.5.1') 126 127import org.apache.lucene.analysis.standard.StandardAnalyzer 128import org.apache.lucene.document.Document 129import org.apache.lucene.document.Field 130import org.apache.lucene.index.DirectoryReader 131... 132</pre> 133The full script (using the default Maven Central repo) can be see 134in this gist <a target="external" class="external" href= 135"https://gist.github.com/jimwhite/7609525" shape= 136"rect">https://gist.github.com/jimwhite/7609525</a><img class= 137"outlink" src="/images/out.png" alt="" />. 138<h4 id= 139"section-JimWhite_blogentry_231113_1-CreateTheLocalMavenRepository"> 140Create the Local Maven Repository</h4> 141We use the command <tt>mvn deploy:deploy-file -Durl=file:repo 142-Dfile=</tt><i>/path/to/jar</i> <tt>-DgroupId=</tt><i>name</i> 143<tt>-DartifactId=</tt><i>name</i> <tt>-Dversion=</tt><i>ver</i> to 144copy the JAR file to a new Maven repository in the local directory 145<tt>repo</tt>. 146<pre xml:space="preserve"> 147$ mvn deploy:deploy-file -Durl=file:repo -Dfile=lib/lucene-core-4.5.1.jar -DgroupId=org.ifcx.lucene -DartifactId=lucene-core -Dpackaging=jar -Dversion=4.5.1 148[INFO] Scanning for projects... 149[INFO] 150[INFO] ------------------------------------------------------------------------ 151[INFO] Building Maven Stub Project (No POM) 1 152[INFO] ------------------------------------------------------------------------ 153[INFO] 154[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ standalone-pom --- 155Uploading: file:repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.jar 156Uploaded: file:repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.jar (2244 KB at 16025.9 KB/sec) 157Uploading: file:repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.pom 158Uploaded: file:repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.pom (399 B at 389.6 KB/sec) 159Downloading: file:repo/org/ifcx/lucene/lucene-core/maven-metadata.xml 160Uploading: file:repo/org/ifcx/lucene/lucene-core/maven-metadata.xml 161Uploaded: file:repo/org/ifcx/lucene/lucene-core/maven-metadata.xml (306 B at 298.8 KB/sec) 162[INFO] ------------------------------------------------------------------------ 163[INFO] BUILD SUCCESS 164[INFO] ------------------------------------------------------------------------ 165[INFO] Total time: 0.820s 166[INFO] Finished at: Sat Nov 23 00:42:08 PST 2013 167[INFO] Final Memory: 3M/81M 168[INFO] ------------------------------------------------------------------------ 169 170$ mvn deploy:deploy-file -Durl=file:repo -Dfile=lib/lucene-analyzers-common-4.5.1.jar -DgroupId=org.ifcx.lucene -DartifactId=lucene-analyzers-common -Dpackaging=jar -Dversion=4.5.1 171[INFO] Scanning for projects... 172[INFO] 173[INFO] ------------------------------------------------------------------------ 174[INFO] Building Maven Stub Project (No POM) 1 175[INFO] ------------------------------------------------------------------------ 176[INFO] 177[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ standalone-pom --- 178Uploading: file:repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.jar 179Uploaded: file:repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.jar (1549 KB at 12196.3 KB/sec) 180Uploading: file:repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.pom 181Uploaded: file:repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.pom (411 B at 401.4 KB/sec) 182Downloading: file:repo/org/ifcx/lucene/lucene-analyzers-common/maven-metadata.xml 183Uploading: file:repo/org/ifcx/lucene/lucene-analyzers-common/maven-metadata.xml 184Uploaded: file:repo/org/ifcx/lucene/lucene-analyzers-common/maven-metadata.xml (318 B at 155.3 KB/sec) 185[INFO] ------------------------------------------------------------------------ 186[INFO] BUILD SUCCESS 187[INFO] ------------------------------------------------------------------------ 188[INFO] Total time: 0.745s 189[INFO] Finished at: Sat Nov 23 00:42:28 PST 2013 190[INFO] Final Memory: 3M/81M 191[INFO] ------------------------------------------------------------------------ 192</pre> 193<h4 id="section-JimWhite_blogentry_231113_1-ANewRepositoryIsBorn">A 194New Repository is Born</h4> 195<pre xml:space="preserve"> 196$ find * 197lib 198lib/lucene-analyzers-common-4.5.1.jar 199lib/lucene-core-4.5.1.jar 200repo 201repo/org 202repo/org/ifcx 203repo/org/ifcx/lucene 204repo/org/ifcx/lucene/lucene-analyzers-common 205repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1 206repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.jar 207repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.jar.md5 208repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.jar.sha1 209repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.pom 210repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.pom.md5 211repo/org/ifcx/lucene/lucene-analyzers-common/4.5.1/lucene-analyzers-common-4.5.1.pom.sha1 212repo/org/ifcx/lucene/lucene-analyzers-common/maven-metadata.xml 213repo/org/ifcx/lucene/lucene-analyzers-common/maven-metadata.xml.md5 214repo/org/ifcx/lucene/lucene-analyzers-common/maven-metadata.xml.sha1 215repo/org/ifcx/lucene/lucene-core 216repo/org/ifcx/lucene/lucene-core/4.5.1 217repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.jar 218repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.jar.md5 219repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.jar.sha1 220repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.pom 221repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.pom.md5 222repo/org/ifcx/lucene/lucene-core/4.5.1/lucene-core-4.5.1.pom.sha1 223repo/org/ifcx/lucene/lucene-core/maven-metadata.xml 224repo/org/ifcx/lucene/lucene-core/maven-metadata.xml.md5 225repo/org/ifcx/lucene/lucene-core/maven-metadata.xml.sha1 226whats_new.groovy 227</pre> 228<h4 id="section-JimWhite_blogentry_231113_1-WeReReadyToRock">We're 229Ready to Rock</h4> 230<pre xml:space="preserve"> 231$ ./whats_new.groovy index_dir ~/Downloads/ucsd_2.0_content/editor_source/command.text 232SEGMENT PROCEDURE EDITCORE; 233 234(* Core procedures. Execute these commands until either a set environment 235 comes along or a quit command. *) 236... 237There are 263 new lines of 263 total. 238</pre> 239<p>Note that the script was run with the working directory being 240the one containing the Groovy script. That is essential because the 241root URL we used in the @GrabResolver annotation is relative to the 242working directory. That isn't quite as inconvenient as it might 243seem since the URL will only be used if the artifacts are not in 244the Groovy Grapes cache (<tt>~/.groovy/grapes</tt>), which 245typically will only be the first time the script is run by a user. 246The caching though does mean that if the JAR changes then the 247version number needs to change and the script must again be run 248from the working directory.</p> 249<h2 id="section-JimWhite_blogentry_231113_1-Update">Update</h2> 250As a result of addressing this issue I've created an improvement 251for Grape that makes it work really nicely with these Maven 252repositories collocated with the Groovy scripts that use them. 253Follow <a target="external" class="external" href= 254"http://jira.codehaus.org/browse/GROOVY-6451" shape= 255"rect">GROOVY-6451</a><img class="outlink" src="/images/out.png" 256alt="" /> to see when this feature is ready to use. I'll also post 257here as well of course. 258<h3 id="section-JimWhite_blogentry_231113_1-GoForthInGroovyStyle"> 259Go Forth in Groovy Style</h3> 260That's all there is to it. The working directory can be delivered 261using your favorite method such as tar and ssh or what-have-you. 262The lib directory doesn't need to be included of course and is only 263shown here for completeness - the path given to <tt>mvn 264deploy:deploy-file</tt> could easily have been elsewhere (including 265your <tt>~/.m2</tt> or <tt>~/.groovy/grapes</tt> cache).</div> 266<div class="weblogentryfooter">By Jim White  <a href= 267"/wiki/JimWhite_blogentry_231113_1.html" shape="rect">Permalink</a> 268-<a class="weblogentrycomments" href= 269"/wiki/JimWhite_blogentry_231113_1.html#comments">Comments</a></div> 270</div> 271<div class="weblogentry"> 272<div class="weblogentryheading">December 22, 2008 1:04 AM</div> 273<div class="weblogentrytitle">Bottom of the Ninth, or, Just how 274"Open" is Java anyways?</div> 275<div class="weblogentrybody"><a class="wikipage" href= 276"/wiki/Publish.html" shape="rect"></a>A recent post on the 277<a target="external" class="external" href="http://ocjug.org/" 278shape="rect">OCJUG</a><img class="outlink" src="/images/out.png" 279alt="" /> list asked to what degree is Java "open" and when will 280everyone agree that it is "open" to their satisfaction. 281<p>The fact that "Java" is a trademark (the significance of which 282was made obvious when <a target="external" class="external" href= 283"http://blogs.sun.com/jonathan/entry/java_is_everywhere" shape= 284"rect">Sun changed their stock symbol</a><img class="outlink" src= 285"/images/out.png" alt="" /> from SUNW to JAVA) means that what most 286folks think Java is will never be as open or free as some folks 287want.</p> 288<p>Furthermore, Sun has a dual license for their Java distribution 289which includes OpenJDK. So if you want to contribute to the most 290popular JDK distribution, you have to agree that Sun can also use 291your efforts under terms that are not necessarily free or open 292(although they do promise to always make your contribution 293available under a FSF and/or OSI approved license).</p> 294<p><a target="external" class="external" href= 295"http://openjdk.java.net/contribute/" shape= 296"rect">http://openjdk.java.net/contribute/</a><img class="outlink" 297src="/images/out.png" alt="" /></p> 298<p>So OpenJDK has two strikes against it.</p> 299<p>Here comes the next pitch, aaannd OpenJDK is <a target= 300"external" class="external" href="http://openjdk.java.net/legal/" 301shape="rect">GPL licensed</a><img class="outlink" src= 302"/images/out.png" alt="" />, a home run!</p> 303<p>I was amazed and pleased that Sun went all the way and used GPL 304for Java. After all, I'd been saying that Java would eventually be 305OSS, even after the ISO talk was replaced by the JCP.</p> 306<p>That means this pillar of the <a class="wikipage" href= 307"/wiki/BeyondJava.html#section-BeyondJava-TheGreatJavaRenaissance2006" 308shape="rect">Great Java Renaissance of 2006</a> is strong as it 309possibly can be. One of those strengths is that anyone who isn't 310satisfied with the degree of openness can simply fork with total 311abandon and with the best license for software freedom. That is a 312reality and one of the first projects spawned by OpenJDK is 313<a target="external" class="external" href= 314"http://www.iced-tea.org/" shape="rect">IcedTea</a><img class= 315"outlink" src="/images/out.png" alt="" />, which is a <a target= 316"external" class="external" href= 317"http://www.fsf.org/licensing/essays/free-sw.html" shape= 318"rect">free and open</a><img class="outlink" src="/images/out.png" 319alt="" /> implementation of Java.
319</p> 320<p>As for folks saying Java being OSS doesn't matter. They are 321quite mistaken. Already we've seen significant developments such as 322<a target="external" class="external" href= 323"http://landonf.bikemonkey.org/static/soylatte/" shape= 324"rect">SoyLatte</a><img class="outlink" src="/images/out.png" alt= 325"" /> which counters Apple's weak support of Java, and research 326work on Java being truly free and open in the <a target="external" 327class="external" href="http://openjdk.java.net/projects/mlvm/" 328shape="rect">Da Vinci Machine Project</a><img class="outlink" src= 329"/images/out.png" alt="" />. This change in research work is 330important because in the past such work, if done with Sun's JDK, 331used a license that meant the resulting code rarely ever left the 332university.</p> 333<p>That the OpenJDK is an effective OSS project is clear because 334all of these efforts are now part of the OpenJDK project itself, 335rather than forking or otherwise choosing to stand alone or with 336another group.</p> 337<p>That is only the beginning and, by being real Open Source 338Software, we can rest assured that Java will grow in strength over 339the next decade just as it did the first. Of course we can also be 340assured that there are plenty of folks that will disagree with just 341about every aspect of all this jazz.</p> 342</div> 343<div class="weblogentryfooter">By Jim White  <a href= 344"/wiki/JimWhite_blogentry_221208_1.html" shape="rect">Permalink</a> 345-<a class="weblogentrycomments" href= 346"/wiki/JimWhite_blogentry_221208_1.html#comments">Comments</a></div> 347</div> 348<div class="weblogentry"> 349<div class="weblogentryheading">December 12, 2008 10:58 AM</div> 350<div class="weblogentrytitle">Grid computing with Groovy</div> 351<div class="weblogentrybody"><a class="wikipage" href= 352"/wiki/Publish.html" shape="rect"></a> Alex Tkachman posted a 353<a target="external" class="external" href= 354"http://groovyland.wordpress.com/2008/12/12/groovygrid-dsl-poll-what-is-right-way-to-implement-brunching-control-structures-in-groovy/trackback/" 355shape="rect">question about Groovy style for checkpointed 356calculations</a><img class="outlink" src="/images/out.png" alt= 357"" />. 358<p>Here's my first try:</p> 359<pre xml:space="preserve"> 360// Proof of concept for Groovy checkpointed calculation with closures. 361// @author Jim White <[email protected]> 362// http://www.ifcx.org/ 363 364Session session = new Session() 365 366// def initState = new Expando(data:'datalocation') 367def initState = [data:'datalocation'] 368 369def endState = eachWithCheckpoints(session, 'state1', initState, [ 370 { stepCount = longInitialConditionsCalculation(data) } 371 , { accumulator = 0 372 iterateWithCheckpoints(session, 'state2', it.state 373 , 0..stepCount 374 , { accumulator += 2 * it.step }) 375 } 376 , { result = "We did $stepCount iterations and the answer is $accumulator!" } 377]) 378 379def longInitialConditionsCalculation(d) { 10 } 380 381println endState.result 382 383class Session { 384 Object loadCheckpoint(String k) { null } 385 void saveCheckpoint(String k, Serializable s) { } 386} 387 388def eachWithCheckpoints(Session session, String key, def initialState, List<Closure> closures) { 389 def control = session.loadCheckpoint(key) 390 391 if (control.is(null)) { 392 control = [step:0, state:initialState] 393 } 394 395 while (control.step < closures.size()) { 396 Closure clos = closures[control.step] 397 398 clos.delegate = control.state 399 clos.resolveStrategy = Closure.DELEGATE_FIRST 400 401 clos.call(control) 402 403 control.step += 1 404 405 session.saveCheckpoint(key, control) 406 } 407 408 control.state 409} 410 411def iterateWithCheckpoints(Session session, String key, def initialState, Range range, Closure clos) { 412 def control = session.loadCheckpoint(key) 413 414 if (control.is(null)) { 415 // Leave reversed range case as an exercise for the reader... 416 assert !range.isReverse() 417 418 control = [step:range.from, state:initialState] 419 } 420 421 clos.delegate = control.state 422 clos.resolveStrategy = Closure.DELEGATE_FIRST 423 424 while (control.step <= range.to) { 425 clos.call(control) 426 427 control.step += 1 428 429 session.saveCheckpoint(key, control) 430 } 431 432 control.state 433} 434</pre> 435==> 436<pre xml:space="preserve"> 437We did 10 iterations and the answer is 110! 438</pre> 439<p>The idea is either you're doing a sequence of different steps or 440iterating the same step some number of times. Notice that the state 441can be any serializable thing. Map or Expando is handy, but some 442bean or other class would be fine.</p> 443<p>Obviously there are further refinements possible such as 444reversed and stepped ranges, and also a more functional style is 445possible. Either a builder or controller class would streamline 446things a bit by hiding some of the details of the 447eachWithCheckpoints/iterateWithCheckpoints calls.</p> 448<p>If Groovy had serializable iterators for the control step, that 449would make iterateWithCheckpoints nicer and let it change from 450taking just a simple integer range to a list.</p> 451<p>Naturally where there this is headed is <a class="wikipage" 452href="/wiki/GridComputing.html" shape="rect">cloud-powered</a> 453click-and-it-goes <a class="wikipage" href="/wiki/Wings.html" 454shape="rect">Wings</a>
454 via your web browser using <a class= 455"wikipage" href="/wiki/OOHTML.html" shape="rect">OOHTML</a>.</p> 456</div> 457<div class="weblogentryfooter">By Jim White  <a href= 458"/wiki/JimWhite_blogentry_121208_1.html" shape="rect">Permalink</a> 459-<a class="weblogentrycomments" href= 460"/wiki/JimWhite_blogentry_121208_1.html#comments">Comments</a></div> 461</div> 462<div class="weblogentry"> 463<div class="weblogentryheading">December 9, 2008 5:25 PM</div> 464<div class="weblogentrytitle">TREE-META</div> 465<div class="weblogentrybody"><a class="wikipage" href= 466"/wiki/Publish.html" shape="rect"></a> I've been interested in 467<a class="wikipage" href="/wiki/TREEMETA.html" shape= 468"rect">TREE-META</a> since I discovered it while at UC Irvine. We 469used a version for the UCSD p-System on the <a target="external" 470class="external" href="http://www.threedee.com/jcm/terak/" shape= 471"rect">Teraks</a><img class="outlink" src="/images/out.png" alt= 472"" /> (desktop LSI-11/23). It had a pleasant and compact syntax 473that was more convenient than the LISP that took it's place for me. 474<p>For several years I've been on the lookout for information on 475TREE-META but haven't been able to find out a great deal. After 476about the third time listening to <a target="external" class= 477"external" href= 478"http://en.wikipedia.org/wiki/The_Mother_of_All_Demos" shape= 479"rect">The Mother of All Demos</a><img class="outlink" src= 480"/images/out.png" alt="" /> I heard them mention that TREE-META was 481the language used to implement the "special purpose languages", 482which we call "domain-specific" today.</p> 483<p>I've been unable to locate a copy of any version the program or 484the tech report describing the language, although I've seen hints 485than some folks have used it fairly recently.</p> 486<p>In commemoration of the <a target="external" class="external" 487href="http://www.sri.com/engelbart-event.html" shape="rect">40th 488anniversary of the MoAD</a><img class="outlink" src= 489"/images/out.png" alt="" /> (also <a target="external" class= 490"external" href= 491"http://www.wired.com/science/discoveries/news/2008/12/dayintech_1209" 492shape="rect">at Wired</a><img class="outlink" src="/images/out.png" 493alt="" />), I've created a <a target="external" class="external" 494href="http://en.wikipedia.org/wiki/TREE-META" shape= 495"rect">Wikipedia stub about TREE-META</a><img class="outlink" src= 496"/images/out.png" alt="" /> as well as <a class="wikipage" href= 497"/wiki/TREEMETA.html" shape="rect">one here for non-WP suitable 498material</a>. The WP article is very rough, but I'm hoping that 499others with information will bring it forward and collect it 500there.</p> 501</div> 502<div class="weblogentryfooter">By Jim White  <a href= 503"/wiki/JimWhite_blogentry_091208_1.html" shape="rect">Permalink</a> 504-<a class="weblogentrycomments" href= 505"/wiki/JimWhite_blogentry_091208_1.html#comments">Comments</a></div> 506</div> 507</div> 508<h4 id="section-Main-BlogArchive"><a class="wikipage" href= 509"/wiki/Blog.html" shape="rect">Blog Archive</a></h4> 510<h3 id="section-Main-News">News</h3> 511<div class="weblog"> 512<div class="weblogentry"> 513<div class="weblogentryheading">September 15, 2008 4:20 PM</div> 514<div class="weblogentrytitle">OCaml, Scheme, and Adenine support 515for IFCX Wings, an in-progress console, and OOo My!</div> 516<div class="weblogentrybody"><a class="wikipage" href= 517"/wiki/Publish.html" shape="rect"></a><a class="wikipage" href= 518"/wiki/Wings.html" shape="rect">IFCX Wings v0.7</a> is now 519available from <a target="external" class="external" href= 520"http://sourceforge.net/project/showfiles.php?group_id=199110" 521shape="rect">the usual place</a><img class="outlink" src= 522"/images/out.png" alt="" /> (wow, spiffy new site design for 523SF.net!). It features an in-progress (during script execution) 524console that pops up during long running scripts. Very handy to see 525that something is happening while <a target="external" class= 526"external" href="http://ant.apache.org/ivy/" shape= 527"rect">Ivy</a><img class="outlink" src="/images/out.png" alt="" /> 528downloads your JAR dependencies. Default support for OCaml, Scheme, 529and Adenine has also been added. 530<p>I've tested the Wings.odt with OOo 3.0beta2 on Windows XP and 531Mac OS X Leopard and it seems to work fine except that on Mac there 532is no support for AWT (and consequently no Swing). It also works 533with OOo 2.4 on Windows and NeoOffice 2.2 on Mac. Earlier versions 534are mostly OK too, but don't go toooo far (like 2.0) or 535GroovyForOpenOffice won't work (and you need it for Wings).</p> 536<p>Note that you must install <a class="wikipage" href= 537"/wiki/GroovyForOpenOffice.html" shape="rect">Groovy For 538OpenOffice</a> for the WingsEval macro to work. Otherwise you can 539just open the Wings document and read it, but the code won't be 540executable.</p> 541<p>The keyboard shortcut for the Wings macro seems to work with all 542those versions and platforms too. The Wings.odt file is signed so 543that you can have some reasonable expectation that we're using the 544same bits. Of course if yours is <b>not</b> signed by my <a target= 545"external" class="external" href="http://www.cacert.org/" shape= 546"rect">CA Cert</a><img class="outlink" src="/images/out.png" alt= 547"" /> showing JAMES PAUL WHITE and <a class="wikipage" href= 548"/wiki/JimWhite.html" shape="rect">my email address</a> then there 549may be a problem.</p> 550<p><a target="external" class="external" href= 551"http://caml.inria.fr/ocaml/index.en.html" shape="rect">OCaml 552(Objective Caml)</a><img class="outlink" src="/images/out.png" alt= 553"" /> is a popular version of <a target="external" class="external" 554href="http://en.wikipedia.org/wiki/ML_programming_language" shape= 555"rect">ML</a><img class="outlink" src="/images/out.png" alt="" /> 556sporting OO features. <a target="external" class="external" href= 557"http://ocamljava.x9c.fr/" shape="rect">OCaml-Java</a><img class= 558"outlink" src="/images/out.png" alt="" /> is the spiffy 559implementation for the JVM by Xavier Clerc used in Wings.</p> 560<p><a class="wikipage" href="/wiki/Adenine.html" shape= 561"rect">Adenine</a> is the language of the <a target="external" 562class="external" href="http://en.wikipedia.org/wiki/Haystack_(PIM)" 563shape="rect">MIT Haystack Semantic Desktop</a><img class="outlink" 564src="/images/out.png" alt="" /> and is essentially a LISP for 565graphs. It features a RDF data model, Pythonic syntax, and is 566implemented for the JVM. I have <a target="external" class= 567"external" href= 568"http://ifcx.svn.sourceforge.net/viewvc/ifcx/thirdparty/adenine/" 569shape="rect">extricated it's implementation</a><img class="outlink" 570src="/images/out.png" alt="" /> from Eclipse and packaged it with a 571<a target="external" class="external" href= 572"http://ifcx.svn.sourceforge.net/viewvc/ifcx/thirdparty/scripting/engines/adenine/" 573shape="rect">JSR-223 engine adapter</a><img class="outlink" src= 574"/images/out.png" alt="" /> so that Wings can support it by 575default. The Adenine Tutorial converted to IFCX Wings is <a target= 576"external" class="external" href= 577"http://ifcx.svn.sourceforge.net/viewvc/ifcx/Wings/trunk/OpenOffice/Adenine%20Tutorial%20with%20Wings.odt?view=log" 578shape="rect">available from SVN</a><img class="outlink" src= 579"/images/out.png" alt="" />.</p> 580<p>The Scheme support is using the <a target="external" class= 581"external" href="http://sisc-scheme.org/" shape= 582"rect">SISC</a><img class="outlink" src="/images/out.png" alt="" /> 583implementation (even though I'm long time <a target="external" 584class="external" href="http://www.gnu.org/software/kawa/" shape= 585"rect">Kawahead</a><img class="outlink" src="/images/out.png" alt= 586"" />) because it has a JSR-223 engine already and it is also 587better for pedagogic purposes since it has full continuations.</p> 588<p>There is also exciting news regarding IFCX.org and the 589<a target="external" class="external" href= 590"http://development.openoffice.org/community_innovation_program.html" 591shape="rect">
591OpenOffice.org Community Innovation 592Program</a><img class="outlink" src="/images/out.png" alt="" />, 593but I'll hold off on the details of that until <a target="external" 594class="external" href="http://marketing.openoffice.org/ooocon2008/" 595shape="rect">November</a><img class="outlink" src="/images/out.png" 596alt="" />.</p> 597</div> 598<div class="weblogentryfooter">By Jim White  <a href= 599"/wiki/News_blogentry_150908_1.html" shape="rect">Permalink</a> 600-<a class="weblogentrycomments" href= 601"/wiki/News_blogentry_150908_1.html#comments">Comments</a></div> 602</div> 603<div class="weblogentry"> 604<div class="weblogentryheading">May 12, 2008 11:00 AM</div> 605<div class="weblogentrytitle">IFCX Wings & G4OO updated, plus 606we've got Scala!</div> 607<div class="weblogentrybody"><a class="wikipage" href= 608"/wiki/Publish.html" shape="rect"></a> The v0.6 release of IFCX 609<a class="wikipage" href="/wiki/GroovyForOpenOffice.html" shape= 610"rect">Groovy For OpenOffice</a> and <a class="wikipage" href= 611"/wiki/Wings.html" shape="rect">Wings</a> (version numbers bumped 612to align for the moment), demonstrated at CommunityOne and JavaOne 613last week, are available for download in <a target="external" 614class="external" href= 615"http://sourceforge.net/project/showfiles.php?group_id=199110" 616shape="rect">the usual place</a><img class="outlink" src= 617"/images/out.png" alt="" />. 618<p>A big <b>THANK YOU</b> to Brendan Humphreys and Peter Moore of 619<a target="external" class="external" href= 620"http://www.atlassian.com/" shape="rect">Atlassian</a><img class= 621"outlink" src="/images/out.png" alt="" /> for the invitation and 622support to present Wings in a lightning talk at CommunityOne. I did 623have a nasty demo devil bite that prevented a live demonstration, 624so next time I'll have a Time Machine backup with me...</p> 625<p>This release of Wings should be useful on at least an 626experimental level for the adventurous. The examples include plenty 627of Groovy of course, but also Ruby/JRuby, Python/Jython, and 628Haskell/Jaskell.</p> 629<p><a target="external" class="external" href= 630"http://ant.apache.org/ivy/" shape="rect">Apache Ivy</a><img class= 631"outlink" src="/images/out.png" alt="" /> integration enables JAR 632dependencies to be loaded dynamically and languages are pluggable 633via the <a target="external" class="external" href= 634"http://jcp.org/en/jsr/detail?id=223" shape="rect">JSR 223: 635Scripting for the Java Platform</a><img class="outlink" src= 636"/images/out.png" alt="" />. JDK 1.5 is all that is required, 637although JDK 1.6 or 1.7 are fine of course.</p> 638<p>G4OO v0.6 features <a target="external" class="external" href= 639"http://groovy.codehaus.org/" shape="rect">Groovy 6401.5.6</a><img class="outlink" src="/images/out.png" alt="" /> and 641Apache Ivy 2.0-SNAPSHOT bundled with the <a target="external" 642class="external" href="http://ivyroundup.googlecode.com/" shape= 643"rect">Ivy RoundUp</a><img class="outlink" src="/images/out.png" 644alt="" /> <a target="external" class="external" href= 645"http://ivyroundup.googlecode.com/svn/wiki/files/packager.html" 646shape="rect">Builder Resolver</a><img class="outlink" src= 647"/images/out.png" alt="" />.</p> 648<p>Using that pluggable language scheme, and thanks to a sprint at 649the <a target="external" class="external" href= 650"http://scalaliftoff.com/" shape="rect">Scala lift 651off</a><img class="outlink" src="/images/out.png" alt="" /> last 652Saturday with the invaluable assistance of <a target="external" 653class="external" href="http://lexspoon.org/" shape="rect">Lex 654Spoon</a><img class="outlink" src="/images/out.png" alt="" /> and 655<a target="external" class="external" href= 656"http://www.zeroturnaround.com/author/toomasr/" shape="rect">Toomas 657Romer</a><img class="outlink" src="/images/out.png" alt="" />, 658<b>WE HAVE SCALA</b>! You can download it from <a target="external" 659class="external" href= 660"http://sourceforge.net/project/showfiles.php?group_id=199110" 661shape="rect">the usual place</a><img class="outlink" src= 662"/images/out.png" alt="" />.</p> 663</div> 664<div class="weblogentryfooter">By Jim White  <a href= 665"/wiki/News_blogentry_120508_1.html" shape="rect">Permalink</a> 666-<a class="weblogentrycomments" href= 667"/wiki/News_blogentry_120508_1.html#comments">Comments</a></div> 668</div> 669</div> 670<h4 id="section-Main-NewsArchive"><a class="wikipage" href= 671"/wiki/News.html" shape="rect">News Archive</a></h4> 672<h3 id="section-Main-RecentChanges">Recent Changes</h3> 673<div class="org-ifcx-recent-changes"> 674<table border="0" cellpadding="0"> 675<tr> 676<td colspan="2" rowspan="1"><b>2013-11-24</b></td> 677</tr> 678<tr>
679<td width="30%" rowspan="1" colspan="1"><a class="wikipage" href= 680"/wiki/JimWhite_blogentry_231113_1.html" shape= 681"rect">JimWhite_blogentry_231113_1</a></td> 682<td rowspan="1" colspan="1">13:13:08</td> 683</tr> 684<tr> 685<td colspan="2" rowspan="1"><b>2013-11-23</b></td> 686</tr> 687<tr> 688<td width="30%" rowspan="1" colspan="1"><a class="wikipage" href= 689"/wiki/Main.html" shape="rect">Main</a></td> 690<td rowspan="1" colspan="1">00:04:12</td> 691</tr> 692</table> 693</div> 694</div>
695<script type="text/javascript" src= 696"http://profile.typepad.com/services/embed/tpc/6a010536596158970c010536546d8f970b/counts_embed.js"> 697</script>
697 698<div id="footer"> 699<p>© 2006-2008 <a class="navlink" href= 700"/wiki/JimWhite.html">James P. White</a> | Design by <a class= 701"external" href="http://andreasviklund.com">Andreas Viklund</a> | 702Hosting by <a target="external" href= 703"http://sourceforge.net/projects/ifcx/"><img src= 704"http://sflogo.sourceforge.net/sflogo.php?group_id=199110&type=4" 705width="105" height="31" border="0" alt= 706"SourceForge.net Logo" /></a></p> 707</div> 708</div> 709</body> 710</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.