| Newsgroups |
gmane.comp.lang.concatenative |
| Message-ID |
<[email protected]> |
--9nlWnTS9ocNmxdhsK3FKVLWiM6a5jwOaA8HvrLV
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
DQogSGksIGV2ZXJ5Ym9keSEgSSBoZWFyZCBmcm9tIEFydHlvbSB0aGF0IGZvbGtzIHdlcmUg
aW50ZXJlc3RlZCBpbiBzb21lIGNsYXJpZmljYXRpb25zIGFib3V0IE9tLiBNeSBtaW5kIGhh
c24ndCBiZWVuIGluIHRoZSBsYW5ndWFnZSBmb3IgYSB3aGlsZSwgYnV0IEknbGwgc2VlIGlm
IEkgY2FuIHNoZWQgc29tZSBsaWdodCBvbiB3aGF0IEkgd2FzIHRyeWluZyB0byBnZXQgYXQg
b24gdGhlIHdlYnNpdGUuICBTb21lIG9mIHRoYXQgaXMgbGlrZWx5IHNwZWNpZmljIHRvIE9t
IHZzLiBwcmVmaXggbGFuZ3VhZ2VzIGluIGdlbmVyYWwuDQogDQoNCiA+IFByZWZpeCBub3Rh
dGlvbiBtb3JlIGNsb3NlbHkgbW9kZWxzIGZ1bmN0aW9uIGNvbXBvc2l0aW9uLiBJbnN0ZWFk
IG9mIHN0b3JpbmcgYSBkYXRhIHN0YWNrIGluIG1lbW9yeSwgdGhlIE9tIGV2YWx1YXRvciBz
dG9yZXMgYSBjb21wb3NlZCBwYXJ0aWFsIGZ1bmN0aW9uLg0KIA0KDQogVGhlIGluLW1lbW9y
eSBzdGF0ZSBvZiBhIGNvbXB1dGF0aW9uIGluIGEgcG9zdGZpeCBsYW5ndWFnZSBpcyByZXBy
ZXNlbnRlZCBieSBhIGRhdGEgc3RhY2suICBJbiBPbSwgYW4gaW4tbWVtb3J5IGNvbXB1dGF0
aW9uIGlzIGEgZnVuY3Rpb24gc3RhY2ssIHdoaWNoIGlzIGFuYWxvZ291cyB0byBhIGZ1bmN0
aW9uIGNvbXBvc2l0aW9uLg0KIA0KDQogRm9yIGV4YW1wbGUsIHRoZSBoeXBvdGhldGljYWwg
T20gcHJvZ3JhbSAic3dhcCB7QX0iIHdvdWxkIGZpcnN0IHB1c2ggdGhlICJzd2FwIiBmdW5j
dGlvbiwgdGhlbiB0aGUgY29uc3RhbnQgIntBfSIgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBz
dGFjayBub3cgcmVwcmVzZW50cyB0aGUgY29tcG9zaXRpb24gb2YgInN3YXAiIGFuZCAie0F9
Ii4NCiANCg0KID4gVGhlIGV2YWx1YXRvciBjYW4gcmVhZCwgcGFyc2UgYW5kIGV2YWx1YXRl
IHRoZSBpbnB1dCBzdHJlYW0gaW4gYSBzaW5nbGUgcGFzcywgc2VuZGluZyByZXN1bHRzIHRv
IHRoZSBvdXRwdXQgc3RyZWFtIGFzIHNvb24gYXMgdGhleSBhcmUgZXZhbHVhdGVkLiBUaGlz
IGNhbm5vdCBiZSBkb25lIHdpdGggYSBwb3N0Zml4LCBzdGFjay1iYXNlZCBsYW5ndWFnZSBi
ZWNhdXNlIGFueSBkYXRhIG9uIHRoZSBzdGFjayBtdXN0IHJlbWFpbiB0aGVyZSBhcyBpdCBt
YXkgYmUgbmVlZGVkIGJ5IGEgZnVuY3Rpb24gbGF0ZXIuDQogDQoNCiBUaGluayBvZiBPbSBh
cyBhIHN0cmVhbS1iYXNlZCBsYW5ndWFnZSB0aGF0IHJld3JpdGVzIGEgcHJvZ3JhbSBmcm9t
IGFuIGlucHV0IHN0cmVhbSBpbnRvIGEgcHJvZ3JhbSBzZW50IHRvIGFuIG91dHB1dCBzdHJl
YW0uDQogDQoNCg0KIEluIHRoZSBhYm92ZSBleGFtcGxlOiB3aGVuICJ7Qn0iIGlzIHB1c2hl
ZCBvbnRvICJzd2FwIHtBfSIsIHRoZSBzdGF0ZSBpcyAic3dhcCB7QX0ge0J9Iiwgd2hpY2gg
dGhlIGludGVycHJldGVyIHRoZW4gcmV3cml0ZXMgYXMgIntCfSB7QX0iLiAgVGhlc2UgYXJl
IGJvdGggY29uc3RhbnQgZnVuY3Rpb25zLCBhbmQgc2luY2UgdGhlcmUgaXMgbm8gd2F5IHRo
YXQgYW55IHJlbWFpbmluZyBwcm9ncmFtIGNvdWxkIG1vZGlmeSB0aGVzZSAoYmVjYXVzZSBp
dCBpcyBwcmVmaXgpLCB0aGV5IGNhbiBiZSB3cml0dGVuIHRvIHRoZSBvdXRwdXQgc3RyZWFt
Lg0KIA0KDQogU28gZm9yIHRoZSBwcm9ncmFtICJzd2FwIHtBfSB7Qn0gc3dhcCB7Q30iLCB0
aGlzIHdpbGwgZ2V0IHJld3JpdHRlbiB0byAie0J9IHtBfSBzd2FwIHtDfSIsIGFuZCB7Qn0g
YW5kIHtBfSBjYW4gYmUgd3JpdHRlbiB0byB0aGUgb3V0cHV0IHN0cmVhbSwgbGVhdmluZyBv
bmx5ICJzd2FwIHtDfSIgb24gdGhlICJmdW5jdGlvbiBzdGFjayIuICBXaGVuIHRoZSBjb25z
dGFudCBwcm9ncmFtIHtEfSBnZXRzIHB1c2hlZCwge0R9IGFuZCB7Q30gYXJlIG91dHB1dCB0
byB0aGUgb3V0cHV0IHN0cmVhbSwgbGVhdmluZyB0aGUgZnVuY3Rpb24gc3RhY2sgZW1wdHku
DQogDQoNCiBUbyBiZXR0ZXIgdW5kZXJzdGFuZCBldmFsdWF0aW9uIGluIE9tOiBnaXZlbiB0
aGUgcHJvZ3JhbSAic3dhcCB7QX0gc3dhcCB7Qn0ge0N9IiwgdGhlIGludGVycHJldGVyIHdp
bGw6DQogLSBQdXNoICJzd2FwIiBvbnRvIHRoZSBmdW5jdGlvbiBzdGFjaw0KIC0gUHVzaCAi
e0F9IiBvbnRvIHRoZSBmdW5jdGlvbiBzdGFjaw0KIC0gUHVzaCAic3dhcCIgb250byB0aGUg
ZnVuY3Rpb24gc3RhY2sNCiAtIFB1c2ggIntCfSIgb250byB0aGUgZnVuY3Rpb24gc3RhY2sN
CiAtIFB1c2ggIntDfSIgb250byB0aGUgZnVuY3Rpb24gc3RhY2sNCiAtIFJld3JpdGUgdGhl
IHByb2dyYW0gYXMgInN3YXAge0F9IHtDfSB7Qn0iDQogLSBSZXdyaXRlIHRoZSBwcm9ncmFt
IGFzICJ7Q30ge0F9IHtCfSINCiAtIE91dHB1dCBjb25zdGFudCBmdW5jdGlvbnMgIntDfSIs
ICJ7QX0iLCBhbmQgIntCfSIuDQogLSBUaGUgZnVuY3Rpb24gc3RhY2sgaXMgbm93IGVtcHR5
Lg0KIA0KDQogPiBGdW5jdGlvbnMgY2FuIGJlIG9wdGltaXplZCB0byBvbmx5IHJlYWQgaW50
byBtZW1vcnkgdGhlIGRhdGEgdGhhdCBpcyByZXF1aXJlZDsgc3RhY2stYmFzZWQgcG9zdGZp
eCBsYW5ndWFnZXMgaGF2ZSBubyBrbm93bGVkZ2Ugb2YgdGhlIGZ1bmN0aW9uIHRvIGFwcGx5
IHVudGlsIHRoZSBkYXRhIGlzIGFscmVhZHkgaW4gbWVtb3J5LCBvbiB0aGUgc3RhY2suDQog
DQoNCiBBbiBleGFtcGxlIGlzIHRoZSAiZHJvcCIgZnVuY3Rpb24uIEluIE9tLCB3aGVuIHRo
ZSAiZHJvcCIgZnVuY3Rpb24gaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLCBhbnkgY29uc3Rh
bnQgZnVuY3Rpb24gdGhhdCBmb2xsb3dzIChpLmUuIGFuIG9wZXJhbmQpIHdpbGwgY2F1c2Ug
dGhlICJkcm9wIiBmdW5jdGlvbiBhbmQgdGhlIGNvbnN0YW50IGZ1bmN0aW9uIHRvIGJlIHJl
d3JpdHRlbiBhcyBhbiBlbXB0eSBwcm9ncmFtLg0KIA0KDQogSW4gYSBwb3N0Zml4IGxhbmd1
YWdlLCBhIGZ1bmN0aW9uIGxpa2UgdGhpcyB3b3VsZCBmaXJzdCByZXF1aXJlIHRoZSBvcGVy
YW5kIHRvIGJlIHB1c2hlZCBvbnRvIGEgZGF0YSBzdGFjayBpbiBtZW1vcnksIGFuZCB0aGVu
ICJkcm9wIiB3b3VsZCBjb21lIGFsb25nIGFuZCByZW1vdmUgaXQuDQogDQoNCiBPbSwgaG93
ZXZlciwgbmV2ZXIgbmVlZHMgdG8gcmVhZCB0aGUgZnVsbCB0aGUgb3BlcmFuZCBpbnRvIG1l
bW9yeS4gIFRoZSAiZHJvcCIgZnVuY3Rpb24gY2FuIHJlYWQgdGhlIG9wZXJhbmQgZGlyZWN0
bHkgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIGFuZCBkaXNjYXJkIHRoZSBjaGFyYWN0ZXJzIGFz
IHRoZXkgY29tZSBpbi4NCiANCg0KID4gSW5jb21pbmcgZGF0YSwgc3VjaCBhcyBldmVudHMs
IGJlY29tZSBzaW1wbGUgdG8gaGFuZGxlIGF0IGEgbGFuZ3VhZ2UgbGV2ZWw6IGEgcHJvZ3Jh
bSBtaWdodCBldmFsdWF0ZSB0byBhIGZ1bmN0aW9uIHRoYXQgYWN0cyBhcyBhIHN0YXRlIG1h
Y2hpbmUgdGhhdCBwcm9jZXNzZXMgYW55IGFkZGl0aW9uYWwgZGF0YSBhcHBlbmRlZCB0byB0
aGUgcHJvZ3JhbSBhbmQgdHJhbnNpdGlvbnMgdG8gYSBuZXcgc3RhdGUsIHJlYWR5IHRvIHBy
b2Nlc3MgbmV3IGRhdGEuDQogDQoNCiBBcyBhbnkgT20gY29tcHV0YXRpb24gaXMgYSAiZnVu
Y3Rpb24gc3RhY2siICh3aGljaCByZXByZXNlbnRzIGEgY29tcG9zZWQgZnVuY3Rpb24pLCBv
bmUgY291bGQgaW1hZ2luZSB0aGF0IGV2ZW50cyBjb3VsZCBhcnJpdmUgYXMgcHJvZ3JhbSBl
bGVtZW50cyBvbiB0aGUgaW5wdXQgc3RyZWFtLCB0aGVyZWJ5IGNoYW5naW5nIHRoZSBzdGF0
ZSBvZiB0aGUgcHJvZ3JhbSB0byBhIG5ldyBzdGF0ZSwgcmVhZHkgdG8gcmVjZWl2ZSBuZXcg
ZXZlbnRzLiBUaGVyZWZvcmUsIGEgc2ltcGxlIGV2ZW50LWhhbmRsaW5nIG1lY2hhbmlzbSBp
cyBjZW50cmFsIHRvIHRoZSBsYW5ndWFnZS4NCiANCg0KID4gQW4gaW50ZWdyYXRlZCBkZXZl
bG9wbWVudCBlbnZpcm9ubWVudCBjYW4gcHJvdmlkZSBoaW50cyB0byB0aGUgdXNlciBhYm91
dCB0aGUgZGF0YSB0aGF0IGlzIGV4cGVjdGVkIGJ5IGEgZnVuY3Rpb24uDQoNCiANCg0KIFRo
ZSBpZGVhIGhlcmUgaXMgdGhhdCB0aGUgb3BlcmF0b3IgaXMgdHlwZWQgZmlyc3QgaW4gYSBw
cmVmaXggbGFuZ3VhZ2UgKGZvbGxvd2VkIGJ5IGl0cyBvcGVyYW5kcykuICBBcyBzb29uIGFz
IHRoZSBvcGVyYXRvciBpcyBlbnRlcmVkLCB0aGUgb3BlcmFuZHMgaXQgZXhwZWN0cyBjb3Vs
ZCBiZSBpbmRpY2F0ZWQgdG8gdGhlIHVzZXIgYnkgYW4gSURFLiAgKEkgc3VwcG9zZSB0aGlz
IGJyZWFrcyBkb3duIGZvciBwZW9wbGUgd2hvIHR5cGljYWxseSBlbnRlciBkYXRhIGluIGEg
cmlnaHQtdG8tbGVmdCBkaXJlY3Rpb24gaW4gdGhlaXIgdGV4dCBlZGl0b3IuLi4pDQoNCiAN
Cg0KIFRoYW5rcyBhZ2FpbiBmb3IgdGhlIGludGVyZXN0ISAgSG9wZSB0aGF0IGhlbHBzLiAg
UGxlYXNlIGxldCBtZSBrbm93IGlmIGFueSBvZiB0aGF0IHN0aWxsIGRvZXNuJ3QgbWFrZSBz
ZW5zZS4NCiANCg0KIEphc29uDQoNCg0K
--9nlWnTS9ocNmxdhsK3FKVLWiM6a5jwOaA8HvrLV
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>
<body style="background-color: #fff;">
<span style="display:none"> </span>
<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="position:relative;">
<div id="ygrp-msg" style="z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->
<div id="ygrp-text" >
<p><br><div class="ygroups-quoted"><div id="ygrps-yiv-86186350"><div id="ygrps-yiv-86186350">Hi, everybody! I heard from Artyom that folks were interested in some clarifications about Om. My mind hasn't been in the language for a while, but I'll see if I can shed some light on what I was trying to get at on the website. Some of that is likely specific to Om vs. prefix languages in general.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">> Prefix notation more closely models function composition. Instead of storing a data stack in memory, the Om evaluator stores a composed partial function.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">The in-memory state of a computation in a postfix language is represented by a dat
a stack. In Om, an in-memory computation is a function stack, which is analogous to a function composition.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">For example, the hypothetical Om program "swap {A}" would first push the "swap" function, then the constant "{A}" function. The function stack now represents the composition of "swap" and "{A}".</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">> The evaluator can read, parse and evaluate the input stream in a single pass, sending results to the output stream as soon as they are evaluated. This cannot be done with a postfix, stack-based language because any data on the stack must remain there as it may be needed by a function lat
er.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350"><div id="ygrps-yiv-86186350">Think of Om as a stream-based language that rewrites a program from an input stream into a program sent to an output stream.</div><div id="ygrps-yiv-86186350"><br></div></div><div id="ygrps-yiv-86186350">In the above example: when "{B}" is pushed onto "swap {A}", the state is "swap {A} {B}", which the interpreter then rewrites as "{B} {A}". These are both constant functions, and since there is no way that any remaining program could modify these (because it is prefix), they can be written to the output stream.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">So for the program "swap {A} {B} swap {C}", thi
s will get rewritten to "{B} {A} swap {C}", and {B} and {A} can be written to the output stream, leaving only "swap {C}" on the "function stack". When the constant program {D} gets pushed, {D} and {C} are output to the output stream, leaving the function stack empty.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">To better understand evaluation in Om: given the program "swap {A} swap {B} {C}", the interpreter will:</div><div id="ygrps-yiv-86186350">- Push "swap" onto the function stack</div><div id="ygrps-yiv-86186350">- Push "{A}" onto the function stack</div><div id="ygrps-yiv-86186350">- Push "swap" onto the function stack</div><div id="ygrps-yiv-86186350">- Push "{B}" onto
the function stack</div><div id="ygrps-yiv-86186350">- Push "{C}" onto the function stack</div><div id="ygrps-yiv-86186350">- Rewrite the program as "swap {A} {C} {B}"</div><div id="ygrps-yiv-86186350">- Rewrite the program as "{C} {A} {B}"</div><div id="ygrps-yiv-86186350">- Output constant functions "{C}", "{A}", and "{B}".</div><div id="ygrps-yiv-86186350">- The function stack is now empty.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">> Functions can be optimized to only read into memory the data that is required; stack-based postfix languages have no knowledge of the function to apply until the data is already in memory, on the stack.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-y
iv-86186350">An example is the "drop" function. In Om, when the "drop" function is pushed onto the stack, any constant function that follows (i.e. an operand) will cause the "drop" function and the constant function to be rewritten as an empty program.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">In a postfix language, a function like this would first require the operand to be pushed onto a data stack in memory, and then "drop" would come along and remove it.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">Om, however, never needs to read the full the operand into memory. The "drop" function can read the operand directly from the input stream and discard the characters as they com
e in.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">> Incoming data, such as events, become simple to handle at a language level: a program might evaluate to a function that acts as a state machine that processes any additional data appended to the program and transitions to a new state, ready to process new data.</div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">As any Om computation is a "function stack" (which represents a composed function), one could imagine that events could arrive as program elements on the input stream, thereby changing the state of the program to a new state, ready to receive new events. Therefore, a simple event-handling mechanism is central to the language.</div><div id="ygrps-yiv-86186350"><br></d
iv><div id="ygrps-yiv-86186350"><span style="word-spacing:normal;">> An integrated development environment can provide hints to the user about the data that is expected by a function.</span><br></div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">The idea here is that the operator is typed first in a prefix language (followed by its operands). As soon as the operator is entered, the operands it expects could be indicated to the user by an IDE. (<span style="word-spacing:normal;">I suppose this breaks down for people who typically enter data in a right-to-left direction in their text editor...)</span></div></div><div id="ygrps-yiv-86186350"><br></div><div id="ygrps-yiv-86186350">Thanks again for the interest! Hope that helps. Please let me k
now if any of that still doesn't make sense.</div><div id="ygrps-yiv-86186350"><span style="word-spacing:normal;"><br></span></div><div id="ygrps-yiv-86186350"><span style="word-spacing:normal;">Jason</span><br></div></div></p>
</div>
<!--~-|**|PrettyHtmlStart|**|-~-->
<div style="color: #fff; height: 0;">__._,_.___</div>
<div style="clear:both"> </div>
<div id="fromDMARC" style="margin-top: 10px;">
<hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
Posted by: [email protected] <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
</div>
<div style="clear:both"> </div>
<table cellspacing=4px style="margin-top: 10px; margin-bottom: 10px; color: #2D50FD;">
<tbody>
<tr>
<td style="font-size: 12px; font-family: arial; font-weight: bold; padding: 7px 5px 5px;" >
<a style="text-decoration: none; color: #2D50FD" href="https://groups.yahoo.com/neo/groups/concatenative/conversations/messages/5007;_ylc=X3oDMTJwdmpmcmpiBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzUwMDcEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxNDA1NDkxMTcz?act=reply&messageNum=5007">Reply via web post</a>
</td>
<td>•</td>
<td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;" >
<a href="mailto:[email protected]?subject=Re%3A%20Overview%20of%20prefix%20vs%20postfix%20notations%20%2B%20evaluation%20schemes%2E" style="text-decoration: none; color: #2D50FD;">
Reply to sender </a>
</td>
<td>•</td>
<td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;">
<a href="mailto:[email protected]?subject=Re%3A%20Overview%20of%20prefix%20vs%20postfix%20notations%20%2B%20evaluation%20schemes%2E" style="text-decoration: none; color: #2D50FD">
Reply to group </a>
</td>
<td>•</td>
<td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;" >
<a href="https://groups.yahoo.com/neo/groups/concatenative/conversations/newtopic;_ylc=X3oDMTJlNWQ5cmVoBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQwNTQ5MTE3Mw--" style="text-decoration: none; color: #2D50FD">Start a New Topic</a>
</td>
<td>•</td>
<td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;color: #2D50FD;" >
<a href="https://groups.yahoo.com/neo/groups/concatenative/conversations/topics/4997;_ylc=X3oDMTM0dHQ0azAzBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzUwMDcEc2VjA2Z0cgRzbGsDdnRwYwRzdGltZQMxNDA1NDkxMTczBHRwY0lkAzQ5OTc-" style="text-decoration: none; color: #2D50FD;">Messages in this topic</a>
(11)
</td>
</tr>
</tbody>
</table>
<div id="megaphoneModule">
<hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
<div>
<div class="stream" style="margin-bottom:10px;">
<div style="background-color:white;">
<div class="sn-img" style="display:inline;"><img name="tn_file" style="padding:0px 10px;vertical-align:top;margin-top:5px;" src="http://l.yimg.com/ru/static/images/yg/img/megaphone/1405432405_php75tX9k" height="82" width="82"></div>
<div class="mod-txt" style="display:inline-block;">
<div style="padding-left:6px;font-size:13px;color:gray;">Yahoo Groups</div>
<a rel="nofollow" name="sub_url" target="_blank" href="http://yahoogroups.tumblr.com/" style="color:#0000FF;display:block;margin-left:5px;text-decoration:none;"><div style="font-size:15px;">Control your view and sort preferences per Yahoo Group</div></a>
<div style="max-width:530px;padding:2px 5px;">You can now control your default Sort & View Preferences for Conversations, Photos and Files in the membership settings page.</div>
</div>
</div>
</div> </div>
<hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
</div>
<!------- Start Nav Bar ------>
<!-- |**|begin egp html banner|**| -->
<div id="ygrp-vital" style="background-color: #f2f2f2; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">
<span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; "><a href="https://groups.yahoo.com/neo/groups/concatenative/info;_ylc=X3oDMTJlc2Q0YzJ2BF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQwNTQ5MTE3Mw--" style="text-decoration: none;">Visit Your Group</a></span>
<ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
</ul>
</div>
<div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;">
<a href="https://groups.yahoo.com/neo;_ylc=X3oDMTJkY2N1bW1xBF9TAzk3NDc2NTkwBGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDA1NDkxMTcz" style="float: left;"><img src="http://l.yimg.com/ru/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a>
<div style="color: #747575; float: right;"> • <a href="https://info.yahoo.com/privacy/us/yahoo/groups/details.html" style="text-decoration: none;">Privacy</a> • <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> • <a href="https://info.yahoo.com/legal/us/yahoo/utos/terms/" style="text-decoration: none;">Terms of Use</a> </div>
</div>
<br>
<!-- |**|end egp html banner|**| -->
</div> <!-- ygrp-msg -->
<!-- Sponsor -->
<!-- |**|begin egp html banner|**| -->
<div id="ygrp-sponsor" style="width:160px; float:right; clear:none; margin:0 0 25px 0; background: #fff;">
<!-- Start Recommendations -->
<div id="ygrp-reco">
</div>
<!-- End Recommendations -->
</div> <!-- |**|end egp html banner|**| -->
<div style="clear:both; color: #FFF; font-size:1px;">.</div>
</div>
<img src="http://geo.yahoo.com/serv?s=97359714/grpId=1839274/grpspId=1705006764/msgId=5007/stime=1405491173" width="1" height="1"> <br>
<img src="http://y.analytics.yahoo.com/fpc.pl?ywarid=515FB27823A7407E&a=10001310322279&js=no&resp=img&cf11=PA" width="1" height="1">
<div style="color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</body>
<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
<style type="text/css">
<!--
#ygrp-mkp {
border: 1px solid #d8d8d8;
font-family: Arial;
margin: 10px 0;
padding: 0 10px;
}
#ygrp-mkp hr {
border: 1px solid #d8d8d8;
}
#ygrp-mkp #hd {
color: #628c2a;
font-size: 85%;
font-weight: 700;
line-height: 122%;
margin: 10px 0;
}
#ygrp-mkp #ads {
margin-bottom: 10px;
}
#ygrp-mkp .ad {
padding: 0 0;
}
#ygrp-mkp .ad p {
margin: 0;
}
#ygrp-mkp .ad a {
color: #0000ff;
text-decoration: none;
}
#ygrp-sponsor #ygrp-lc {
font-family: Arial;
}
#ygrp-sponsor #ygrp-lc #hd {
margin: 10px 0px;
font-weight: 700;
font-size: 78%;
line-height: 122%;
}
#ygrp-sponsor #ygrp-lc .ad {
margin-bottom: 10px;
padding: 0 0;
}
#actions {
font-family: Verdana;
font-size: 11px;
padding: 10px 0;
}
#activity {
background-color: #e0ecee;
float: left;
font-family: Verdana;
font-size: 10px;
padding: 10px;
}
#activity span {
font-weight: 700;
}
#activity span:first-child {
text-transform: uppercase;
}
#activity span a {
color: #5085b6;
text-decoration: none;
}
#activity span span {
color: #ff7900;
}
#activity span .underline {
text-decoration: underline;
}
.attach {
clear: both;
display: table;
font-family: Arial;
font-size: 12px;
padding: 10px 0;
width: 400px;
}
.attach div a {
text-decoration: none;
}
.attach img {
border: none;
padding-right: 5px;
}
.attach label {
display: block;
margin-bottom: 5px;
}
.attach label a {
text-decoration: none;
}
blockquote {
margin: 0 0 0 4px;
}
.bold {
font-family: Arial;
font-size: 13px;
font-weight: 700;
}
.bold a {
text-decoration: none;
}
dd.last p a {
font-family: Verdana;
font-weight: 700;
}
dd.last p span {
margin-right: 10px;
font-family: Verdana;
font-weight: 700;
}
dd.last p span.yshortcuts {
margin-right: 0;
}
div.attach-table div div a {
text-decoration: none;
}
div.attach-table {
width: 400px;
}
div.file-title a, div.file-title a:active, div.file-title a:hover, div.file-title a:visited {
text-decoration: none;
}
div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div.photo-title a:visited {
text-decoration: none;
}
div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
font-family: Verdana;
font-size: 10px;
font-weight: normal;
}
.green {
color: #628c2a;
}
.MsoNormal {
margin: 0 0 0 0;
}
o {
font-size: 0;
}
#photos div {
float: left;
width: 72px;
}
#photos div div {
border: 1px solid #666666;
height: 62px;
overflow: hidden;
width: 62px;
}
#photos div label {
color: #666666;
font-size: 10px;
overflow: hidden;
text-align: center;
white-space: nowrap;
width: 64px;
}
#reco-category {
font-size: 77%;
}
#reco-desc {
font-size: 77%;
}
.replbq {
margin: 4px;
}
#ygrp-actbar div a:first-child {
/* border-right: 0px solid #000;*/
margin-right: 2px;
padding-right: 5px;
}
#ygrp-mlmsg {
font-size: 13px;
font-family: Arial, helvetica,clean, sans-serif;
*font-size: small;
*font: x-small;
}
#ygrp-mlmsg table {
font-size: inherit;
font: 100%;
}
#ygrp-mlmsg select, input, textarea {
font: 99% Arial, Helvetica, clean, sans-serif;
}
#ygrp-mlmsg pre, code {
font:115% monospace;
*font-size:100%;
}
#ygrp-mlmsg * {
line-height: 1.22em;
}
#ygrp-mlmsg #logo {
padding-bottom: 10px;
}
#ygrp-msg p a {
font-family: Verdana;
}
#ygrp-msg p#attach-count span {
color: #1E66AE;
font-weight: 700;
}
#ygrp-reco #reco-head {
color: #ff7900;
font-weight: 700;
}
#ygrp-reco {
margin-bottom: 20px;
padding: 0px;
}
#ygrp-sponsor #ov li a {
font-size: 130%;
text-decoration: none;
}
#ygrp-sponsor #ov li {
font-size: 77%;
list-style-type: square;
padding: 6px 0;
}
#ygrp-sponsor #ov ul {
margin: 0;
padding: 0 0 0 8px;
}
#ygrp-text {
font-family: Georgia;
}
#ygrp-text p {
margin: 0 0 1em 0;
}
#ygrp-text tt {
font-size: 120%;
}
#ygrp-vital ul li:last-child {
border-right: none !important;
}
-->
</style>
</head>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->
--9nlWnTS9ocNmxdhsK3FKVLWiM6a5jwOaA8HvrLV--