<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#1E66AE;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#1E66AE;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
tt
        {mso-style-priority:99;
        font-family:"Courier New";}
span.apple-style-span
        {mso-style-name:apple-style-span;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
p.attach, li.attach, div.attach
        {mso-style-name:attach;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:6.0pt;
        font-family:"Arial","sans-serif";}
p.bold, li.bold, div.bold
        {mso-style-name:bold;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:6.5pt;
        font-family:"Arial","sans-serif";
        font-weight:bold;}
p.green, li.green, div.green
        {mso-style-name:green;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:#628C2A;}
p.replbq, li.replbq, div.replbq
        {mso-style-name:replbq;
        margin:2.0pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.ad, li.ad, div.ad
        {mso-style-name:ad;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.underline, li.underline, div.underline
        {mso-style-name:underline;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.yshortcuts
        {mso-style-name:yshortcuts;}
p.ad1, li.ad1, div.ad1
        {mso-style-name:ad1;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.ad2, li.ad2, div.ad2
        {mso-style-name:ad2;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.underline1, li.underline1, div.underline1
        {mso-style-name:underline1;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        text-decoration:underline;}
span.yshortcuts1
        {mso-style-name:yshortcuts1;
        font-family:"Verdana","sans-serif";
        font-weight:bold;}
span.yshortcuts2
        {mso-style-name:yshortcuts2;
        font-family:"Verdana","sans-serif";
        font-weight:normal;}
span.EmailStyle35
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:729616093;
        mso-list-template-ids:-1216037226;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body bgcolor=white lang=EN-AU link="#1E66AE" vlink="#1E66AE">

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hi Dave,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<div id=ygrp-mlmsg>

<div id=ygrp-msg>

<div id=ygrp-text>

<div>

<div>

<div>

<p class=MsoNormal style='margin-left:36.0pt'>Well what I'm thinking is the
language of communication is just Self.  I've done Forth systems that used
Forth as their communication protocol and it worked beautifully.  I see no
reason why sending a message shouldn't just be modeled directly as a message
send :)<o:p></o:p></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Sounds good. <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

</div>

<div>

<p class=MsoNormal style='margin-left:36.0pt'>I've done a lot of apps with
XMPP, AMQP, and custom communication protocols over the years, and the lesson
I've learned is that it isn't the transport mechanism that matters.  What
really matters is what are you shuffling across the wire?  If you're just
sending state, you're setting yourself up for failure..  You really have
to be sending behavior back and forth to make the system scale.  ESB get
this to a degree.  Adding ZeroMQ & Mongrel2, or Ejabberd &
Mochweb, or X & Y, is far less important than designing a programming model
where pushing a button no a web form literally sends a message to an object on
a remote server.<o:p></o:p></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I think I agree, though I see ZeroMQ as a replacement for
sockets/etc rather than a full featured system like AMQP. I think in ZeroMQ the
actual messages are blobs – ZeroMQ only does routing. Which means that
you could run a pure Self messaging system over it and take advantage of the
handling of the messy underlying connection details.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

</div>

</div>

<p class=MsoNormal style='mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:
12.0pt;margin-left:36.0pt'>I've actually been building an object to map Self
sent over the wire via sockets to Erlang style processes.  It listens on
any number of sockets, files, or process ids, and sends a message to the
registered delegates.  Globals can be referenced in the messages by name,
and sandboxing is done by just using objects which never refer to lobby but use
a sandbox* reference to a minimal Self world.<o:p></o:p></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>I’m very interested in
this. Are you intending to share it? <o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>I have played around with
similar ideas and sandboxing turned out to be harder than I thought. In
particular to do a proper job, my conclusion was there needed to be VM support
for restricting access to primitives and a restructuring of how numbers and
strings (amongst other) objects were structured.<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>ie at the moment you can do
things like:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>42 lobby blowUpWorld<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>‘Hello’ _BlowUpWorld<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>These are certainly fixable.<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>What are you using for a
serialisation/deserialisation mechanism? It would be nice but not necessary to
use the normal way of defining Self objects. Unfortunately the Self parser is
in the VM and isn’t securable, ie<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>(| key = blowUpWorld |)<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>There is code to build an
object tree from Self code in the system but I don’t think it does the
next step of generating actual Self methods.<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal style='margin-left:36.0pt'>My goal with the JS side of
things for this is to just have the Self code necessary to render a UI just
directly run in JS using the translation scheme I mentioned.  HTML5 canvas
+ Self + this proxy object => self in the browser.  I'm also thinking
about doing a Webkit plugin and just bind the Self VM as a plugin, using this
Self <-> JS bridge code to once again embed Self in the browser.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p> </o:p></p>

</div>

</div>

</div>

</div>

<div>

<p class=MsoNormal><span style='color:#1F497D'>Or the Google nativeclient,
though the vm does funky things so mightn’t play well in a sandbox.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>If you have a HTML5/javascript implementation of the Self
morphic ‘canvas’ which talks over the wire to a Self world then it might
not be too slow even if the world is in the cloud. You could also take
something like QT and its inbuilt javascript interpreter and do the same thing
to make ‘native’ apps.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Cheers,<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><br>
Russell<o:p></o:p></span></p>

</div>

</div>

</body>

</html>