<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Using str2func for Anonymous Function Handle Creation</title>
	<atom:link href="http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/</link>
	<description>Loren Shure works on design of the MATLAB language at MathWorks. She writes here about once a week on MATLAB programming and related topics.</description>
	<lastBuildDate>Thu, 09 Feb 2012 04:19:21 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Loren</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-31389</link>
		<dc:creator>Loren</dc:creator>
		<pubDate>Fri, 28 May 2010 16:11:47 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-31389</guid>
		<description>Zijpp-

I don&#039;t know of a simpler solution.

--Loren</description>
		<content:encoded><![CDATA[<p>Zijpp-</p>
<p>I don&#8217;t know of a simpler solution.</p>
<p>&#8211;Loren</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: zijpp  @ modelit</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-31388</link>
		<dc:creator>zijpp  @ modelit</dc:creator>
		<pubDate>Fri, 28 May 2010 10:49:53 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-31388</guid>
		<description>I only just discovered the possibility anonymous functions. After a few uses I realized that they are an elegant solution to the frequently occurring problem of passing existing function pointers together with default arguments. 

For example: passing the function handle @(x,y,z)displayAll(gcf,x,y,z) to a display manager that (by convention) supplies x,y and z, makes sure that x,y and z  are plotted in figure gcf in the manner defined by the function displayAll.

Previously I did this by putting function pointers and default arguments in a cell array and somehow gluing these together in a customized version of feval, say feval_cell.

After applying the new mechanism in our existing code I discovered that calling &quot;nargout&quot; on the anonymous function above returns -1, rather than &quot;nargout(displayAll)&quot;. 

One way around this would be to encapsulate the anonymous function in a class, say &quot;myfunction&quot;, and let this class  support methods like &quot;nargout&quot; and &quot;feval&quot;.  The constructor of such a class would then have to be invoked as:

fp=myfunction(@(x,y,z)displayAll(gcf,x,y,z),...
             nargout(displayAll)) 

But maybe a simpler solution is already available in Matlab somewhere?</description>
		<content:encoded><![CDATA[<p>I only just discovered the possibility anonymous functions. After a few uses I realized that they are an elegant solution to the frequently occurring problem of passing existing function pointers together with default arguments. </p>
<p>For example: passing the function handle @(x,y,z)displayAll(gcf,x,y,z) to a display manager that (by convention) supplies x,y and z, makes sure that x,y and z  are plotted in figure gcf in the manner defined by the function displayAll.</p>
<p>Previously I did this by putting function pointers and default arguments in a cell array and somehow gluing these together in a customized version of feval, say feval_cell.</p>
<p>After applying the new mechanism in our existing code I discovered that calling &#8220;nargout&#8221; on the anonymous function above returns -1, rather than &#8220;nargout(displayAll)&#8221;. </p>
<p>One way around this would be to encapsulate the anonymous function in a class, say &#8220;myfunction&#8221;, and let this class  support methods like &#8220;nargout&#8221; and &#8220;feval&#8221;.  The constructor of such a class would then have to be invoked as:</p>
<p>fp=myfunction(@(x,y,z)displayAll(gcf,x,y,z),&#8230;<br />
             nargout(displayAll)) </p>
<p>But maybe a simpler solution is already available in Matlab somewhere?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Loren</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30861</link>
		<dc:creator>Loren</dc:creator>
		<pubDate>Sun, 29 Nov 2009 20:37:25 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30861</guid>
		<description>Humber-

This is not a bug.  You can get access to the local scope using eval to construct your function handle, but evalin will not let you bypass the local scope to the caller here.

You could create dummy pre and post functions for ones that don&#039;t need it so you can use the same techniques for all your functions, but I don&#039;t know that that will get rid of your problem.

You could perhaps write out your function to a file and then reference that instead.  If you do this, you may need to update the path cache and/or use clear to make the new files visible to MATLAB.

--Loren</description>
		<content:encoded><![CDATA[<p>Humber-</p>
<p>This is not a bug.  You can get access to the local scope using eval to construct your function handle, but evalin will not let you bypass the local scope to the caller here.</p>
<p>You could create dummy pre and post functions for ones that don&#8217;t need it so you can use the same techniques for all your functions, but I don&#8217;t know that that will get rid of your problem.</p>
<p>You could perhaps write out your function to a file and then reference that instead.  If you do this, you may need to update the path cache and/or use clear to make the new files visible to MATLAB.</p>
<p>&#8211;Loren</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Humberto</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30853</link>
		<dc:creator>Humberto</dc:creator>
		<pubDate>Fri, 27 Nov 2009 13:33:12 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30853</guid>
		<description>Loren,
Unless I am not understanding something about the &quot;new&quot; way to construct anonymous functions, it does not seem to work within a function itself. It might work on the &quot;base&quot; Matlab workspace.

For instance, following your example, whilst called in a function this way:

&lt;pre&gt;

function temp
anon = myfun(&#039;x,y&#039;,&#039;mdisp&#039;);
x=1:3;
y=10:14;
z=anon(x,y);
end

function anon = myfun(X,fun)
anon = str2func([&#039;@(&#039;,X,&#039;)&#039;,fun,&#039;(&#039;,X,&#039;)&#039;]);
end

function mdisp(varargin)
disp(numel(varargin))
disp(17)
end

&lt;/pre&gt;

Matlab will declare an error as it can not find the function mdisp. It will only run functions available to the base Matlab and not the ones &quot;inside&quot; another function thus presenting this error:

&lt;pre&gt;
??? Undefined function or method &#039;mdisp&#039; for input arguments of type &#039;double&#039;.

Error in ==&gt; @(x,y)mdisp(x,y)

Error in ==&gt; temp at 5
z=anon(x,y);
&lt;/pre&gt;

Now, I am trying to create a wrapper function to process data by chunks, and for such I require 4 arguments;
function S=Wrapper(X,F,R,T)
X being the data
F is the actual function to call
R are the pre-requisites
T are the post-requisites
S is the output

Now, the interesting part is that not all functions require pre and/or post requisites, so I can not simply write an:
&lt;pre&gt;
A=@(n){R,X(n),T);
...
S(y)=F(A(y));
...
&lt;/pre&gt;
So, A needs to be &quot;variable&quot;, and the way to do it is with a str2func, however, it does not work for calling functions or variables which are not of general &quot;base&quot; scope.
Even using:
&lt;pre&gt;
{evalin(&#039;caller&#039;,&#039;R&#039;),evalin(&#039;caller&#039;,&#039;X(y)&#039;),evalin(&#039;caller&#039;,&#039;T&#039;)}
&lt;/pre&gt;
generates an error:
&lt;pre&gt;
Warning: The input to STR2FUNC &quot;{evalin(&#039;caller&#039;,&#039;R&#039;),evalin(&#039;caller&#039;,&#039;X(y)&#039;),evalin(&#039;caller&#039;,&#039;T&#039;)}&quot; is not a valid function name. This will generate an error in a future release. 
&lt;/pre&gt;
Any suggestions? Or is this just a &quot;bug&quot; in Matlab?</description>
		<content:encoded><![CDATA[<p>Loren,<br />
Unless I am not understanding something about the &#8220;new&#8221; way to construct anonymous functions, it does not seem to work within a function itself. It might work on the &#8220;base&#8221; Matlab workspace.</p>
<p>For instance, following your example, whilst called in a function this way:</p>
<pre>

function temp
anon = myfun('x,y','mdisp');
x=1:3;
y=10:14;
z=anon(x,y);
end

function anon = myfun(X,fun)
anon = str2func(['@(',X,')',fun,'(',X,')']);
end

function mdisp(varargin)
disp(numel(varargin))
disp(17)
end
</pre>
<p>Matlab will declare an error as it can not find the function mdisp. It will only run functions available to the base Matlab and not the ones &#8220;inside&#8221; another function thus presenting this error:</p>
<pre>
??? Undefined function or method 'mdisp' for input arguments of type 'double'.

Error in ==&gt; @(x,y)mdisp(x,y)

Error in ==&gt; temp at 5
z=anon(x,y);
</pre>
<p>Now, I am trying to create a wrapper function to process data by chunks, and for such I require 4 arguments;<br />
function S=Wrapper(X,F,R,T)<br />
X being the data<br />
F is the actual function to call<br />
R are the pre-requisites<br />
T are the post-requisites<br />
S is the output</p>
<p>Now, the interesting part is that not all functions require pre and/or post requisites, so I can not simply write an:</p>
<pre>
A=@(n){R,X(n),T);
...
S(y)=F(A(y));
...
</pre>
<p>So, A needs to be &#8220;variable&#8221;, and the way to do it is with a str2func, however, it does not work for calling functions or variables which are not of general &#8220;base&#8221; scope.<br />
Even using:</p>
<pre>
{evalin('caller','R'),evalin('caller','X(y)'),evalin('caller','T')}
</pre>
<p>generates an error:</p>
<pre>
Warning: The input to STR2FUNC "{evalin('caller','R'),evalin('caller','X(y)'),evalin('caller','T')}" is not a valid function name. This will generate an error in a future release.
</pre>
<p>Any suggestions? Or is this just a &#8220;bug&#8221; in Matlab?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Loren</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30823</link>
		<dc:creator>Loren</dc:creator>
		<pubDate>Thu, 19 Nov 2009 21:10:01 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30823</guid>
		<description>Yair-

Sorry for the oversight - definitely not intentional.  Please use the link on the right to make an enhancement request via technical support.  I don&#039;t think it is entirely compatible since in a regular function, the function has its return args listed in the program.  And now return would depend on position.  But would it obey nargout?  And what if the results returned were different for different values of nargout?  Clearly, I haven&#039;t thought about this enough to evaluate if it&#039;s even realistic.

In your example with anonymous function, you can get the same result now with

&lt;pre class=&quot;code&quot;&gt;

myfunc = @(x) (x==1)*2 +(x==2)*3

&gt;&gt; 
myfunc = @(x) (x==1)*2 +(x==2)*3
myfunc = 
    @(x)(x==1)*2+(x==2)*3
&gt;&gt; myfunc([1 3 2])
ans =
     2     0     3
&lt;/pre&gt;


--Loren</description>
		<content:encoded><![CDATA[<p>Yair-</p>
<p>Sorry for the oversight &#8211; definitely not intentional.  Please use the link on the right to make an enhancement request via technical support.  I don&#8217;t think it is entirely compatible since in a regular function, the function has its return args listed in the program.  And now return would depend on position.  But would it obey nargout?  And what if the results returned were different for different values of nargout?  Clearly, I haven&#8217;t thought about this enough to evaluate if it&#8217;s even realistic.</p>
<p>In your example with anonymous function, you can get the same result now with</p>
<pre class="code">

myfunc = @(x) (x==1)*2 +(x==2)*3

>>
myfunc = @(x) (x==1)*2 +(x==2)*3
myfunc =
    @(x)(x==1)*2+(x==2)*3
>> myfunc([1 3 2])
ans =
     2     0     3
</pre>
<p>&#8211;Loren</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yair Altman</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30822</link>
		<dc:creator>Yair Altman</dc:creator>
		<pubDate>Thu, 19 Nov 2009 20:02:08 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30822</guid>
		<description>hi again Loren - I think my small question (#10 above, http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30797 ) may have gotten lost in the Oyster/Steve discussion. Could you please revisit?

Suggestion: perhaps enable return to accept arguments:

myfunc = @(x) (if (x==1) return(2); else return(3); end);

This would seem to be entirely backward compatible with existing code and may be useful for Matlab functions in general (not just anonymous):

function [a,b] = myfunc(data)
  % do some useful computation
  return (result1,result2);
end

Thanks,
Yair</description>
		<content:encoded><![CDATA[<p>hi again Loren &#8211; I think my small question (#10 above, <a href="http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30797" rel="nofollow">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30797</a> ) may have gotten lost in the Oyster/Steve discussion. Could you please revisit?</p>
<p>Suggestion: perhaps enable return to accept arguments:</p>
<p>myfunc = @(x) (if (x==1) return(2); else return(3); end);</p>
<p>This would seem to be entirely backward compatible with existing code and may be useful for Matlab functions in general (not just anonymous):</p>
<p>function [a,b] = myfunc(data)<br />
  % do some useful computation<br />
  return (result1,result2);<br />
end</p>
<p>Thanks,<br />
Yair</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jiro</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30811</link>
		<dc:creator>Jiro</dc:creator>
		<pubDate>Wed, 18 Nov 2009 03:23:44 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30811</guid>
		<description>OysterEngineer,

I second Loren&#039;s suggestion on giving anonymous and nested functions a try. It took me a little while to get used to the new syntax for anonymous function, but just like any other MATLAB syntax, I am completely used to it now. I had VERY little programming experience when I started using MATLAB (I may have programmed a little in BASIC), so the learning curve was steep, but after that, MATLAB code was MATLAB code, including anonymous functions.

Another relevant example is the new Object Oriented Programming capability that was introduced in R2008a. It&#039;s a completely new programming construct, which may seem extremely foreign to a traditional MATLAB user. I was one of those people. I had no experience in object oriented programming, so I was very confused. I think it took me about a year to get my head around it. Now, it feels very natural, and I love it. It changed how I code in MATLAB, and I can create more sophisticated applications with it.

I think we should not dismiss a particular feature just because it is a foreign concept or syntax. Although, I do agree that there should be added benefits for any new programming constructs. I hope that some of the discussions in this post, as well as the other posts by Loren, will convince you of the benefits of anonymous functions. I do recommend giving them a try.

p.s. BTW, I find Steve&#039;s example with the anonymous function so much easier to understand, because I know how to interpret that syntax. This is how you would read it:

&quot;Do the following for each element of the structure array &#039;data&#039;: compare field &#039;test&#039; of the structure with string &#039;inverse_real&#039;. Store the results to an array &#039;select&#039;.&quot;</description>
		<content:encoded><![CDATA[<p>OysterEngineer,</p>
<p>I second Loren&#8217;s suggestion on giving anonymous and nested functions a try. It took me a little while to get used to the new syntax for anonymous function, but just like any other MATLAB syntax, I am completely used to it now. I had VERY little programming experience when I started using MATLAB (I may have programmed a little in BASIC), so the learning curve was steep, but after that, MATLAB code was MATLAB code, including anonymous functions.</p>
<p>Another relevant example is the new Object Oriented Programming capability that was introduced in R2008a. It&#8217;s a completely new programming construct, which may seem extremely foreign to a traditional MATLAB user. I was one of those people. I had no experience in object oriented programming, so I was very confused. I think it took me about a year to get my head around it. Now, it feels very natural, and I love it. It changed how I code in MATLAB, and I can create more sophisticated applications with it.</p>
<p>I think we should not dismiss a particular feature just because it is a foreign concept or syntax. Although, I do agree that there should be added benefits for any new programming constructs. I hope that some of the discussions in this post, as well as the other posts by Loren, will convince you of the benefits of anonymous functions. I do recommend giving them a try.</p>
<p>p.s. BTW, I find Steve&#8217;s example with the anonymous function so much easier to understand, because I know how to interpret that syntax. This is how you would read it:</p>
<p>&#8220;Do the following for each element of the structure array &#8216;data&#8217;: compare field &#8216;test&#8217; of the structure with string &#8216;inverse_real&#8217;. Store the results to an array &#8216;select&#8217;.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: OysterEngineer</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30810</link>
		<dc:creator>OysterEngineer</dc:creator>
		<pubDate>Tue, 17 Nov 2009 22:43:56 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30810</guid>
		<description>I guess the types of technical computing problems you work on are so different from the ones I work on that I&#039;m having trouble following your thinking.

Yes, I&#039;ll put some effort into this.  Sounds like a fun way to spend the Thanksgiving weekend.</description>
		<content:encoded><![CDATA[<p>I guess the types of technical computing problems you work on are so different from the ones I work on that I&#8217;m having trouble following your thinking.</p>
<p>Yes, I&#8217;ll put some effort into this.  Sounds like a fun way to spend the Thanksgiving weekend.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Loren</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30808</link>
		<dc:creator>Loren</dc:creator>
		<pubDate>Tue, 17 Nov 2009 21:04:17 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30808</guid>
		<description>OysterEngineer-

More thoughts from me...

* Another reason I like nested and anonymous functions.  This particular discourse will concentrate on anonymous functions mostly, but nested and anonymous functions are so closely related that they points work for both.

Nested/anonymous functions allow for more natural APIs/interfaces.  Here&#039;s a quick example.  If I want to work with a bunch of lines, ones for which I don&#039;t know the slope and intercept, I have to write a function that takes 3 inputs (x,m,b).  But if what I am doing with these lines is integrating, for example, I really need to have the function be a function of x alone, and not include slope/intercept.  

No programming languages that I am familiar with allow you to separate parameters (slope/intercept) from unknowns (or variables).  They are all just variables.  But, if I have a line defined as a function of x, I can ask all kinds of questions about it without having to myself know slope and intercept.  For that matter, I can substitute something that&#039;s not strictly a line.  Suppose I want to next see what happens with a quadratic.  If I use the paradigm of having to write a function, I have to write it now to include, 3 terms, and I have to change my integrator to accept 3 optional arguments, etc.

More elegantly, I can supply a function handle that has only x as an input, and who cares what the underlying function is.  That anonymous function carries with it all the information it needs, and the function I send it to doesn&#039;t need to know anything other than it is a function of x.  Gets all the parameter messiness out of the way.

* Finally, I recommend you &quot;put some skin in the game&quot; - i.e., read (or reread) posts from this blog under the category Function Handles, download the code or copy/paste it into an editor and try it.  There are examples in the documentation.  Copy/paste them into files, run them, go through them with a debugger, etc.  I don&#039;t think you can replicate my 3 weeks of learning by reading a doc alone.  Take the plunge.

--Loren</description>
		<content:encoded><![CDATA[<p>OysterEngineer-</p>
<p>More thoughts from me&#8230;</p>
<p>* Another reason I like nested and anonymous functions.  This particular discourse will concentrate on anonymous functions mostly, but nested and anonymous functions are so closely related that they points work for both.</p>
<p>Nested/anonymous functions allow for more natural APIs/interfaces.  Here&#8217;s a quick example.  If I want to work with a bunch of lines, ones for which I don&#8217;t know the slope and intercept, I have to write a function that takes 3 inputs (x,m,b).  But if what I am doing with these lines is integrating, for example, I really need to have the function be a function of x alone, and not include slope/intercept.  </p>
<p>No programming languages that I am familiar with allow you to separate parameters (slope/intercept) from unknowns (or variables).  They are all just variables.  But, if I have a line defined as a function of x, I can ask all kinds of questions about it without having to myself know slope and intercept.  For that matter, I can substitute something that&#8217;s not strictly a line.  Suppose I want to next see what happens with a quadratic.  If I use the paradigm of having to write a function, I have to write it now to include, 3 terms, and I have to change my integrator to accept 3 optional arguments, etc.</p>
<p>More elegantly, I can supply a function handle that has only x as an input, and who cares what the underlying function is.  That anonymous function carries with it all the information it needs, and the function I send it to doesn&#8217;t need to know anything other than it is a function of x.  Gets all the parameter messiness out of the way.</p>
<p>* Finally, I recommend you &#8220;put some skin in the game&#8221; &#8211; i.e., read (or reread) posts from this blog under the category Function Handles, download the code or copy/paste it into an editor and try it.  There are examples in the documentation.  Copy/paste them into files, run them, go through them with a debugger, etc.  I don&#8217;t think you can replicate my 3 weeks of learning by reading a doc alone.  Take the plunge.</p>
<p>&#8211;Loren</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve Eddins</title>
		<link>http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30803</link>
		<dc:creator>Steve Eddins</dc:creator>
		<pubDate>Tue, 17 Nov 2009 18:40:52 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.mathworks.com/loren/2009/03/13/using-str2func-for-anonymous-function-handle-creation/#comment-30803</guid>
		<description>OysterEngineer&#8212;You raise a number of good questions that I&#039;m interested in addressing.  It will probably be a few days, though, given what the calendar on the screen in front of me looks like at the moment.  I might about it on my blog.  If I do that, I&#039;ll post a pointer here.</description>
		<content:encoded><![CDATA[<p>OysterEngineer&mdash;You raise a number of good questions that I&#8217;m interested in addressing.  It will probably be a few days, though, given what the calendar on the screen in front of me looks like at the moment.  I might about it on my blog.  If I do that, I&#8217;ll post a pointer here.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

