<?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>Math &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/math/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Thu, 23 Mar 2023 19:53:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Matrix Math</title>
		<link>https://blog.xojo.com/2023/03/23/matrix-math/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Thu, 23 Mar 2023 19:53:35 +0000</pubDate>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Einhugur]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[Matrix Math]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=11227</guid>

					<description><![CDATA[A feature in some other languages you may have seen is something called matrix math. These are operations you can perform on matrices, which are 2-dimensional arrays. Xojo does not have any matrix math functions built in, but using the Extends command you can add your own.]]></description>
										<content:encoded><![CDATA[
<p>A feature in some other languages you may have seen is something called matrix math. These are operations you can perform on matrices, which are 2-dimensional arrays. Xojo does not have any matrix math functions built in, but using the <a href="https://documentation.xojo.com/api/language/extends.html">Extends</a> command you can add your own.</p>



<p>I&#8217;ll show you how to add two of the simpler ones: add and multiply.</p>



<p>In case your <a href="https://en.wikipedia.org/wiki/Linear_algebra">linear algebra</a> is a bit rusty, let me recap a little. A matrix is a 2-dimensional array. Adding one matrix to another involves adding the values in the corresponding cells of each matrix (which both must be the same size) together and putting that sum into a new matrix at the same position.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="576" src="https://blog.xojo.com/wp-content/uploads/2023/02/image-1024x576.png" alt="" class="wp-image-11230" srcset="https://blog.xojo.com/wp-content/uploads/2023/02/image-1024x576.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/02/image-300x169.png 300w, https://blog.xojo.com/wp-content/uploads/2023/02/image-768x432.png 768w, https://blog.xojo.com/wp-content/uploads/2023/02/image-1536x864.png 1536w, https://blog.xojo.com/wp-content/uploads/2023/02/image-2048x1152.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">A different kind of Matrix</figcaption></figure>



<p>For example, consider these two matrices (taken from the <a href="https://en.wikipedia.org/wiki/Matrix_addition">Wikipedia page on Matrix Addition</a>):</p>



<pre class="wp-block-preformatted">1 3
1 0
1 2

0 0
7 5
2 1</pre>



<p>To add them</p>



<ul class="wp-block-list">
<li>1st row: 1 + 0, 3 + 0</li>



<li>2nd row: 1 + 7, 0 + 5</li>



<li>3rd row: 1 + 2, 2 + 1</li>
</ul>



<p>This results in a new matrix:</p>



<pre class="wp-block-preformatted">1 3
8 5
3 3</pre>



<p>&nbsp;As you can see, addition is pretty straightforward. So how might this look in Xojo? Here is an extension method for Integer arrays that I created to do this:</p>



<pre class="wp-block-code"><code>Public Function Add(Extends m1(, ) As Integer, m2(, ) As Integer) As Integer(,)
&nbsp; // https://en.wikipedia.org/wiki/Matrix_addition
&nbsp; // Both arrays must have the same number of rows and columns.

&nbsp; If m1.LastIndex(1) &lt;&gt; m2.LastIndex(1) Or m1.LastIndex(2) &lt;&gt; m2.LastIndex(2) Then
    Raise New UnsupportedOperationException("Array sizes must match.")
  End If

&nbsp; // The values at each cell are added together and a new
  // array is created with their sums.
  Var newMatrix(-1, -1) As Integer

&nbsp; newMatrix.ResizeTo(m1.LastIndex(1), m1.LastIndex(2))

&nbsp; For c1 As Integer = 0 To m1.LastIndex(1)
    For c2 As Integer = 0 To m1.LastIndex(2)
    &nbsp; newMatrix(c1, c2) = m1(c1, c2) + m2(c1, c2)
    Next
&nbsp; Next

&nbsp; Return newMatrix

End Function</code></pre>



<p>To use it, you populate two matrices and call matrix1.add(matrix2). Here is some sample code to solve the example above:</p>



<pre class="wp-block-code"><code>// Matrix Addition

Var matrix1(2, 1) As Integer
matrix1(0, 0) = 1
matrix1(0, 1) = 3
matrix1(1, 0) = 1
matrix1(1, 1) = 0
matrix1(2, 0) = 1
matrix1(2, 1) = 2

Var matrix2(2, 1) As Integer
matrix2(0, 0) = 0
matrix2(0, 1) = 0
matrix2(1, 0) = 7
matrix2(1, 1) = 5
matrix2(2, 0) = 2
matrix2(2, 1) = 1

Var matrix3(-1, -1) As Integer
matrix3 = matrix1.Add(matrix2)</code></pre>



<p>Multiplication gets more complex and is a bit tricky to explain. First, the sizes matter. The 2nd dimension of the 1st matrix must be the same as the 1st dimension of the 2nd matrix. That means that if you have matrix1(3,2) then matrix2(2,2) is valid, but matrix2(1,2) is not. The resulting matrix is matrix1&#8217;s 1st dimension by matrix2&#8217;s 2nd dimension.</p>



<p>To do the multiplication, for each cell in the new matrix you multiple each cell in the corresponding row of matrix1 with each cell of the corresponding column in matrix2.</p>



<p>A Xojo method to do that looks like this:</p>



<pre class="wp-block-code"><code>Public Function Multiply(Extends m1(, ) As Integer, m2(, ) As Integer) As Integer(,)

&nbsp; // https://en.wikipedia.org/wiki/Matrix_multiplication
&nbsp; // matrix1's 2nd dimension size must be the same as
&nbsp; // matrix2's 1st dimension size.

&nbsp; If m1.LastIndex(2) &lt;&gt; m2.LastIndex(1) Then
    Raise New UnsupportedOperationException("m1 2nd dimension must match m2 1st dimension.")
&nbsp; End If

&nbsp; // The result matrix is matrix1's 1st dimension by matrix2's 2nd dimension

&nbsp; Var newMatrix(-1, -1) As Integer

&nbsp; newMatrix.ResizeTo(m1.LastIndex(1), m2.LastIndex(2))

&nbsp; For c1 As Integer = 0 To newMatrix.LastIndex(1)
    For c2 As Integer = 0 To newMatrix.LastIndex(2)
&nbsp;     Var prod As Integer
&nbsp;     For p1 As Integer = 0 To m1.LastIndex(2)
        prod = prod + m1(c1, p1) * m2(p1, c2)
&nbsp;     Next
&nbsp;     newMatrix(c1, c2) = prod
    Next
&nbsp; Next

&nbsp; Return newMatrix

End Function</code></pre>



<p>The <a href="https://en.wikipedia.org/wiki/Matrix_multiplication">Wikipedia example for matrix multiplication</a> has these two matrices:</p>



<pre class="wp-block-preformatted">1 0 1
2 1 1
0 1 1
1 1 2

1 2 1
2 3 1
4 2 2</pre>



<p>Multiplying them together results in this matrix:</p>



<pre class="wp-block-preformatted"> 5 4 3
 8 9 5
 6 5 3
11 9 6</pre>



<p>This code sets up the above example and multiplies it using the method:</p>



<pre class="wp-block-code"><code>// Matrix Multiplication

Var matrix1(3, 2) As Integer
matrix1(0, 0) = 1
matrix1(0, 1) = 0
matrix1(0, 2) = 1
matrix1(1, 0) = 2
matrix1(1, 1) = 1
matrix1(1, 2) = 1
matrix1(2, 0) = 0
matrix1(2, 1) = 1
matrix1(2, 2) = 1
matrix1(3, 0) = 1
matrix1(3, 1) = 1
matrix1(3, 2) = 2

Var matrix2(2, 2) As Integer
matrix2(0, 0) = 1
matrix2(0, 1) = 2
matrix2(0, 2) = 1
matrix2(1, 0) = 2
matrix2(1, 1) = 3
matrix2(1, 2) = 1
matrix2(2, 0) = 4
matrix2(2, 1) = 2
matrix2(2, 2) = 2

Var matrix3(-1, -1) As Integer
matrix3 = matrix1.Multiply(matrix2)</code></pre>



<p>I will point out that the two methods used here are very simple algorithms that won&#8217;t be nearly fast enough when working with large matrices. But hopefully they showed you that <a href="https://documentation.xojo.com/getting_started/using_the_xojo_language/modules.html#getting-started-using-the-xojo-language-modules-extension-methods">Extension Methods</a> are a great way to extend the Xojo language for your specific needs and you found this example interesting, even if you have no use for linear algebra or matrix math.</p>



<p>Download the project: <a href="https://files.xojo.com/BlogExamples/MatrixMath.xojo_binary_project">MatrixMath</a></p>



<p>As an alternative to using Extends, you could create your own Matrix class and then use <a href="https://documentation.xojo.com/api/math/operator_overloading.html#operator-overloading">Operator overloading</a> (a subject for another blog post) so that you could write code like this:</p>



<pre class="wp-block-code"><code>Var m1 As New Matrix(1, 3, 1, 0, 1 2)
Var m2 As New Matrix(0, 0, 7, 5, 2, 1)
Var m3 As Matrix = m1 + m2</code></pre>



<p>If you actually need full matrix support in Xojo, check out the <a href="http://delaneyrm.com/">free matrix-related Delaney</a> or <a href="https://einhugur.com/Html/opensource.html">Einhugur plugins</a>.</p>



<p><em>Paul learned to program in BASIC at age 13 and has programmed in more languages than he remembers, with Xojo being an obvious favorite. When not working on Xojo, you can find him talking about retrocomputing at <a href="https://goto10.substack.com" target="_blank" rel="noreferrer noopener">Goto 10</a> and </em>on Mastodon @lefebvre@hachyderm.io.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Back to School: Graphing Simple Functions</title>
		<link>https://blog.xojo.com/2022/08/31/back-to-school-graphing-simple-functions/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Wed, 31 Aug 2022 17:45:18 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Graphing]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[Rapid Application Development]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=10689</guid>

					<description><![CDATA[I was recently asked if there was a way to use Xojo Canvas Graphics to draw using the math X-Y coordinate system. First a little background. In Xojo (along with Java, .NET and many other languages), graphics are drawn where (0,0) is at the top left, X increases to the right and Y increases down. Other languages or APIs (Cocoa, for example) use a system where (0,0) is at the bottom left, X increases to the right and Y increases up.]]></description>
										<content:encoded><![CDATA[
<p>I was recently asked if there was a way to use Xojo Canvas Graphics to draw using the math X-Y coordinate system. First a little background. In Xojo (along with Java, .NET and many other languages), graphics are drawn where (0,0) is at the top left, <em>X</em> increases to the right and <em>Y</em> increases down. Other languages or APIs (Cocoa, for example) use a system where (0,0) is at the bottom left, <em>X</em> increases to the right and <em>Y</em> increases up.</p>



<p>In mathematics, (0,0) is typically at the center with positive <em>X</em> being to right, negative <em>X</em> to the left. Positive Y is up and negative <em>Y</em> is down.</p>



<p>This means if you are trying to draw the graphs of some standard math functions you have to do some translating. With Xojo you can use the <a href="https://documentation.xojo.com/api/graphics/graphics.html#graphics-translate">Graphics.Translate()</a> function to relocate the origin point. This makes it easy to move (0,0) from the top left to the center with code like this in the Paint event:</p>



<pre class="wp-block-preformatted"><code>g.Translate(g.Width / 2, g.Height / 2)</code></pre>



<p>Switching the <em>Y</em> from going from the top down to the bottom up is just a matter of negating it. With a translated origin, this would draw a line above the baseline:</p>



<pre class="wp-block-preformatted"><code>g.DrawLine(1, -2, 1, -2)</code></pre>



<p>I thought it might be interesting to try and wrap this up in some subclasses to make it a little more automatic, work with the smaller scale typically used for these type of graphs and even graph some functions.</p>



<p>The result is a project, MathGraph, which can draw some shapes on the graph and also graph simple functions that work with <em>x</em>.</p>



<p>Here&#8217;s an example of a graph for the cubic polynomial function y = x^3:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-14.10.56@2x-1024x777.png" alt="" class="wp-image-10691" width="635" height="482" srcset="https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-14.10.56@2x-1024x777.png 1024w, https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-14.10.56@2x-300x228.png 300w, https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-14.10.56@2x-768x582.png 768w, https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-14.10.56@2x.png 1424w" sizes="(max-width: 635px) 100vw, 635px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Keep in mind that this only solves for <em>x</em>.</p></blockquote>



<p>Other functions you might want to try:</p>



<ul class="wp-block-list"><li>quadratic polynomial: x^2</li><li>line: x</li><li>absolute value: abs(x)</li><li>reciprocal of x: 1/x</li><li>reciprocal of&nbsp;<em>x</em><sup>2</sup>: 1/x^2</li><li>square root: sqrt(x)</li><li>exponential: exp(x)</li><li>logarithmic: log(x)</li><li>sin wave: sin(x)</li><li>sin(x)/cos(x)</li></ul>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-16.10.16@2x-1024x777.png" alt="" class="wp-image-10694" width="648" height="492" srcset="https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-16.10.16@2x-1024x777.png 1024w, https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-16.10.16@2x-300x228.png 300w, https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-16.10.16@2x-768x582.png 768w, https://blog.xojo.com/wp-content/uploads/2022/08/CleanShot-2022-08-23-at-16.10.16@2x.png 1424w" sizes="(max-width: 648px) 100vw, 648px" /></figure>



<p>Try multiplying and dividing some of the above in combination. You can use any valid Xojo math expression and any of the <a href="https://documentation.xojo.com/topics/xojoscript/xojoscript_functions.html#topics-xojoscript-xojoscript-functions-math">math functions</a>. If there is an error in your function, then the error message is shown in the graph itself.</p>



<p>There are also some built in functions to draw text, rectangles, ovals and plot points that you can use in the Paint event handler.</p>



<p>This is provided as a Canvas subclass, called MathCanvas. It has companion classes MathGraphics and Grapher. MathGraphics is used to draw using math coordinates. Grapher is a subclass of <a href="https://documentation.xojo.com/api/code_execution/xojoscript.html">XojoScript</a> and is what processes the function for graphing (it is based on the Evaluator example project included with Xojo).</p>



<p><a href="https://files.xojo.com/BlogExamples/MathGraph.xojo_binary_project">Download the MathGraph</a> project to try it for yourself. </p>



<p><em>Paul learned to program in BASIC at age 13 and has programmed in more languages than he remembers, with Xojo being an obvious favorite. When not working on Xojo, you can find him talking about retrocomputing at <a href="https://goto10.substack.com" target="_blank" rel="noreferrer noopener">Goto 10</a> and </em>on Mastodon @lefebvre@hachyderm.io.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Square &#038; Multiply Algorithm</title>
		<link>https://blog.xojo.com/2022/05/16/square-multiply-algorithm/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Mon, 16 May 2022 15:00:00 +0000</pubDate>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=10323</guid>

					<description><![CDATA[How do you compute a massive number raised to the power of another huge number, modulo something else? Use Xojo to solve ]]></description>
										<content:encoded><![CDATA[
<p>I love watching YouTube videos and as I&#8217;ve mentioned before, one of my favorite channels is Computerphile. They recently did a video talking about how to solve this sum:</p>



<p>23<sup>373</sup> Mod 747</p>



<p>Their video was prompted by a video about <a href="https://youtu.be/_MscGSN5J6o">Witness Numbers</a> on the Numberphile channel, which I guess I now also need to subscribe to. This is the video description:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>How do you compute a massive number raised to the power of another huge number, modulo something else? Dr Mike Pound explains the super-quick square &amp; multiply algorithm.</p><cite>Computerphile</cite></blockquote>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Square &amp; Multiply Algorithm - Computerphile" width="500" height="281" src="https://www.youtube.com/embed/cbGB__V8MNk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>I thought this posed an interesting question because that is obviously a huge number and is way bigger than most programming languages, including Xojo, can handle. However, taking the Mod means that the answer has to be between 0 and 746, so does the massive number actually need to be calculated at all?</p>



<p>It turns out the answer is no, as long as you know the algorithm, which is called Square &amp; Multiply.</p>



<p>At a high level, this is the algorithm as explained in the video:</p>



<ul class="wp-block-list"><li>Convert the exponent to binary.</li><li>Each 0 requires a square</li><li>Each 1 requires a square and then a multiply</li><li>After each calculation, can do the modulo to keep the value small.</li><li>The final calculation is the answer.</li></ul>



<p>To test this, start with a smaller value. The video uses:</p>



<p>3<sup>45</sup> mod 7</p>



<p>The number 45 in binary is 101101. Since the very first digit is a 1, our starting value of this example is 3, the initial number itself.</p>



<ul class="wp-block-list"><li>The next binary digit is 0, so that means a square. 3 * 3 = 9. 9 Mod 7 = 2.</li><li>The next binary digit is 1, so that means a square and then a multiply.<ul><li>Squaring the 2 gives us 4 and the Mod 7 of that is also 4.</li><li>We now use 4 and multiple it with the starting value of 3 to get 12. And 12 Mod 7 is 5.</li></ul></li></ul>



<p>As you can see, each time through we are only dealing with small numbers so they are easily calculated. And because the binary value of 45 only has 6 digits there will be at most 12 steps to the calculation, which is also much less than 45.</p>



<p>Continuing through the rest:</p>



<ul class="wp-block-list"><li>Next binary digit is a 1, so square it: 5 * 5 = 25, Mod 7 = 4.<ul><li>and multiple it: 4 * 3 = 12, Mod 7 = 5.</li></ul></li><li> Next is a 0, so square it: 5 * 5 = 25, Mod 7 = 4.</li><li>The last digit is a 1, so square it: 4 * 4 = 16, Mod 7 = 2.<ul><li>And finally multiply it: 2 * 3 = 6. 6 Mod 7 = 6, which the final answer.</li></ul></li></ul>



<p>You can verify this using <a href="https://www.wolframalpha.com">Wolfram Alpha</a>:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="417" src="https://blog.xojo.com/wp-content/uploads/2022/04/CleanShot-2022-04-27-at-11.00.44@2x-1024x417.png" alt="" class="wp-image-10324" srcset="https://blog.xojo.com/wp-content/uploads/2022/04/CleanShot-2022-04-27-at-11.00.44@2x-1024x417.png 1024w, https://blog.xojo.com/wp-content/uploads/2022/04/CleanShot-2022-04-27-at-11.00.44@2x-300x122.png 300w, https://blog.xojo.com/wp-content/uploads/2022/04/CleanShot-2022-04-27-at-11.00.44@2x-768x313.png 768w, https://blog.xojo.com/wp-content/uploads/2022/04/CleanShot-2022-04-27-at-11.00.44@2x-1536x625.png 1536w, https://blog.xojo.com/wp-content/uploads/2022/04/CleanShot-2022-04-27-at-11.00.44@2x.png 1636w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Despite how it may seem, the above algorithm results in short method. Here&#8217;s what it looks like in Xojo:</p>



<pre class="wp-block-preformatted">Public Function SquareAndMultiply(value As Integer, exponent As Integer, modulus As Integer) As Integer
  // Square and Multipe Algorithm
  Var b As String = exponent.ToBinary
  Var binaryValue() As String = b.Split("")
  
  Var lastModulus As Integer = 1
  Var newExp As Integer
  newExp = Integer.FromBinary(binaryValue(0))
  
  If binaryValue(0) = "1" Then
    lastModulus = value
  End If
  
  For i As Integer = 1 To binaryValue.LastIndex
    Var bit As String = binaryValue(i)
    
    lastModulus = (lastModulus * lastModulus) Mod modulus
    
    If bit = "1" Then // Multiply as well
      lastModulus = (lastModulus * value) Mod modulus
    End If
  Next
  
  Return lastModulus
  
End Function
</pre>



<p>I pretty much tried to implement the exact algorithm described in the video. The <a href="https://en.wikipedia.org/wiki/Exponentiation_by_squaring">Wikipedia page on this topic</a> seems to have other, perhaps more efficient, implementations.</p>



<p>You would call the Xojo method like this to solve the original problem shown a the top of this post:</p>



<pre class="wp-block-preformatted">Var answer As Integer = SquareAndMultiply(23, 373, 747)</pre>



<p>You can download this Xojo project to try it out:</p>



<p><a href="https://files.xojo.com/BlogExamples/SquareAndMultiply.xojo_binary_project">SquareAndMultiply</a></p>



<p>By the way, the answer to <strong>23<sup>373</sup> Mod 747</strong> is 131.</p>



<p><em>Paul learned to program in BASIC at age 13 and has programmed in more languages than he remembers, with Xojo being an obvious favorite. When not working on Xojo, you can find him talking about retrocomputing at <a href="https://goto10.substack.com" target="_blank" rel="noreferrer noopener">Goto 10</a> and </em>on Mastodon @lefebvre@hachyderm.io.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
