<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.1.2" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments for Sufficiently Small</title>
	<link>http://www.smallshire.org.uk/sufficientlysmall</link>
	<description>sin(x) = x</description>
	<pubDate>Fri, 21 Nov 2008 16:52:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.2</generator>

	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by Robert Smallshire</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1818</link>
		<author>Robert Smallshire</author>
		<pubDate>Thu, 25 Sep 2008 18:52:19 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1818</guid>
					<description>Hi Kevin,

Well, building this compiler is nothing more than an exercise in learning about how compilers are put together.  To me its similar to how I used to play with Lego as a child - I would spend hours and hours constructing some complex mechanism, only to play with it for five minutes before moving on to the next challenge.  The eventual result of having a compiler for BBC BASIC is not the goal - rather it is the journey of how I get there that interests me.

BBC BASIC makes for an interesting source language precisely because it was never meant to be compiled - and indeed various people in the thread above have pointed out that it will be very difficult, or even impossible, to do so.  I don't subscribe to the impossible view, but I am prepared to accept that it is difficult, because of its quirky and dynamic features.

I haven't had time to post about progress recently (I'll try to correct that at least), but right now I have a fairly complete compiler front-end for BBC BASIC with lexer, parser and type-checker, which will parse real-world BBC BASIC programs such as Acornsoft's Sphinx Adventure!  I'm currently working on the Control Flow Graph construction and analysis which will enable me to untangle all of the interesting stack-based control structures in BBC BASIC (e.g. omitted NEXT statements) into something compilable.

An interest in code generation is the other purpose of this project.  I've been doing a lot of experimentation with .NET, and this project also provides a reason for me to build an good understanding of CIL (MSIL as was) and the Common Language Runtime.

I spend my working hours being paid to make brutal/pragmatic software engineering decisions on a 3 million line C++ project, so spending a little time in the evenings now and again tinkering with a relatively small IronPython compiler for BBC BASIC is not something I take too seriously, and pretty harmless at that.

