PageSourceSearch

https://ifcx.org/

html ifcx.org collected 2026-09-27 08:55:40 UTC 34,945 bytes, 710 lines download raw bytes

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&#160;&#160;<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&#160;&#160;<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 &lt;[email protected]&gt;
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&lt;Closure&gt; 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 &lt; 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 &lt;= 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==&gt;
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&#160;&#160;<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&#160;&#160;<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&#160;&#160;<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 &amp; 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&#160;&#160;<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>&#169; 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&amp;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.