tag:blogger.com,1999:blog-87436016943972900772024-03-19T06:48:06.937+01:00Gautier's blogGdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.comBlogger375125tag:blogger.com,1999:blog-8743601694397290077.post-91049495191751471772024-03-16T06:34:00.002+01:002024-03-16T06:34:49.395+01:00Gold pricing 2024-03-16<p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p>
<hr />
<p>
An uptick coming out of nowhere (except perhaps due to the traction of cryptocurrencies, coming out of nowhere as well!)</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoKLFvnH4hOaIR-7thlLThpaH3hCh5yZXRph7JF2DWg0vHD6SP_3jXNl86wLfg6jNdt1bKEQjFZSbWfmXZ7F-XoenA-3l_2tiMn7pyMNZdNJ6aFPiYJS-PXd6JrOWwTDsONdUkDRZcWY9LvMlhYk_trRs-jjQY6FtXvwVvOkeORRCq-5YJWi8QpDhbv8g/s945/g4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="531" data-original-width="945" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoKLFvnH4hOaIR-7thlLThpaH3hCh5yZXRph7JF2DWg0vHD6SP_3jXNl86wLfg6jNdt1bKEQjFZSbWfmXZ7F-XoenA-3l_2tiMn7pyMNZdNJ6aFPiYJS-PXd6JrOWwTDsONdUkDRZcWY9LvMlhYk_trRs-jjQY6FtXvwVvOkeORRCq-5YJWi8QpDhbv8g/w400-h225/g4.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigXwMsknhYUSXq_gwZgi3BcXC1UZStc4A_zmiz3oin-6RwVrJlnzRgt7m81acWEaPYpoPBQG5cGpw7u9Lw4l6o6CF_h5CTKc9BpoQ-mmBSy5zttPild_SArlFJvdq8-0GS_RrwhTedKqfudDOVlVVGMrlE1KKBI50ekkXAKYjAPg8xcAN-zqCiW42CFn4/s983/g3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="639" data-original-width="983" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigXwMsknhYUSXq_gwZgi3BcXC1UZStc4A_zmiz3oin-6RwVrJlnzRgt7m81acWEaPYpoPBQG5cGpw7u9Lw4l6o6CF_h5CTKc9BpoQ-mmBSy5zttPild_SArlFJvdq8-0GS_RrwhTedKqfudDOVlVVGMrlE1KKBI50ekkXAKYjAPg8xcAN-zqCiW42CFn4/w400-h260/g3.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI1DAq0q-LvuHMpVjp-jXPxfxBvffPmYUZ9z8kavk7qqBKzgXMbcZgQ1bJwzSk-opBIZZrS-UPax9S_dMhNvUWGydUZk5ZpFzSsJanm_nsuLDUDUU50H3MBSpF96YPjtG0wgWQWxVT8JAFz0sWlY5UXCEUPJVheHuDVzCluj3hxLQ4HPyMIm7skHllnMc/s975/g2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="598" data-original-width="975" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI1DAq0q-LvuHMpVjp-jXPxfxBvffPmYUZ9z8kavk7qqBKzgXMbcZgQ1bJwzSk-opBIZZrS-UPax9S_dMhNvUWGydUZk5ZpFzSsJanm_nsuLDUDUU50H3MBSpF96YPjtG0wgWQWxVT8JAFz0sWlY5UXCEUPJVheHuDVzCluj3hxLQ4HPyMIm7skHllnMc/w400-h245/g2.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6lh4EXEe0n9LDSHPzTh4Vp8koFhLy84T0IzQfRLl5tKly3qmy6BzJxW0UlCbtvo44_D9rZozttBwgCeseKTCEcRq2io76SN9jYkTiOmPFlMjfMStbPbFo7Xa8vfwacE6kpNOMc1_KK4PnthE3sJx7YhLZ-qrpUspZ8ZzIVP4JMexCF_pTOn0V72ehVQY/s973/g1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="597" data-original-width="973" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6lh4EXEe0n9LDSHPzTh4Vp8koFhLy84T0IzQfRLl5tKly3qmy6BzJxW0UlCbtvo44_D9rZozttBwgCeseKTCEcRq2io76SN9jYkTiOmPFlMjfMStbPbFo7Xa8vfwacE6kpNOMc1_KK4PnthE3sJx7YhLZ-qrpUspZ8ZzIVP4JMexCF_pTOn0V72ehVQY/w400-h245/g1.png" width="400" /></a></div><br /><p></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-41580249682538208642024-03-03T13:23:00.015+01:002024-03-19T00:48:48.809+01:00Benchmarking the Generic Image Decoder (GID)<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5qHOlOogSSrNoI7BNyGp7c-G_7bP2xWUnPsv_mrsNGdEd-AaAHPu-OgIom7Q0HeHT0Qc425b8errVIkM3YPlnTggrq4y-BUENnhPf9SFW9k_-5UJ5YSkckQvCks_yRnZJh5qGwzymadStJJ7heBMR6qnXfCrLrx-s1e03KgNy1ppDoahv3lGJM-lImoM/s989/gid_vs_im.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="309" data-original-width="989" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5qHOlOogSSrNoI7BNyGp7c-G_7bP2xWUnPsv_mrsNGdEd-AaAHPu-OgIom7Q0HeHT0Qc425b8errVIkM3YPlnTggrq4y-BUENnhPf9SFW9k_-5UJ5YSkckQvCks_yRnZJh5qGwzymadStJJ7heBMR6qnXfCrLrx-s1e03KgNy1ppDoahv3lGJM-lImoM/w400-h125/gid_vs_im.png" width="400" /></a></div><br />
We are happy to announce version 13 of the Generic Image Decoder (GID).<br />
GID is an open-source, low-level, pure Ada library for decoding a broad variety of image formats.<br />
<br />
GID can be found via the following links:<p></p>
<p>
</p><table border="0">
<tbody><tr>
<td>Home page:</td>
<td><a href="http://gen-img-dec.sf.net/">http://gen-img-dec.sf.net/</a></td>
</tr>
<tr>
<td>Project page:</td>
<td><a href="http://sf.net/projects/gen-img-dec/">http://sf.net/projects/gen-img-dec/</a></td>
</tr>
<tr>
<td>Mirror:</td>
<td><a href="https://github.com/zertovitch/gid">https://github.com/zertovitch/gid</a></td>
</tr>
<tr>
<td>Alire crate:</td>
<td><a href="https://alire.ada.dev/crates/gid">https://alire.ada.dev/crates/gid</a></td>
</tr>
</tbody></table> <p></p>
<p>Recent additions to the library are:<br /></p>
<ul style="text-align: left;">
<li>support for <b>animated PNG</b>s</li>
<li>support for <b>progressive JPEG</b> images (ubiquitous on social media),
thanks to a recent and clean <a href="https://github.com/tbpaolini/PyJpegDecoder" target="_blank">Python implementation</a>,
by Tiago Becerra Paolini, that was easy to translate.<br />
Congrats to Tiago, the real Champollion of the JPEG format!<br />
The resemblance between Ada and Python, from the "for" loop, the ranges, the exceptions (that are "raise"d), to the Clock function, and so on, was pretty helpful (it is not a coincidence, by the way). Side note: the Ada translation runs more than <b>500 times faster</b> than the Python original!<br /></li>
</ul>
<p>There are also two new tools shipped with GID (and of course using it):<br /></p>
<ul style="text-align: left;">
<li><b>comp_img</b>: an image comparison tool (result is from 0: identical, to 1: black/white)</li>
<li><b>benchmark</b>: a performance test between GID and ImageMagick, an open-source library.</li></ul>
<p>Let's develop on the latter tool - the <b>benchmarking program</b>.<br />
Each test image (they are all included in the repository) is decoded to a simple, "flat" bitmap format (PPM) and saved as a file, once using GID, once using ImageMagick.<br />Since GID is used internally by the benchmarking program and ImageMagick is used through a system call, we compensate for the time penalty of the external calls with the following technique:<br />We time many "empty" calls to ImageMagick that do only display some general information.<br />The resulting estimated "empty call" time is subtracted to the measured times of ImageMagick decoding the test images.<br />Then we have a fairer comparison.<br /><br />
The test machine is a HP ProDesk 400 G6 SFF with an Intel i7-9700 3 GHz processor running Window 10.<br />
The Ada compiler used is <a href="https://github.com/alire-project/GNAT-FSF-builds/releases" target="_blank">GCC version FSF 11.2.0</a>.<br />
The GNAT compilation mode was set to Fast_unchecked for the benchmarking.<br />
The version of <a href="https://imagemagick.org/" target="_blank">ImageMagick</a> is 7.1.1-27. <br />
<br />Here are the main results:<br />
</p><table border="1" cellpadding="10">
<tbody><tr>
<th>Format</th> <th>Result</th>
</tr>
<tr> <td>GIF</td> <td>GID is 2.8 times faster (*)</td> </tr>
<tr> <td>PNG</td> <td>GID is 1.4 times faster</td> </tr>
<tr> <td>JPEG Baseline</td> <td>GID is 1.2 times faster</td> </tr>
<tr> <td>JPEG Progressive</td> <td>ImageMagick (as if internally called) is 1.9 times faster</td> </tr>
</tbody></table><p>
<br />(*) It is not a typo: it is really written "<b>2.8 TIMES faster</b>", and not something like "2.8 percents faster".<br />
<br />Regarding the last format (JPEG Progressive), its GID implementation is only a few weeks old, translated from an implementation that is not conceived for performance but for helping understanding the format's mechanics. So it is not too surprising that it is significantly slower.<br />
<br />
But the real surprise is with the losslessly compressed formats (GIF and PNG).<br />
For those formats, GID is significantly faster than ImageMagick, despite the fact that a lot more effort is put in developing the ImageMagick library.<br />
<br />So, where does the miracle come from?<br />
<br />
It comes from the Ada language. The generics mechanism in Ada is incredibly powerful, but you really begin to realize that only when using this construct.
Not surprisingly, GID has lots of generics: the keyword appears <b>30</b> times in the project, and of course always for a good reason.<br />
<br />
Due to the nesting possibilities of Ada (subprogram within another, package within a subprogram, and so on; plus: generic entity within another one, or within a non-generic entity, which can itself be within a generic) and the possibilities of having formal generic parameters (the unknowns of the generics) begin used directly or indirectly for instantiating another generic, you get incredible code optimization possibilities. It sounds complicated, but actually it is very intuitive. You program these things easily without thinking to the actual implications that make the poor compiler sweat...<br /></p><p>Regarding an image decoder like GID, the optimization challenge is always the same: when there is a choice (subformat, color space, etc.) that is invariant across the entire image, or large parts of it, you don't want your program to spend time testing for that choice at each pixel or each decoding point.
The reason is not only because of the time consumed by the test instructions themselves, but also the execution branches that slow down the predictive execution on modern processors.<br />
Thanks to generics, you still can keep the "if" or "case" statements at their obvious places (sometimes close to the pixel output), but set the invariant as a generic formal parameter.
<br />
The compiler will eliminate the branches (the "if"'s or "case"'s) on specialized instantiations, because it knows, for example, that it is compiling a variant of a certain format that is progressive, with 8-bit per base color, with a certain color space, and that the final image is meant to be rotated by 270°.
We will relate on this technique of "optimization by generics" in a further article.<br />
<br />Another killer Ada feature used by GID is its extreme portability.<br />
We don't need any source preprocessing in GID, although it is a very low-level library.<br />
The consequence is a tremendous reduction of programming effort.<br />
<br />
Let's show in a table some key points:<br />
<br />
</p><table border="1" cellpadding="10">
<tbody><tr>
<th width="20%"><br /></th>
<th>GID</th>
<th>ImageMagick (to date)</th>
</tr>
<tr>
<td>People</td>
<td><b>1</b> developer, much more active on other projects than GID, plus<br />
<b>1</b> developer for a one-shot contribution to the GIF format
</td>
<td><b>156</b> developers, on <a href="https://github.com/ImageMagick/ImageMagick" target="_blank">GitHub</a> only.<br />
(Not counting <b>83</b> people of libpng, on <a href="https://github.com/pnggroup/libpng" target="_blank">GitHub</a> only.
Plus others folks for libjpeg...)
</td>
</tr>
<tr>
<td>Active since</td>
<td>2010</td>
<td>1987</td>
</tr>
<tr>
<td>Portability</td>
<td><b>Unlimited (∞</b>).<br />
All you need is a compiler supporting 32-bit integers.<br />
In doubt, GNAT will do the job...</td>
<td>Each port (for a new processor or a new Operating System) seems to require a significant effort.</td>
</tr>
<tr>
<td>Conditionals</td>
<td><b>Zero (0)</b></td>
<td>113 #ifdef, 303 #ifndef, 573 #undef (!)</td>
</tr>
<tr>
<td>Language</td>
<td><b>Ada</b></td>
<td><b>C</b></td>
</tr>
</tbody></table><br />
<br />A few remarks here:<br />
<ul style="text-align: left;">
<li>We are aware that ImageMagick does more than its original job of decoding and encoding images, and supports many formats.
So, we are <i>not</i> implying that 98.7% (154 people of 156) of the effort in ImageMagick is spent about typical C/C++-style maintenance activities.</li>
<li>The unlimited portability of GID enables support for future hardware and future operating systems without any effort on our part.</li>
</ul>
Enjoy!<br /><br /><p></p>
GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-15477339028271595242024-01-10T21:22:00.000+01:002024-01-10T21:22:03.928+01:00Deliverability<p>Surely the word "deliverability" has a meaning in a certain context, but we don't care at all: it is a shiny, catchy word and thus a candidate for our <a href="http://cbsg.sf.net" target="_blank">Bullshit Generator</a>, which is by essence contextless.</p><p>Let's test the new word with the "bulk" option added by Ludovic Brenta to the Generator.</p><p>produce_corporate_bullshit -b deliverability</p><p>Result: an endless logorhea (around 2000 lines of business-speak per second).</p><p>A few gems:</p><ul style="text-align: left;"><li>Our say/do ratio impacts a feedback-based deliverability.</li><li>In a data-first world, deliverability and gamification technically prioritize the Growth Hackers.</li><li>Deliverability requires that we all pull in the same direction. </li><li>The game is all about user experience, intelligence, line of business, methodology, and deliverability - not mindfulness, outsourcing, local-for-local strategy, enterprise risk management, and brand pyramid.</li><li>As the pace of Artificial Intelligence (AI) continues to accelerate, deliverability has become a necessity.</li><li>The Group Chief Value Added Services Officer (CVASO) capitalizes on our modern-day deliverability.</li><li>Methodology, deliverability, workflow, CAPEX - all are competing for the attention of Creative Technologists.<br /></li></ul><p style="text-align: left;">But the fun only <i>begins</i> at this point. Search one of those sentences with you preferred search engine!</p><p style="text-align: left;"><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-12409805619929307562024-01-07T19:00:00.009+01:002024-01-07T22:20:18.092+01:00A PayPal activity report "improver" using Excel Writer<p>Note for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.
</p>
<hr />
<p>The PayPal activity reports are simple, but a human being still needs some efforts to sort out their information.</p>
<p>When money is going <b><i>out</i></b> of your balance for, say, various kinds of fees, it is simple: one row... except if the fees are in a different currency. Then it is <b>three</b> rows, with different currencies - don't try to add those figures!</p>
<p>When money is going <b><i>in</i></b>, it can be a bit more complicated: the sum <b>x</b> is added, then immediately subtracted ("General Hold"), then, after days, added again ("General Hold Release").
If (just a thought experiment) the amount <b>x</b> is also locked for the sender of the payment, well, times 400 millions users, it might make a nice pile of short-term cash for PayPal (and interests to pocket)!</p>
<p>Back to our problem: all in all, the raw PayPal report is a mess (albeit, a correct one).</p>
<p>To untangle a report in a simple way (inserting the data into a database would be overkill in our usage), an appropriate tool to consider is <b>Excel Writer</b> (<a href="https://excel-writer.sourceforge.io/" target="_blank">home page</a>, <a href="https://sourceforge.net/p/excel-writer/code/HEAD/tree/" target="_blank">svn repo</a>, <a href="https://github.com/zertovitch/excel-writer" target="_blank">git repo</a>) and Ada Containers' ordered sets.
The resulting PayPal application is now part of the <b>Excel Writer</b> demos. Actually, we just had to derive the csv2xls tool/demo and plug the per-currency grouping.</p>
<p>Here is the messy PayPal report in CSV format, imported into LibreOffice:</p>
<p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihRwV5MaIU0ROhyphenhyphengwoCzqTgMLJDBXg61a89tfqKOUIhM00t-98R2v7ynjr9I2ly-CpcZWRUsem2HuWu-0qagTXKB9HbfZwP9Q1Aq0UxEJv40rh2OXF4WQmFJ88A41msoQby_iuxsZnlM8bgiA73wJRpzbTMfJw3YPCTHA40JOWmkQIFVdFcy2tm-8yCXk/s1280/paypal_demo_csv.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1024" data-original-width="1280" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihRwV5MaIU0ROhyphenhyphengwoCzqTgMLJDBXg61a89tfqKOUIhM00t-98R2v7ynjr9I2ly-CpcZWRUsem2HuWu-0qagTXKB9HbfZwP9Q1Aq0UxEJv40rh2OXF4WQmFJ88A41msoQby_iuxsZnlM8bgiA73wJRpzbTMfJw3YPCTHA40JOWmkQIFVdFcy2tm-8yCXk/w400-h320/paypal_demo_csv.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge<br /></td></tr></tbody></table>
<br /></p>
<p>...and the formatted report, grouped by currency, in Excel format, here previewed by LibreOffice:</p><p> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbXS4yNKHo3B6RAy88EIxgBixBWWBkSJUXtF3dfUrtCCNam-2J6sQ9MYkke8qwSU8DPV8VeQFIxCTTSFhQM97gpHSMP9akq0PYR7C1byUAO5xbSADRvpgeQN_36Nv8EjIdAltKXmuggumu1BuPTWr0eNvrkS6R-bgFpgZNJKotZNIW9W5Vm51kvkKsb7c/s1280/paypal_demo_xls.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1024" data-original-width="1280" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbXS4yNKHo3B6RAy88EIxgBixBWWBkSJUXtF3dfUrtCCNam-2J6sQ9MYkke8qwSU8DPV8VeQFIxCTTSFhQM97gpHSMP9akq0PYR7C1byUAO5xbSADRvpgeQN_36Nv8EjIdAltKXmuggumu1BuPTWr0eNvrkS6R-bgFpgZNJKotZNIW9W5Vm51kvkKsb7c/w400-h320/paypal_demo_xls.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge<br /></td></tr></tbody></table><br /></p><p><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-7249587038083223362023-12-10T18:12:00.003+01:002024-01-07T18:28:42.443+01:00Advent of Code 2023, day 10<p>Note for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.
</p>
<hr />
<p>The puzzle:<a href=" https://adventofcode.com/2023/day/10" target="_blank"> https://adventofcode.com/2023/day/10</a> <br /></p><p>My Ada solution: <a href="https://github.com/zertovitch/hac/commit/4241d9a3ede43869c75b988613424e1696d63e1f" target="_blank">here</a>.</p><p>In a picture (generated by the program linked above)...</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7n_g-uJaCnDkfu608ZWqMm_dqfMQR_YIhnaUc-a9egISduVI2xnD2VRkV7XuJ4WjUySsVvijtB8FPY5xXPCrNpa5_mN5BYrfM3OhCoa26P7S41Go-LmncMmDOOlJ9hp1wMUhdSYnCVrSEDIt6npVgf8-D33A2laxeg6BEel2FNIOb-0d_Z_zxqCof70I/s420/aoc_2023_10.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="420" data-original-width="420" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7n_g-uJaCnDkfu608ZWqMm_dqfMQR_YIhnaUc-a9egISduVI2xnD2VRkV7XuJ4WjUySsVvijtB8FPY5xXPCrNpa5_mN5BYrfM3OhCoa26P7S41Go-LmncMmDOOlJ9hp1wMUhdSYnCVrSEDIt6npVgf8-D33A2laxeg6BEel2FNIOb-0d_Z_zxqCof70I/w400-h400/aoc_2023_10.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge<br /></td></tr></tbody></table><p> </p><p>It is always a pleasure to display the data created by Eric Wastl.<br /></p><p>Here, an improved representation with the five cases (outside tile, inside tile, inside pixel on a path tile, outside pixel on a path tile, path pixel) in shown different colors:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTaYY6JVqfsfmX2poR0KheJeea1MtJuQpNHTjoB8-GT9cmEuMHO9CI6YpAwCKLl6Gb04aNIqByMU8YHLlL-cRiXn5YWmwQ5zmT3WkOMGyA5g0-FSwVW1vvPZ-lNi7Zu8CIlqy5QU7AoVlU4JM9BX-jez3q44ThKpUJsxySxa0CP4APRGkfEaVK4qO2qZo/s420/aoc_2023_10.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="420" data-original-width="420" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTaYY6JVqfsfmX2poR0KheJeea1MtJuQpNHTjoB8-GT9cmEuMHO9CI6YpAwCKLl6Gb04aNIqByMU8YHLlL-cRiXn5YWmwQ5zmT3WkOMGyA5g0-FSwVW1vvPZ-lNi7Zu8CIlqy5QU7AoVlU4JM9BX-jez3q44ThKpUJsxySxa0CP4APRGkfEaVK4qO2qZo/w400-h400/aoc_2023_10.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge</td></tr></tbody></table><br /><p><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-26842054017262736902023-11-11T13:49:00.009+01:002023-11-18T08:19:09.414+01:00Random global indices 2023-11-11<p></p><p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr /><p>A few charts without comments.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXSoUkjo_fnEx3m33i4jqTA9bh4Khbr454KLt8pNxdswQ4p1bX1vKVk92J-N2MM88N4KoSvUaDV4fXNtmQKbhcodoZklakKDX6xNc9dSCxKdMEDRcMvb7xL_GIqqraLy1fBd_XlB9WYzOzf_95dAedgNXWdUmqgwbMI4XIglS6tIG0S6LcmMgl6a2fuW4/s971/gold1.2023.11.11.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="597" data-original-width="971" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXSoUkjo_fnEx3m33i4jqTA9bh4Khbr454KLt8pNxdswQ4p1bX1vKVk92J-N2MM88N4KoSvUaDV4fXNtmQKbhcodoZklakKDX6xNc9dSCxKdMEDRcMvb7xL_GIqqraLy1fBd_XlB9WYzOzf_95dAedgNXWdUmqgwbMI4XIglS6tIG0S6LcmMgl6a2fuW4/w400-h246/gold1.2023.11.11.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1TD3woJo3ok10Wq7BDPXjik_pANmf1HVZXFtjyNAU85lPlP0u4ln5KNc_uJeMBtUXwOJm5eh80yeBoIlxEbDVpqOFG_UYSixuk-KA6Kd17coADPs8VZeiinU5XORHwOxGluC6ZehGT9MZh6WvpdkC6Ifc6cEn_3MLbg1th_uy4F7oNBWbspcY3VLHHuk/s982/gold2.2023.11.11.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="637" data-original-width="982" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1TD3woJo3ok10Wq7BDPXjik_pANmf1HVZXFtjyNAU85lPlP0u4ln5KNc_uJeMBtUXwOJm5eh80yeBoIlxEbDVpqOFG_UYSixuk-KA6Kd17coADPs8VZeiinU5XORHwOxGluC6ZehGT9MZh6WvpdkC6Ifc6cEn_3MLbg1th_uy4F7oNBWbspcY3VLHHuk/w400-h260/gold2.2023.11.11.png" width="400" /></a></div><br /><br /><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXKurkIB3Mb3BZ8IXmKDoSTL8Wx3rspVx_Iq7Iptnf0oHfeumZkY0_7v2CXT3-c7PRoCBJCnrDnckQ1E4mBF4qjkCHbb-iSU0ZnRY6ksSzQxw0s-79MIkTHQnlJXdnzM7tv2NrZQR7XJlGWSU671ldbvOwyf8ryFfbVH9bq5rW1CGqwtPwPCE5YV6461w/s827/harpex_2023.11.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="507" data-original-width="827" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXKurkIB3Mb3BZ8IXmKDoSTL8Wx3rspVx_Iq7Iptnf0oHfeumZkY0_7v2CXT3-c7PRoCBJCnrDnckQ1E4mBF4qjkCHbb-iSU0ZnRY6ksSzQxw0s-79MIkTHQnlJXdnzM7tv2NrZQR7XJlGWSU671ldbvOwyf8ryFfbVH9bq5rW1CGqwtPwPCE5YV6461w/w400-h245/harpex_2023.11.17.png" width="400" /></a></div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQId50uhUR8t4ye2hZU_gnMTUX-Z4HFoJ9xd_wohzHNtxWZFOkZvqLxVaqetlrBjsGdE4CNtuqoDovwiOp5L-r9HMT7z5fHHkym3nv-d3z7P01i2e0tu_kdJ0HLr6Xlwq5si8LTfGGZkdbwOlDuRxVIms-GeYVsW3woXoI2YBQp0X894EOjjhgDOZYKcA/s780/harpex2.2023.11.11.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="469" data-original-width="780" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQId50uhUR8t4ye2hZU_gnMTUX-Z4HFoJ9xd_wohzHNtxWZFOkZvqLxVaqetlrBjsGdE4CNtuqoDovwiOp5L-r9HMT7z5fHHkym3nv-d3z7P01i2e0tu_kdJ0HLr6Xlwq5si8LTfGGZkdbwOlDuRxVIms-GeYVsW3woXoI2YBQp0X894EOjjhgDOZYKcA/w400-h240/harpex2.2023.11.11.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNNQtOV5xlsVtDff-fnHPRy9umh61P0PANmgQTp8X7HaeRfWfvoTqrMZ-mZZF45e7Al3dEhoG4Q6a6xeWLf308NCB39lT3z0RJj1hMfWSj3x360LCHoDbI37VmpXxryb6z2MZIClhFmba36cyfXvigsiEgVAj0UW5P21pV-rAHywkWjL6Y3fxyTfv-Ecs/s956/wti2023.11.11.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="585" data-original-width="956" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNNQtOV5xlsVtDff-fnHPRy9umh61P0PANmgQTp8X7HaeRfWfvoTqrMZ-mZZF45e7Al3dEhoG4Q6a6xeWLf308NCB39lT3z0RJj1hMfWSj3x360LCHoDbI37VmpXxryb6z2MZIClhFmba36cyfXvigsiEgVAj0UW5P21pV-rAHywkWjL6Y3fxyTfv-Ecs/w400-h245/wti2023.11.11.png" width="400" /></a></div><br /><p><br /></p><br />GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-90823216581208731772023-10-14T15:39:00.001+02:002023-10-14T23:29:27.030+02:00LEA, a tiny but smart editor<p>Note for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.
</p>
<hr />
<p>LEA, the Lightweight Editor for Ada, is based on the Scintilla text editor widget, which excels at colouring syntactic elements and letting the user rework his or her programs very swiftly, including manipulating rectangular selections and adding text on multiple points (usually vertically aligned).<br />But until recently, the cool features were limited to automatic indentation, adding comment delimiters (--) at the right column, or highlighting portions of text that match a selection.<br />Users were frustrated by not finding in LEA programming helpers (commonly grouped under the term "smart editor" or "intellisense") that they enjoy in their programming "studios".<br />An excuse would have been to dismiss such features as out of the scope of a "lightweight" editor.<br />But we know we can make of LEA a powerful mini-studio, with the ease of use of a simple editor, thanks to its "projectless" mode and the integrated HAC compiler.<br />So now, it happened.<br />From revision 385 of LEA (and revision 886 of HAC), you have now a good sense of intellisense:<br /></p><ul style="text-align: left;"><li><b>mouse-hover</b> tips: when you let the mouse pointer on an identifier for a little while, a tip appears about that identifier (typically, where it was declared)</li><li><b>context menu</b> with a go-to-declaration entry, when applicable<br /></li><li><b>call tips</b>: on typing '(' after a subprogram name, a tip appears with the subprogram's parameters</li><li><b>auto-complete</b>: on typing characters that belong to identifiers, a list of possible declared identifier appears; that list depends on where in the source code the text cursor is: declarations below the cursor are invisible and local declarations, possibly within multiple nested subprograms. </li></ul><p>Some screenshots will help illustrate the above points. Let's start with the <b>sudoku_sample.adb</b> example shipped with the HAC project. What's that "Sudo_Strings" type, for instance?<br />Just let the mouse pointer hang out around an occurrence of that keyword.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHbzePccpe4igEQAq99IBFGJogEYDAhIE9gr6dEv1htB3MsRbmurZLRy2qhQMCbSDjdMiBkDmnlY5u4CxLJLoCf7YpEjRqabsHZzaKexhB3_sJ5OGuFjhTSqDXjPjOgOUyTP8aq1hMpOIB43PS2ZEsaxM0kOGRzn8I2JVxxJevUTN6d-ZwG-S4y4b9n9A/s872/lea_mouse_hover_2023_10_13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="781" data-original-width="872" height="359" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHbzePccpe4igEQAq99IBFGJogEYDAhIE9gr6dEv1htB3MsRbmurZLRy2qhQMCbSDjdMiBkDmnlY5u4CxLJLoCf7YpEjRqabsHZzaKexhB3_sJ5OGuFjhTSqDXjPjOgOUyTP8aq1hMpOIB43PS2ZEsaxM0kOGRzn8I2JVxxJevUTN6d-ZwG-S4y4b9n9A/w400-h359/lea_mouse_hover_2023_10_13.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Mouse hover tip - Click image to enlarge it</td></tr></tbody></table><br />Want to know more about that declaration? Right-click on it...<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlF1XgPkhAz72ffgpjEWfLin9GWugqtviBqyG2AymWfLXKZytVeiv1m5J2ocErHpPjsJ0cE24kng7QYcxnJb6HUgwbKX6zwR0PGBrm1e6bVFYg6WYKKbTi-BE6iKDkpF_Xndm79VJojzID5fC2317rds_oEbZm5w9OehNhIKBYtJ6LQ5CHxmLdze96wJQ/s873/lea_context_go_to_declaration_2023_10_13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="781" data-original-width="873" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlF1XgPkhAz72ffgpjEWfLin9GWugqtviBqyG2AymWfLXKZytVeiv1m5J2ocErHpPjsJ0cE24kng7QYcxnJb6HUgwbKX6zwR0PGBrm1e6bVFYg6WYKKbTi-BE6iKDkpF_Xndm79VJojzID5fC2317rds_oEbZm5w9OehNhIKBYtJ6LQ5CHxmLdze96wJQ/w400-h358/lea_context_go_to_declaration_2023_10_13.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Go to declaration - Click image to enlarge it</td></tr></tbody></table><br />...and here you go.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJdF4GE-w5_IPbrjvmt5DshyOz38mYvpZqK3RPjlzDq5Jqei3lKl30A_de_xbmGa8AlFg-be6DnJTiHG78dXk8AIrUEkVZ0LpKVoIJKRIHGyqHqf7BrSu0KoxWI7u57skxNmCIUKsA9UpqnxJjjvnOQb6fQFcBdhh7FV69fbtKGUoz9jMv9-c6rzoWD38/s873/lea_gone_to_declaration_2023_10_13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="781" data-original-width="873" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJdF4GE-w5_IPbrjvmt5DshyOz38mYvpZqK3RPjlzDq5Jqei3lKl30A_de_xbmGa8AlFg-be6DnJTiHG78dXk8AIrUEkVZ0LpKVoIJKRIHGyqHqf7BrSu0KoxWI7u57skxNmCIUKsA9UpqnxJjjvnOQb6fQFcBdhh7FV69fbtKGUoz9jMv9-c6rzoWD38/w400-h358/lea_gone_to_declaration_2023_10_13.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Declaration in the Sudoku package - Click image to enlarge it</td></tr></tbody></table><br />That's it, so far, for features enabling navigation within existing code.<br />For writing code, here are two other key helpers. First, the call tips.<br />If we type '(' after a subprogram's name, we see the parameters list appear:<br /><br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3611v3mcVvAkd23uxZUpfXmcmqIEog7d78WvpR-REdeT5VOeXw8fIBl7sjhMXeuT_li9GFLIouZZbXJhjJpRqjNDBECOSXEuI2aw5qn5HuCOjngSIqxi-VO1vHGeOdwoMRJSNjmIei0POuA7DsK5823gr2tjI905TJzMsXXdAWtQfvf8mIjxQ6xeMQ4M/s873/lea_call_tip_2023_10_13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="781" data-original-width="873" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3611v3mcVvAkd23uxZUpfXmcmqIEog7d78WvpR-REdeT5VOeXw8fIBl7sjhMXeuT_li9GFLIouZZbXJhjJpRqjNDBECOSXEuI2aw5qn5HuCOjngSIqxi-VO1vHGeOdwoMRJSNjmIei0POuA7DsK5823gr2tjI905TJzMsXXdAWtQfvf8mIjxQ6xeMQ4M/w400-h358/lea_call_tip_2023_10_13.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Call tip - Click image to enlarge it</td></tr></tbody></table><br />If we type the beginning of an identifier, a list of possible completions appears:<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVKpFFQE7KACNiNI5Aw8lSJS9ZCIr5P9HwpIdpRaNeH5ImAdu23gU2IHRplHIYnrtxIYVAXQuWW30BnVUn0-S2AdZKHrxMdg4-t4JvaVkHVqQ97n_pLc0Q45ixTQ1SBguyPe5c9_g1w5xeb76TS9epCMSjXYaw5C0bIW9cSak9_6jCvPTx_omNSGmWY4w/s873/lea_auto_complete_tip_2023_10_13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="781" data-original-width="873" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVKpFFQE7KACNiNI5Aw8lSJS9ZCIr5P9HwpIdpRaNeH5ImAdu23gU2IHRplHIYnrtxIYVAXQuWW30BnVUn0-S2AdZKHrxMdg4-t4JvaVkHVqQ97n_pLc0Q45ixTQ1SBguyPe5c9_g1w5xeb76TS9epCMSjXYaw5C0bIW9cSak9_6jCvPTx_omNSGmWY4w/w400-h358/lea_auto_complete_tip_2023_10_13.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Auto-complete - Click image to enlarge it</td></tr></tbody></table><br />A few remarks about the present state of LEA's "smart editor" features:<br /></p><ul style="text-align: left;"><li>Currently, LEA only supports the HAC subset - it was the first priority. GNAT and other Ada compilers have their own editors and navigation features, so there is a lesser pressure to support them in LEA.</li><li>The "smart editor" features are quite new and still under test and development. If you want to have them, you need to build LEA on a fresh clone (instructions are given in lea.gpr), then set (via regedit) the registry key SMART_EDITOR, in the branch HKEY_CURRENT_USER\SOFTWARE\LEA\, to "true", before starting LEA.</li><li>You will notice a few missing things, like a list of fields on typing '.' after a record variable. They are not forgotten and just still "under construction".</li><li>The "smart editor" features work on incomplete Ada sources. They might be just less present after the point of an error, especially a syntax error.</li></ul><p>In order to develop the last point, here are a few examples on how LEA understands your program "on the fly", while you are typing it:<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAVH_AgkKXIsKpLwpe2yXhKe8jWruCwbUOxBs_wJgRn177-WAvQn4empiY0ERaCkFwWqzZgmceUPDRF5V3de_gQBbPI70zb26dAJa8SS5SJn-_C8Bd1GEOiQG2l9LalGfo7qB83g1hKORnq1D7jmxvHbwDVjnlsIglNpd55_mxvfBxxSXsH5G-fyIF-ic/s871/lea_incomplete_1_2023_10_13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="779" data-original-width="871" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAVH_AgkKXIsKpLwpe2yXhKe8jWruCwbUOxBs_wJgRn177-WAvQn4empiY0ERaCkFwWqzZgmceUPDRF5V3de_gQBbPI70zb26dAJa8SS5SJn-_C8Bd1GEOiQG2l9LalGfo7qB83g1hKORnq1D7jmxvHbwDVjnlsIglNpd55_mxvfBxxSXsH5G-fyIF-ic/w400-h358/lea_incomplete_1_2023_10_13.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Smart editor on an incomplete piece of code - Click image to enlarge it</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKzNxcQB-tO7v3vegdiaVY5oRBiIoRJy2c1T1_pkfA0s7ht1h8DL3C1LL7OPOH6p-2REuo8V1t6fyU3Xumhclo-QpT1AIiFtLP7wuqeVZMrHg8xCDsXys11O7511AGyL54s17C_3msvB8Yo_Rss2T4T2qk0WY3lTmdFAVU0SGyVv5Yym6xvF2L0nIhkBM/s873/lea_incomplete_2_2023_10_13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="781" data-original-width="873" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKzNxcQB-tO7v3vegdiaVY5oRBiIoRJy2c1T1_pkfA0s7ht1h8DL3C1LL7OPOH6p-2REuo8V1t6fyU3Xumhclo-QpT1AIiFtLP7wuqeVZMrHg8xCDsXys11O7511AGyL54s17C_3msvB8Yo_Rss2T4T2qk0WY3lTmdFAVU0SGyVv5Yym6xvF2L0nIhkBM/w400-h358/lea_incomplete_2_2023_10_13.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Smart editor on an incomplete piece of code, sample 2 - Click image to enlarge it</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmqdzMvTFaAsIP8u8ic725HphTCdtDfX2XZD2IwBw8ibpiARv7CtByzgP4f_lwqZdCn5u9iH8eLozNYR0QpRv9TEp4LuU4Fjw04fOcDATfBa20UTuq6fF4aktt8jrDoWJ3xMPJIbmJSZilbZG2Mw48zWbxK80lhE9yvbYTQ0FmDS6mQbQiqSFmW20N6TM/s873/lea_incomplete_3_2023_10_13.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="781" data-original-width="873" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmqdzMvTFaAsIP8u8ic725HphTCdtDfX2XZD2IwBw8ibpiARv7CtByzgP4f_lwqZdCn5u9iH8eLozNYR0QpRv9TEp4LuU4Fjw04fOcDATfBa20UTuq6fF4aktt8jrDoWJ3xMPJIbmJSZilbZG2Mw48zWbxK80lhE9yvbYTQ0FmDS6mQbQiqSFmW20N6TM/w400-h358/lea_incomplete_3_2023_10_13.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Smart editor on an incomplete piece of code, sample 3 - Click image to enlarge it</td></tr></tbody></table><br />One more thing: the Windows version of LEA is contained in a single executable holding in currently 4.2 MiB, including data such as code samples and templates, and runs as a portable application (no installation required).</p><p>Some Web links:<br /></p>
<p><span style="font-size: large;">LEA</span></p>
<p>Web site: <a href="http://l-e-a.sf.net/" target="_blank">http://l-e-a.sf.net/</a><br />
Sources, site #1: <a href="https://sf.net/p/l-e-a/code/HEAD/tree/" target="_blank">https://sf.net/p/l-e-a/code/HEAD/tree/</a><br />
Sources, site #2: <a href="https://github.com/zertovitch/lea" target="_blank">https://github.com/zertovitch/lea</a><br />
Alire Crate: <a class="inline-onebox" href="https://alire.ada.dev/crates/lea" target="_blank">Alire - LEA</a></p><span style="font-size: large;">HAC</span><br />
<p>Web site: <a href="https://hacadacompiler.sourceforge.io/" target="_blank">https://hacadacompiler.sourceforge.io/</a><br />
Sources, site <span class="hashtag-raw">#1:</span> <a href="https://sf.net/p/hacadacompiler/code/HEAD/tree/" target="_blank">https://sf.net/p/hacadacompiler/code/HEAD/tree/</a><br />
Sources, site <span class="hashtag-raw">#2:</span> <a href="https://github.com/zertovitch/hac" target="_blank">https://github.com/zertovitch/hac</a><br />
Alire Crate: <a href="https://alire.ada.dev/crates/hac" target="_blank">Alire - HAC</a></p><p>Enjoy!<br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-59969718946952718172023-09-23T17:07:00.000+02:002023-09-23T17:07:25.187+02:00US yield curve - Snapshot 22-Sep-2023<p></p><p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr /><p>An update about the relatively hot US yield curve (see our <a href="https://gautiersblog.blogspot.com/2023/08/yield-curve.html" target="_blank">August post</a> for more context).</p><p>In a nutshell, Uncle Sam, each time he is rolling a portion of his debt (<b>$33 Trillion</b>), has to promise to pay a <b>4.4%</b> minimum coupon, whatever the duration of the new obligation. This means that the interest payment is converging to an annual <b>$1.452</b> Trillion, at least.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHZTRMDqA8JKotFkYlewZSkXNH-52-ViTM4wBdWInUOZZE8PPgKpJ_h8zi0KiVxPHrhxEGwr1sYn0WorIVsS3BBJclzsA97_OJoKuMT_osRUYZcmQXdEt_GSXe8kJgCm-P4MewIKrv-jcPJzo5vfkTtTyekxww-xSt4fs2kcki0YQYUbxZsFOd2_HJtM4/s1130/yc_2023_09_22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="710" data-original-width="1130" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHZTRMDqA8JKotFkYlewZSkXNH-52-ViTM4wBdWInUOZZE8PPgKpJ_h8zi0KiVxPHrhxEGwr1sYn0WorIVsS3BBJclzsA97_OJoKuMT_osRUYZcmQXdEt_GSXe8kJgCm-P4MewIKrv-jcPJzo5vfkTtTyekxww-xSt4fs2kcki0YQYUbxZsFOd2_HJtM4/w400-h251/yc_2023_09_22.png" width="400" /></a></div><br /><p><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-44461230803144468152023-09-23T12:50:00.002+02:002023-09-23T17:08:09.978+02:00Avindex 1.0 - Snapshot 22-Sep-2023<p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr /><p>Financial markets don't seem to be impressed by <a href="https://gautiersblog.blogspot.com/2023/09/us-yield-curve-snapshot-22-sep-2023.html" target="_blank">bond yields</a>, so far...</p><p>They seem to bet that the Fed will surrender soon (it is clear that the Fed has to; the big question is: "<b><i>when?</i></b>")</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2xLq0kk2J6rnI-dJ8Yu-VYH67PbHOPA5BuFYpwIHRkYC8Q6lVzyNBSmf7eQ1ZA0sS6f5CXHTtF9Czp1tRh70erU9Yh8ajKO2ZvDlB4cuCh5P3k0Pz_41QP8FuG4cj1eKUT4jjw4d6LWqKUM7yICZpSEzWKeT_KtyvnpWCsoaVfoz1FJMczi1OM3pDHQo/s1007/avindex_2023_09_22.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="1007" height="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2xLq0kk2J6rnI-dJ8Yu-VYH67PbHOPA5BuFYpwIHRkYC8Q6lVzyNBSmf7eQ1ZA0sS6f5CXHTtF9Czp1tRh70erU9Yh8ajKO2ZvDlB4cuCh5P3k0Pz_41QP8FuG4cj1eKUT4jjw4d6LWqKUM7yICZpSEzWKeT_KtyvnpWCsoaVfoz1FJMczi1OM3pDHQo/w400-h263/avindex_2023_09_22.png" width="400" /></a></div><br /><p><br /></p><p><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-92114137859307481972023-09-02T21:53:00.004+02:002023-09-02T22:03:49.599+02:00LEA: first steps as a "smart editor"<p>Note for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.
</p>
<hr />
<p>Spot the "tool tip" on the following screenshot...</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnoAO5hiO5r6SULiPVWpXmyC3qpkn2z3Xubx1nnueQrcY8p24ijXcyZflNFHBgzKunzOgrUTUc_HWbaSSV1_p3j47vNv8addeKD8y9QGZiDbHP_gCh3z6Yx8al0ONoXGdFtH-ZJsClS_L59ygSbTOkJQSHDd4wJF_N53FKe9VzhYXh1dV-VDvqDY_i_SQ/s936/smart_ed_01.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="936" data-original-width="794" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnoAO5hiO5r6SULiPVWpXmyC3qpkn2z3Xubx1nnueQrcY8p24ijXcyZflNFHBgzKunzOgrUTUc_HWbaSSV1_p3j47vNv8addeKD8y9QGZiDbHP_gCh3z6Yx8al0ONoXGdFtH-ZJsClS_L59ygSbTOkJQSHDd4wJF_N53FKe9VzhYXh1dV-VDvqDY_i_SQ/w339-h400/smart_ed_01.png" width="339" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge<br /></td></tr></tbody></table>
<p>Translation: cross-references and source code navigation in LEA are becoming a reality since this evening!</p>
<p> </p><hr />
<p>Some Web links:<br /></p>
<p><span style="font-size: large;">LEA</span></p>
<p>Web site: <a href="http://l-e-a.sf.net/" target="_blank">http://l-e-a.sf.net/</a><br />
Sources, site #1: <a href="https://sf.net/p/l-e-a/code/HEAD/tree/" target="_blank">https://sf.net/p/l-e-a/code/HEAD/tree/</a><br />
Sources, site #2: <a href="https://github.com/zertovitch/lea" target="_blank">https://github.com/zertovitch/lea</a><br />
Alire Crate: <a class="inline-onebox" href="https://alire.ada.dev/crates/lea" target="_blank">Alire - LEA</a></p><p><br /></p><p>Since LEA embeds the HAC compiler, here are a few links about HAC as well:<br /></p>
<p></p>
<p><span style="font-size: large;">HAC</span><br /></p>
<p>Web site: <a href="https://hacadacompiler.sourceforge.io/" target="_blank">https://hacadacompiler.sourceforge.io/</a><br />
Sources, site <span class="hashtag-raw">#1:</span> <a href="https://sf.net/p/hacadacompiler/code/HEAD/tree/" target="_blank">https://sf.net/p/hacadacompiler/code/HEAD/tree/</a><br />
Sources, site <span class="hashtag-raw">#2:</span> <a href="https://github.com/zertovitch/hac" target="_blank">https://github.com/zertovitch/hac</a><br />
Alire Crate: <a href="https://alire.ada.dev/crates/hac" target="_blank">Alire - HAC</a></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-84187712836414800912023-08-20T15:57:00.004+02:002023-08-21T22:37:04.956+02:00HAC for native targetsNote for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.
<hr />
<p>HAC (the HAC Ada Compiler) was since the first of its previous lives, from Pascal-S, in 1973, to recent commits, translating high-level language exclusively to the machine code of a fictitious machine (a Virtual Machine, abbreviated VM).<br /><br />For writing a tiny compiler, a VM is very convenient:<br /></p><ul style="text-align: left;"><li>You (the compiler creator) can model and adapt it to your needs.</li><li>You don't depend on hardware.</li><li>You don't need to rewrite the code generation for each new hardware.</li><li>You can make the VM running on many hardwares (hence the success of the JVM and .NET around year 2000).</li></ul><p><br />The HAC VM and its users are enjoying all these advantages.<br /><br />However, there is a flip side:<br /></p><ul style="text-align: left;"><li>A VM is much slower than a real machine (but till year 2000, it didn't matter; you could say: don't worry, just wait a few months for a more powerful computer).</li><li>Since year 2000, the speed of microprocessors stopped doubling every six months (hence the declining interest in Virtual Machines). Despite the improvements in cache, RAM, and the multiplication of cores, the per-core performance improvement is slower and slower.</li><li>Supporting only a VM gives the impression that your compiler can only compile to a VM.</li></ul><p style="text-align: left;"><br />Well, so far, the latter blame was objectively correct regarding HAC until a few weeks ago.<br />Now it is changing!<br />We have begun an abstract framework for emitting machine code.<br />With that framework, HAC can, on demand, emit code for its captive VM or for any implemented machine.<br />So you read well, it is not a just-in-time compiler translating VM instructions to native ones.<br />We are implementing a direct Ada-to-native compiler - and cross-compiler, since HAC doesn't know on which machine it is running!<br /><br />The framework looks like this:<br /><br /><span style="font-family: courier;"><span style="font-size: x-small;">with HAC_Sys.Defs;<br /><br />package HAC_Sys.Targets is<br /><br /> type Machine is limited interface;<br /><br /> type Abstract_Machine_Reference is access Machine'Class;<br /><br /> --------------------<br /> -- Informations --<br /> --------------------<br /><br /> function Name (m : Machine) return String is abstract;<br /> function CPU (m : Machine) return String is abstract;<br /> function OS (m : Machine) return String is abstract;<br /> function Null_Terminated_String_Literals (m : Machine) return Boolean is abstract;<br /><br /> ----------------------------<br /> -- Machine Instructions --<br /> ----------------------------<br /><br /> procedure Emit_Arithmetic_Binary_Instruction<br /> (m : in out Machine;<br /> operator : Defs.Arithmetic_Binary_Operator;<br /> base_typ : Defs.Numeric_Typ) is abstract;<br /><br />...</span><br /></span><br />The code emission in the compiler is being changed (very slowly, be patient!) for going through this new abstract machine mechanism.<br />So far we have two implementations:<br /></p><ul style="text-align: left;"><li>The HAC VM - that way, we ensure HAC-for-HAC-VM works exactly as previously and can pass the test suite.</li><li>A real target: the AMD64, running under Windows; the machine code is emitted in Assembler form, for the Flat Assembler (<a href="http://flatassembler.net/" target="_blank">FASM</a>).</li></ul><p style="text-align: left;"><br />The development for multiple targets is embryonic so far.<br />However, we can already compile a "hello world"-style program:<br /><br /><span style="font-family: courier;"><span style="font-size: x-small;">with HAT;<br /><br />procedure Native is<br /> use HAT;<br /> a : Integer;<br />begin<br /> -- a := 1; -- Variables: TBD.<br /> Put_Line ("Hello ...");<br /> Put_Line ("... world!");<br /> Put_Line (12340 + 5);<br /> Put_Line (12350 - 5);<br /> Put_Line (2469 * 5);<br /> Put_Line (61725 / 5);<br />end Native;</span><br /></span><br />With the command:<br />hac -tamd64_windows_console_fasm native.adb<br /><br />HAC produces this:</p><p><span style="font-size: x-small;"><span style="font-family: courier;">; Assembler file for the Flat Assembler - https://flatassembler.net/<br /><br />format PE64 console<br />entry _start<br />include 'include\win64a.inc'<br /><br />section '.code' code readable executable<br /><br />_start:<br /> push 9<br /> push 1<br /> push -1<br /> push -1<br /> pop r14<br /> pop r13<br /> pop r12<br /> pop r11<br /> add r12, _hac_strings_pool<br /> ccall [printf], r12<br /> ccall [printf], _hac_end_of_line<br /> push 10<br /> push 11<br /> push -1<br /> push -1<br /> pop r14<br /> pop r13<br /> pop r12<br /> pop r11<br /> add r12, _hac_strings_pool<br /> ccall [printf], r12<br /> ccall [printf], _hac_end_of_line<br /> push 12340<br /> push 5<br /> pop r11<br /> pop rax<br /> add rax, r11<br /> push rax<br /> push 20<br /> push 10<br /> push -1<br /> pop r14<br /> pop r13<br /> pop r12<br /> pop r11<br /> ccall [printf], _hac_decimal_format, r11<br /> ccall [printf], _hac_end_of_line<br /> push 12350<br /> push 5<br /> pop r11<br /> pop rax<br /> sub rax, r11<br /> push rax<br /> push 20<br /> push 10<br /> push -1<br /> pop r14<br /> pop r13<br /> pop r12<br /> pop r11<br /> ccall [printf], _hac_decimal_format, r11<br /> ccall [printf], _hac_end_of_line<br /> push 2469<br /> push 5<br /> pop r11<br /> pop rax<br /> imul rax, r11<br /> push rax<br /> push 20<br /> push 10<br /> push -1<br /> pop r14<br /> pop r13<br /> pop r12<br /> pop r11<br /> ccall [printf], _hac_decimal_format, r11<br /> ccall [printf], _hac_end_of_line<br /> push 61725<br /> push 5<br /> pop r11<br /> pop rax<br /> xor rdx, rdx<br /> idiv r11<br /> push rax<br /> push 20<br /> push 10<br /> push -1<br /> pop r14<br /> pop r13<br /> pop r12<br /> pop r11<br /> ccall [printf], _hac_decimal_format, r11<br /> ccall [printf], _hac_end_of_line<br /> stdcall [ExitProcess],0<br /><br />section '.data' data readable writeable<br />_hac_end_of_line db 10, 0<br />_hac_decimal_format db "%d", 0<br />_hac_strings_pool db "XHello ...", \ <br /> 0, "... world!", 0<br /><br />section '.idata' import data readable<br />library kernel,'kernel32.dll',\<br /> msvcrt,'msvcrt.dll'<br />import kernel,\<br /> ExitProcess,'ExitProcess'<br />import msvcrt,\<br /> printf,'printf'<br /></span><br /></span>
As you can see, the assembler code needs badly some simplification, but, anyway: it works.<br />FASM produces from it a relatively small 2048-byte executable which writes<br /><br /><span style="font-size: x-small;"><span style="font-family: courier;">Hello ...<br />... world!<br />12345<br />12345<br />12345<br />12345</span><br /></span><br />The executable is full of zeroes, due to alignments. The non-zero bytes (more or less, the actual machine code and data) take 605 bytes.<br /><br />Some Web links for HAC:</p><p>Main URL: <a href="https://hacadacompiler.sourceforge.io/" rel="noopener nofollow ugc">https://hacadacompiler.sourceforge.io/</a><br />
Sources, site <span class="hashtag-raw">#1:</span> <a class="inline-onebox" href="https://sourceforge.net/projects/hacadacompiler/" rel="noopener nofollow ugc">HAC Ada Compiler download | SourceForge.net</a><br />
Sources, site <span class="hashtag-raw">#2:</span> <a class="inline-onebox" href="https://github.com/zertovitch/hac" rel="noopener nofollow ugc">GitHub - zertovitch/hac: HAC Ada Compiler - a small, quick Ada compiler fully in Ada</a><br />
Alire Crate: <a class="inline-onebox" href="https://alire.ada.dev/crates/hac" rel="noopener nofollow ugc">Alire - Hac</a></p>
GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-34457785026939596022023-08-19T06:29:00.005+02:002023-08-19T10:17:45.731+02:00Yield curve<p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p>
<hr />
<p>Perhaps you have read recently about government bond yields that are climbing?</p><p>Do you wonder what the figures are for different durations?</p><p>How does it look like crammed into a single chart?</p><p>Here you go:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEge5Xz9TrZKo1EcVTloVpg8pfDpEaAenHZWHRzfGz3J8dYpQtYmTAb2kfDCp5Q4dFS-Ag2jq8xanAJGErDxWa9XnbUpLAoQpJYmJBNup4ZXDCsBLcdBNY4dr7YHM7_9iDYhvwx0xpDqv8eUHHODn0lANwfVaqskv4A_MoN2CSMPmYyR6dIbe67vvrAKg/s963/yield_curve_2023_08_18.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="572" data-original-width="963" height="238" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEge5Xz9TrZKo1EcVTloVpg8pfDpEaAenHZWHRzfGz3J8dYpQtYmTAb2kfDCp5Q4dFS-Ag2jq8xanAJGErDxWa9XnbUpLAoQpJYmJBNup4ZXDCsBLcdBNY4dr7YHM7_9iDYhvwx0xpDqv8eUHHODn0lANwfVaqskv4A_MoN2CSMPmYyR6dIbe67vvrAKg/w400-h238/yield_curve_2023_08_18.png" width="400" /></a></div><p></p><p></p><p>Source: <a href="https://tradingeconomics.com/united-states/interest-rate">Trading Economics</a>.</p><p>What you see are the yields of the full spectrum of US Treasury debt instruments, from 4-week bills to 30-year bonds. On very short-term instruments, the yield matches the interest rate set by the central bank (the Federal Reserve). For longer periods, you obtain what the market thinks the central bank interest rate will be over the given period, with compounded interests. This means that you can reverse-engineer the yield curve to know what the future central bank interest rates might be according to the market participants.<br /></p><p>The current yield curve is remarkable in many ways:</p><ul style="text-align: left;">
<li>The market guesstimates that the Federal Reserve will keep its rates around more than 4% for the next <b>30 </b>years (which is funny, considering that the whole yield curve was in the 0% .. 2% range <b>two</b> years ago, during the Corona-related profligacy).</li>
<li>Another guesstimate: the Fed will begin to lower its interest rates some time after February 2024.</li>
<li> Currently, each time Uncle Sam refinances a portion of his debts (this happens weekly), the new obligation (which serves to pay back an expired one, plus an extra to finance the deficit) yields more than 4%. Given that the US National Debt has crossed the $32 Trillion level, the annual interest payment is climbing towards a level above $1.28 Trillion (you don't even need to use a calculator for that, right?), which is significantly more than the Defense budget (around $790 Billion) and close to the first two budget items (Medicare and the Social Security). A $1.28 Trillion annual payment would be also more than a quarter of the federal tax revenues, and of course an important boost to the deficit (currently, around $1.8 Trillion), which would make the debt climb even faster. Source of the figures: <a href="https://usdebtclock.org/" target="_blank">here</a>.</li><li>It is quite obvious that the Fed will be under an enormous pressure to lower its interest rates in the coming months.</li><li>To make it possible, the Fed needs to resist and keep inflation in check for a while, with interest rates clearly above the inflation rate, in order to hammer down inflation.</li><li>If a recession occurs (which is plausible due to the higher yields), the tax revenue will shrink. So, a scenario with a third or more of tax revenues being used for interest payments is realistic.</li><li>At some point in the near future, the Fed may capitulate and lower its rates (and keep them low) <i>regardless</i> of inflation.<br /></li>
</ul><br />GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-87181739350476473472023-07-22T09:50:00.007+02:002023-08-20T19:39:53.663+02:00Ceci n'est pas une quineNote for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.
<hr />
<p>These are not really <a href="https://en.wikipedia.org/wiki/Quine_(computing)" target="_blank">quines</a>, but funny self-references around computer programs...</p><p>1) <a href="https://l-e-a.sourceforge.io/" target="_blank">LEA</a>: <br /></p><p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY6ZVSvAvxFJ4cowPASJnbU6UmQcaMOrvEu2L0uSBLr-khdf-hXWGbExuQSobQJt7TXbVA5RI5AM8BS-8NpYi6d7WSH2B6OpVhysQBpIZpg2ksGW6KymR6nuzCaDgLKtW9zq0iVJfcSl3kGUI1NFk7gklfUXhdM4EE5mJ0U8OkpJxVpUe1CEOfoqsQtBo/s1197/quine_tabs_right_click.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1067" data-original-width="1197" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY6ZVSvAvxFJ4cowPASJnbU6UmQcaMOrvEu2L0uSBLr-khdf-hXWGbExuQSobQJt7TXbVA5RI5AM8BS-8NpYi6d7WSH2B6OpVhysQBpIZpg2ksGW6KymR6nuzCaDgLKtW9zq0iVJfcSl3kGUI1NFk7gklfUXhdM4EE5mJ0U8OkpJxVpUe1CEOfoqsQtBo/w400-h356/quine_tabs_right_click.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge image<br /></td></tr></tbody></table></p><p>2) <a href="https://hacadacompiler.sourceforge.io/" target="_blank">HAC</a>:<br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq6MRjhECugmaJxnF0-0tFPUQZqablw9XgZlBvQQqqAdX7_zP1hGxZGJrCnnAR-WvAXDXpXwWXN1RFEEUVzucM0JCD4FWMGp7ZTikVaT9EMIRKmqXPP5ufUdw3oxdngQ4HwhH3hf6B_edxp0S5_6rMF9zhSuZNDM1itXJW7deHR97mKg-GRo3IB_76UCw/s762/quine_case.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="762" data-original-width="735" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq6MRjhECugmaJxnF0-0tFPUQZqablw9XgZlBvQQqqAdX7_zP1hGxZGJrCnnAR-WvAXDXpXwWXN1RFEEUVzucM0JCD4FWMGp7ZTikVaT9EMIRKmqXPP5ufUdw3oxdngQ4HwhH3hf6B_edxp0S5_6rMF9zhSuZNDM1itXJW7deHR97mKg-GRo3IB_76UCw/w386-h400/quine_case.png" width="386" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge image</td></tr></tbody></table><br /><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-61544851938127381332023-07-08T10:09:00.003+02:002023-08-19T04:32:28.463+02:00LIBOR Farewell<p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr /><p>Just when things began to become exciting, the LIBOR rates cease to exist - or at least to be published.</p><p>Just kidding: it is a coincidence of course, since the cessation was planned for years.</p><p>Of interest: from close to zero mid 2021, the last 1-year USD rate published is above 6%, which includes around 0.5% risk premium above the 1-year treasury rate (not shown here).<br /><br /></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiuZfzinGmY7U4Yw3yXPCz9iNhyh84d5T26MWIe_TWIZeCKEOEfUqzggvXcLAy5e7acNMDfUAZwqRbb5mqB_qCkletvHpFN3nl97YEuWjO-gtM4nr8Vk2VQAz8IypzgL5COzSbpn-O5_5MdTm8M2fjNHe5LQ6NruyEOBbydb7anjAWW-CZ6yttEdw1bnY/s983/libor_final.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="645" data-original-width="983" height="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiuZfzinGmY7U4Yw3yXPCz9iNhyh84d5T26MWIe_TWIZeCKEOEfUqzggvXcLAy5e7acNMDfUAZwqRbb5mqB_qCkletvHpFN3nl97YEuWjO-gtM4nr8Vk2VQAz8IypzgL5COzSbpn-O5_5MdTm8M2fjNHe5LQ6NruyEOBbydb7anjAWW-CZ6yttEdw1bnY/w400-h263/libor_final.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge chart<br /></td></tr></tbody></table><br />GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-88238191915549863362023-07-08T08:40:00.007+02:002023-09-12T06:35:55.168+02:00HAC version 0.26Note for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.
<hr /><p>Main URL: <a href="https://hacadacompiler.sourceforge.io/" rel="noopener nofollow ugc">https://hacadacompiler.sourceforge.io/</a><br />
Sources, site <span class="hashtag-raw">#1:</span> <a class="inline-onebox" href="https://sourceforge.net/projects/hacadacompiler/" rel="noopener nofollow ugc">HAC Ada Compiler download | SourceForge.net</a><br />
Sources, site <span class="hashtag-raw">#2:</span> <a class="inline-onebox" href="https://github.com/zertovitch/hac" rel="noopener nofollow ugc">GitHub - zertovitch/hac: HAC Ada Compiler - a small, quick Ada compiler fully in Ada</a><br />
Alire Crate: <a class="inline-onebox" href="https://alire.ada.dev/crates/hac" rel="noopener nofollow ugc">Alire - Hac</a></p>
<p>What’s new:</p>
<ul><li>You can use a loop’s name for the <code>exit</code> statement: <code>exit Loop_Name</code>.</li><li>You can exit multiple, nested, loops, by using <code>exit Loop_Name</code>.</li><li>Ada semantics are better verified:
<ul><li>Array indexing <code>(i)(j)</code> (array of array) and <code>(i, j)</code> (multi-dimensional array) are no more treated as equivalent (this feature was a remnant of the Pascal syntax).</li><li>Separation between Type and Subtype declarations (anonymous types are allowed only in the few cases foreseen by the language).</li><li>Operators of the HAT package (<code>+</code>, <code>-</code>, <code>&</code> for strings) are visible without prefix only in the scope of a <code>use HAT</code> clause.</li></ul>
</li></ul>
<p>Note that correct Ada programs, in relation to the above points, were
already accepted and parsed correctly by HAC before that change.</p><p>Finally, a bit of cosmetics in the build messages:</p><p><span style="font-size: x-small;"><span style="font-family: courier;">C:\Ada\hac\exm>..\hac -v2 -c pkg_demo.adb<br /><br />*******[ HAC ]******* HAC is free and open-source. Type "hac" for license.<br /> [ HAC ] HAC Ada Compiler version 0.26, 08-Jul-2023<br /> [ HAC ] Compiling main: pkg_demo.adb<br /> [ HAC ] | Compiling x_pkg_demo_s.ads (specification)<br /> [ HAC ] \ Compiling x_pkg_demo_s1.ads (specification)<br /> [ HAC ] \ Compiling x_pkg_demo_s11.ads (specification)<br /> [ HAC ] / x_pkg_demo_s11.ads: done.<br /> [ HAC ] \ Compiling x_pkg_demo_s12.ads (specification)<br /> [ HAC ] / x_pkg_demo_s12.ads: done.<br /> [ HAC ] \ Compiling x_pkg_demo_s13.ads (specification)<br /> [ HAC ] / x_pkg_demo_s13.ads: done.<br /> [ HAC ] / x_pkg_demo_s1.ads: done.<br /> [ HAC ] \ Compiling x_pkg_demo_s2.ads (specification)<br /> [ HAC ] \ Compiling x_pkg_demo_s21.ads (specification)<br /> [ HAC ] / x_pkg_demo_s21.ads: done.<br /> [ HAC ] \ Compiling x_pkg_demo_s22.ads (specification)<br /> [ HAC ] / x_pkg_demo_s22.ads: done.<br /> [ HAC ] \ Compiling x_pkg_demo_s23.ads (specification)<br /> [ HAC ] / x_pkg_demo_s23.ads: done.<br /> [ HAC ] / x_pkg_demo_s2.ads: done.<br /> [ HAC ] \ Compiling x_pkg_demo_s3.ads (specification)<br /> [ HAC ] \ Compiling x_pkg_demo_s31.ads (specification)<br /> [ HAC ] / x_pkg_demo_s31.ads: done.<br /> [ HAC ] \ Compiling x_pkg_demo_s32.ads (specification)<br /> [ HAC ] / x_pkg_demo_s32.ads: done.<br /> [ HAC ] \ Compiling x_pkg_demo_s33.ads (specification)<br /> [ HAC ] / x_pkg_demo_s33.ads: done.<br /> [ HAC ] / x_pkg_demo_s3.ads: done.<br /> [ HAC ] | x_pkg_demo_s.ads: done.<br /> [ HAC ] | Compiling x_pkg_demo_m.ads (specification)<br /> [ HAC ] | x_pkg_demo_m.ads: done.<br /> [ HAC ] | Compiling x_pkg_demo_b.ads (specification)<br /> [ HAC ] | x_pkg_demo_b.ads: done.<br /> [ HAC ] Compilation of pkg_demo.adb (main) completed<br /> [ HAC ] ------ Compilation of eventual with'ed unit's bodies<br /> [ HAC ] | Compiling x_pkg_demo_s.adb (body)<br /> [ HAC ] | x_pkg_demo_s.adb: done.<br /> [ HAC ] | Compiling x_pkg_demo_s1.adb (body)</span><br /></span><br /><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-8076004191430549392023-05-07T23:19:00.006+02:002023-05-07T23:32:37.835+02:00New colour theme with LEA: Solarized LightNote for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.
<hr /><p>Today, a topic that is guaranteed frivolous: a new colour theme for <b><a href="https://l-e-a.sourceforge.io/" target="_blank">LEA</a></b> (a Lightweight Editor for Ada).</p><p>Actually, it is a serious subject if you spend a large share of your time at programming (for work, for fun, or both...). For the theoretically brighter season (spring and summer), some prefer to give up the trendy Dark Side mode (which not so long ago was considered as horribly old-fashioned):</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lS1tT9ju_iNkjkiSWNr3Y8qzGyjN13htd7Wuz21sM2RUD2KeSy62gReoqOiE8evgy9-6E_an8sPQA0oDZwz19OEcyPUArq63TOAhaOzAIl5jke7VINgCqM2H4ln7Fn5IZD1cId9Daq4XCbQ1kaxfLMux_9LZ8khuEEW8OXiTyVPx5C3ecPxevAUd/s839/lea_ct_ds.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="839" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lS1tT9ju_iNkjkiSWNr3Y8qzGyjN13htd7Wuz21sM2RUD2KeSy62gReoqOiE8evgy9-6E_an8sPQA0oDZwz19OEcyPUArq63TOAhaOzAIl5jke7VINgCqM2H4ln7Fn5IZD1cId9Daq4XCbQ1kaxfLMux_9LZ8khuEEW8OXiTyVPx5C3ecPxevAUd/w400-h370/lea_ct_ds.png" width="400" /></a></div><p></p><p>...and use a dark-font-bright-background scheme.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga6kSHhs7fqyYXM_2ICL6z3CP0D6hJa7wNI-pMxHpw2DiuHSd2B7EF8ZXsn4ke_2ikkL9-fubpVSFllxvLk0MNxwaDDIY_zV97du2UcXY0X9pRX1O7c0BNOiEHEEebrqyP2vaqGTjzTHH9vyAhd3KMRwQi4LwDApnPXneegzG66iHWT1z2fsr9BW7t/s839/lea_ct_df.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="839" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga6kSHhs7fqyYXM_2ICL6z3CP0D6hJa7wNI-pMxHpw2DiuHSd2B7EF8ZXsn4ke_2ikkL9-fubpVSFllxvLk0MNxwaDDIY_zV97du2UcXY0X9pRX1O7c0BNOiEHEEebrqyP2vaqGTjzTHH9vyAhd3KMRwQi4LwDApnPXneegzG66iHWT1z2fsr9BW7t/w400-h370/lea_ct_df.png" width="400" /></a></div><p>However, the contrast is a bit violent. A convincing and carefully designed low-contrast theme is called Solarized Light (which can be turned, with an astute swap within the same 8-colours palette for base colours, into a dark-backgrounded Solarized Dark). The theme is described <a href="https://ethanschoonover.com/solarized/" target="_blank">here</a>.<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_CwoXrHXAvca40Bhsg8w5Wm48tTl7HXxi_nfffVxCY1X-K9y7Gx_cA2QIfVFIsyfAWkWa_2QBDlXmpsY32A9hMdPzjlb2EzO64j6QXi6SekTTWUmyqhwvWbOrd0itt6uW47c7CTkYdiI_rc8Iy_8VKsCSjoJjSp45XGu--F1iRk6pHaSsLb56kDZY/s839/lea_ct_sl.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="839" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_CwoXrHXAvca40Bhsg8w5Wm48tTl7HXxi_nfffVxCY1X-K9y7Gx_cA2QIfVFIsyfAWkWa_2QBDlXmpsY32A9hMdPzjlb2EzO64j6QXi6SekTTWUmyqhwvWbOrd0itt6uW47c7CTkYdiI_rc8Iy_8VKsCSjoJjSp45XGu--F1iRk6pHaSsLb56kDZY/w400-h370/lea_ct_sl.png" width="400" /></a></div><p>The Solarized Light theme is incorporated since today in LEA.</p><p>Enjoy!</p>
<hr /><p></p><p>LEA, a Lightweight Editor for Ada, aims to provide an easy,
script-world-like, "look & feel" for developing Ada projects of any
size and level, while enabling access to full-scale development tools
like GNAT. <br /></p><ul style="text-align: left;"><li>Quick start and reactivity</li><li>Uses the Scintilla editor widget (like Notepad++)</li><li>Multi-document</li><li>Multiple undo's & redo's</li><li>Multi-line edit, rectangular selections</li><li>Color themes, easy to switch</li><li>Duplication of lines and selections</li><li>Syntax highlighting</li><li>Parenthesis matching</li><li>Bookmarks</li><li>Free, Open-Source</li><li>Programmed in Ada</li><li>Includes <b><a href="https://hacadacompiler.sourceforge.io/" target="_blank">HAC</a></b>, the HAC Ada Compiler</li><li>Includes numerous examples of Ada programs, ready to be run</li><li>Single executable, runs without installation</li></ul><p><br /></p><p><br /></p><p><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-14385429967531535382023-04-22T10:31:00.005+02:002023-04-28T21:34:42.395+02:00Gold pricing 2023-04-22<p></p><p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr /><p>Here are a few points that might cool down the gold-price-to-the-moon enthusiasts:<br /><br />
- CPI inflation is declining in most countries<br />
- real interest rates are going up (they are now close to zero in the US!)<br />
- US M2 money quantity is shrinking<br />
- average gold production costs are slightly declining (currently: $1279/oz, well below the spot price, ~$2000/oz)<br />
- the March banking crisis is already a distant memory (which is normal: collective memory lasts around 2-3 weeks).<br />
<br />
Here are charts, with the gold spot price and various information, over two different time frames:<br />
<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHUZP9tI48UY9bkTZpB1nZcIRAgmiAOxPOIS22gEtV7ZULhGWcI0pSjaYoLcIpLfKwxYfwrCkQysA_GY9ei0meg66V5JFqFxcTnqhE2ah2RhtNQJDY3w1GxvFdNEYS6CctDeEwfIBg1lhyAnKczSxGd_9deu79yyJk-j1SWAnFGAf2iX9i1KOtUSTx/s973/gold_fgoirhtyfpo2190fdkms_st.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="598" data-original-width="973" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHUZP9tI48UY9bkTZpB1nZcIRAgmiAOxPOIS22gEtV7ZULhGWcI0pSjaYoLcIpLfKwxYfwrCkQysA_GY9ei0meg66V5JFqFxcTnqhE2ah2RhtNQJDY3w1GxvFdNEYS6CctDeEwfIBg1lhyAnKczSxGd_9deu79yyJk-j1SWAnFGAf2iX9i1KOtUSTx/w400-h246/gold_fgoirhtyfpo2190fdkms_st.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click chart to enlarge</td></tr></tbody></table></p><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv3ZSndp-PXGm3s8JnR5OwdxSD0Ed9gQBxco0IlJOD7IOfLphGrGuxlauKaYMjgCdA9HOKrc-QmtbQAreAECPxzP6qubzhcKlusZIFYRalIww1K2p3TMLy2YFmT9z2ajFUSLndTQQTons6kdb8u0VIcrpIiu8WMRr-CfyMCLslLF8QOqIZ-jC93rUD/s974/gold_fgoirhtyfpo2190fdkms_lt.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="597" data-original-width="974" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv3ZSndp-PXGm3s8JnR5OwdxSD0Ed9gQBxco0IlJOD7IOfLphGrGuxlauKaYMjgCdA9HOKrc-QmtbQAreAECPxzP6qubzhcKlusZIFYRalIww1K2p3TMLy2YFmT9z2ajFUSLndTQQTons6kdb8u0VIcrpIiu8WMRr-CfyMCLslLF8QOqIZ-jC93rUD/w400-h245/gold_fgoirhtyfpo2190fdkms_lt.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click chart to enlarge</td></tr></tbody></table><p> </p><p>The constants <b>a</b>, <b>b1</b>, <b>b5</b>, <b>c </b>are arbitrary.<br /><br />
Anyway, we find the production costs (AISC, all-in sustaining costs) are the most reliable indicator. Additionally, they are "hard data" and represent a "soft floor" to prices.<br />
Buyers don't seem to be keen to overpay for gold (except in periods of crises) ever since AISC are published (perhaps it was the case before, but we just don't know).<br /> <br />
Here is an updated chart of gold price divided by AISC.</p>
<p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP73ldtRV5VOIizS8s-5tsrgVMcZvT2PS-j47wk4nxRGTG2MHbG9DwOcvNLvSd84rQ7XgD-dM1JRFqdn34bAjMJrrG81xHWeEqwWDEyVAhSuO-ObF4JmHuyTocgCtYO389nA7r92LKjLGR_BkS3MQorPvPOjtZgFoUWZPAg619gsj4OimvtHe-Z7ox/s984/gold_fgoirhtyfpo2190fdkms_aisc.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="638" data-original-width="984" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP73ldtRV5VOIizS8s-5tsrgVMcZvT2PS-j47wk4nxRGTG2MHbG9DwOcvNLvSd84rQ7XgD-dM1JRFqdn34bAjMJrrG81xHWeEqwWDEyVAhSuO-ObF4JmHuyTocgCtYO389nA7r92LKjLGR_BkS3MQorPvPOjtZgFoUWZPAg619gsj4OimvtHe-Z7ox/w400-h259/gold_fgoirhtyfpo2190fdkms_aisc.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click chart to enlarge<br /></td></tr></tbody></table> </p><p>Another advantage of that metric is that it is neutral regarding currency and weight unit.<br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-65372745550832153882023-03-18T10:48:00.006+01:002023-03-19T12:21:50.739+01:00Real Rates Charts, 2023-03-18<p></p><p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr />Today, not many comments. The charts have already much to say themselves 😉.<p><b>King Dollar</b><br />The Fed is tightening short-term interest rates, inflation rate is cooling down.<br />The inflation scare looks on the way to a happy end.<br />Soon, the American Central Bank (spot the blue curve on the following chart) could re-enter the "sound monetary policy" zone (the light green area) it left too long ago. </p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg11ZhJi_t5aCHNLIlfrS5ZPW20FSe4V2xXXbCEaWEjzuoh2IrUJseRISItU4hylKc-wHAZ5COMxVSDrL5K8IPrAy_rkIbSLhxOSPguMH7eMBDwXx_749VZ5wsTxSYsctzke2-_SFiP9P3FFqOsgGCdQhGEGKQCzy5ouDgernsuGSPnpatUEEBAdbwe/s968/us2.PNG_dfgpoih354dgfd.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="602" data-original-width="968" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg11ZhJi_t5aCHNLIlfrS5ZPW20FSe4V2xXXbCEaWEjzuoh2IrUJseRISItU4hylKc-wHAZ5COMxVSDrL5K8IPrAy_rkIbSLhxOSPguMH7eMBDwXx_749VZ5wsTxSYsctzke2-_SFiP9P3FFqOsgGCdQhGEGKQCzy5ouDgernsuGSPnpatUEEBAdbwe/w400-h249/us2.PNG_dfgpoih354dgfd.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge chart<br /></td></tr></tbody></table><p></p><p>Oh, wait - will the US be able to stomach 4% or more interest rates for years?<br />Given the stress in the financial system, it is not so sure...<br />To
date in this tightening phase, we <i>already</i> had a couple of bank runs, with
the 16th US bank filing for bankruptcy (Silicon Valley Bank), and a
smaller one (Signature Bank) closed by authorities.<br />Uncle Sam's debts
(around $32 Trillion) could pose another problem. Suppose that 4%
interest rates are around for a few years. Then, the interest payments will
amount to $1.28 Trillion - significantly more than the Pentagon's
budget...<br /><br />Here is another perspective with the same data: nominal and real interest rates.<br /><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ0Lc6ECi2Ply2tC4DYTt5wNjsDCj97PN4Wr1gnTKKNouk75aF283zEoiAPXRcrIwAPOQZC2dKeTRDtYWfXczO7gjtmSZ3yyKiFYxgJLCV0tAdpfNvKVpQFXoGVpcSak60QI02HV_ZKr6zG2fjekbeuehR6laLI789iwm0LPVCf2YC4I8noVlqxYkv/s946/us1.PNG_dfgpoih354dgfd.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="590" data-original-width="946" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ0Lc6ECi2Ply2tC4DYTt5wNjsDCj97PN4Wr1gnTKKNouk75aF283zEoiAPXRcrIwAPOQZC2dKeTRDtYWfXczO7gjtmSZ3yyKiFYxgJLCV0tAdpfNvKVpQFXoGVpcSak60QI02HV_ZKr6zG2fjekbeuehR6laLI789iwm0LPVCf2YC4I8noVlqxYkv/w400-h250/us1.PNG_dfgpoih354dgfd.png" width="400" /></a></div><p></p><p><br />In <b>Europe </b>currencies are sinking at various acceleration rates (the speed being the level of the real interest rate).<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0mNE8jGbw2vH0bHGKiO47hmK8xSb6dqb_cLP27ovsI_VG5EdgY8kuwt_Ayl2MBY9MPIorDFn7RC-Ba4AOsoZ2YR_TuHjGwXMb5T8hhhKXoexGThWjqUdfwm3D42voROOpZhxkIQ8KbQ1dd9Wf5ojxLM1SC51rEhPsBot60g7qwPPuLa-h8ozUAtdM/s947/uk.PNG_dfgpoih354dgfd.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="588" data-original-width="947" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0mNE8jGbw2vH0bHGKiO47hmK8xSb6dqb_cLP27ovsI_VG5EdgY8kuwt_Ayl2MBY9MPIorDFn7RC-Ba4AOsoZ2YR_TuHjGwXMb5T8hhhKXoexGThWjqUdfwm3D42voROOpZhxkIQ8KbQ1dd9Wf5ojxLM1SC51rEhPsBot60g7qwPPuLa-h8ozUAtdM/w400-h249/uk.PNG_dfgpoih354dgfd.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCvTw8U81yUjONrNACoaun6zrsjMBaXdxNiTeuwpk2PaIEiE1eRL6J__A7pMtwLYhFeYfHPMIwN216Jp-8RrGO64u0CLYNeQLnsgtlh_8YQn_fvH8m3CKKLoSEB5if09Zm5AB6-PPeBAs3IdPNgc-VPM-8-wzhNmWoG0aSgglPj8XsbfYwUou5Q6NB/s951/ez.PNG_dfgpoih354dgfd.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="590" data-original-width="951" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCvTw8U81yUjONrNACoaun6zrsjMBaXdxNiTeuwpk2PaIEiE1eRL6J__A7pMtwLYhFeYfHPMIwN216Jp-8RrGO64u0CLYNeQLnsgtlh_8YQn_fvH8m3CKKLoSEB5if09Zm5AB6-PPeBAs3IdPNgc-VPM-8-wzhNmWoG0aSgglPj8XsbfYwUou5Q6NB/w400-h249/ez.PNG_dfgpoih354dgfd.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg62g-fJiRKLCoyv-S5IVvMXpvba1jMcmiyvHz7W6QwCZEcotb5fkw1Hn8mdfz0P-5cv43SDEyuLgyN3SAdpAu4-gOl7ojyU511D8UBP-8QoiMqi537IBo88NoEXrQIp24dzNHz9xaB9pb6B9y6RjJ3QT1cd62wnEEYXk_pOK5RIRDWfVn2l9BQ8AmA/s952/ch.PNG_dfgpoih354dgfd.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="595" data-original-width="952" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg62g-fJiRKLCoyv-S5IVvMXpvba1jMcmiyvHz7W6QwCZEcotb5fkw1Hn8mdfz0P-5cv43SDEyuLgyN3SAdpAu4-gOl7ojyU511D8UBP-8QoiMqi537IBo88NoEXrQIp24dzNHz9xaB9pb6B9y6RjJ3QT1cd62wnEEYXk_pOK5RIRDWfVn2l9BQ8AmA/w400-h250/ch.PNG_dfgpoih354dgfd.png" width="400" /></a></div><p></p><p><br />Last Real Rates snapshot was <a href="https://gautiersblog.blogspot.com/2022/11/real-rates-charts-2022-11-20.html">here</a>. <br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-87994938726430290132023-03-11T15:34:00.001+01:002023-03-11T15:34:47.868+01:00Libor 2023-03-11<p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr /><p>Now, the <a href="https://en.wikipedia.org/wiki/Libor" target="_blank">Libor</a> 1-year interest rate for the US Dollar reaches levels not seen since January 2001.</p><p>Given today's debts amounts, there must be some financial stress developing...</p><p>The Silicon Valley Bank bank run is certainly a symptom of it.<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjoAtNFd4LGrFOcSxED1m9UbIW6zrh6arZPV-4LcnIJy7WJjZF5MLptpp_tDkLaEusI4-m9gVWyVag1khODT7mraiqMlrP4_o3SaNn-wDbo1jIAYUb9sRqBF683nDxEsGqyGLfg01o6oJ1knzh60PHlJA23onh4npXIMRFKFUwtv6PJCR3DTl7jZYU/s984/libor_jh3298fsfhgf0su5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="647" data-original-width="984" height="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjoAtNFd4LGrFOcSxED1m9UbIW6zrh6arZPV-4LcnIJy7WJjZF5MLptpp_tDkLaEusI4-m9gVWyVag1khODT7mraiqMlrP4_o3SaNn-wDbo1jIAYUb9sRqBF683nDxEsGqyGLfg01o6oJ1knzh60PHlJA23onh4npXIMRFKFUwtv6PJCR3DTl7jZYU/w400-h263/libor_jh3298fsfhgf0su5.png" width="400" /></a></div><br /><p><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-33288024445507398992023-01-14T10:25:00.005+01:002023-01-14T10:53:43.567+01:00Advent of Code 2022 in pictures<p>Note for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.</p>
<hr />
<p>Just as a teaser for the next <a href="https://adventofcode.com/" target="_blank">Advent of Code</a> in 10 1/2 months, we would like to show a few pictures related to last edition. The 25 puzzles, data and solutions can be found <a href="https://github.com/zertovitch/hac/tree/master/exm/aoc/2022" target="_blank">here</a> and <a href="https://sourceforge.net/p/hacadacompiler/code/HEAD/tree/trunk/exm/aoc/2022/" target="_blank">here</a>. They are programmed with <b><a href="http://hacadacompiler.sf.net/" target="_blank">HAC</a></b> (the <b>HAC Ada Compiler</b>), thus in a small subset of the Ada language. The HAC compiler is very fast, so you run your program without noticing it was ever compiled, which is perfect for completing a programming puzzle.
<br /><br />
</p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjcFbvg-zetEwkTaKHrAExOtMMKTNwWpk9JVbwQiwkIzXtEUNlRmMOIspZ6KQYAxt77mgjinE55Ba1QizDEjCE8JS34lYUmHYWDJBkPw3r6JCp8vNgkzdB9pCgQGx1ZHpQp0qzlZnFha3sftgqaXIbRd4Wi4eCROFqyWdFwkS-eewxq6xGGbp4G7qi/s840/hac_aoc.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="824" data-original-width="840" height="393" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjcFbvg-zetEwkTaKHrAExOtMMKTNwWpk9JVbwQiwkIzXtEUNlRmMOIspZ6KQYAxt77mgjinE55Ba1QizDEjCE8JS34lYUmHYWDJBkPw3r6JCp8vNgkzdB9pCgQGx1ZHpQp0qzlZnFha3sftgqaXIbRd4Wi4eCROFqyWdFwkS-eewxq6xGGbp4G7qi/w400-h393/hac_aoc.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Day 22 run with HAC (here, embedded in the LEA environment)<br /></td></tr>
</tbody></table>
<br />
<p>
However, the program will run substantially slower than compiled with a native, optimizing compiler like <a href="https://www.adacore.com/download" target="_blank">GNAT</a>.<br />
This is not an issue for most Advent of Code puzzles, but for some, it is, especially on the later days. Fortunately, changing from HAC to GNAT is trivial (just switch compilers), unlike the traditional reprogramming of Python prototypes in C++, for instance.<br /><br />
</p>
<h3>The pictures</h3>
<p>
<b>Day 8</b>'s data is a map representing the height of trees. Once the puzzle was solved, I was curious how the forest looked like. Note that different users get different data, so you are unlikely to find a visualisation of exactly your data on the internet.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijPiCbTOqiUIXLRMm25-po6XapJbCBlDfNvYymFWj14OnHcn5_yb1cmMT0CDs9KTx29IXwylcrf1DWtfthlW854UCjKM6b8ex_ARjJ_idtiMs7o8Ru4HUhRvbp7CDrWykq-5pEBYMcGrcKkWw4_hVXKSd3IKoODZBSmM_2bhu7Okut3Dx6Ykl29RKV/s488/aoc_22_08.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="396" data-original-width="488" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijPiCbTOqiUIXLRMm25-po6XapJbCBlDfNvYymFWj14OnHcn5_yb1cmMT0CDs9KTx29IXwylcrf1DWtfthlW854UCjKM6b8ex_ARjJ_idtiMs7o8Ru4HUhRvbp7CDrWykq-5pEBYMcGrcKkWw4_hVXKSd3IKoODZBSmM_2bhu7Okut3Dx6Ykl29RKV/w400-h325/aoc_22_08.png" width="400" /></a></div><br />
<p>
<b>Day 12</b>'s puzzle is a shortest path problem with specific rules and a nice data - a terrain with a hill - which seems designed to trap depth-first-search algorithms into an almost infinite search. The yellowish path is the shortest from the green dot, elevation 'a', to blue dot, elevation 'z'.<br />
The pinkish path is the shortest from the blue dot to any dot with elevation 'a'. Fortunately Dijkstra's algorithm (and perhaps others) allows for such a special criterion regarding the end point.</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDzQaSUzX9aOz3iw4wQ4xZ5nLoIrZmluFmr4eKx14qXUYlBLK31ZvAX4Gb9GmYltyLWaOmQOPntSjqreA3jtDLXCWfrL1WJKw5fJkayZ95vycyOCs3znrzuSA--vHAkvSniZqUUker5O0TdUebgIWqGrwiK8IFMyOdEHc-4DQcsnWxMLitboqUYHRO/s644/aoc_22_12.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="164" data-original-width="644" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDzQaSUzX9aOz3iw4wQ4xZ5nLoIrZmluFmr4eKx14qXUYlBLK31ZvAX4Gb9GmYltyLWaOmQOPntSjqreA3jtDLXCWfrL1WJKw5fJkayZ95vycyOCs3znrzuSA--vHAkvSniZqUUker5O0TdUebgIWqGrwiK8IFMyOdEHc-4DQcsnWxMLitboqUYHRO/w400-h101/aoc_22_12.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge<br /></td></tr></tbody></table>
<p><br />
For <b>day 22</b>’s puzzle, a walk on a cube’s surface is involved, so it is helpful to sketch it on a piece of paper, cut it and glue the faces. A banana skin of that puzzle is that the example’s layout may be different from the data’s layout. We slipped on that one and ended up gluing and programming the face-to-face transitions for two layouts…</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6jRrATfqWXley3jeNj_nzp-ByIWpXv0L_aunP54zMl26roYgJxWOdCk-nSIbiod9HIjvMz2r1vrJZ4tu-L6zNJ8awahPCdlr3LgBMusyIHT-NdFa5D_I8XDJed4LDimUQY0FLmjs8URM5tA9sZayuLXh9e89LlXMAvhQWt1xooC5lSpYDYOCVgKdZ/s333/aoc_22_22a.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="333" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6jRrATfqWXley3jeNj_nzp-ByIWpXv0L_aunP54zMl26roYgJxWOdCk-nSIbiod9HIjvMz2r1vrJZ4tu-L6zNJ8awahPCdlr3LgBMusyIHT-NdFa5D_I8XDJed4LDimUQY0FLmjs8URM5tA9sZayuLXh9e89LlXMAvhQWt1xooC5lSpYDYOCVgKdZ/w400-h300/aoc_22_22a.jpg" width="400" /></a></div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3j27RtTdf28gSKYEvPqtJLG5eJqLRk5FQgI8VuY-tCh3W3_uMt9alg3Jns6UHlrPJjE1-6_xe9tafnJdF83voA8svmh9NexnkuzSNXunESdCHtppyaWxxHKmot09npubjUV43wjGJtDnMVRCyx2mP54JvR5ndcfqbY1dwWMeaCqm9S5GSarWOP7R-/s500/aoc_22_22b.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="500" data-original-width="263" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3j27RtTdf28gSKYEvPqtJLG5eJqLRk5FQgI8VuY-tCh3W3_uMt9alg3Jns6UHlrPJjE1-6_xe9tafnJdF83voA8svmh9NexnkuzSNXunESdCHtppyaWxxHKmot09npubjUV43wjGJtDnMVRCyx2mP54JvR5ndcfqbY1dwWMeaCqm9S5GSarWOP7R-/w210-h400/aoc_22_22b.jpg" width="210" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge<br /></td></tr></tbody></table>
<br />
<p>Other Adaists’ solutions, discussions and pictures can be found <a href="https://forum.ada-lang.io/t/advent-of-ada-submissions/129" target="_blank">here</a> and in the "2022 Day x" threads in the same forum.<br /><br />
</p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-71312819764545103842022-12-26T05:01:00.005+01:002022-12-26T13:31:56.723+01:00Margin Debt, snapshot November 2022<p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr />
<p>Just came across a funny headline: "Elon Musk Warns Against Margin Debt on Risk of Market ‘Mass Panic’" (article: <a href="https://finance.yahoo.com/news/elon-musk-warns-against-margin-215641054.html" target="_blank">here</a>). A quote from that article:</p><blockquote><p>“I would really advise people not to have margin debt in a volatile stock market and you know, from a cash standpoint, keep powder dry,” Musk said in the <b><a href="https://www.allinpodcast.co/" target="_blank">All-In podcast</a></b> (*) released Friday.</p></blockquote><p>He is right - if not a little bit late. A better advice would be not to have margin debt <i>before</i> the stock market becomes volatile. Margin debt was a key ingredient of the 1929 crash. Watch <a href="https://www.youtube.com/watch?v=MTCKxye9_so" target="_blank">here</a> a video by the famous professor <a href="https://en.wikipedia.org/wiki/Irving_Fisher" target="_blank">Irving Fisher</a> about it. Notably:</p><blockquote> "The real reason, as I understand it, for this drop, is that people have been speculating on small margins. [...] The real lesson of this market is: if you buy stocks, buy them with your own money, and not with borrowed money, [...]" </blockquote><p></p>
<p>Back to the XXIst century: margin debt is again an issue. There are no less than seven posts, in this blog alone, on this topic, since 2014:
<a href="https://gautiersblog.blogspot.com/2014/07/the-multi-bubble.html" target="_blank">here</a>,
<a href="https://gautiersblog.blogspot.com/2014/09/margin-debt.html" target="_blank">here</a>,
<a href="https://gautiersblog.blogspot.com/2015/08/margin-debt-snapshot-2.html" target="_blank">here</a>,
<a href="https://gautiersblog.blogspot.com/2017/12/margin-debt-snapshot-3.html" target="_blank">here</a>,
<a href="https://gautiersblog.blogspot.com/2018/01/not-bubble-2.html" target="_blank">here</a>,
<a href="https://gautiersblog.blogspot.com/2018/03/avindex-10-snapshot-20180304.html" target="_blank">here</a> and
<a href="https://gautiersblog.blogspot.com/2020/04/financial-indicators-2020-04-26-us.html" target="_blank">here</a>. </p><p>So it's time for a new chart:</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Zsy5YUazdHg_QtEdB6ZHjIU0sTJ1QZdXiffgfw4lErqX0ZlhEMw8WuIxcF0WtYr3shT046RYwQM5xWDIwqyr9gJ4YJZOng1KBKvq7zFY4wG84XW9dWsYE8LqWzVgDN-oF02vBiOA1vJ624r6xfd5EAfDdmGFPWcYcBCjQapkvf_xoB3S853zpBAk/s1057/finra_md_gckjdsrt5tak.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="651" data-original-width="1057" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Zsy5YUazdHg_QtEdB6ZHjIU0sTJ1QZdXiffgfw4lErqX0ZlhEMw8WuIxcF0WtYr3shT046RYwQM5xWDIwqyr9gJ4YJZOng1KBKvq7zFY4wG84XW9dWsYE8LqWzVgDN-oF02vBiOA1vJ624r6xfd5EAfDdmGFPWcYcBCjQapkvf_xoB3S853zpBAk/w400-h246/finra_md_gckjdsrt5tak.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge chart<br /></td></tr></tbody></table><p></p><p>Now, if people follow Musk's advice, and probably many of his fanboys in "autopilot" mode will do it, where will they find the money to reduce their margin debt?</p><p>Those who are "<b>all-in</b>" will have to sell their shares to lock in, hopefully, a profit. If it is a loss, some sales will be even automatic, following a <a href="https://en.wikipedia.org/wiki/Margin_(finance)#Margin_call" target="_blank">margin call</a>. In both cases, it may contribute to a self-feeding process, where the stock prices go down and down and down... Elon, be careful what you wish for!<br /></p><p>--- <br /></p><p>(*) Funny:</p><p>- "to be <b>all-in</b>" means "to have all one's money in the game (e.g., the stock market)"</p><p>- the podcast is about (among others): gambling, stocks, cryptos, poker, ...<br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-52556936000102675512022-12-03T12:40:00.000+01:002022-12-03T12:40:06.030+01:00SNB, October 2022<p></p><p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr />
<p>With a Trillion-CHF-size balance sheet, the Swiss National Bank is getting used to huge swings...</p><p>Interesting this year: the balance sheet size (total assets, total liabilities) is 160 Billion CHF less (a combination of asset losses, exchange rate fluctuations and the SNB's own activity) since January (-15%).</p><p>If you think that the SNB is quietly managing its portfolio and reducing its balance sheet in a controlled way, the reality is a bit different...</p><p>The debt is almost unchanged (minus 26 Billion CHF, -3%). It means that the assets have taken a massive hit.</p><p>The column "Provisions and equity capital" alone is worth 134 Billion CHF less (-62%) as a consequence.<br /></p><p>Now, it's time to show some charts. Enjoy!</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrGA6CZEjVsNVyAcCqTL5EDgeXFDjAcCNPAzLChyGCndhz58-X3o4CpIvLmRMfiqjBV7SLgUT8sRMnmgYvU6uPp0mSkesoZR_GzMHzexRYC7S0dGCD4x8ykD28oLGQsWWeAku6HCJe4Xwfi02Ov7NBfA1DVXwYMX0NxNUeTiCW30gaE2l0A2-deOVv/s964/lev_3q29u_jmg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="594" data-original-width="964" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrGA6CZEjVsNVyAcCqTL5EDgeXFDjAcCNPAzLChyGCndhz58-X3o4CpIvLmRMfiqjBV7SLgUT8sRMnmgYvU6uPp0mSkesoZR_GzMHzexRYC7S0dGCD4x8ykD28oLGQsWWeAku6HCJe4Xwfi02Ov7NBfA1DVXwYMX0NxNUeTiCW30gaE2l0A2-deOVv/w400-h246/lev_3q29u_jmg.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIlX9KNDv5mtmHLRuSrr0lfDACFAPhtTNwmAUYhy7oNNu57oDK9WSU_1DrOIf6rpCg8DxR3t3yIp7TTr00hyDXCffXXzl_dC0QXCTu9eS5WxNDnkGqILx2xaPhkx6586Kcuo-JgGcAmca1c4Ctlzm-uI0-c0H-Vbh57te3xRP50-paamdZJc4rs-pp/s974/act_3q29u_jmg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="596" data-original-width="974" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIlX9KNDv5mtmHLRuSrr0lfDACFAPhtTNwmAUYhy7oNNu57oDK9WSU_1DrOIf6rpCg8DxR3t3yIp7TTr00hyDXCffXXzl_dC0QXCTu9eS5WxNDnkGqILx2xaPhkx6586Kcuo-JgGcAmca1c4Ctlzm-uI0-c0H-Vbh57te3xRP50-paamdZJc4rs-pp/w400-h245/act_3q29u_jmg.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijnXtXhYa1pPhgleqYiUTNWAF8zoCNnleKZXhGmVIL5cWCti-fSvMdb3Q1-Jd12Oj46vJx7muHz0bY0d9WhEQDbPgT0yTNb-DiGAVOS_Xqs0PBgsOsYNkl4SeOAp7FOIJX8aciDewXTpM1VWJ5yj8oP-Y5b8eqqqHsg8figfwfbZFgpoSUnviwkue7/s907/lin_3q29u_jmg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="621" data-original-width="907" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijnXtXhYa1pPhgleqYiUTNWAF8zoCNnleKZXhGmVIL5cWCti-fSvMdb3Q1-Jd12Oj46vJx7muHz0bY0d9WhEQDbPgT0yTNb-DiGAVOS_Xqs0PBgsOsYNkl4SeOAp7FOIJX8aciDewXTpM1VWJ5yj8oP-Y5b8eqqqHsg8figfwfbZFgpoSUnviwkue7/w400-h274/lin_3q29u_jmg.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcXmBjRu4occTdDG5VUMvfL_Hq7TxbK7rmFPFIw_NPAc-97VQBQAwbE2_aZtNj0AMO6s09iB0A4LvRGodO3d4eSteRy2HoPh8-HCYvv2RVgQ5paX8wYzrlBl8sei-q7kzqJYlXrNOxiPDcdrr92Gb_3M5Kpg0IHsS2QD2bcW2uvEcWyAPSMKN2ieUX/s901/log_3q29u_jmg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="617" data-original-width="901" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcXmBjRu4occTdDG5VUMvfL_Hq7TxbK7rmFPFIw_NPAc-97VQBQAwbE2_aZtNj0AMO6s09iB0A4LvRGodO3d4eSteRy2HoPh8-HCYvv2RVgQ5paX8wYzrlBl8sei-q7kzqJYlXrNOxiPDcdrr92Gb_3M5Kpg0IHsS2QD2bcW2uvEcWyAPSMKN2ieUX/w400-h274/log_3q29u_jmg.png" width="400" /></a></div><br /><p><br /></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-80858357993838199632022-11-20T21:05:00.000+01:002022-11-20T21:05:02.938+01:00LEA 0.85 - the Tabs are here! Note for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.<hr /><p>The 0.85 version of LEA (the Lightweight Editor for Ada) is available!</p><p>Web site: <a href="http://l-e-a.sf.net/" target="_blank">http://l-e-a.sf.net/</a><br />Source repository #1: <a href="https://sf.net/p/l-e-a/code/HEAD/tree/" target="_blank">https://sf.net/p/l-e-a/code/HEAD/tree/</a><br />Source repository #2: <a href="https://github.com/zertovitch/lea" target="_blank">https://github.com/zertovitch/lea</a><br /></p><p>The new version has two main new features:<br /> - Tabs (screenshot below)<br /> - LEA doesn't write scilexer.dll as a file; thus, it runs as a portable application (in the sense: you can run it from a read-only drive directly, without installation)</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLP4KNAqCmRrQIU7ekpHRMuCmphWEzUzmfy78kgqSn4iGKd4EF3a1m8abZvNHrC5cMYk882YRygPtwzuidVpYQWw_YQVr20NBpORAT4QVIhVizMBsPa43KQ9WiB2T3RO7Lr1HMp6VkWGj81ZOfpZaEZii-u1s3NfgD27_tMKQbLaYQmUik9VkQw9BI/s836/lea_tabs.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="826" data-original-width="836" height="395" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLP4KNAqCmRrQIU7ekpHRMuCmphWEzUzmfy78kgqSn4iGKd4EF3a1m8abZvNHrC5cMYk882YRygPtwzuidVpYQWw_YQVr20NBpORAT4QVIhVizMBsPa43KQ9WiB2T3RO7Lr1HMp6VkWGj81ZOfpZaEZii-u1s3NfgD27_tMKQbLaYQmUik9VkQw9BI/w400-h395/lea_tabs.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge<br /></td></tr></tbody></table><br /><p></p><p>Enjoy!</p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0tag:blogger.com,1999:blog-8743601694397290077.post-25533220907101750352022-11-20T11:33:00.007+01:002022-11-20T23:43:06.326+01:00Real rates charts, 2022-11-20<p>Note for subscribers: if you are interested in my <i>financial</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Finance" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr />
<p>Since <a href="https://gautiersblog.blogspot.com/2022/08/what-are-you-sinking-about.html" target="_blank">last time</a>, we have now two new charts: the <b>UK</b>, and a second perspective for the <b>US</b>.</p>
<p>Nomenclature: the green areas represent positive real rates (they reward the lender); the red areas represent negative real rates (they reward the borrower).</p>
<p>Let's start with the <b>US Dollar</b>: <br /></p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiktHctnZDTl2i1NJzhJS2d1XhyZYz_Z70ZRBRRaJg59K84C81y5w_DmNfvVF1avBBu9nTeAUbULISH7rcJkYu8JqDbFfKprGWs2Z3i92d2bUANwB4Z1d7VnkmCaaaSjEg8AWeBwxOEtbrnB_YJa8XiV6GCmdMr0MBbSaLENr9XFkTEYsfHcjMsRSZ3/s964/us_gfdo43fds8UZT.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="600" data-original-width="964" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiktHctnZDTl2i1NJzhJS2d1XhyZYz_Z70ZRBRRaJg59K84C81y5w_DmNfvVF1avBBu9nTeAUbULISH7rcJkYu8JqDbFfKprGWs2Z3i92d2bUANwB4Z1d7VnkmCaaaSjEg8AWeBwxOEtbrnB_YJa8XiV6GCmdMr0MBbSaLENr9XFkTEYsfHcjMsRSZ3/w400-h249/us_gfdo43fds8UZT.PNG" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge</td></tr></tbody></table>
<p>The good news: the Fed is doing something. If you look at the 1970's (the previous episode of runaway inflation in the US), I let you guess what the bad news might be...<br /></p><p>Now a second perspective with the same data:</p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi50KKaHEupTPg8M3pAhsUKw_Fe7847ozhCaoLCOtsC05Zn5Gh2tbNzknJjHjKrFifbRtPg0NDAxBu0_g2HiRlgGoYDUqNy3Lx9ddsDKOlTYDrfltpxz0cyhbmxj72zoeKpmdh_qCYrQRSdNg5gi92BgebEEfy1R_5LfA55fgR8iHIeb9b-FyqHaoVJ/s969/us2_gfdo43fds8UZT.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="603" data-original-width="969" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi50KKaHEupTPg8M3pAhsUKw_Fe7847ozhCaoLCOtsC05Zn5Gh2tbNzknJjHjKrFifbRtPg0NDAxBu0_g2HiRlgGoYDUqNy3Lx9ddsDKOlTYDrfltpxz0cyhbmxj72zoeKpmdh_qCYrQRSdNg5gi92BgebEEfy1R_5LfA55fgR8iHIeb9b-FyqHaoVJ/w400-h249/us2_gfdo43fds8UZT.PNG" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge</td></tr></tbody></table>
<br />
<p>The light green band represents the zone where the Fed can (and at times does) set its interest rate to control inflation.
The yellow areas shows the periods where the Fed has other concerns, like avoiding a collapse in the financial markets or a default of the government.</p>
<p>Now, the <b>Euro</b>: <br /></p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibccE663HazwFB64eduZPk96_DiJOr4Sez-PxBfUqeMKsE_FWdCIRyezWOJEugZ69o5sDoCQq2E3PChADTwzV4vxjmyf2z2xKQta4GVpzg8fKdfcTriQ2HIiXtD34PmiUQ63-6c3ZXyuNP1I5z7YYGRTdoxe7ZCZkN7bddnNLQDma3BE245DCPi3OT/s965/ez_gfdo43fds8UZT.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="599" data-original-width="965" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibccE663HazwFB64eduZPk96_DiJOr4Sez-PxBfUqeMKsE_FWdCIRyezWOJEugZ69o5sDoCQq2E3PChADTwzV4vxjmyf2z2xKQta4GVpzg8fKdfcTriQ2HIiXtD34PmiUQ63-6c3ZXyuNP1I5z7YYGRTdoxe7ZCZkN7bddnNLQDma3BE245DCPi3OT/w400-h249/ez_gfdo43fds8UZT.PNG" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge</td></tr></tbody></table>
<p>One word comes to mind about the Euro: <b>FUBAR</b>! But perhaps it is not <i>that</i> bad. The Euro adapts and becomes a softer currency over time — from a "Guilder/Deutschmark" to a "Lira/Peseta".</p><p>And now a new chart, ladies and gentlemen: the <b>British Pound</b>. <br /></p>
<p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7ArYdrZumYiRNcukJ2Jw6EJBMNBqnAg31Izq3JgXJDZJWbsiom51Ecjwu2qdfL2cCCyv4tJyVDjLkO3CD5faqpZY64WzkHtc16z9EwaMqM-bWLfmgNI0_AyGnF5vaIbX26_HQ6EfEK0LA7ZRJvilDTqlIPXATsAH1QG7W1KxeNdaCXesbJXR-H4Ga/s964/uk_gfdo43fds8UZT.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="601" data-original-width="964" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7ArYdrZumYiRNcukJ2Jw6EJBMNBqnAg31Izq3JgXJDZJWbsiom51Ecjwu2qdfL2cCCyv4tJyVDjLkO3CD5faqpZY64WzkHtc16z9EwaMqM-bWLfmgNI0_AyGnF5vaIbX26_HQ6EfEK0LA7ZRJvilDTqlIPXATsAH1QG7W1KxeNdaCXesbJXR-H4Ga/w400-h250/uk_gfdo43fds8UZT.PNG" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge</td></tr></tbody></table>
<br />The Pound shows quite an extreme pattern of central bank behaviour, oscillating between nonchalance and determination.</p><p>Finally, the <b>Swiss Franc (CHF)</b>. NB: the Swiss National Bank has created nearly a trillion CHF's in the last 15 years, out of nothing, and sold them against securities in the above currencies (see all posts about the SNB <a href="https://gautiersblog.blogspot.com/search/label/BNS" target="_blank">here</a>). So if someone blames a crypto exchange for creating fake tokens and putting them on its balance sheet as collateral for other securities, keep in mind that it happens all the time in the official currency world.<br /></p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5ItpORI4Adxjtq-VbFkis7giyTyGpJjq798ySNMtaCSV89jrxNU5_kecFwub2gpG7EftaWdOLK7Jox4BksLRD85SIsz4feGERZaUkb1bNLNYRg8IrbGtJqRI8KIvU3HKi1V52j8VX9vqOal4v_91P3JIR44PBG09CpKqSF-9XmGIgPxbBMN88pSiN/s964/ch_gfdo43fds8UZT.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="596" data-original-width="964" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5ItpORI4Adxjtq-VbFkis7giyTyGpJjq798ySNMtaCSV89jrxNU5_kecFwub2gpG7EftaWdOLK7Jox4BksLRD85SIsz4feGERZaUkb1bNLNYRg8IrbGtJqRI8KIvU3HKi1V52j8VX9vqOal4v_91P3JIR44PBG09CpKqSF-9XmGIgPxbBMN88pSiN/w400-h248/ch_gfdo43fds8UZT.PNG" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Click to enlarge</td></tr></tbody></table><br />GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com2tag:blogger.com,1999:blog-8743601694397290077.post-88839860029974298162022-11-13T13:38:00.004+01:002022-11-13T22:57:08.519+01:00AZip, GWindows, the Windows API and another surprise! <p> </p><p>Note for subscribers: if you are interested in my <i>Ada programming</i> articles only, you can use <a href="https://gautiersblog.blogspot.com/feeds/posts/default/-/Ada" rel="nofollow" target="_blank">this</a> RSS feed link.</p><hr />
<p><a href="https://gautiersblog.blogspot.com/2022/11/azip-gwindows-windows-api-and-good.html" target="_blank">Last post</a> was about an improvement of the <span class="HwtZe" lang="en"><span class="jCAhz ChMk0b"><span class="ryNqvb">GWindows.Common_Controls.Ex_List_View widget which is distributed with the </span></span></span><span class="HwtZe" lang="en"><span class="jCAhz ChMk0b"><span class="ryNqvb"><a href="https://sourceforge.net/projects/gnavi/" target="_blank">GWindows</a> framework.
Without changing the <a href="https://en.wikibooks.org/wiki/Ada_Programming/Packages#The_package_specification_%E2%80%94_the_visible_part" target="_blank">specification</a>, it was possible to avoid Windows <a href="https://en.wikipedia.org/wiki/API" target="_blank">API</a> calls during the performance-sensitive comparison function, leading to impressive speedup factors: from 3.3x with 4096 items to 16.5x with 32768 items.</span></span></span></p><p><span class="HwtZe" lang="en"><span class="jCAhz ChMk0b"><span class="ryNqvb">But actually, it was only the prelude!</span></span></span></p><p><span class="HwtZe" lang="en"><span class="jCAhz ChMk0b"><span class="ryNqvb">If you can live with data duplication, which is not nice and not always practical, it is possible to do much better. Concretely, you store the same strings in the cells of the List_View widget and in the payload data associated with each row. Then, the sorting for all columns (text, dates, numbers, ...) is using the payload data. An <a href="https://github.com/zertovitch/gwindows/commit/9405e7" target="_blank">addition</a> to the </span></span></span><span class="HwtZe" lang="en"><span class="jCAhz ChMk0b"><span class="ryNqvb">Ex_List_View </span></span></span><span class="HwtZe" lang="en"><span class="jCAhz ChMk0b"><span class="ryNqvb">package later (this time, enriching a bit the specification), the comparison function may exclusively use the payload of both compared rows, directly, thus avoiding any API call during the lifespan of the</span></span></span> comparison function.</p><p>Without going into too many details, here are the performance gains in charts:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYUZIRNMuqpPam7QCRz02jjJ8Vx01Bp8r68Q8g7WACy7ZWmbaUxWml5cZq_RVcWw7CnnI0K0UDiSdEec6zHSSXUsWckxlbjN0ZB6ETZS7CMJoChwVlIp8PVjza4_5rAOtIxP9OysgpvrZYk1sRYqVM7gw80BUDnrgRLPNHmgrPPX931A4dx3gh3doB/s765/az_395_pc_1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="536" data-original-width="765" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYUZIRNMuqpPam7QCRz02jjJ8Vx01Bp8r68Q8g7WACy7ZWmbaUxWml5cZq_RVcWw7CnnI0K0UDiSdEec6zHSSXUsWckxlbjN0ZB6ETZS7CMJoChwVlIp8PVjza4_5rAOtIxP9OysgpvrZYk1sRYqVM7gw80BUDnrgRLPNHmgrPPX931A4dx3gh3doB/w400-h280/az_395_pc_1.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5dhqNi3-Dmi_6bA7Q3jvcSmOUQNH_pkdY6cytHde8OQTexKSR1m1DjFtsETlVafQFH0aWdEqwlTGOtduDFGjHDuWeSYIBarMNGA8df1zjQhdX0Dsnr11-ELOouMgHUJj429j2gtoU_volYqGF7-lOF1Fi6syt34g6tF6B0kCpJt2sZX6pb1avpU_O/s766/az_395_pc_2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="535" data-original-width="766" height="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5dhqNi3-Dmi_6bA7Q3jvcSmOUQNH_pkdY6cytHde8OQTexKSR1m1DjFtsETlVafQFH0aWdEqwlTGOtduDFGjHDuWeSYIBarMNGA8df1zjQhdX0Dsnr11-ELOouMgHUJj429j2gtoU_volYqGF7-lOF1Fi6syt34g6tF6B0kCpJt2sZX6pb1avpU_O/w400-h279/az_395_pc_2.png" width="400" /></a></div><br /><p></p><p>This represents a factor of <b>~100x to ~300x</b> on top of the previous improvement, depending on the test machine.<br /></p><p>Here are links to the sources: <br /></p><p><b><a href="https://azip.sourceforge.io/" target="_blank">AZip</a>:</b><br /><br />Project site & Subversion repository:<br /><a href="https://sf.net/projects/azip/" target="_blank">https://sf.net/projects/azip/</a><br />GitHub clone with Git repository:<br /><a href="https://github.com/zertovitch/azip" target="_blank">https://github.com/zertovitch/azip</a><br /><br /><b>GWindows:</b><br /><br />Project site & Subversion repository:<br /><a href="https://sf.net/projects/gnavi/" target="_blank">https://sf.net/projects/gnavi/</a><br />GitHub clone with Git repository:<br /><a href="https://github.com/zertovitch/gwindows" target="_blank">https://github.com/zertovitch/gwindows</a></p><p></p>GdMhttp://www.blogger.com/profile/06413333739007037537noreply@blogger.com0