Ultimately, I don't have a single BBC BASIC program of my own that I need to, or even want to compile, with this tool.  I can't retrieve my corpus of BBC BASIC programs I created in my formative years from the seized-up hard-drive in my old Acorn A4000 or any of the other Beebs or Arcs in in the family computer museum.  Maybe eventually, I'll get some of the Acornsoft text adventures to compile and run...</description>
		<content:encoded><![CDATA[<p>Hi Kevin,</p>
<p>Well, building this compiler is nothing more than an exercise in learning about how compilers are put together.  To me its similar to how I used to play with Lego as a child - I would spend hours and hours constructing some complex mechanism, only to play with it for five minutes before moving on to the next challenge.  The eventual result of having a compiler for BBC BASIC is not the goal - rather it is the journey of how I get there that interests me.</p>
<p>BBC BASIC makes for an interesting source language precisely because it was never meant to be compiled - and indeed various people in the thread above have pointed out that it will be very difficult, or even impossible, to do so.  I don&#8217;t subscribe to the impossible view, but I am prepared to accept that it is difficult, because of its quirky and dynamic features.</p>
<p>I haven&#8217;t had time to post about progress recently (I&#8217;ll try to correct that at least), but right now I have a fairly complete compiler front-end for BBC BASIC with lexer, parser and type-checker, which will parse real-world BBC BASIC programs such as Acornsoft&#8217;s Sphinx Adventure!  I&#8217;m currently working on the Control Flow Graph construction and analysis which will enable me to untangle all of the interesting stack-based control structures in BBC BASIC (e.g. omitted NEXT statements) into something compilable.</p>
<p>An interest in code generation is the other purpose of this project.  I&#8217;ve been doing a lot of experimentation with .NET, and this project also provides a reason for me to build an good understanding of CIL (MSIL as was) and the Common Language Runtime.</p>
<p>I spend my working hours being paid to make brutal/pragmatic software engineering decisions on a 3 million line C++ project, so spending a little time in the evenings now and again tinkering with a relatively small IronPython compiler for BBC BASIC is not something I take too seriously, and pretty harmless at that.</p>
<p>Ultimately, I don&#8217;t have a single BBC BASIC program of my own that I need to, or even want to compile, with this tool.  I can&#8217;t retrieve my corpus of BBC BASIC programs I created in my formative years from the seized-up hard-drive in my old Acorn A4000 or any of the other Beebs or Arcs in in the family computer museum.  Maybe eventually, I&#8217;ll get some of the Acornsoft text adventures to compile and run&#8230;</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by Kevin Swinton</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1817</link>
		<author>Kevin Swinton</author>
		<pubDate>Wed, 24 Sep 2008 20:40:06 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1817</guid>
					<description>Hi Robert

This is an interesting site/thread. I too had an urge about ten months ago to look into BBC BASIC - I spent formative years using it to write an awful lot of BASIC/6502 software without consciously  stopping to appreciate how neat the interpreter itself was.

Perhaps I'm more brutal/pragmatic with such things but for me, rather than trying to create a BBC BASIC "to the nth degree" it's been quite instructive and a lot of fun to simply knuckle down and build a BBC BASIC interpreter (using C) without worrying about backwards compatibility or the desire for the utmost efficiency.

IMHO I'd suggest that the efforts underway here are certainly well intentioned, but maybe a little askew? To explain: if the aim of all this is to ultimately produce a compiler, then BBC BASIC might not be the best language to base your efforts on. Whereas if you want to effectively emulate what Sophie Wilson did all those years ago, throw away the thought that it has to be compiled and lose yourself in the fun that is writing an interpreter!

Whatever you choose to do though, wishing you all the best.</description>
		<content:encoded><![CDATA[<p>Hi Robert</p>
<p>This is an interesting site/thread. I too had an urge about ten months ago to look into BBC BASIC - I spent formative years using it to write an awful lot of BASIC/6502 software without consciously  stopping to appreciate how neat the interpreter itself was.</p>
<p>Perhaps I&#8217;m more brutal/pragmatic with such things but for me, rather than trying to create a BBC BASIC &#8220;to the nth degree&#8221; it&#8217;s been quite instructive and a lot of fun to simply knuckle down and build a BBC BASIC interpreter (using C) without worrying about backwards compatibility or the desire for the utmost efficiency.</p>
<p>IMHO I&#8217;d suggest that the efforts underway here are certainly well intentioned, but maybe a little askew? To explain: if the aim of all this is to ultimately produce a compiler, then BBC BASIC might not be the best language to base your efforts on. Whereas if you want to effectively emulate what Sophie Wilson did all those years ago, throw away the thought that it has to be compiled and lose yourself in the fun that is writing an interpreter!</p>
<p>Whatever you choose to do though, wishing you all the best.</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by Les May</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1811</link>
		<author>Les May</author>
		<pubDate>Mon, 21 Jul 2008 18:35:33 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1811</guid>
					<description>I used COMAL to write my first 'serious' program in 1986/7. It allowed me to display the way that radio tagged animals used their home range. It was complex but maintainable because of the high readability of COMAL. I used this experience to write much larger programs for Acorn RISC machines, but BBC BASIC is much less readable. I also used this experience when I learned Pascal (Delphi) but COMAL has the better structure. I call it 'full closure. i.e. a COMAL uses FOR ... ENDFOR; Pascal uses FOR but what follows must be on one line or bracketed with BEGIN... END. Wirth did not improve upon this completely in MODULA 2 or OBERON and ZONNON has left it unchanged, thought they are better than Pascal. 

The whole system is designed for ease of use. e.g. assignment is := but = is quietly converted to :=, cosmetic words like DO are inserted automatically to improve readability. Key words are automatically forced into upper case, others into lower case. This means that if you can touch type you can largely forget the shift key or CapLock keys. This of course is a function of the editor, but it shows the 'ease of use' approach.

COMAL does not have a lot of intrinsic data types, integer, real, string and boolean, although the latter are hardly noticed. Languages which do have a lot of types need GOOD type conversion functions which should check for overflow/underflow. Some don't. Because the 'sizes' of the two numeric types can be made compatible intrinsic type conversion is not a great problem.

COMAL87 includes a TRAP.. HANDLER.. ENDTRAP structure for errors. Much nicer than BASIC.

I could go on! There are few books on programming in COMAL. I just managed to get hold of Atherton's 'Structured Programming with COMAL' today via Amazon. It does not have a grammer.

You could look at OpenComal on Jos Visser's. There is a grammar in the documentation see 'Guide'

He also provides the Source Code for his OpenComal system(s). I have tried the Win32 OpenComal system and it works a treat. Nostalgic too with its line editor!</description>
		<content:encoded><![CDATA[<p>I used COMAL to write my first &#8217;serious&#8217; program in 1986/7. It allowed me to display the way that radio tagged animals used their home range. It was complex but maintainable because of the high readability of COMAL. I used this experience to write much larger programs for Acorn RISC machines, but BBC BASIC is much less readable. I also used this experience when I learned Pascal (Delphi) but COMAL has the better structure. I call it &#8216;full closure. i.e. a COMAL uses FOR &#8230; ENDFOR; Pascal uses FOR but what follows must be on one line or bracketed with BEGIN&#8230; END. Wirth did not improve upon this completely in MODULA 2 or OBERON and ZONNON has left it unchanged, thought they are better than Pascal. </p>
<p>The whole system is designed for ease of use. e.g. assignment is := but = is quietly converted to :=, cosmetic words like DO are inserted automatically to improve readability. Key words are automatically forced into upper case, others into lower case. This means that if you can touch type you can largely forget the shift key or CapLock keys. This of course is a function of the editor, but it shows the &#8216;ease of use&#8217; approach.</p>
<p>COMAL does not have a lot of intrinsic data types, integer, real, string and boolean, although the latter are hardly noticed. Languages which do have a lot of types need GOOD type conversion functions which should check for overflow/underflow. Some don&#8217;t. Because the &#8217;sizes&#8217; of the two numeric types can be made compatible intrinsic type conversion is not a great problem.</p>
<p>COMAL87 includes a TRAP.. HANDLER.. ENDTRAP structure for errors. Much nicer than BASIC.</p>
<p>I could go on! There are few books on programming in COMAL. I just managed to get hold of Atherton&#8217;s &#8216;Structured Programming with COMAL&#8217; today via Amazon. It does not have a grammer.</p>
<p>You could look at OpenComal on Jos Visser&#8217;s. There is a grammar in the documentation see &#8216;Guide&#8217;</p>
<p>He also provides the Source Code for his OpenComal system(s). I have tried the Win32 OpenComal system and it works a treat. Nostalgic too with its line editor!</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by Robert Smallshire</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1807</link>
		<author>Robert Smallshire</author>
		<pubDate>Thu, 17 Jul 2008 14:51:46 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1807</guid>
					<description>Les,

Other more important projects have had to take priority over much of the past year, but you have caught me at a good moment! I'm currently working on the type-checker and flow-graph analyser of the compiler, and making good progress. Soon I will be a position to put up some new posts detailing the latest activity...

You seem pretty keen on a COMAL front-end, and I have to agree that COMAL is what BBC BASIC should have been. COMAL programs will have much saner structure than what BBC BASIC allows you to get away with.  Can I ask why COMAL is so important to you? Providing a COMAL front-end should be relatively straightforward. Do you have a COMAL grammar?</description>
		<content:encoded><![CDATA[<p>Les,</p>
<p>Other more important projects have had to take priority over much of the past year, but you have caught me at a good moment! I&#8217;m currently working on the type-checker and flow-graph analyser of the compiler, and making good progress. Soon I will be a position to put up some new posts detailing the latest activity&#8230;</p>
<p>You seem pretty keen on a COMAL front-end, and I have to agree that COMAL is what BBC BASIC should have been. COMAL programs will have much saner structure than what BBC BASIC allows you to get away with.  Can I ask why COMAL is so important to you? Providing a COMAL front-end should be relatively straightforward. Do you have a COMAL grammar?</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by Les May</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1806</link>
		<author>Les May</author>
		<pubDate>Thu, 17 Jul 2008 13:35:38 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1806</guid>
					<description>I wrote a year ago pointing out that compilation of BBC Basic is possible. However I am writing this on a machine which runs 300 times faster than the RISC OS machine I used with the compiler. I am not convinced that compilation is superior to interpretation in this and similar cases. Richard Russell's solution of packing the interpreter with the program solves the distribution problem of interpreters. However good luck with the project and please, PLEASE, include a Comal frontend.</description>
		<content:encoded><![CDATA[<p>I wrote a year ago pointing out that compilation of BBC Basic is possible. However I am writing this on a machine which runs 300 times faster than the RISC OS machine I used with the compiler. I am not convinced that compilation is superior to interpretation in this and similar cases. Richard Russell&#8217;s solution of packing the interpreter with the program solves the distribution problem of interpreters. However good luck with the project and please, PLEASE, include a Comal frontend.</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by leppie</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1656</link>
		<author>leppie</author>
		<pubDate>Tue, 03 Jun 2008 13:12:22 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1656</guid>
					<description>"However, I must admit to a secret aim of producing the fastest BBC BASIC implementation yet!"

Stay away from the DLR as a runtime in that case. :)</description>
		<content:encoded><![CDATA[<p>&#8220;However, I must admit to a secret aim of producing the fastest BBC BASIC implementation yet!&#8221;</p>
<p>Stay away from the DLR as a runtime in that case. <img src='http://www.smallshire.org.uk/sufficientlysmall/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by David Jones</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1644</link>
		<author>David Jones</author>
		<pubDate>Thu, 07 Feb 2008 13:35:14 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1644</guid>
					<description>It's kind of traditional in highly interpreted languages to allow language errors in parts of the program which haven't been executed yet.  After all you might never execute it, in which case it seems peevish to complain about the mistake.</description>
		<content:encoded><![CDATA[<p>It&#8217;s kind of traditional in highly interpreted languages to allow language errors in parts of the program which haven&#8217;t been executed yet.  After all you might never execute it, in which case it seems peevish to complain about the mistake.</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Jython, Swing &#038; Curry by GR</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2005/12/03/jython-swing-curry/#comment-1640</link>
		<author>GR</author>
		<pubDate>Sun, 16 Dec 2007 01:22:33 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2005/12/03/jython-swing-curry/#comment-1640</guid>
					<description>&lt;i&gt;"Jython is currently, by far the most useful of the the three main Python implementations"&lt;/i&gt;

If you're mostly doing Java, I suppose. But there's so much useful stuff written in CPython that Jython feels like a second stringer. 

I do both, and Jython is great, but CPython is more useful for general work. Jython is only really useful for Java scripting. I would never write an entire application in Jython, I would wind up implementing most of the core in Java for speed and reuse.</description>
		<content:encoded><![CDATA[<p><i>&#8220;Jython is currently, by far the most useful of the the three main Python implementations&#8221;</i></p>
<p>If you&#8217;re mostly doing Java, I suppose. But there&#8217;s so much useful stuff written in CPython that Jython feels like a second stringer. </p>
<p>I do both, and Jython is great, but CPython is more useful for general work. Jython is only really useful for Java scripting. I would never write an entire application in Jython, I would wind up implementing most of the core in Java for speed and reuse.</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by Robert Smallshire</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1633</link>
		<author>Robert Smallshire</author>
		<pubDate>Wed, 17 Oct 2007 17:40:32 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1633</guid>
					<description>Hi Richard,

You are quite correct.  I've just thrown the text version of Rheolism at my parser and it chokes on "dVDUd", "RNDMOD7", "TRUETO1" and "rANDSGNt" before it gets too confused to continue.

Adding support for pre-tokenized files isn't a priority for me, but it would be straightforward to convert a the encoded token stream into the PLY Lex objects I user today to feed into my parser.  If I do get round to this Rheolism will provide an excellent test!

The multi-line versions of Rheolism and &lt;a href="http://www.survex.com/~olly/rheolism.html" rel="nofollow"&gt;Extra Rheolism&lt;/a&gt; with the requisite spaces parse as you would expect. I certainly won't be losing any sleep over the fact I can't directly parse programs which can't be typed directly into the original interpreter.

I'll stick my neck out and claim that I don't think the &lt;code&gt;GOSUBFALSE&lt;/code&gt; issue will be a huge problem. The basic block analysis should figure out that a subroutine starts at the beginning of line 0 since it is the target of the GOSUBFALSE call. The compiler should be able to determine that the &lt;code&gt;RETURN&lt;/code&gt; is therefore within a subroutine. As you know, the semantics of BBC BASIC are such that subroutines can either be called with GOSUB or just directly executed.  Of course, this approach will fail with computed &lt;code&gt;GOTO&lt;/code&gt; or &lt;code&gt;GOSUB&lt;/code&gt; destinations, which I don't plan to support.

It is these idiosyncracies which make the project more difficult, and therefore more interesting that I expected. This, of course, will be no surprise to you.

Finally, before you ask, I think the final trailing &lt;code&gt;:Z&lt;/code&gt; of Extra Rheolism, which generates a Mistake is fair game for for a compilation error!</description>
		<content:encoded><![CDATA[<p>Hi Richard,</p>
<p>You are quite correct.  I&#8217;ve just thrown the text version of Rheolism at my parser and it chokes on &#8220;dVDUd&#8221;, &#8220;RNDMOD7&#8243;, &#8220;TRUETO1&#8243; and &#8220;rANDSGNt&#8221; before it gets too confused to continue.</p>
<p>Adding support for pre-tokenized files isn&#8217;t a priority for me, but it would be straightforward to convert a the encoded token stream into the PLY Lex objects I user today to feed into my parser.  If I do get round to this Rheolism will provide an excellent test!</p>
<p>The multi-line versions of Rheolism and <a href="http://www.survex.com/~olly/rheolism.html" rel="nofollow">Extra Rheolism</a> with the requisite spaces parse as you would expect. I certainly won&#8217;t be losing any sleep over the fact I can&#8217;t directly parse programs which can&#8217;t be typed directly into the original interpreter.</p>
<p>I&#8217;ll stick my neck out and claim that I don&#8217;t think the <code>GOSUBFALSE</code> issue will be a huge problem. The basic block analysis should figure out that a subroutine starts at the beginning of line 0 since it is the target of the GOSUBFALSE call. The compiler should be able to determine that the <code>RETURN</code> is therefore within a subroutine. As you know, the semantics of BBC BASIC are such that subroutines can either be called with GOSUB or just directly executed.  Of course, this approach will fail with computed <code>GOTO</code> or <code>GOSUB</code> destinations, which I don&#8217;t plan to support.</p>
<p>It is these idiosyncracies which make the project more difficult, and therefore more interesting that I expected. This, of course, will be no surprise to you.</p>
<p>Finally, before you ask, I think the final trailing <code>:Z</code> of Extra Rheolism, which generates a Mistake is fair game for for a compilation error!</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Writing a BBC BASIC compiler for the CLR by Richard Russell</title>
		<link>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1632</link>
		<author>Richard Russell</author>
		<pubDate>Tue, 16 Oct 2007 22:20:17 +0000</pubDate>
		<guid>http://www.smallshire.org.uk/sufficientlysmall/2007/06/10/writing-a-bbc-basic-compiler-for-the-clr/#comment-1632</guid>
					<description>&#62; obviously the fact that its an obfuscated one-liner makes no difference
&#62; whatsoever - it will be parsed correctly

That doesn't follow.  My understanding is that you propose to parse an ASCII (text) program, *not* a pre-tokenised program.  To squeeze Rheolism into one line all the spaces necessary for correct parsing have been removed, so although it is a valid tokenised program it is not a valid ASCII program.  I would therefore expect it *not* to be parsed correctly by your compiler.

Another aspect of Rheolism which might cause your compiler indigestion is the fact that the code calls itself using GOSUBFALSE.  Normally, encountering a RETURN when not in a subroutine would cause a compiler to report an error, but in this case it must realise that later on that same code will be executed as a subroutine.

I'm afraid the word "obviously" always arouses my suspicions!</description>
		<content:encoded><![CDATA[<p>&gt; obviously the fact that its an obfuscated one-liner makes no difference<br />
&gt; whatsoever - it will be parsed correctly</p>
<p>That doesn&#8217;t follow.  My understanding is that you propose to parse an ASCII (text) program, *not* a pre-tokenised program.  To squeeze Rheolism into one line all the spaces necessary for correct parsing have been removed, so although it is a valid tokenised program it is not a valid ASCII program.  I would therefore expect it *not* to be parsed correctly by your compiler.</p>
<p>Another aspect of Rheolism which might cause your compiler indigestion is the fact that the code calls itself using GOSUBFALSE.  Normally, encountering a RETURN when not in a subroutine would cause a compiler to report an error, but in this case it must realise that later on that same code will be executed as a subroutine.</p>
<p>I&#8217;m afraid the word &#8220;obviously&#8221; always arouses my suspicions!</p>
]]></content:encoded>
				</item>
</channel>
</rss>
