<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
</head>
<body>
<p>Hey everyone,</p>
<p>I hope you all are well, having the time of your lives!<br/>
</p>
<p>Would anyone wish to help me develop plugins to speedup
ReedSolomon?<br/>
</p>
<p>I am feeling the dopamine high from finally finishing (mostly) my
Reed Solomon implementation, both Erasure Coding from Backblaze
[1] and Error Correction from ZXing [2]. I got decoding working
correctly, with dataMatrix256 and QRCode, including corruption
repair, within t/2 errors. <br/>
</p>
<p>It is VERY SLOOOW, way to slow to use yet. I am working on
writing plugins for the hot spots, which are on the decode side:
GFPoly evaluateAt (40.1%), Decoder runEuclideanAlgorithm(38.5%),
Decoder findErrorLocations(12.6%) and Decoder find
ErrorMagnitudes(2.3%). At the bottom, an exposition of performance
profiling the GF FEC code.<br/>
</p>
<div class="s-prose js-post-body" itemprop="text">
<p>It is written in Squeak, my favorite all-time language
environment. I have used it for over 20 years. It is so
beautiful! The rule of development is #GetItWorking,
#GetItWorkingRight #GetItWorkingFast.</p>
<p>If you are interested in checking out the code, go to <a href="http://squeak.org" rel="nofollow noreferrer">http://squeak.org</a>
and grab squeak. Once you have it running, right click for the
World Menu and select open...Monticello Browser. Add a new
repository of type HTTP and enter the Cryptography repository.</p>
<pre><code>MCHttpRepository
location: '<a class="moz-txt-link-freetext" href="https://www.squeaksource.com/Cryptography">https://www.squeaksource.com/Cryptography</a>'
user: 'squeak'
password: 'squeak'
</code></pre>
<p>Open a Workspace (World Menu -> Workspace) & run this
code (paste into Workspace, select it and right click do it.):</p>
<pre><code>Installer ss
project: 'Cryptography';
install: 'ProCrypto-1-1-1';
install: 'ProCryptoTests-1-1-1'.
</code></pre>
<p>Now you can open a Browser to look at the code (categories:
CryptographyRSFEC & CryptographyRSFECTests) or open a
TestRunner to test it (World Menu -> *).</p>
<p>[1] Backblze RS erasure code -
<svg aria-hidden="true" class="svg-icon iconBookmark" width="18" height="18" viewBox="0 0 18 18"></svg><button class="js-bookmark-btn s-btn s-btn__unset c-pointer py4
js-gps-track" data-controller="s-tooltip" data-s-tooltip-placement="right" aria-pressed="false" aria-label="Bookmark" data-selected-classes="fc-yellow-600" data-gps-track="post.click({ item: 1, priv: 5, post_type: 1
})" aria-describedby="--stacks-s-tooltip-y67jzwuu"> </button>
<a class="js-post-issue grid--cell s-btn s-btn__unset c-pointer
py6 mx-auto" href="https://stackoverflow.com/posts/67696209/timeline" data-shortcut="T" data-ks-title="timeline" data-controller="s-tooltip" data-s-tooltip-placement="right" aria-label="Timeline" aria-describedby="--stacks-s-tooltip-k557c5if"><svg aria-hidden="true" class="mln2 mr0 svg-icon iconHistory" width="19" height="18" viewBox="0 0 19 18"></svg></a></p>
<div class="votecell post-layout--left">
<div class="js-voting-container grid jc-center fd-column
ai-stretch gs4 fc-black-200" data-post-id="67696209">
</div>
</div>
<div class="s-prose js-post-body" itemprop="text">
<p>I am feeling the dopamine high from finally finishing
(mostly) my Reed Solomon implementation. I got decoding
working correctly, with dataMatrix256 and QRCode, including
corruption repair, within t/2 errors. It is VERY SLOOOW, way
to slow to use yet. There are speedups possible in writing a
plugin for the hot spots, which are on the decode side: GFPoly
evaluateAt (40.1%), Decoder runEuclideanAlgorithm(38.5%),
Decoder findErrorLocations(12.6%) and Decoder find
ErrorMagnitudes(2.3%).</p>
<p>It is written in Squeak, my favorite all-time language
environment. I have used it for over 20 years. It is so
beautiful! The rule of development is #GetItWorking,
#GetItWorkingRight #GetItWorkingFast.</p>
<p>If you are interested in checking out the code, go to <a href="http://squeak.org" rel="nofollow noreferrer">http://squeak.org</a>
and grab squeak. Once you have it running, right click for the
World Menu and select open...Monticello Browser. Add a new
repository of type HTTP and enter the Cryptography repository.</p>
<pre><code>MCHttpRepository
location: '<a class="moz-txt-link-freetext" href="https://www.squeaksource.com/Cryptography">https://www.squeaksource.com/Cryptography</a>'
user: 'squeak'
password: 'squeak'
</code></pre>
<p>Open a Workspace (World Menu -> Workspace) & run this
code (paste into Workspace, select it and right click do it.):</p>
<pre><code>Installer ss
project: 'Cryptography';
install: 'ProCrypto-1-1-1';
install: 'ProCryptoTests-1-1-1'.
</code></pre>
<p>Now you can open a Browser to look at the code (categories:
CryptographyRSFEC & CryptographyRSFECTests) or open a
TestRunner to test it (World Menu -> *).</p>
<p>[1] Backblaze Open-sources Reed-Solomon Erasure Coding Source
Code - <a class="moz-txt-link-freetext" href="https://www.backblaze.com/blog/reed-solomon/">https://www.backblaze.com/blog/reed-solomon/</a> <br/>
[2] ZXing github
-https://github.com/zxing/zxing/tree/master/core/src/main/java/com/google/zxing/common/reedsolomon
<br/>
</p>
<p>---</p>
<p>From the comment on
CryptographyRSErrorCorrection-rww.12.mcz...<br/>
</p>
<p>Fixed decoding. Some test pass green (DataMatrix &
QRCodes) with encoding, decoding AND error correction all
working. So the algorithms are working correctly.
#GetItWorking, #GetItWorkingRight #GetItWorkingFast.
AztecParam GF is still failing. <br/>
<br/>
Do not allow values equal to the max 256. it passes tests but
it is VERY SLOOOW. Profilie looks like, top tree branches,
then summary. I may need to pluginize both GF and GFPoly. The
costly methods are in decode, with GF Polynomial evaluation,
the Euclidean Algorithm, the Chein's search
(#findErrorLocations) and the Forney's formula
(#findErrorMagnitudes). In the leaves, I can see that
OrderedColection access is expensive.<br/>
<br/>
Top tree branches:<br/>
[| 93.7% {136540ms} RSFECDecoder>>decode:twoS:<br/>
[| 40.1% {58370ms} RSFECGenericGFPoly>>evaluateAt:<br/>
[| 38.5% {56167ms}
RSFECDecoder>>runEuclideanAlgorithmPoly:poly:rDegrees:<br/>
[| 12.6% {18331ms}
RSFECDecoder>>findErrorLocations:<br/>
[| 2.3% {3423ms}
RSFECDecoder>>findErrorMagnitudes:errorLlocations:<br/>
[ 5.4% {7842ms}
RSFECReedSolomonTest>>corrupt:howMany:random:max:<br/>
<br/>
<br/>
**Leaves**<br/>
44.7% {65149ms} OrderedCollection>>at:<br/>
12.8% {18619ms} SmallInteger(Number)>>positive<br/>
8.0% {11589ms} RSFECGenericGF>>addOrSubtract:by:<br/>
5.7% {8332ms} RSFECGenericGF>>multiply:by:<br/>
5.0% {7352ms} RSFECGenericGFPoly>>evaluateAt:<br/>
5.0% {7270ms} OrderedCollection>>at:put:<br/>
4.6% {6727ms} False>>|<br/>
1.7% {2537ms} RSFECGenericGFPoly>>addOrSubtractPoly:<br/>
1.4% {1996ms}
OrderedCollection(SequenceableCollection)>>replaceFrom:to:with:startingAt:<br/>
1.3% {1851ms}
RSFECGenericGFPoly>>multiplyByMonomialDegree:coefficient:<br/>
1.1% {1562ms} LargePositiveInteger(Integer)>>bitShift:<br/>
<br/>
**Memory**<br/>
old -16,777,216 bytes<br/>
young +15,072,816 bytes<br/>
used -1,704,400 bytes<br/>
free -15,072,816 bytes<br/>
<br/>
**GCs**<br/>
full 2 totalling 171 ms (0.12% uptime), avg
85.5 ms<br/>
incr 4193 totalling 764 ms (0.5% uptime), avg
0.2 ms<br/>
tenures 6,093 (avg 0 GCs/tenure)<br/>
root table 0 overflows<br/>
</p>
<p>-- <br/>
</p>
</div>
</div>
<div class="moz-signature">Kindly,
Robert</div>
</body></html>