<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>An eclectic-pencil blog &#187; Tool tip</title>
	<atom:link href="http://plymouthreliable.com/blog/index.php/category/tool-tip/feed/" rel="self" type="application/rss+xml" />
	<link>http://plymouthreliable.com/blog</link>
	<description>A software developer&#039;s blog on all things Curl Surge RTE, Smalltalk Seaside, ICON UNICON, ObjectIcon, Rebol, Logtalk</description>
	<lastBuildDate>Mon, 10 May 2010 17:29:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Simple Browser and Clean Browser</title>
		<link>http://plymouthreliable.com/blog/2009/06/26/simple-browser/</link>
		<comments>http://plymouthreliable.com/blog/2009/06/26/simple-browser/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 13:25:41 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Curl]]></category>
		<category><![CDATA[Tool tip]]></category>
		<category><![CDATA[browser]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2009/06/26/simple-browser/</guid>
		<description><![CDATA[I took a moment to look at my Process Explorer (MS SysInternals) after starting up Google&#8217;s GMail Desktop applet.  The price? Three processes consuming about 60 MB of available memory (this is Windows, so we are talking &#8220;available&#8221; and not my paltry 2 GB of RAM.) And when I open my gmail inside my [...]]]></description>
			<content:encoded><![CDATA[<p>I took a moment to look at my Process Explorer (<a href="http://technet.microsoft.com/en-us/sysinternals/default.aspx">MS SysInternals</a>) after starting up Google&#8217;s GMail Desktop applet.  The price? Three processes consuming about 60 MB of available memory (this is Windows, so we are talking &#8220;available&#8221; and not my paltry 2 GB of RAM.) And when I open my gmail inside my LW site-specific Curl embedded browser? I have only added 1.2 MB to the load carried by the Curl RTE.  Of course Internet Explorer and FireFox do help my harddrives stay in shape with all that swapping &#8230;. or do those folks think that all we do is browse the net with no real work applications open at the same time?  Oh right .. those applications are going to be built into the internet browser &#8230;</p>
<p>So why the difference?  The plugins and the bookmarks.  I have a bookmarks set which exports as 5 Mb.  It is too much for Maxthon to load.  It is deadly when I ask even IE8 to first add a bookmark (go make coffee or tea or take a stroll.)</p>
<p>But Curl can load dynamically, so watch for the bookmarking addition to our Curl embedded browsers over at <a href="http://www.logiquewerks.com">LogiqueWerks</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2009/06/26/simple-browser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk IDE for SNOBOL</title>
		<link>http://plymouthreliable.com/blog/2009/05/24/tcltk-ide-for-snobol/</link>
		<comments>http://plymouthreliable.com/blog/2009/05/24/tcltk-ide-for-snobol/#comments</comments>
		<pubDate>Sun, 24 May 2009 16:01:52 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[ICON]]></category>
		<category><![CDATA[ObjectIcon]]></category>
		<category><![CDATA[SNOBOL]]></category>
		<category><![CDATA[Tool tip]]></category>
		<category><![CDATA[UNICODE]]></category>
		<category><![CDATA[UNICON]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2009/05/24/tcltk-ide-for-snobol/</guid>
		<description><![CDATA[If you are interested in pattern-matching languages but never learned SNOBOL, you might try the IDE by Rafal M. Sulejman. 
If you are using linux, just make a few edits to the tksliderc file to flip the slash delimiters and set the path to your SNOBOL4.  I also replaced the gvim entry with gedit [...]]]></description>
			<content:encoded><![CDATA[<p>If you are interested in pattern-matching languages but never learned SNOBOL, you might try the IDE by <a href="http://rms.republika.pl/slide.shtml">Rafal M. Sulejman</a>. </p>
<p>If you are using linux, just make a few edits to the tksliderc file to flip the slash delimiters and set the path to your SNOBOL4.  I also replaced the gvim entry with gedit but had to give an editor parameter of &#8211;new-window as it refused to add a tab to a running instance.  A very handy feature is &#8220;Save Transcript&#8221; which for starters will save the hot-key guide when you first start the IDE.</p>
<p>If you like python or converge, you will be at home with the indenting.  And there is SNOBOL for python in SnoPy.</p>
<p>I can only hope that someone extends the editor with XOTcl.  SNOBOL patterns are also available for UNICON, one of the OOP variants of ICON, the language which evolved from the SNOBOL5 project.</p>
<p>It would appear that SNOBOL was the first language accidentally released as open-source (part of the story preserved in the Griswold papers here in MPLS at UMN.)</p>
<p>The story of SNOBOL and performance can be found by a google on SPITBOL over at <a href="http://www.duckduckgo.com">duckduckgo.com</a></p>
<p>For another OOP-variant of ICON (this one with UNICODE) see the <a href="http://code.google.com/p/objecticon">objecticon</a> project ( a name choice as regrettable as ICON and UNICON as any web search will reveal.) </p>
<p>For a pythonic variant of ICON, see <a href="http://www.convergepl.org">converge</a>.  For the latest on-going contribution of <a href="http://en.wikipedia.org/wiki/Icon_(programming_language)">ICON</a> to programming languages, see Fibers in Ruby 1.9</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2009/05/24/tcltk-ide-for-snobol/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Really cool Curl</title>
		<link>http://plymouthreliable.com/blog/2007/09/13/really-cool-curl/</link>
		<comments>http://plymouthreliable.com/blog/2007/09/13/really-cool-curl/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 22:08:28 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Curl Surge]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Tool tip]]></category>
		<category><![CDATA[programming tip]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2007/09/13/really-cool-curl/</guid>
		<description><![CDATA[I was pointing out JSForth to a developer on-line (Forth interpreter in JavaScript) which I thought was cool but then I see this in Curl: a folding coding window in a web page.
Here is the Curl 5.0 code for the applet:

{curl 5.0 applet}
{curl-file-attributes character-encoding = "windows-latin-1"}
{applet manifest = "manifest.mcurl"}

{include "./utils/guide-header.scurl"}
{include "./utils/support.scurl"}

   {x-example-ref
  [...]]]></description>
			<content:encoded><![CDATA[<p>I was pointing out JSForth to a developer on-line (Forth interpreter in JavaScript) which I thought was cool but then I see this in Curl: a folding coding window in a web page.</p>
<p>Here is the Curl 5.0 code for the applet:</p>
<blockquote><pre><code>
{curl 5.0 applet}
{curl-file-attributes character-encoding = "windows-latin-1"}
{applet manifest = "manifest.mcurl"}

{include "./utils/guide-header.scurl"}
{include "./utils/support.scurl"}

   {x-example-ref
        title = "Folding Tree example",
        {url "./examples/RIA_with_Curl.curl"}
    }</code></pre>
</blockquote>
<p>What this does is create a labeled hotspot on my page: with one click an entire Curl client-side scripting environment opens.  The running example is there; the code that is running is there; buttons to execute, save applet; revert changes; close popup &#8211; and the panel allows editing the script.</p>
<p>Clicking on &#8216;Execute&#8217; causes a popup version of the script to run with your changes.</p>
<p>I had seen this cool way of working with code as part of the <a href="http://eclectic-pencil.blogspot.com/2007/07/example-is-curl-developers-example.html">example</a> macro</p>
<blockquote><p>{example<br />
   &#8230;<br />
}
</p></blockquote>
<p>What was new was the &#8216;expandable&#8217; and &#8216;collapsible&#8217;.</p>
<p>I cannot imagine this being more concise in JavaFX or in Groovy. Here is the Curl procedure from the include file:</p>
<blockquote><pre><code>
|| Copyright (C) 1998-2006, Sumisho Computer Systems Corp.
|| All Rights Reserved.
{define-proc {x-example-ref
                 title:String = {message Example},
                 href:Url, ...}:Visual
    let display:Graphic = {example-ref title = title, href, ...}
    {for-each-graphic
        {proc {g:Graphic}:void
            {type-switch g
             case g:TextEditPanel do
                || consume right click, so TreeControl ignores it
                {g.add-event-handler
                    {on e:PointerPress do
                        {if e.button == right-button then
                            {e.consume}}}}}},
        display}
    {return
        {text-width-display
            {expandable
                border-width = 2px,
                {bold {value title}},
                display}}}
}
|| *** calls the following ***
{define-proc public {example-ref
                        loc:Url,
                        title:#String = null,
                        base-url:Url = {get-base-url},
                        manifest:ComponentManifest =
                           {get-default-manifest},
                        package:OpenPackage =
                            {OpenPackage
                                CURL.IMPLICIT.APPLET,
                                CURL.IDE.DOCUMENTATION,
                                manifest = manifest},
                        ...
                    }:Graphic
    let result:any =
        {try
            {evaluate
                base-url = loc,
                package = package,
                {format "\{example title = %w,\n %s\}",
                    title,
                    {read-from loc}}}
         catch e:Exception do
            {paragraph
                Error in {bold {value loc}}:{br}
                {text color = "red", {value e}}}}
    {return {Frame result, ...}}
}
</code></pre>
</blockquote>
<p>It is perfectly readable.  When you see &#8216;&#8230;&#8217; inside <strong>{ }</strong> what you are seeing are <strong>rest</strong> arguments, or unnamed arguments for variable parameter procedure calls.  And then again in the </p>
<blockquote><p>{ return {Frame result, &#8230;} }</p></blockquote>
<p> &#8211; these are not code elisions!  The critical <strong>{example }</strong> macro is in the <em>evaluate</em> block.  Dynamic language fans will note that the result is their preferred type: <strong>any</strong>.</p>
<p>And to learn to use this<em> expand/collapse &#8216;live&#8217; code environment/widget</em> all I had to do was right-click on a folding code-editor page in the Curl Documentation Viewer which is itself Curl.  I copied in the files to include for my applet and set a few imports in my &#8216;manifest.mcurl&#8217; file.  No CLASSPATH to look at, no question of which JARs are where.  No JavaScript library required. As cool as Smalltalk, Strongtalk or the XOTcl IDE.</p>
<p>To see one in action, you will need the XML Document Model for Curl 5.0 from <a href="http://www.curl.com">curl.com</a><br />
Just install the RTE, then the IDE and then the XDM.  Open your Documentation Viewer and search for &#8216;WSDK XML Document Model&#8217; or just &#8216;<em>build-xml</em>&#8216;</p>
<p>The <em>proc</em> identifies an anonymous procedure and we pass in what Groovy calls a &#8216;closure&#8217; at <em>on e:PointerPress do</em> or what would likely be an inner class Listener in Java.</p>
<p>If you know something as cool using FLASH with ActionScript, post a snippet or a link to same.<br />
Of course you could do this using AJAX with Prototype and Scriptaculous.  But I got this page out in a matter of minutes.  Oh yes, Sun says JavaFX is not about &#8216;throwing up pages&#8217; &#8230;</p>
<p>Imagine that you are working on a problematic page.  You drop in a gem like this and now you are displaying and experimenting with your code.  Only <a href="http://www.seaside.st">Seaside</a> for Smalltalk can rival this as far as I am aware but that requires some understanding of Smalltalk.  I love Seaside, but I know of nothing that can beat this.  Of course <a href="http://www.rebol.com">Rebol</a> 3.0 is on the way &#8230;</p>
<p>As for snide remarks from Sun in their JavaFX promo, there are quick ways to throw up a web page&#8230; I like <a href="http://www.blocknote.net">blocknote</a> and there is the Meta/HyperCard Revolution product or even MS Word or FrontPage in a pinch&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2007/09/13/really-cool-curl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>groovy Grails tips and cheatsheet</title>
		<link>http://plymouthreliable.com/blog/2007/08/07/groovy-grails-tips-and-cheatsheet/</link>
		<comments>http://plymouthreliable.com/blog/2007/08/07/groovy-grails-tips-and-cheatsheet/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 18:45:36 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Software development]]></category>
		<category><![CDATA[Tool tip]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2007/08/07/groovy-grails-tips-and-cheatsheet/</guid>
		<description><![CDATA[Note: For IE7 or Firefox to open any of the links in this post in a tab rather than a new window, hold down a CTRL key when your click a link.
Over at eclectic-pencil.blogspot.com I have some notes on getting Grails up and running without having to chase through a FAQ and some mail-list threads. [...]]]></description>
			<content:encoded><![CDATA[<p>Note: For IE7 or Firefox to open any of the links in this post in a tab rather than a new window, hold down a CTRL key when your click a link.<br />
Over at <a href="http://www.eclectic-pencil.blogspot.com">eclectic-pencil.blogspot.com</a> I have some notes on getting Grails up and running without having to chase through a FAQ and some mail-list threads. I may add a few pages <a href="http://plymouthreliable.com/blog/grails-baseline-directories/">here</a>. At the moment I am completely absorbed with the <a href="http://rifers.org" target="_rifers">RIFE </a>web app framework, so that may get a few pages as well. RIFE continuations are a great introduction to the <a href="http://www.seaside.st" target="_Seaside">Seaside</a> continuations framework for folks more at home with Java. RIFE is also a framework in more than name-only.  And the author of the framework aims it at java developers with no promises of &#8216;RIA without programming&#8217; and, well, less hype: they do stretch the 80-20 rule in claiming that &#8220;you get 90% of the features with 10% of the usual effort, thanks to its full stack.&#8221;  RIFE continuations use pause(), rather like Ruby uses yield(), so that is another avenue to approach RIFE.  The <a href="http://rifers.org/wiki/display/RIFE/Groovy+support" target="_wiki">RIFE wiki</a> has a page on using <strong>groovy with RIFE </strong>so life will be interesting. Here is a recent <a href="http://www.artima.com/forums/flat.jsp?forum=276&#038;thread=210623" target="_artima">Artima </a>piece on JRuby and RIFE. The article has a link worth visiting on <a href="http://www.terracotta.org/confluence/display/wiki/RIFE+Workflow"target="_artima">Terracotta</a> with RIFE.</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2007/08/07/groovy-grails-tips-and-cheatsheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LRcurl Curlr, LcurlR and (CURL) parentheses</title>
		<link>http://plymouthreliable.com/blog/2007/06/17/lrcurl-curlr-lcurlr-and-curl-parentheses/</link>
		<comments>http://plymouthreliable.com/blog/2007/06/17/lrcurl-curlr-lcurlr-and-curl-parentheses/#comments</comments>
		<pubDate>Mon, 18 Jun 2007 02:11:39 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Curl Surge]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Tool tip]]></category>
		<category><![CDATA[programming tip]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2007/06/17/lrcurl-curlr-lcurlr-and-curl-parentheses/</guid>
		<description><![CDATA[LRcurl would be the application of a Right and then a Left curly brace to a CURL expression.
Curl is proud to be LISP-like without the parentheses.
But it is sometimes less than clear how parentheses are to be interpreted in CURL.
It is clear enough how parentheses affect the application of mathematical operators.
But consider this: {let t1:int, [...]]]></description>
			<content:encoded><![CDATA[<p>LRcurl would be the application of a Right and then a Left curly brace to a CURL expression.</p>
<p>Curl is proud to be LISP-like without the parentheses.</p>
<p>But it is sometimes less than clear how parentheses are to be interpreted in CURL.</p>
<p>It is clear enough how parentheses affect the application of mathematical operators.</p>
<p>But consider this: {let t1:int, t2:int = 42}</p>
<p>You may be aware that this leaves the value of t1 as zero.</p>
<p>So consider this: {set (t1, t2) = (1, 2)} </p>
<p>How are we to understand this as a CURL assignment statement?</p>
<p>The index to the on-line CURL documentation is resoundingly silent on the rationale for this syntax.</p>
<p>Set with parentheses is a fact.  Is it because () is an operator?</p>
<p>But why should it not be the case that after {set (t1, t2) =  42}  both t1 and t2 are 42 instead of this being a syntax error?</p>
<p>In the case of {set (t1, t2) =  {my_func}} we know that the number of values returned by my_func must be two values.</p>
<p>You may want to guess at these values: {let t3:int, t4:int = (3,4)}</p>
<p>If you guessed 0 and 3, can you also tell me why this was not also a syntax error?  It is enough to make my curly hair, well, curl left then right.<br />
LcurlR</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2007/06/17/lrcurl-curlr-lcurlr-and-curl-parentheses/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scaling the outer walls:  Oz/Mozart, osc and ozengine</title>
		<link>http://plymouthreliable.com/blog/2007/06/13/scaling-the-outer-walls-ozmozart-osc-and-ozengine/</link>
		<comments>http://plymouthreliable.com/blog/2007/06/13/scaling-the-outer-walls-ozmozart-osc-and-ozengine/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 20:40:19 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Oz-Mozart]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Tool tip]]></category>
		<category><![CDATA[programming tip]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2007/06/13/scaling-the-outer-walls-ozmozart-osc-and-ozengine/</guid>
		<description><![CDATA[Positive: There is an Oz tutorial started at eclectic
Warning: since Unicode there is no longer a single quote and a dbl-quote character: just as the left-Alt key was never the same scan code as the right-Alt key.  In all that follows, copy the code into a reliable ANSI code editor and flip all &#8217;single&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Positive: There is an Oz tutorial started at <a href="http://www.plymouthreliable.com/blog/ozmozart-tutorial">eclectic</a><br/><br />
Warning: since Unicode there is no longer a single quote and a dbl-quote character: just as the left-Alt key was never the same scan code as the right-Alt key.  In all that follows, copy the code into a reliable ANSI code editor and flip all &#8217;single&#8217; quotes to an ANSI apostrophe as on an American ASCII QWERTY keyboard and all dbl quotes to a SHIFT-apostrophe.  Otherwise you are left with left single quotes, right-single quotes, left-dbl-quotes and right-dbl-quotes which will cause errors in Mozart.  Do not use &#8216;back-tick&#8217; (unshifted-~) as your apostrophe character.</p>
<p>You should not have to be a Prolog programmer to learn Oz, but short of being one already, what sense could you make of the errors you will encounter trying to follow the introduction to compiling an Oz application?  The &#8216;Aufhebung&#8217; issue again.  Or you must almost know it just to learn it.</p>
<p>Here goes.</p>
<p>In Rebol you would just script it so:<br />
<blockquote>write %dump.txt read http://localhost:8080/perl/get_env.prl</p></blockquote>
<p>But in Oz you will need to compile to a functor, so let&#8217;s get started on the tutorial&#8217;s Webget.oz</p>
<p>You will need to wrap the file as a functor, so we start with<br />
<blockquote>functor</p>
<p>end</p></blockquote>
<p>We will open STDIN and STDOUT so we need Open and this will be an Application so we will import both:<br />
<blockquote>functor<br />
import<br />
&nbsp;&nbsp;&nbsp;Application<br />
&nbsp;&nbsp;&nbsp;Open<br />
end
</p></blockquote>
<p>What follows is the code from the tutorial which will <strong>not</strong> compile (<strong>not</strong> in OPI, <strong>not</strong> on a cmd line):<br />
<blockquote>
<pre><code>
functor
import
  Application
  Open
define
   Args = {Application.getArgs record('in'(single type:string)
                                  'out'(single type:string))}
   Status = try
	I={New Open.file init(url:  Args.'in')}
	O={New Open.file init(name: Args.'out'
        flags:[write create truncate])}
	in
	  local
	      proc { Copy}
	          S={I read(list:$)}
	       in
	          if S=="" then
	             {O write(vs:S)} { Copy}
	          end
	       end
	    in
	{ Copy}
    end
	catch _ then 1
	end
{Application.exit Status}
end</code></pre>
</blockquote>
<p>The warning we will receive will be an <strong>arity mismatch</strong> for <em>Copy</em>.<br />
I experimented with {CopyWWW _} and with {CopyWWW X} in place of {Copy}<br />
Running <em>ozc -c</em> in <strong>TextPad</strong> compiles succesfully by using <em>{Copy _}</em> in the first 2 occurences of <em>{Copy}</em>.  Ditto for selecting &#8216;Compile File&#8217; on the emacs <em>oz</em> menu.<br />
Now on to compiling that <em>oza</em> file.<br />
To get the <em>oza</em> file I had to use a cmd session: </p>
<blockquote><p>ozc -c Webget.oz -o Webget.oza</p></blockquote>
<p>Otherwise compiling (in TextPad or emacs) gave me just Webget.ozf<br />
Now I could run the ozengine against a web page: </p>
<blockquote><p><code>ozengine Webget.oza --in http://localhost:8080/perl/get_env.prl --out dump.txt</code></p></blockquote>
<p>The program will only exit with CTRL-C CTRL-C and leaves file handles open but if you are content to run it just once </p>
<blockquote><p>type dump.txt</p></blockquote>
<p>Oops&#8230; no file?</p>
<p>We back track by revisiting the code.</p>
<blockquote><pre><code>
functor
import
  Application
  Open
  Show           ; we will try to Show Status
define
   Args = {Application.getArgs record(
                'in'(single type:string)
                'out'(single type:string))}  ;; variable names are words
   Status = try
	In={New Open.file init(url:  Args.'in')}
	Out={New Open.file init(name: Args.'out'
        flags:[write create truncate])}
	in
	  local
	      proc { Copy}
	          Str={In read(list:$)}   ;; lhs var name is now a word
	       in
	          if Str=="" then
	             {Out write(vs:Str)} { Copy}
	          end
                     {In close}
                     {Out close}
	       end
	    in
	{ Copy}
    end
               0   ;; this was a missing ZERO as in 'success' ?
                    ;; (given that a ONE follows next on error)
	catch _ then
                    {Show Status}
                    1   ;; any exception is failure -
                        ;; was the file readonly?
	end
{Application.exit Status}     ;; Status remains unknown
end</code></pre>
</blockquote>
<p>Now we compile without ARITY issues &#8230; but still fail to write a file &#8230;</p>
<p>So now to look at <a href="http://www.info.ucl.ac.be/~pvr/ds/mitbook.html">file IO</a>.</p>
<p>Hmm.  The file io.oz offered for our edification has no error handling.</p>
<p>We try Webget2.oz for local disk files as follows:
<pre><code>
<blockquote>functor
import
   Application Open
define
   Args = {Application.getArgs record('in' (single type:string)
                                                'out' (single type:string))}
   Status = try
	In={New Open.file init(name: Args.'in')}
	Out={New Open.file init(name: Args.'out'
        flags:[write create truncate])}
	in
	  local
	      proc { Copy }
	          Str={In read(list:$)}
	       in
	          if Str=="" then
	             {Out write(vs:Str)}
	             { Copy }
	          end
	          {In close}
	          {Out close}
	       end
	    in
	{ Copy }
    end
    0
	catch _ then
		1
	end
{Application.exit Status}
end</code></pre>
</blockquote>
<p>Which works great so the issue is reading the URL &#8230; It comes up in the browser and Rebol reads it fine as follows:</p>
<blockquote><p>write %dump.txt &#8220;&#8221; ; we nix that file<br />
write %dump.txt read http://localhost:8080/perl/get_env.prl</p></blockquote>
<p>in a Rebol shell. So   </p>
<blockquote><p>if Str\=&#8221;" then</p></blockquote>
<p> must be non-terminating for some URL&#8217;s on Win32.  So we will read the whole URL first.<br />
Now, <a href="http://www.mozart-oz.org/documentation/loop/node1.html#label1">how to iterate over a list</a> &#8230; and then we start back at <a href="http://www.mozart-oz.org/documentation/base/index.html">Lists</a> and progress to the list <a href="http://www.mozart-oz.org/documentation/base/index.html">module</a></p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2007/06/13/scaling-the-outer-walls-ozmozart-osc-and-ozengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Command line Smalltalk ( for David Cyr )</title>
		<link>http://plymouthreliable.com/blog/2007/05/21/command-line-smalltalk-for-david-cyr/</link>
		<comments>http://plymouthreliable.com/blog/2007/05/21/command-line-smalltalk-for-david-cyr/#comments</comments>
		<pubDate>Mon, 21 May 2007 14:38:21 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Software development]]></category>
		<category><![CDATA[Tool tip]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2007/05/21/command-line-smalltalk-for-david-cyr/</guid>
		<description><![CDATA[I must give Perl it&#8217;s due: amok it may be, but @INC is there.
There is a post at Artima&#8217;s Agile Buzz by Cincom VisualWorks&#8217; Jim Robertson on how to load the code for BottomFeeder into a VW Smalltalk 7.5 image (an aggregated source code file, if you will &#8211; Smalltalk is not file-based in the [...]]]></description>
			<content:encoded><![CDATA[<p>I must give Perl it&#8217;s due: amok it may be, but @INC is there.</p>
<p>There is a post at <a href="http://www.artima.com/forums/flat.jsp?forum=155&#038;thread=204725">Artima&#8217;s Agile Buzz</a> by Cincom VisualWorks&#8217; Jim Robertson on how to load the code for <a href="http://www.cincomsmalltalk.com/BottomFeeder/">BottomFeeder</a> into a VW Smalltalk 7.5 image (an aggregated source code file, if you will &#8211; Smalltalk is not file-based in the way C++ is file-based or the way java packages are file and directory hierarchy-based).</p>
<p>In my case that meant running </p>
<blockquote><p>I:\vw7.5nc\image>..\bin\win\visual.exe visualnc.im -filein ..\scripts\build-bf-dev.st</p></blockquote>
<p>The first thing you notice is that dialogs pop-up to request permission to re-load what is already loaded, so we are far from the typical command line for a programming language.  That may sound unfair to Smalltalk, but console applications are an important way to salvage legacy Smalltalk code &#8230;</p>
<p>Then the whole thing fails when an XML file is not found.</p>
<p>Here are 2 tips.</p>
<p>If you use the non-commercial VisualWorks you will be using the public repository for code, called Store.  When you connect to that repository there is no obvious way to save your connection profile.  But you must save it and it must be named </p>
<blockquote><p>cincomsmalltalk</p></blockquote>
<p>which is not the default nor offered as a default.  One way to do this is to arbitrarily flip the string for the user name from &#8216;guest&#8217; to &#8216;guest2&#8242; which triggers an enable on the SAVE button.  Save.  Now flip back to guest.  Save again.</p>
<p>Step two.  Open a workspace and DO IT on </p>
<blockquote><p>Store.RepositoryManager open</p></blockquote>
<p>and save that ConnectionProfile with an EXPORT.  Naturally I wanted to save it with my script in my new .scripts directory.  But you might naturally save it in the VW home directory.  Forget where that is? Open<br />
the System Transcript menu and check.  Ah.  Exit.  Run script from command line.</p>
<p>Ka-boom!  Busted agin.  And so here Perl gets its due.  Perl has @INC which gives you a good shot at finding files much the same as C <some.h> and INCLUDE and the java classpath ( for which I have <strong>Classpath Canuck</strong> at <a href="http://www.logiquewerks.com/">Logiquewerks</a> ( for a shameless plug.)</p>
<p>Check my command line.  I am in the ./image directory which is the execution path so that is where the &#8216;repositories.xml&#8217; file must reside.</p>
<p>Now some Smalltalk evil.  I move the file. I add a space character to a comment and ACCEPT. Away we go.  Why evil?  I just changed a method to trick Smalltalk. And not just any method. A public method in a base class.  But that is another subject.</p>
<p>Now to get intimate with BottomFeeder &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2007/05/21/command-line-smalltalk-for-david-cyr/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GNUstep ProjectCenter quirks</title>
		<link>http://plymouthreliable.com/blog/2007/05/08/gnustep-projectcenter-quirks/</link>
		<comments>http://plymouthreliable.com/blog/2007/05/08/gnustep-projectcenter-quirks/#comments</comments>
		<pubDate>Wed, 09 May 2007 00:53:33 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Software development]]></category>
		<category><![CDATA[Tool tip]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2007/05/08/gnustep-projectcenter-quirks/</guid>
		<description><![CDATA[If you are a Smalltalk developer who has never worked in Objective-C, you may want to look at GNUstep at GNUstep.org if only to see the Markup approach to UI&#8217;s found in Renaissance.
If  you are on Win32, that may mean installing the Minimal GNU toolset or Mingw and run the Msys shell.  You [...]]]></description>
			<content:encoded><![CDATA[<p>If you are a Smalltalk developer who has never worked in Objective-C, you may want to look at GNUstep at <a href="http://www.gnustep.org/">GNUstep.org</a> if only to see the Markup approach to UI&#8217;s found in <a href="http://www.gnustep.it/Renaissance/">Renaissance</a>.</p>
<p>If  you are on Win32, that may mean installing the Minimal GNU toolset or Mingw and run the <em>Msys</em> shell.  You may also have to set the env vars CC and CPP to blank if then are set for anything other than gcc.</p>
<p>But even after you have run <em>./configure</em> and </p>
<blockquote><p>make</p></blockquote>
<p>and</p>
<blockquote><p>make install</p></blockquote>
<p>you may have an exasperating moment where you ask yourself how to launch the thing&#8230;</p>
<p>The usual answer is to place yourself one directory below a directory with a name such as</p>
<blockquote><p>SomeProject.app</p></blockquote>
<p>and then run</p>
<blockquote><p>openapp SomeProject.app</p></blockquote>
<p>But to my consternation, while this runs fine on my laptop, on my boat anchor it gives a less than informative error about </p>
<blockquote><p>could not find /gnustep-install-dir &#8230; executable/script
</p></blockquote>
<p>The answer ?</p>
<blockquote><p>openapp <strong>./</strong>SomeProject.app</p></blockquote>
<p>You will almost certainly want to install the ProjectCenter application even with its occasional fatal bugs ( there is bug reporting at the GNU Savannah project ) and the Graphical Object Relationship Modeller (GORM) tool which is the new Interface Builder.</p>
<p>And with applications, if all else fails you can enter the directory and run the name EXE file &#8211; provided that you are in an Msys session configured to run GNUstep.</p>
<p>If you make Renaissance, you may have to make some little adjustments.<br />
Start with the GNUstep Msys session.<br />
cd to the Renaissance install.<br />
You will be using Msys make and there is no ./configure to run.<br />
But it may fail even if you set INCLUDE and LIB sensibly.  I simply copied</p>
<blockquote><p>GNUstep.h</p></blockquote>
<p>from ./Source to ./Source/Markup</p>
<p>When <em>make</em> got down to the Tools build, it failed again.  No settings of PATH or LIB helped, so I set the ./Tools GNUmakefile to read</p>
<p><code><br />
GSMarkupBrowser_GUI_LIBS +=<br />
    -L../Source/shared_ob/Renaissance<br />
GSMarkupLocalizableStrings_GUI_LIBS +=<br />
    -L../Source/shared_ob/Renaissance<br />
</code></p>
<p>Then <em>make</em> and <em>make install</em> ran clean.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2007/05/08/gnustep-projectcenter-quirks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mondrian IDE for Ruby</title>
		<link>http://plymouthreliable.com/blog/2007/05/08/mondrian-ide-for-ruby/</link>
		<comments>http://plymouthreliable.com/blog/2007/05/08/mondrian-ide-for-ruby/#comments</comments>
		<pubDate>Tue, 08 May 2007 16:02:12 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Tool tip]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2007/05/08/mondrian-ide-for-ruby/</guid>
		<description><![CDATA[I recently restored the Mondrian IDE for my current Win32 Ruby install.  It was not too arduous a task.

What does puzzle me is why my crisp JPG from JASC is coming up so &#8216;lossy&#8217; in this blogpage.
I hope to make the modified source available at  when I hear back from the original author.
]]></description>
			<content:encoded><![CDATA[<p>I recently restored the Mondrian IDE for my current Win32 Ruby install.  It was not too arduous a task.<br />
<img id="image17" src="http://plymouthreliable.com/blog/wp-content/uploads/2007/05/Mondrian_Ruby.jpg" alt="Mondrian IDE for Ruby" /></p>
<p>What does puzzle me is why my crisp JPG from JASC is coming up so &#8216;lossy&#8217; in this blogpage.</p>
<p>I hope to make the modified source available at <a href="http://www.logiquewerks.com"> when I hear back from the original author.</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2007/05/08/mondrian-ide-for-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reviving your Ocamlbrowser with tcl83.dll and tk83.dll</title>
		<link>http://plymouthreliable.com/blog/2007/05/08/reviving-your-ocamlbrowser-with-tcl83dll-and-tk83dll/</link>
		<comments>http://plymouthreliable.com/blog/2007/05/08/reviving-your-ocamlbrowser-with-tcl83dll-and-tk83dll/#comments</comments>
		<pubDate>Tue, 08 May 2007 15:27:24 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Tool tip]]></category>

		<guid isPermaLink="false">http://plymouthreliable.com/blog/2007/05/08/reviving-your-ocamlbrowser-with-tcl83dll-and-tk83dll/</guid>
		<description><![CDATA[I confess that I was in a Win32 cmd session when I found my Ocamlbrowser.exe to be totally unresponsive.
Addressing the problem was complicated by my having already upgraded to ActiveState TCL/TK 8.4
My suggestion is that if you have not yet upgraded your TCL/TK, preserve the DLL&#8217;s at least the .\lib directory before you uninstall ( [...]]]></description>
			<content:encoded><![CDATA[<p>I confess that I was in a Win32 cmd session when I found my Ocamlbrowser.exe to be totally unresponsive.</p>
<p>Addressing the problem was complicated by my having already upgraded to ActiveState TCL/TK 8.4</p>
<p>My suggestion is that if you have not yet upgraded your TCL/TK, preserve the DLL&#8217;s at least the .\lib directory before you uninstall ( my note on the Curl RTE resonates here &#8230; as to why we must uninstall.  But wait until I recount the &#8216;harrowing&#8217; of a PLONE upgrade&#8230; )</p>
<p>Assuming that you can get to say, a TCL 8.3.5 install, you can restore OCamlbrowser.</p>
<p>The answer came when I tried to launch from with a CYGWIN XTerm.  As so often, useful error information began to flow.  Here were the 4 steps</p>
<blockquote><p>
Copy tcl83.dll to the ocaml/bin<br />
Copy tk83.dll to the ocaml/bin<br />
Copy the directory tcl8.3 from the TCLTK/lib to the ocaml/lib<br />
Copy the directory tk8.3 from the TCLTK/lib to the ocaml/lib
</p></blockquote>
<p>And welcome to your restored Ocamlbrowser (in my case 3.09.3 )</p>
<p>PS  It seems that the Perl camel is named &#8220;Amelia&#8221; &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://plymouthreliable.com/blog/2007/05/08/reviving-your-ocamlbrowser-with-tcl83dll-and-tk83dll/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.450 seconds -->
